You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by gi...@apache.org on 2017/08/10 22:29:51 UTC

[01/33] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Repository: hbase-site
Updated Branches:
  refs/heads/asf-site e24cce11e -> 99c53df15


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/testdevapidocs/org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html b/testdevapidocs/org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html
new file mode 100644
index 0000000..73ea2c4
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html
@@ -0,0 +1,470 @@
+<!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>TestRegionSnapshotTask (Apache HBase 3.0.0-SNAPSHOT Test 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="TestRegionSnapshotTask (Apache HBase 3.0.0-SNAPSHOT Test API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":10,"i1":10,"i2":9,"i3":10,"i4":9,"i5":10};
+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/TestRegionSnapshotTask.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/snapshot/TestMobSecureExportSnapshot.html" title="class in org.apache.hadoop.hbase.snapshot"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/snapshot/TestRestoreFlushSnapshotFromClient.html" title="class in org.apache.hadoop.hbase.snapshot"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html" target="_top">Frames</a></li>
+<li><a href="TestRegionSnapshotTask.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>Nested&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.snapshot</div>
+<h2 title="Class TestRegionSnapshotTask" class="title">Class TestRegionSnapshotTask</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://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.snapshot.TestRegionSnapshotTask</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html#line.63">TestRegionSnapshotTask</a>
+extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
+<div class="block">Testing the region snapshot task on a cluster.</div>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><code>FlushSnapshotSubprocedure.RegionSnapshotTask</code></dd>
+</dl>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== 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 static org.apache.hadoop.conf.Configuration</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html#conf">conf</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static org.apache.hadoop.fs.FileSystem</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html#fs">fs</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private org.apache.commons.logging.Log</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html#LOG">LOG</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static org.apache.hadoop.fs.Path</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html#rootDir">rootDir</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html#TEST_UTIL">TEST_UTIL</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/snapshot/TestRegionSnapshotTask.html#TestRegionSnapshotTask--">TestRegionSnapshotTask</a></span>()</code>&nbsp;</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>private void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html#addRegionToSnapshot-org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.snapshot.SnapshotManifest-">addRegionToSnapshot</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription&nbsp;snapshot,
+                   org.apache.hadoop.hbase.regionserver.HRegion&nbsp;region,
+                   org.apache.hadoop.hbase.snapshot.SnapshotManifest&nbsp;manifest)</code>&nbsp;</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>private org.apache.hadoop.hbase.snapshot.SnapshotManifest.RegionVisitor</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html#createRegionVisitorWithDelay-org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription-org.apache.hadoop.fs.Path-">createRegionVisitorWithDelay</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription&nbsp;desc,
+                            org.apache.hadoop.fs.Path&nbsp;workingDir)</code>&nbsp;</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code>static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html#setupBeforeClass--">setupBeforeClass</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code>private org.apache.hadoop.hbase.client.Table</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html#setupTable-org.apache.hadoop.hbase.TableName-">setupTable</a></span>(org.apache.hadoop.hbase.TableName&nbsp;tableName)</code>&nbsp;</td>
+</tr>
+<tr id="i4" class="altColor">
+<td class="colFirst"><code>static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html#tearDown--">tearDown</a></span>()</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/hbase/snapshot/TestRegionSnapshotTask.html#testAddRegionWithCompactions--">testAddRegionWithCompactions</a></span>()</code>
+<div class="block">Tests adding a region to the snapshot manifest while compactions are running on the region.</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="http://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="http://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="http://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="http://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="http://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="http://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="http://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="http://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="http://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="http://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="http://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="http://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 final&nbsp;org.apache.commons.logging.Log <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html#line.64">LOG</a></pre>
+</li>
+</ul>
+<a name="TEST_UTIL">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>TEST_UTIL</h4>
+<pre>private static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html#line.66">TEST_UTIL</a></pre>
+</li>
+</ul>
+<a name="conf">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>conf</h4>
+<pre>private static&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html#line.67">conf</a></pre>
+</li>
+</ul>
+<a name="fs">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>fs</h4>
+<pre>private static&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html#line.68">fs</a></pre>
+</li>
+</ul>
+<a name="rootDir">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>rootDir</h4>
+<pre>private static&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html#line.69">rootDir</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="TestRegionSnapshotTask--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>TestRegionSnapshotTask</h4>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html#line.63">TestRegionSnapshotTask</a>()</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="setupBeforeClass--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setupBeforeClass</h4>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html#line.72">setupBeforeClass</a>()
+                             throws <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="tearDown--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>tearDown</h4>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html#line.90">tearDown</a>()
+                     throws <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="testAddRegionWithCompactions--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>testAddRegionWithCompactions</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html#line.104">testAddRegionWithCompactions</a>()
+                                  throws <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<div class="block">Tests adding a region to the snapshot manifest while compactions are running on the region.
+ The idea is to slow down the process of adding a store file to the manifest while
+ triggering compactions on the region, allowing the store files to be marked for archival while
+ snapshot operation is running.
+ This test checks for the correct behavior in such a case that the compacted files should
+ not be moved around if a snapshot operation is in progress.
+ See HBASE-18398</div>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="addRegionToSnapshot-org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.snapshot.SnapshotManifest-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>addRegionToSnapshot</h4>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html#line.160">addRegionToSnapshot</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription&nbsp;snapshot,
+                                 org.apache.hadoop.hbase.regionserver.HRegion&nbsp;region,
+                                 org.apache.hadoop.hbase.snapshot.SnapshotManifest&nbsp;manifest)
+                          throws <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="createRegionVisitorWithDelay-org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription-org.apache.hadoop.fs.Path-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>createRegionVisitorWithDelay</h4>
+<pre>private&nbsp;org.apache.hadoop.hbase.snapshot.SnapshotManifest.RegionVisitor&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html#line.169">createRegionVisitorWithDelay</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription&nbsp;desc,
+                                                                                                     org.apache.hadoop.fs.Path&nbsp;workingDir)</pre>
+</li>
+</ul>
+<a name="setupTable-org.apache.hadoop.hbase.TableName-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>setupTable</h4>
+<pre>private&nbsp;org.apache.hadoop.hbase.client.Table&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html#line.187">setupTable</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName)
+                                                 throws <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></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/TestRegionSnapshotTask.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/snapshot/TestMobSecureExportSnapshot.html" title="class in org.apache.hadoop.hbase.snapshot"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/snapshot/TestRestoreFlushSnapshotFromClient.html" title="class in org.apache.hadoop.hbase.snapshot"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html" target="_top">Frames</a></li>
+<li><a href="TestRegionSnapshotTask.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>Nested&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;2017 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/testdevapidocs/org/apache/hadoop/hbase/snapshot/TestRestoreFlushSnapshotFromClient.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/snapshot/TestRestoreFlushSnapshotFromClient.html b/testdevapidocs/org/apache/hadoop/hbase/snapshot/TestRestoreFlushSnapshotFromClient.html
index 8024178..69c1326 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/snapshot/TestRestoreFlushSnapshotFromClient.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/snapshot/TestRestoreFlushSnapshotFromClient.html
@@ -49,7 +49,7 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/snapshot/TestMobSecureExportSnapshot.html" title="class in org.apache.hadoop.hbase.snapshot"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html" title="class in org.apache.hadoop.hbase.snapshot"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../org/apache/hadoop/hbase/snapshot/TestRestoreSnapshotHelper.html" title="class in org.apache.hadoop.hbase.snapshot"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -663,7 +663,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/snapshot/TestMobSecureExportSnapshot.html" title="class in org.apache.hadoop.hbase.snapshot"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html" title="class in org.apache.hadoop.hbase.snapshot"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../org/apache/hadoop/hbase/snapshot/TestRestoreSnapshotHelper.html" title="class in org.apache.hadoop.hbase.snapshot"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/testdevapidocs/org/apache/hadoop/hbase/snapshot/class-use/TestRegionSnapshotTask.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/snapshot/class-use/TestRegionSnapshotTask.html b/testdevapidocs/org/apache/hadoop/hbase/snapshot/class-use/TestRegionSnapshotTask.html
new file mode 100644
index 0000000..9b074f5
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/snapshot/class-use/TestRegionSnapshotTask.html
@@ -0,0 +1,125 @@
+<!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>Uses of Class org.apache.hadoop.hbase.snapshot.TestRegionSnapshotTask (Apache HBase 3.0.0-SNAPSHOT Test 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="Uses of Class org.apache.hadoop.hbase.snapshot.TestRegionSnapshotTask (Apache HBase 3.0.0-SNAPSHOT Test API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</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><a href="../../../../../../org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html" title="class in org.apache.hadoop.hbase.snapshot">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../overview-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>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/snapshot/class-use/TestRegionSnapshotTask.html" target="_top">Frames</a></li>
+<li><a href="TestRegionSnapshotTask.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>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.apache.hadoop.hbase.snapshot.TestRegionSnapshotTask" class="title">Uses of Class<br>org.apache.hadoop.hbase.snapshot.TestRegionSnapshotTask</h2>
+</div>
+<div class="classUseContainer">No usage of org.apache.hadoop.hbase.snapshot.TestRegionSnapshotTask</div>
+<!-- ======= 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><a href="../../../../../../org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html" title="class in org.apache.hadoop.hbase.snapshot">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../overview-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>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/snapshot/class-use/TestRegionSnapshotTask.html" target="_top">Frames</a></li>
+<li><a href="TestRegionSnapshotTask.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>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2017 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/testdevapidocs/org/apache/hadoop/hbase/snapshot/package-frame.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/snapshot/package-frame.html b/testdevapidocs/org/apache/hadoop/hbase/snapshot/package-frame.html
index bffc7ee..bb6f0c9 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/snapshot/package-frame.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/snapshot/package-frame.html
@@ -32,6 +32,7 @@
 <li><a href="TestMobRestoreFlushSnapshotFromClient.html" title="class in org.apache.hadoop.hbase.snapshot" target="classFrame">TestMobRestoreFlushSnapshotFromClient</a></li>
 <li><a href="TestMobRestoreSnapshotHelper.html" title="class in org.apache.hadoop.hbase.snapshot" target="classFrame">TestMobRestoreSnapshotHelper</a></li>
 <li><a href="TestMobSecureExportSnapshot.html" title="class in org.apache.hadoop.hbase.snapshot" target="classFrame">TestMobSecureExportSnapshot</a></li>
+<li><a href="TestRegionSnapshotTask.html" title="class in org.apache.hadoop.hbase.snapshot" target="classFrame">TestRegionSnapshotTask</a></li>
 <li><a href="TestRestoreFlushSnapshotFromClient.html" title="class in org.apache.hadoop.hbase.snapshot" target="classFrame">TestRestoreFlushSnapshotFromClient</a></li>
 <li><a href="TestRestoreSnapshotHelper.html" title="class in org.apache.hadoop.hbase.snapshot" target="classFrame">TestRestoreSnapshotHelper</a></li>
 <li><a href="TestSecureExportSnapshot.html" title="class in org.apache.hadoop.hbase.snapshot" target="classFrame">TestSecureExportSnapshot</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/testdevapidocs/org/apache/hadoop/hbase/snapshot/package-summary.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/snapshot/package-summary.html b/testdevapidocs/org/apache/hadoop/hbase/snapshot/package-summary.html
index 1ee4f78..7d817a4 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/snapshot/package-summary.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/snapshot/package-summary.html
@@ -180,6 +180,12 @@
 </td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html" title="class in org.apache.hadoop.hbase.snapshot">TestRegionSnapshotTask</a></td>
+<td class="colLast">
+<div class="block">Testing the region snapshot task on a cluster.</div>
+</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/snapshot/TestRestoreFlushSnapshotFromClient.html" title="class in org.apache.hadoop.hbase.snapshot">TestRestoreFlushSnapshotFromClient</a></td>
 <td class="colLast">
 <div class="block">Test clone/restore snapshots from the client
@@ -187,33 +193,33 @@
  TODO This is essentially a clone of TestRestoreSnapshotFromClient.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/snapshot/TestRestoreSnapshotHelper.html" title="class in org.apache.hadoop.hbase.snapshot">TestRestoreSnapshotHelper</a></td>
 <td class="colLast">
 <div class="block">Test the restore/clone operation from a file-system point of view.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/snapshot/TestSecureExportSnapshot.html" title="class in org.apache.hadoop.hbase.snapshot">TestSecureExportSnapshot</a></td>
 <td class="colLast">
 <div class="block">Reruns TestExportSnapshot using ExportSnapshot in secure mode.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/snapshot/TestSnapshotClientRetries.html" title="class in org.apache.hadoop.hbase.snapshot">TestSnapshotClientRetries</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/snapshot/TestSnapshotClientRetries.MasterSyncObserver.html" title="class in org.apache.hadoop.hbase.snapshot">TestSnapshotClientRetries.MasterSyncObserver</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/snapshot/TestSnapshotDescriptionUtils.html" title="class in org.apache.hadoop.hbase.snapshot">TestSnapshotDescriptionUtils</a></td>
 <td class="colLast">
 <div class="block">Test that the <code>SnapshotProtos.SnapshotDescription</code> helper is helping correctly.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/snapshot/TestSnapshotManifest.html" title="class in org.apache.hadoop.hbase.snapshot">TestSnapshotManifest</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/testdevapidocs/org/apache/hadoop/hbase/snapshot/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/snapshot/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/snapshot/package-tree.html
index 02152a9..9ab3810 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/snapshot/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/snapshot/package-tree.html
@@ -107,6 +107,7 @@
 <li type="circle">org.apache.hadoop.hbase.snapshot.<a href="../../../../../org/apache/hadoop/hbase/snapshot/TestMobFlushSnapshotFromClient.html" title="class in org.apache.hadoop.hbase.snapshot"><span class="typeNameLink">TestMobFlushSnapshotFromClient</span></a></li>
 </ul>
 </li>
+<li type="circle">org.apache.hadoop.hbase.snapshot.<a href="../../../../../org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html" title="class in org.apache.hadoop.hbase.snapshot"><span class="typeNameLink">TestRegionSnapshotTask</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.snapshot.<a href="../../../../../org/apache/hadoop/hbase/snapshot/TestRestoreFlushSnapshotFromClient.html" title="class in org.apache.hadoop.hbase.snapshot"><span class="typeNameLink">TestRestoreFlushSnapshotFromClient</span></a>
 <ul>
 <li type="circle">org.apache.hadoop.hbase.snapshot.<a href="../../../../../org/apache/hadoop/hbase/snapshot/TestMobRestoreFlushSnapshotFromClient.html" title="class in org.apache.hadoop.hbase.snapshot"><span class="typeNameLink">TestMobRestoreFlushSnapshotFromClient</span></a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
index 2573409..8e1c1ad 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
@@ -140,9 +140,9 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/FaultyFSLog.FailureType.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">FaultyFSLog.FailureType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/TestWALSplit.Corruptions.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">TestWALSplit.Corruptions</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">IOTestProvider.AllowedOperations</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/FaultyFSLog.FailureType.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">FaultyFSLog.FailureType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/testdevapidocs/overview-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/overview-tree.html b/testdevapidocs/overview-tree.html
index 5c08b05..bb95615 100644
--- a/testdevapidocs/overview-tree.html
+++ b/testdevapidocs/overview-tree.html
@@ -2990,6 +2990,7 @@
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="org/apache/hadoop/hbase/quotas/TestRegionServerSpaceQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">TestRegionServerSpaceQuotaManager</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestRegionSizeCalculator.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">TestRegionSizeCalculator</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="org/apache/hadoop/hbase/quotas/TestRegionSizeUse.html" title="class in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">TestRegionSizeUse</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html" title="class in org.apache.hadoop.hbase.snapshot"><span class="typeNameLink">TestRegionSnapshotTask</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestRegionSplitCalculator.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">TestRegionSplitCalculator</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestRegionSplitCalculator.SimpleRange.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">TestRegionSplitCalculator.SimpleRange</span></a> (implements org.apache.hadoop.hbase.util.KeyRange)</li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestRegionSplitPolicy.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestRegionSplitPolicy</span></a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestMasterFailover.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestMasterFailover.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestMasterFailover.html
index 6fccf45..16e4ca8 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestMasterFailover.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestMasterFailover.html
@@ -70,7 +70,7 @@
 <span class="sourceLineNo">062</span>import org.junit.experimental.categories.Category;<a name="line.62"></a>
 <span class="sourceLineNo">063</span><a name="line.63"></a>
 <span class="sourceLineNo">064</span>@Category({FlakeyTests.class, LargeTests.class})<a name="line.64"></a>
-<span class="sourceLineNo">065</span>//@Ignore // Needs to be rewritten for AMv2. Uses tricks not ordained when up on AMv2.<a name="line.65"></a>
+<span class="sourceLineNo">065</span>@Ignore // Needs to be rewritten for AMv2. Uses tricks not ordained when up on AMv2.<a name="line.65"></a>
 <span class="sourceLineNo">066</span>public class TestMasterFailover {<a name="line.66"></a>
 <span class="sourceLineNo">067</span>  private static final Log LOG = LogFactory.getLog(TestMasterFailover.class);<a name="line.67"></a>
 <span class="sourceLineNo">068</span><a name="line.68"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/testdevapidocs/src-html/org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html
new file mode 100644
index 0000000..2de9f3c
--- /dev/null
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html
@@ -0,0 +1,276 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
+<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
+<span class="sourceLineNo">009</span> *<a name="line.9"></a>
+<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *<a name="line.11"></a>
+<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
+<span class="sourceLineNo">017</span> */<a name="line.17"></a>
+<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.snapshot;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import org.apache.commons.logging.Log;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import org.apache.commons.logging.LogFactory;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import org.apache.hadoop.conf.Configuration;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.fs.FileSystem;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.fs.Path;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.TableName;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.client.Table;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.errorhandling.ForeignExceptionDispatcher;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.regionserver.ConstantSizeRegionSplitPolicy;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.regionserver.snapshot.FlushSnapshotSubprocedure;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.testclassification.RegionServerTests;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.39"></a>
+<span class="sourceLineNo">040</span><a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.junit.AfterClass;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.junit.BeforeClass;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.junit.Test;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.junit.experimental.categories.Category;<a name="line.44"></a>
+<span class="sourceLineNo">045</span><a name="line.45"></a>
+<span class="sourceLineNo">046</span>import java.io.IOException;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import java.util.List;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import java.util.concurrent.ExecutorService;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import java.util.concurrent.Executors;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import java.util.concurrent.Future;<a name="line.50"></a>
+<span class="sourceLineNo">051</span><a name="line.51"></a>
+<span class="sourceLineNo">052</span>import static org.junit.Assert.assertEquals;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import static org.junit.Assert.assertNotNull;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import static org.junit.Assert.assertTrue;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import static org.mockito.Mockito.doAnswer;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import static org.mockito.Mockito.spy;<a name="line.56"></a>
+<span class="sourceLineNo">057</span><a name="line.57"></a>
+<span class="sourceLineNo">058</span>/**<a name="line.58"></a>
+<span class="sourceLineNo">059</span> * Testing the region snapshot task on a cluster.<a name="line.59"></a>
+<span class="sourceLineNo">060</span> * @see org.apache.hadoop.hbase.regionserver.snapshot.FlushSnapshotSubprocedure.RegionSnapshotTask<a name="line.60"></a>
+<span class="sourceLineNo">061</span> */<a name="line.61"></a>
+<span class="sourceLineNo">062</span>@Category({MediumTests.class, RegionServerTests.class})<a name="line.62"></a>
+<span class="sourceLineNo">063</span>public class TestRegionSnapshotTask {<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  private final Log LOG = LogFactory.getLog(getClass());<a name="line.64"></a>
+<span class="sourceLineNo">065</span><a name="line.65"></a>
+<span class="sourceLineNo">066</span>  private static HBaseTestingUtility TEST_UTIL;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  private static Configuration conf;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>  private static FileSystem fs;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  private static Path rootDir;<a name="line.69"></a>
+<span class="sourceLineNo">070</span><a name="line.70"></a>
+<span class="sourceLineNo">071</span>  @BeforeClass<a name="line.71"></a>
+<span class="sourceLineNo">072</span>  public static void setupBeforeClass() throws Exception {<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    TEST_UTIL = new HBaseTestingUtility();<a name="line.73"></a>
+<span class="sourceLineNo">074</span><a name="line.74"></a>
+<span class="sourceLineNo">075</span>    conf = TEST_UTIL.getConfiguration();<a name="line.75"></a>
+<span class="sourceLineNo">076</span><a name="line.76"></a>
+<span class="sourceLineNo">077</span>    // Try to frequently clean up compacted files<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    conf.setInt("hbase.hfile.compaction.discharger.interval", 1000);<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    conf.setInt("hbase.master.hfilecleaner.ttl", 1000);<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span>    TEST_UTIL.startMiniCluster(1);<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    TEST_UTIL.getHBaseCluster().waitForActiveAndReadyMaster();<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    TEST_UTIL.waitUntilAllRegionsAssigned(TableName.META_TABLE_NAME);<a name="line.83"></a>
+<span class="sourceLineNo">084</span><a name="line.84"></a>
+<span class="sourceLineNo">085</span>    rootDir = FSUtils.getRootDir(conf);<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    fs = TEST_UTIL.getTestFileSystem();<a name="line.86"></a>
+<span class="sourceLineNo">087</span>  }<a name="line.87"></a>
+<span class="sourceLineNo">088</span><a name="line.88"></a>
+<span class="sourceLineNo">089</span>  @AfterClass<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  public static void tearDown() throws Exception {<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    TEST_UTIL.shutdownMiniCluster();<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  }<a name="line.92"></a>
+<span class="sourceLineNo">093</span><a name="line.93"></a>
+<span class="sourceLineNo">094</span>  /**<a name="line.94"></a>
+<span class="sourceLineNo">095</span>   * Tests adding a region to the snapshot manifest while compactions are running on the region.<a name="line.95"></a>
+<span class="sourceLineNo">096</span>   * The idea is to slow down the process of adding a store file to the manifest while<a name="line.96"></a>
+<span class="sourceLineNo">097</span>   * triggering compactions on the region, allowing the store files to be marked for archival while<a name="line.97"></a>
+<span class="sourceLineNo">098</span>   * snapshot operation is running.<a name="line.98"></a>
+<span class="sourceLineNo">099</span>   * This test checks for the correct behavior in such a case that the compacted files should<a name="line.99"></a>
+<span class="sourceLineNo">100</span>   * not be moved around if a snapshot operation is in progress.<a name="line.100"></a>
+<span class="sourceLineNo">101</span>   * See HBASE-18398<a name="line.101"></a>
+<span class="sourceLineNo">102</span>   */<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  @Test(timeout = 30000)<a name="line.103"></a>
+<span class="sourceLineNo">104</span>  public void testAddRegionWithCompactions() throws Exception {<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    final TableName tableName = TableName.valueOf("test_table");<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    Table table = setupTable(tableName);<a name="line.106"></a>
+<span class="sourceLineNo">107</span><a name="line.107"></a>
+<span class="sourceLineNo">108</span>    List&lt;HRegion&gt; hRegions = TEST_UTIL.getHBaseCluster().getRegions(tableName);<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span>    final SnapshotProtos.SnapshotDescription snapshot =<a name="line.110"></a>
+<span class="sourceLineNo">111</span>        SnapshotProtos.SnapshotDescription.newBuilder()<a name="line.111"></a>
+<span class="sourceLineNo">112</span>        .setTable(tableName.getNameAsString())<a name="line.112"></a>
+<span class="sourceLineNo">113</span>        .setType(SnapshotProtos.SnapshotDescription.Type.FLUSH)<a name="line.113"></a>
+<span class="sourceLineNo">114</span>        .setName("test_table_snapshot")<a name="line.114"></a>
+<span class="sourceLineNo">115</span>        .setVersion(SnapshotManifestV2.DESCRIPTOR_VERSION)<a name="line.115"></a>
+<span class="sourceLineNo">116</span>        .build();<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    ForeignExceptionDispatcher monitor = new ForeignExceptionDispatcher(snapshot.getName());<a name="line.117"></a>
+<span class="sourceLineNo">118</span><a name="line.118"></a>
+<span class="sourceLineNo">119</span>    final HRegion region = spy(hRegions.get(0));<a name="line.119"></a>
+<span class="sourceLineNo">120</span><a name="line.120"></a>
+<span class="sourceLineNo">121</span>    Path workingDir = SnapshotDescriptionUtils.getWorkingSnapshotDir(snapshot, rootDir);<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    final SnapshotManifest manifest =<a name="line.122"></a>
+<span class="sourceLineNo">123</span>        SnapshotManifest.create(conf, fs, workingDir, snapshot, monitor);<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    manifest.addTableDescriptor(table.getTableDescriptor());<a name="line.124"></a>
+<span class="sourceLineNo">125</span><a name="line.125"></a>
+<span class="sourceLineNo">126</span>    if (!fs.exists(workingDir)) {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      fs.mkdirs(workingDir);<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    }<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    assertTrue(fs.exists(workingDir));<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    SnapshotDescriptionUtils.writeSnapshotInfo(snapshot, workingDir, fs);<a name="line.130"></a>
+<span class="sourceLineNo">131</span><a name="line.131"></a>
+<span class="sourceLineNo">132</span>    doAnswer(__ -&gt; {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      addRegionToSnapshot(snapshot, region, manifest);<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      return null;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    }).when(region).addRegionToSnapshot(snapshot, monitor);<a name="line.135"></a>
+<span class="sourceLineNo">136</span><a name="line.136"></a>
+<span class="sourceLineNo">137</span>    FlushSnapshotSubprocedure.RegionSnapshotTask snapshotTask =<a name="line.137"></a>
+<span class="sourceLineNo">138</span>        new FlushSnapshotSubprocedure.RegionSnapshotTask(region, snapshot, true, monitor);<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    ExecutorService executor = Executors.newFixedThreadPool(1);<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    Future f = executor.submit(snapshotTask);<a name="line.140"></a>
+<span class="sourceLineNo">141</span><a name="line.141"></a>
+<span class="sourceLineNo">142</span>    // Trigger major compaction and wait for snaphot operation to finish<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    LOG.info("Starting major compaction");<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    region.compact(true);<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    LOG.info("Finished major compaction");<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    f.get();<a name="line.146"></a>
+<span class="sourceLineNo">147</span><a name="line.147"></a>
+<span class="sourceLineNo">148</span>    // Consolidate region manifests into a single snapshot manifest<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    manifest.consolidate();<a name="line.149"></a>
+<span class="sourceLineNo">150</span><a name="line.150"></a>
+<span class="sourceLineNo">151</span>    // Make sure that the region manifest exists, which means the snapshot operation succeeded<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    assertNotNull(manifest.getRegionManifests());<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    // Sanity check, there should be only one region<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    assertEquals(1, manifest.getRegionManifests().size());<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span>    // Make sure that no files went missing after the snapshot operation<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    SnapshotReferenceUtil.verifySnapshot(conf, fs, manifest);<a name="line.157"></a>
+<span class="sourceLineNo">158</span>  }<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span>  private void addRegionToSnapshot(SnapshotProtos.SnapshotDescription snapshot,<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      HRegion region, SnapshotManifest manifest) throws Exception {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    LOG.info("Adding region to snapshot: " + region.getRegionInfo().getRegionNameAsString());<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    Path workingDir = SnapshotDescriptionUtils.getWorkingSnapshotDir(snapshot, rootDir);<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    SnapshotManifest.RegionVisitor visitor = createRegionVisitorWithDelay(snapshot, workingDir);<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    manifest.addRegion(region, visitor);<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    LOG.info("Added the region to snapshot: " + region.getRegionInfo().getRegionNameAsString());<a name="line.166"></a>
+<span class="sourceLineNo">167</span>  }<a name="line.167"></a>
+<span class="sourceLineNo">168</span><a name="line.168"></a>
+<span class="sourceLineNo">169</span>  private SnapshotManifest.RegionVisitor createRegionVisitorWithDelay(<a name="line.169"></a>
+<span class="sourceLineNo">170</span>      SnapshotProtos.SnapshotDescription desc, Path workingDir) {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    return new SnapshotManifestV2.ManifestBuilder(conf, fs, workingDir) {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      @Override<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      public void storeFile(final SnapshotProtos.SnapshotRegionManifest.Builder region,<a name="line.173"></a>
+<span class="sourceLineNo">174</span>          final SnapshotProtos.SnapshotRegionManifest.FamilyFiles.Builder family,<a name="line.174"></a>
+<span class="sourceLineNo">175</span>          final StoreFileInfo storeFile) throws IOException {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>        try {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>          LOG.debug("Introducing delay before adding store file to manifest");<a name="line.177"></a>
+<span class="sourceLineNo">178</span>          Thread.sleep(2000);<a name="line.178"></a>
+<span class="sourceLineNo">179</span>        } catch (InterruptedException ex) {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>          LOG.error("Interrupted due to error: " + ex);<a name="line.180"></a>
+<span class="sourceLineNo">181</span>        }<a name="line.181"></a>
+<span class="sourceLineNo">182</span>        super.storeFile(region, family, storeFile);<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      }<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    };<a name="line.184"></a>
+<span class="sourceLineNo">185</span>  }<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span>  private Table setupTable(TableName tableName) throws Exception {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    TableDescriptorBuilder builder = TableDescriptorBuilder.newBuilder(tableName);<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    // Flush many files, but do not compact immediately<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    // Make sure that the region does not split<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    builder<a name="line.191"></a>
+<span class="sourceLineNo">192</span>        .setMemStoreFlushSize(5000)<a name="line.192"></a>
+<span class="sourceLineNo">193</span>        .setRegionSplitPolicyClassName(ConstantSizeRegionSplitPolicy.class.getName())<a name="line.193"></a>
+<span class="sourceLineNo">194</span>        .setMaxFileSize(100 * 1024 * 1024)<a name="line.194"></a>
+<span class="sourceLineNo">195</span>        .setConfiguration("hbase.hstore.compactionThreshold", "250");<a name="line.195"></a>
+<span class="sourceLineNo">196</span><a name="line.196"></a>
+<span class="sourceLineNo">197</span>    TableDescriptor td = builder.build();<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    byte[] fam = Bytes.toBytes("fam");<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    Table table = TEST_UTIL.createTable(td, new byte[][] {fam},<a name="line.199"></a>
+<span class="sourceLineNo">200</span>        TEST_UTIL.getConfiguration());<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    TEST_UTIL.loadTable(table, fam);<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    return table;<a name="line.202"></a>
+<span class="sourceLineNo">203</span>  }<a name="line.203"></a>
+<span class="sourceLineNo">204</span>}<a name="line.204"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>


[04/33] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html b/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html
index 3255174..bfaacbc 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html
@@ -55,516 +55,538 @@
 <span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.regionserver.Store;<a name="line.47"></a>
 <span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.regionserver.StoreFile;<a name="line.48"></a>
 <span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.CodedInputStream;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.InvalidProtocolBufferException;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDataManifest;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.util.FSTableDescriptors;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.59"></a>
-<span class="sourceLineNo">060</span><a name="line.60"></a>
-<span class="sourceLineNo">061</span>/**<a name="line.61"></a>
-<span class="sourceLineNo">062</span> * Utility class to help read/write the Snapshot Manifest.<a name="line.62"></a>
-<span class="sourceLineNo">063</span> *<a name="line.63"></a>
-<span class="sourceLineNo">064</span> * The snapshot format is transparent for the users of this class,<a name="line.64"></a>
-<span class="sourceLineNo">065</span> * once the snapshot is written, it will never be modified.<a name="line.65"></a>
-<span class="sourceLineNo">066</span> * On open() the snapshot will be loaded to the current in-memory format.<a name="line.66"></a>
-<span class="sourceLineNo">067</span> */<a name="line.67"></a>
-<span class="sourceLineNo">068</span>@InterfaceAudience.Private<a name="line.68"></a>
-<span class="sourceLineNo">069</span>public final class SnapshotManifest {<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  private static final Log LOG = LogFactory.getLog(SnapshotManifest.class);<a name="line.70"></a>
-<span class="sourceLineNo">071</span><a name="line.71"></a>
-<span class="sourceLineNo">072</span>  public static final String SNAPSHOT_MANIFEST_SIZE_LIMIT_CONF_KEY = "snapshot.manifest.size.limit";<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>  public static final String DATA_MANIFEST_NAME = "data.manifest";<a name="line.74"></a>
-<span class="sourceLineNo">075</span><a name="line.75"></a>
-<span class="sourceLineNo">076</span>  private List&lt;SnapshotRegionManifest&gt; regionManifests;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  private SnapshotDescription desc;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  private HTableDescriptor htd;<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span>  private final ForeignExceptionSnare monitor;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  private final Configuration conf;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  private final Path workingDir;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  private final FileSystem fs;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>  private int manifestSizeLimit;<a name="line.84"></a>
-<span class="sourceLineNo">085</span><a name="line.85"></a>
-<span class="sourceLineNo">086</span>  private SnapshotManifest(final Configuration conf, final FileSystem fs,<a name="line.86"></a>
-<span class="sourceLineNo">087</span>      final Path workingDir, final SnapshotDescription desc,<a name="line.87"></a>
-<span class="sourceLineNo">088</span>      final ForeignExceptionSnare monitor) {<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    this.monitor = monitor;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    this.desc = desc;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    this.workingDir = workingDir;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    this.conf = conf;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    this.fs = fs;<a name="line.93"></a>
-<span class="sourceLineNo">094</span><a name="line.94"></a>
-<span class="sourceLineNo">095</span>    this.manifestSizeLimit = conf.getInt(SNAPSHOT_MANIFEST_SIZE_LIMIT_CONF_KEY, 64 * 1024 * 1024);<a name="line.95"></a>
-<span class="sourceLineNo">096</span>  }<a name="line.96"></a>
-<span class="sourceLineNo">097</span><a name="line.97"></a>
-<span class="sourceLineNo">098</span>  /**<a name="line.98"></a>
-<span class="sourceLineNo">099</span>   * Return a SnapshotManifest instance, used for writing a snapshot.<a name="line.99"></a>
-<span class="sourceLineNo">100</span>   *<a name="line.100"></a>
-<span class="sourceLineNo">101</span>   * There are two usage pattern:<a name="line.101"></a>
-<span class="sourceLineNo">102</span>   *  - The Master will create a manifest, add the descriptor, offline regions<a name="line.102"></a>
-<span class="sourceLineNo">103</span>   *    and consolidate the snapshot by writing all the pending stuff on-disk.<a name="line.103"></a>
-<span class="sourceLineNo">104</span>   *      manifest = SnapshotManifest.create(...)<a name="line.104"></a>
-<span class="sourceLineNo">105</span>   *      manifest.addRegion(tableDir, hri)<a name="line.105"></a>
-<span class="sourceLineNo">106</span>   *      manifest.consolidate()<a name="line.106"></a>
-<span class="sourceLineNo">107</span>   *  - The RegionServer will create a single region manifest<a name="line.107"></a>
-<span class="sourceLineNo">108</span>   *      manifest = SnapshotManifest.create(...)<a name="line.108"></a>
-<span class="sourceLineNo">109</span>   *      manifest.addRegion(region)<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   */<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  public static SnapshotManifest create(final Configuration conf, final FileSystem fs,<a name="line.111"></a>
-<span class="sourceLineNo">112</span>      final Path workingDir, final SnapshotDescription desc,<a name="line.112"></a>
-<span class="sourceLineNo">113</span>      final ForeignExceptionSnare monitor) {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    return new SnapshotManifest(conf, fs, workingDir, desc, monitor);<a name="line.114"></a>
-<span class="sourceLineNo">115</span>  }<a name="line.115"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.shaded.com.google.common.annotations.VisibleForTesting;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.CodedInputStream;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.InvalidProtocolBufferException;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDataManifest;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.util.FSTableDescriptors;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.60"></a>
+<span class="sourceLineNo">061</span><a name="line.61"></a>
+<span class="sourceLineNo">062</span>/**<a name="line.62"></a>
+<span class="sourceLineNo">063</span> * Utility class to help read/write the Snapshot Manifest.<a name="line.63"></a>
+<span class="sourceLineNo">064</span> *<a name="line.64"></a>
+<span class="sourceLineNo">065</span> * The snapshot format is transparent for the users of this class,<a name="line.65"></a>
+<span class="sourceLineNo">066</span> * once the snapshot is written, it will never be modified.<a name="line.66"></a>
+<span class="sourceLineNo">067</span> * On open() the snapshot will be loaded to the current in-memory format.<a name="line.67"></a>
+<span class="sourceLineNo">068</span> */<a name="line.68"></a>
+<span class="sourceLineNo">069</span>@InterfaceAudience.Private<a name="line.69"></a>
+<span class="sourceLineNo">070</span>public final class SnapshotManifest {<a name="line.70"></a>
+<span class="sourceLineNo">071</span>  private static final Log LOG = LogFactory.getLog(SnapshotManifest.class);<a name="line.71"></a>
+<span class="sourceLineNo">072</span><a name="line.72"></a>
+<span class="sourceLineNo">073</span>  public static final String SNAPSHOT_MANIFEST_SIZE_LIMIT_CONF_KEY = "snapshot.manifest.size.limit";<a name="line.73"></a>
+<span class="sourceLineNo">074</span><a name="line.74"></a>
+<span class="sourceLineNo">075</span>  public static final String DATA_MANIFEST_NAME = "data.manifest";<a name="line.75"></a>
+<span class="sourceLineNo">076</span><a name="line.76"></a>
+<span class="sourceLineNo">077</span>  private List&lt;SnapshotRegionManifest&gt; regionManifests;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  private SnapshotDescription desc;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  private HTableDescriptor htd;<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span>  private final ForeignExceptionSnare monitor;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  private final Configuration conf;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>  private final Path workingDir;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  private final FileSystem fs;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>  private int manifestSizeLimit;<a name="line.85"></a>
+<span class="sourceLineNo">086</span><a name="line.86"></a>
+<span class="sourceLineNo">087</span>  private SnapshotManifest(final Configuration conf, final FileSystem fs,<a name="line.87"></a>
+<span class="sourceLineNo">088</span>      final Path workingDir, final SnapshotDescription desc,<a name="line.88"></a>
+<span class="sourceLineNo">089</span>      final ForeignExceptionSnare monitor) {<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    this.monitor = monitor;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    this.desc = desc;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    this.workingDir = workingDir;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    this.conf = conf;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    this.fs = fs;<a name="line.94"></a>
+<span class="sourceLineNo">095</span><a name="line.95"></a>
+<span class="sourceLineNo">096</span>    this.manifestSizeLimit = conf.getInt(SNAPSHOT_MANIFEST_SIZE_LIMIT_CONF_KEY, 64 * 1024 * 1024);<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  }<a name="line.97"></a>
+<span class="sourceLineNo">098</span><a name="line.98"></a>
+<span class="sourceLineNo">099</span>  /**<a name="line.99"></a>
+<span class="sourceLineNo">100</span>   * Return a SnapshotManifest instance, used for writing a snapshot.<a name="line.100"></a>
+<span class="sourceLineNo">101</span>   *<a name="line.101"></a>
+<span class="sourceLineNo">102</span>   * There are two usage pattern:<a name="line.102"></a>
+<span class="sourceLineNo">103</span>   *  - The Master will create a manifest, add the descriptor, offline regions<a name="line.103"></a>
+<span class="sourceLineNo">104</span>   *    and consolidate the snapshot by writing all the pending stuff on-disk.<a name="line.104"></a>
+<span class="sourceLineNo">105</span>   *      manifest = SnapshotManifest.create(...)<a name="line.105"></a>
+<span class="sourceLineNo">106</span>   *      manifest.addRegion(tableDir, hri)<a name="line.106"></a>
+<span class="sourceLineNo">107</span>   *      manifest.consolidate()<a name="line.107"></a>
+<span class="sourceLineNo">108</span>   *  - The RegionServer will create a single region manifest<a name="line.108"></a>
+<span class="sourceLineNo">109</span>   *      manifest = SnapshotManifest.create(...)<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   *      manifest.addRegion(region)<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   */<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  public static SnapshotManifest create(final Configuration conf, final FileSystem fs,<a name="line.112"></a>
+<span class="sourceLineNo">113</span>      final Path workingDir, final SnapshotDescription desc,<a name="line.113"></a>
+<span class="sourceLineNo">114</span>      final ForeignExceptionSnare monitor) {<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    return new SnapshotManifest(conf, fs, workingDir, desc, monitor);<a name="line.115"></a>
 <span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span>  /**<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   * Return a SnapshotManifest instance with the information already loaded in-memory.<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   *    SnapshotManifest manifest = SnapshotManifest.open(...)<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   *    HTableDescriptor htd = manifest.getTableDescriptor()<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   *    for (SnapshotRegionManifest regionManifest: manifest.getRegionManifests())<a name="line.121"></a>
-<span class="sourceLineNo">122</span>   *      hri = regionManifest.getRegionInfo()<a name="line.122"></a>
-<span class="sourceLineNo">123</span>   *      for (regionManifest.getFamilyFiles())<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   *        ...<a name="line.124"></a>
-<span class="sourceLineNo">125</span>   */<a name="line.125"></a>
-<span class="sourceLineNo">126</span>  public static SnapshotManifest open(final Configuration conf, final FileSystem fs,<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      final Path workingDir, final SnapshotDescription desc) throws IOException {<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    SnapshotManifest manifest = new SnapshotManifest(conf, fs, workingDir, desc, null);<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    manifest.load();<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    return manifest;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  }<a name="line.131"></a>
-<span class="sourceLineNo">132</span><a name="line.132"></a>
-<span class="sourceLineNo">133</span><a name="line.133"></a>
-<span class="sourceLineNo">134</span>  /**<a name="line.134"></a>
-<span class="sourceLineNo">135</span>   * Add the table descriptor to the snapshot manifest<a name="line.135"></a>
-<span class="sourceLineNo">136</span>   */<a name="line.136"></a>
-<span class="sourceLineNo">137</span>  public void addTableDescriptor(final HTableDescriptor htd) throws IOException {<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    this.htd = htd;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  }<a name="line.139"></a>
-<span class="sourceLineNo">140</span><a name="line.140"></a>
-<span class="sourceLineNo">141</span>  interface RegionVisitor&lt;TRegion, TFamily&gt; {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    TRegion regionOpen(final HRegionInfo regionInfo) throws IOException;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    void regionClose(final TRegion region) throws IOException;<a name="line.143"></a>
-<span class="sourceLineNo">144</span><a name="line.144"></a>
-<span class="sourceLineNo">145</span>    TFamily familyOpen(final TRegion region, final byte[] familyName) throws IOException;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    void familyClose(final TRegion region, final TFamily family) throws IOException;<a name="line.146"></a>
-<span class="sourceLineNo">147</span><a name="line.147"></a>
-<span class="sourceLineNo">148</span>    void storeFile(final TRegion region, final TFamily family, final StoreFileInfo storeFile)<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      throws IOException;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  }<a name="line.150"></a>
-<span class="sourceLineNo">151</span><a name="line.151"></a>
-<span class="sourceLineNo">152</span>  private RegionVisitor createRegionVisitor(final SnapshotDescription desc) throws IOException {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    switch (getSnapshotFormat(desc)) {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      case SnapshotManifestV1.DESCRIPTOR_VERSION:<a name="line.154"></a>
-<span class="sourceLineNo">155</span>        return new SnapshotManifestV1.ManifestBuilder(conf, fs, workingDir);<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      case SnapshotManifestV2.DESCRIPTOR_VERSION:<a name="line.156"></a>
-<span class="sourceLineNo">157</span>        return new SnapshotManifestV2.ManifestBuilder(conf, fs, workingDir);<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      default:<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      throw new CorruptedSnapshotException("Invalid Snapshot version: " + desc.getVersion(),<a name="line.159"></a>
-<span class="sourceLineNo">160</span>        ProtobufUtil.createSnapshotDesc(desc));<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    }<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  }<a name="line.162"></a>
-<span class="sourceLineNo">163</span><a name="line.163"></a>
-<span class="sourceLineNo">164</span>  public void addMobRegion(HRegionInfo regionInfo) throws IOException {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    // 0. Get the ManifestBuilder/RegionVisitor<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    RegionVisitor visitor = createRegionVisitor(desc);<a name="line.166"></a>
-<span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span>    // 1. dump region meta info into the snapshot directory<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    LOG.debug("Storing mob region '" + regionInfo + "' region-info for snapshot.");<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    Object regionData = visitor.regionOpen(regionInfo);<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    monitor.rethrowException();<a name="line.171"></a>
-<span class="sourceLineNo">172</span><a name="line.172"></a>
-<span class="sourceLineNo">173</span>    // 2. iterate through all the stores in the region<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    LOG.debug("Creating references for mob files");<a name="line.174"></a>
-<span class="sourceLineNo">175</span><a name="line.175"></a>
-<span class="sourceLineNo">176</span>    Path mobRegionPath = MobUtils.getMobRegionPath(conf, regionInfo.getTable());<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    for (HColumnDescriptor hcd : htd.getColumnFamilies()) {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      // 2.1. build the snapshot reference for the store if it's a mob store<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      if (!hcd.isMobEnabled()) {<a name="line.179"></a>
-<span class="sourceLineNo">180</span>        continue;<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      }<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      Object familyData = visitor.familyOpen(regionData, hcd.getName());<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      monitor.rethrowException();<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span>      Path storePath = MobUtils.getMobFamilyPath(mobRegionPath, hcd.getNameAsString());<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      List&lt;StoreFileInfo&gt; storeFiles = getStoreFiles(storePath);<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      if (storeFiles == null) {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>        if (LOG.isDebugEnabled()) {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>          LOG.debug("No mob files under family: " + hcd.getNameAsString());<a name="line.189"></a>
-<span class="sourceLineNo">190</span>        }<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        continue;<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      }<a name="line.192"></a>
-<span class="sourceLineNo">193</span><a name="line.193"></a>
-<span class="sourceLineNo">194</span>      addReferenceFiles(visitor, regionData, familyData, storeFiles, true);<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>      visitor.familyClose(regionData, familyData);<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    }<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    visitor.regionClose(regionData);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>  }<a name="line.199"></a>
-<span class="sourceLineNo">200</span><a name="line.200"></a>
-<span class="sourceLineNo">201</span>  /**<a name="line.201"></a>
-<span class="sourceLineNo">202</span>   * Creates a 'manifest' for the specified region, by reading directly from the HRegion object.<a name="line.202"></a>
-<span class="sourceLineNo">203</span>   * This is used by the "online snapshot" when the table is enabled.<a name="line.203"></a>
-<span class="sourceLineNo">204</span>   */<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  public void addRegion(final HRegion region) throws IOException {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    // 0. Get the ManifestBuilder/RegionVisitor<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    RegionVisitor visitor = createRegionVisitor(desc);<a name="line.207"></a>
+<span class="sourceLineNo">117</span>  }<a name="line.117"></a>
+<span class="sourceLineNo">118</span><a name="line.118"></a>
+<span class="sourceLineNo">119</span>  /**<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   * Return a SnapshotManifest instance with the information already loaded in-memory.<a name="line.120"></a>
+<span class="sourceLineNo">121</span>   *    SnapshotManifest manifest = SnapshotManifest.open(...)<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   *    HTableDescriptor htd = manifest.getTableDescriptor()<a name="line.122"></a>
+<span class="sourceLineNo">123</span>   *    for (SnapshotRegionManifest regionManifest: manifest.getRegionManifests())<a name="line.123"></a>
+<span class="sourceLineNo">124</span>   *      hri = regionManifest.getRegionInfo()<a name="line.124"></a>
+<span class="sourceLineNo">125</span>   *      for (regionManifest.getFamilyFiles())<a name="line.125"></a>
+<span class="sourceLineNo">126</span>   *        ...<a name="line.126"></a>
+<span class="sourceLineNo">127</span>   */<a name="line.127"></a>
+<span class="sourceLineNo">128</span>  public static SnapshotManifest open(final Configuration conf, final FileSystem fs,<a name="line.128"></a>
+<span class="sourceLineNo">129</span>      final Path workingDir, final SnapshotDescription desc) throws IOException {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    SnapshotManifest manifest = new SnapshotManifest(conf, fs, workingDir, desc, null);<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    manifest.load();<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    return manifest;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>  }<a name="line.133"></a>
+<span class="sourceLineNo">134</span><a name="line.134"></a>
+<span class="sourceLineNo">135</span><a name="line.135"></a>
+<span class="sourceLineNo">136</span>  /**<a name="line.136"></a>
+<span class="sourceLineNo">137</span>   * Add the table descriptor to the snapshot manifest<a name="line.137"></a>
+<span class="sourceLineNo">138</span>   */<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  public void addTableDescriptor(final HTableDescriptor htd) throws IOException {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    this.htd = htd;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  }<a name="line.141"></a>
+<span class="sourceLineNo">142</span><a name="line.142"></a>
+<span class="sourceLineNo">143</span>  interface RegionVisitor&lt;TRegion, TFamily&gt; {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    TRegion regionOpen(final HRegionInfo regionInfo) throws IOException;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    void regionClose(final TRegion region) throws IOException;<a name="line.145"></a>
+<span class="sourceLineNo">146</span><a name="line.146"></a>
+<span class="sourceLineNo">147</span>    TFamily familyOpen(final TRegion region, final byte[] familyName) throws IOException;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    void familyClose(final TRegion region, final TFamily family) throws IOException;<a name="line.148"></a>
+<span class="sourceLineNo">149</span><a name="line.149"></a>
+<span class="sourceLineNo">150</span>    void storeFile(final TRegion region, final TFamily family, final StoreFileInfo storeFile)<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      throws IOException;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>  }<a name="line.152"></a>
+<span class="sourceLineNo">153</span><a name="line.153"></a>
+<span class="sourceLineNo">154</span>  private RegionVisitor createRegionVisitor(final SnapshotDescription desc) throws IOException {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    switch (getSnapshotFormat(desc)) {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      case SnapshotManifestV1.DESCRIPTOR_VERSION:<a name="line.156"></a>
+<span class="sourceLineNo">157</span>        return new SnapshotManifestV1.ManifestBuilder(conf, fs, workingDir);<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      case SnapshotManifestV2.DESCRIPTOR_VERSION:<a name="line.158"></a>
+<span class="sourceLineNo">159</span>        return new SnapshotManifestV2.ManifestBuilder(conf, fs, workingDir);<a name="line.159"></a>
+<span class="sourceLineNo">160</span>      default:<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      throw new CorruptedSnapshotException("Invalid Snapshot version: " + desc.getVersion(),<a name="line.161"></a>
+<span class="sourceLineNo">162</span>        ProtobufUtil.createSnapshotDesc(desc));<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    }<a name="line.163"></a>
+<span class="sourceLineNo">164</span>  }<a name="line.164"></a>
+<span class="sourceLineNo">165</span><a name="line.165"></a>
+<span class="sourceLineNo">166</span>  public void addMobRegion(HRegionInfo regionInfo) throws IOException {<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    // Get the ManifestBuilder/RegionVisitor<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    RegionVisitor visitor = createRegionVisitor(desc);<a name="line.168"></a>
+<span class="sourceLineNo">169</span><a name="line.169"></a>
+<span class="sourceLineNo">170</span>    // Visit the region and add it to the manifest<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    addMobRegion(regionInfo, visitor);<a name="line.171"></a>
+<span class="sourceLineNo">172</span>  }<a name="line.172"></a>
+<span class="sourceLineNo">173</span><a name="line.173"></a>
+<span class="sourceLineNo">174</span>  @VisibleForTesting<a name="line.174"></a>
+<span class="sourceLineNo">175</span>  protected void addMobRegion(HRegionInfo regionInfo, RegionVisitor visitor) throws IOException {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    // 1. dump region meta info into the snapshot directory<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    LOG.debug("Storing mob region '" + regionInfo + "' region-info for snapshot.");<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    Object regionData = visitor.regionOpen(regionInfo);<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    monitor.rethrowException();<a name="line.179"></a>
+<span class="sourceLineNo">180</span><a name="line.180"></a>
+<span class="sourceLineNo">181</span>    // 2. iterate through all the stores in the region<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    LOG.debug("Creating references for mob files");<a name="line.182"></a>
+<span class="sourceLineNo">183</span><a name="line.183"></a>
+<span class="sourceLineNo">184</span>    Path mobRegionPath = MobUtils.getMobRegionPath(conf, regionInfo.getTable());<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    for (HColumnDescriptor hcd : htd.getColumnFamilies()) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      // 2.1. build the snapshot reference for the store if it's a mob store<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      if (!hcd.isMobEnabled()) {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>        continue;<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      }<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      Object familyData = visitor.familyOpen(regionData, hcd.getName());<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      monitor.rethrowException();<a name="line.191"></a>
+<span class="sourceLineNo">192</span><a name="line.192"></a>
+<span class="sourceLineNo">193</span>      Path storePath = MobUtils.getMobFamilyPath(mobRegionPath, hcd.getNameAsString());<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      List&lt;StoreFileInfo&gt; storeFiles = getStoreFiles(storePath);<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      if (storeFiles == null) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        if (LOG.isDebugEnabled()) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>          LOG.debug("No mob files under family: " + hcd.getNameAsString());<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        }<a name="line.198"></a>
+<span class="sourceLineNo">199</span>        continue;<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      }<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span>      addReferenceFiles(visitor, regionData, familyData, storeFiles, true);<a name="line.202"></a>
+<span class="sourceLineNo">203</span><a name="line.203"></a>
+<span class="sourceLineNo">204</span>      visitor.familyClose(regionData, familyData);<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    }<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    visitor.regionClose(regionData);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>  }<a name="line.207"></a>
 <span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span>    // 1. dump region meta info into the snapshot directory<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    LOG.debug("Storing '" + region + "' region-info for snapshot.");<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    Object regionData = visitor.regionOpen(region.getRegionInfo());<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    monitor.rethrowException();<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>    // 2. iterate through all the stores in the region<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    LOG.debug("Creating references for hfiles");<a name="line.215"></a>
+<span class="sourceLineNo">209</span>  /**<a name="line.209"></a>
+<span class="sourceLineNo">210</span>   * Creates a 'manifest' for the specified region, by reading directly from the HRegion object.<a name="line.210"></a>
+<span class="sourceLineNo">211</span>   * This is used by the "online snapshot" when the table is enabled.<a name="line.211"></a>
+<span class="sourceLineNo">212</span>   */<a name="line.212"></a>
+<span class="sourceLineNo">213</span>  public void addRegion(final HRegion region) throws IOException {<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    // Get the ManifestBuilder/RegionVisitor<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    RegionVisitor visitor = createRegionVisitor(desc);<a name="line.215"></a>
 <span class="sourceLineNo">216</span><a name="line.216"></a>
-<span class="sourceLineNo">217</span>    for (Store store : region.getStores()) {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      // 2.1. build the snapshot reference for the store<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      Object familyData = visitor.familyOpen(regionData, store.getColumnFamilyDescriptor().getName());<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      monitor.rethrowException();<a name="line.220"></a>
-<span class="sourceLineNo">221</span><a name="line.221"></a>
-<span class="sourceLineNo">222</span>      List&lt;StoreFile&gt; storeFiles = new ArrayList&lt;&gt;(store.getStorefiles());<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      if (LOG.isDebugEnabled()) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>        LOG.debug("Adding snapshot references for " + storeFiles  + " hfiles");<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      }<a name="line.225"></a>
-<span class="sourceLineNo">226</span><a name="line.226"></a>
-<span class="sourceLineNo">227</span>      // 2.2. iterate through all the store's files and create "references".<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      for (int i = 0, sz = storeFiles.size(); i &lt; sz; i++) {<a name="line.228"></a>
-<span class="sourceLineNo">229</span>        StoreFile storeFile = storeFiles.get(i);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>        monitor.rethrowException();<a name="line.230"></a>
-<span class="sourceLineNo">231</span><a name="line.231"></a>
-<span class="sourceLineNo">232</span>        // create "reference" to this store file.<a name="line.232"></a>
-<span class="sourceLineNo">233</span>        LOG.debug("Adding reference for file (" + (i+1) + "/" + sz + "): " + storeFile.getPath());<a name="line.233"></a>
-<span class="sourceLineNo">234</span>        visitor.storeFile(regionData, familyData, storeFile.getFileInfo());<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      }<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      visitor.familyClose(regionData, familyData);<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    }<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    visitor.regionClose(regionData);<a name="line.238"></a>
-<span class="sourceLineNo">239</span>  }<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span>  /**<a name="line.241"></a>
-<span class="sourceLineNo">242</span>   * Creates a 'manifest' for the specified region, by reading directly from the disk.<a name="line.242"></a>
-<span class="sourceLineNo">243</span>   * This is used by the "offline snapshot" when the table is disabled.<a name="line.243"></a>
-<span class="sourceLineNo">244</span>   */<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  public void addRegion(final Path tableDir, final HRegionInfo regionInfo) throws IOException {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    // 0. Get the ManifestBuilder/RegionVisitor<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    RegionVisitor visitor = createRegionVisitor(desc);<a name="line.247"></a>
-<span class="sourceLineNo">248</span><a name="line.248"></a>
-<span class="sourceLineNo">249</span>    boolean isMobRegion = MobUtils.isMobRegionInfo(regionInfo);<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    try {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      Path baseDir = tableDir;<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      // Open the RegionFS<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      if (isMobRegion) {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>        baseDir = FSUtils.getTableDir(MobUtils.getMobHome(conf), regionInfo.getTable());<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      }<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      HRegionFileSystem regionFs = HRegionFileSystem.openRegionFromFileSystem(conf, fs,<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        baseDir, regionInfo, true);<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      monitor.rethrowException();<a name="line.258"></a>
-<span class="sourceLineNo">259</span><a name="line.259"></a>
-<span class="sourceLineNo">260</span>      // 1. dump region meta info into the snapshot directory<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      LOG.debug("Storing region-info for snapshot.");<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      Object regionData = visitor.regionOpen(regionInfo);<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      monitor.rethrowException();<a name="line.263"></a>
-<span class="sourceLineNo">264</span><a name="line.264"></a>
-<span class="sourceLineNo">265</span>      // 2. iterate through all the stores in the region<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      LOG.debug("Creating references for hfiles");<a name="line.266"></a>
+<span class="sourceLineNo">217</span>    // Visit the region and add it to the manifest<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    addRegion(region, visitor);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>  }<a name="line.219"></a>
+<span class="sourceLineNo">220</span><a name="line.220"></a>
+<span class="sourceLineNo">221</span>  @VisibleForTesting<a name="line.221"></a>
+<span class="sourceLineNo">222</span>  protected void addRegion(final HRegion region, RegionVisitor visitor) throws IOException {<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    // 1. dump region meta info into the snapshot directory<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    LOG.debug("Storing '" + region + "' region-info for snapshot.");<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    Object regionData = visitor.regionOpen(region.getRegionInfo());<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    monitor.rethrowException();<a name="line.226"></a>
+<span class="sourceLineNo">227</span><a name="line.227"></a>
+<span class="sourceLineNo">228</span>    // 2. iterate through all the stores in the region<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    LOG.debug("Creating references for hfiles");<a name="line.229"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span>    for (Store store : region.getStores()) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      // 2.1. build the snapshot reference for the store<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      Object familyData = visitor.familyOpen(regionData,<a name="line.233"></a>
+<span class="sourceLineNo">234</span>          store.getColumnFamilyDescriptor().getName());<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      monitor.rethrowException();<a name="line.235"></a>
+<span class="sourceLineNo">236</span><a name="line.236"></a>
+<span class="sourceLineNo">237</span>      List&lt;StoreFile&gt; storeFiles = new ArrayList&lt;&gt;(store.getStorefiles());<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      if (LOG.isDebugEnabled()) {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>        LOG.debug("Adding snapshot references for " + storeFiles  + " hfiles");<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      }<a name="line.240"></a>
+<span class="sourceLineNo">241</span><a name="line.241"></a>
+<span class="sourceLineNo">242</span>      // 2.2. iterate through all the store's files and create "references".<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      for (int i = 0, sz = storeFiles.size(); i &lt; sz; i++) {<a name="line.243"></a>
+<span class="sourceLineNo">244</span>        StoreFile storeFile = storeFiles.get(i);<a name="line.244"></a>
+<span class="sourceLineNo">245</span>        monitor.rethrowException();<a name="line.245"></a>
+<span class="sourceLineNo">246</span><a name="line.246"></a>
+<span class="sourceLineNo">247</span>        // create "reference" to this store file.<a name="line.247"></a>
+<span class="sourceLineNo">248</span>        LOG.debug("Adding reference for file (" + (i+1) + "/" + sz + "): " + storeFile.getPath());<a name="line.248"></a>
+<span class="sourceLineNo">249</span>        visitor.storeFile(regionData, familyData, storeFile.getFileInfo());<a name="line.249"></a>
+<span class="sourceLineNo">250</span>      }<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      visitor.familyClose(regionData, familyData);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    }<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    visitor.regionClose(regionData);<a name="line.253"></a>
+<span class="sourceLineNo">254</span>  }<a name="line.254"></a>
+<span class="sourceLineNo">255</span><a name="line.255"></a>
+<span class="sourceLineNo">256</span>  /**<a name="line.256"></a>
+<span class="sourceLineNo">257</span>   * Creates a 'manifest' for the specified region, by reading directly from the disk.<a name="line.257"></a>
+<span class="sourceLineNo">258</span>   * This is used by the "offline snapshot" when the table is disabled.<a name="line.258"></a>
+<span class="sourceLineNo">259</span>   */<a name="line.259"></a>
+<span class="sourceLineNo">260</span>  public void addRegion(final Path tableDir, final HRegionInfo regionInfo) throws IOException {<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    // Get the ManifestBuilder/RegionVisitor<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    RegionVisitor visitor = createRegionVisitor(desc);<a name="line.262"></a>
+<span class="sourceLineNo">263</span><a name="line.263"></a>
+<span class="sourceLineNo">264</span>    // Visit the region and add it to the manifest<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    addRegion(tableDir, regionInfo, visitor);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>  }<a name="line.266"></a>
 <span class="sourceLineNo">267</span><a name="line.267"></a>
-<span class="sourceLineNo">268</span>      // This ensures that we have an atomic view of the directory as long as we have &lt; ls limit<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      // (batch size of the files in a directory) on the namenode. Otherwise, we get back the files<a name="line.269"></a>
-<span class="sourceLineNo">270</span>      // in batches and may miss files being added/deleted. This could be more robust (iteratively<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      // checking to see if we have all the files until we are sure), but the limit is currently<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      // 1000 files/batch, far more than the number of store files under a single column family.<a name="line.272"></a>
-<span class="sourceLineNo">273</span>      Collection&lt;String&gt; familyNames = regionFs.getFamilies();<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      if (familyNames != null) {<a name="line.274"></a>
-<span class="sourceLineNo">275</span>        for (String familyName: familyNames) {<a name="line.275"></a>
-<span class="sourceLineNo">276</span>          Object familyData = visitor.familyOpen(regionData, Bytes.toBytes(familyName));<a name="line.276"></a>
-<span class="sourceLineNo">277</span>          monitor.rethrowException();<a name="line.277"></a>
-<span class="sourceLineNo">278</span><a name="line.278"></a>
-<span class="sourceLineNo">279</span>          Collection&lt;StoreFileInfo&gt; storeFiles = regionFs.getStoreFiles(familyName);<a name="line.279"></a>
-<span class="sourceLineNo">280</span>          if (storeFiles == null) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>            if (LOG.isDebugEnabled()) {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>              LOG.debug("No files under family: " + familyName);<a name="line.282"></a>
-<span class="sourceLineNo">283</span>            }<a name="line.283"></a>
-<span class="sourceLineNo">284</span>            continue;<a name="line.284"></a>
-<span class="sourceLineNo">285</span>          }<a name="line.285"></a>
+<span class="sourceLineNo">268</span>  @VisibleForTesting<a name="line.268"></a>
+<span class="sourceLineNo">269</span>  protected void addRegion(final Path tableDir, final HRegionInfo regionInfo, RegionVisitor visitor)<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      throws IOException {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    boolean isMobRegion = MobUtils.isMobRegionInfo(regionInfo);<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    try {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      Path baseDir = tableDir;<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      // Open the RegionFS<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      if (isMobRegion) {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>        baseDir = FSUtils.getTableDir(MobUtils.getMobHome(conf), regionInfo.getTable());<a name="line.276"></a>
+<span class="sourceLineNo">277</span>      }<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      HRegionFileSystem regionFs = HRegionFileSystem.openRegionFromFileSystem(conf, fs,<a name="line.278"></a>
+<span class="sourceLineNo">279</span>        baseDir, regionInfo, true);<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      monitor.rethrowException();<a name="line.280"></a>
+<span class="sourceLineNo">281</span><a name="line.281"></a>
+<span class="sourceLineNo">282</span>      // 1. dump region meta info into the snapshot directory<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      LOG.debug("Storing region-info for snapshot.");<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      Object regionData = visitor.regionOpen(regionInfo);<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      monitor.rethrowException();<a name="line.285"></a>
 <span class="sourceLineNo">286</span><a name="line.286"></a>
-<span class="sourceLineNo">287</span>          // 2.1. build the snapshot reference for the store<a name="line.287"></a>
-<span class="sourceLineNo">288</span>          // iterate through all the store's files and create "references".<a name="line.288"></a>
-<span class="sourceLineNo">289</span>          addReferenceFiles(visitor, regionData, familyData, storeFiles, false);<a name="line.289"></a>
-<span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span>          visitor.familyClose(regionData, familyData);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>        }<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      }<a name="line.293"></a>
-<span class="sourceLineNo">294</span>      visitor.regionClose(regionData);<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    } catch (IOException e) {<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      // the mob directory might not be created yet, so do nothing when it is a mob region<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      if (!isMobRegion) {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        throw e;<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      }<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    }<a name="line.300"></a>
-<span class="sourceLineNo">301</span>  }<a name="line.301"></a>
-<span class="sourceLineNo">302</span><a name="line.302"></a>
-<span class="sourceLineNo">303</span>  private List&lt;StoreFileInfo&gt; getStoreFiles(Path storeDir) throws IOException {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    FileStatus[] stats = FSUtils.listStatus(fs, storeDir);<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    if (stats == null) return null;<a name="line.305"></a>
-<span class="sourceLineNo">306</span><a name="line.306"></a>
-<span class="sourceLineNo">307</span>    ArrayList&lt;StoreFileInfo&gt; storeFiles = new ArrayList&lt;&gt;(stats.length);<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    for (int i = 0; i &lt; stats.length; ++i) {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      storeFiles.add(new StoreFileInfo(conf, fs, stats[i]));<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    }<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    return storeFiles;<a name="line.311"></a>
-<span class="sourceLineNo">312</span>  }<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>  private void addReferenceFiles(RegionVisitor visitor, Object regionData, Object familyData,<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      Collection&lt;StoreFileInfo&gt; storeFiles, boolean isMob) throws IOException {<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    final String fileType = isMob ? "mob file" : "hfile";<a name="line.316"></a>
-<span class="sourceLineNo">317</span><a name="line.317"></a>
-<span class="sourceLineNo">318</span>    if (LOG.isDebugEnabled()) {<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      LOG.debug(String.format("Adding snapshot references for %s %ss", storeFiles, fileType));<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    }<a name="line.320"></a>
-<span class="sourceLineNo">321</span><a name="line.321"></a>
-<span class="sourceLineNo">322</span>    int i = 0;<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    int sz = storeFiles.size();<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    for (StoreFileInfo storeFile: storeFiles) {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>      monitor.rethrowException();<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span>      LOG.debug(String.format("Adding reference for %s (%d/%d): %s",<a name="line.327"></a>
-<span class="sourceLineNo">328</span>          fileType, ++i, sz, storeFile.getPath()));<a name="line.328"></a>
-<span class="sourceLineNo">329</span><a name="line.329"></a>
-<span class="sourceLineNo">330</span>      // create "reference" to this store file.<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      visitor.storeFile(regionData, familyData, storeFile);<a name="line.331"></a>
+<span class="sourceLineNo">287</span>      // 2. iterate through all the stores in the region<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      LOG.debug("Creating references for hfiles");<a name="line.288"></a>
+<span class="sourceLineNo">289</span><a name="line.289"></a>
+<span class="sourceLineNo">290</span>      // This ensures that we have an atomic view of the directory as long as we have &lt; ls limit<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      // (batch size of the files in a directory) on the namenode. Otherwise, we get back the files<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      // in batches and may miss files being added/deleted. This could be more robust (iteratively<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      // checking to see if we have all the files until we are sure), but the limit is currently<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      // 1000 files/batch, far more than the number of store files under a single column family.<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      Collection&lt;String&gt; familyNames = regionFs.getFamilies();<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      if (familyNames != null) {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>        for (String familyName: familyNames) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>          Object familyData = visitor.familyOpen(regionData, Bytes.toBytes(familyName));<a name="line.298"></a>
+<span class="sourceLineNo">299</span>          monitor.rethrowException();<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span>          Collection&lt;StoreFileInfo&gt; storeFiles = regionFs.getStoreFiles(familyName);<a name="line.301"></a>
+<span class="sourceLineNo">302</span>          if (storeFiles == null) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>            if (LOG.isDebugEnabled()) {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>              LOG.debug("No files under family: " + familyName);<a name="line.304"></a>
+<span class="sourceLineNo">305</span>            }<a name="line.305"></a>
+<span class="sourceLineNo">306</span>            continue;<a name="line.306"></a>
+<span class="sourceLineNo">307</span>          }<a name="line.307"></a>
+<span class="sourceLineNo">308</span><a name="line.308"></a>
+<span class="sourceLineNo">309</span>          // 2.1. build the snapshot reference for the store<a name="line.309"></a>
+<span class="sourceLineNo">310</span>          // iterate through all the store's files and create "references".<a name="line.310"></a>
+<span class="sourceLineNo">311</span>          addReferenceFiles(visitor, regionData, familyData, storeFiles, false);<a name="line.311"></a>
+<span class="sourceLineNo">312</span><a name="line.312"></a>
+<span class="sourceLineNo">313</span>          visitor.familyClose(regionData, familyData);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>        }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      }<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      visitor.regionClose(regionData);<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    } catch (IOException e) {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      // the mob directory might not be created yet, so do nothing when it is a mob region<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      if (!isMobRegion) {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        throw e;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      }<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    }<a name="line.322"></a>
+<span class="sourceLineNo">323</span>  }<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>  private List&lt;StoreFileInfo&gt; getStoreFiles(Path storeDir) throws IOException {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    FileStatus[] stats = FSUtils.listStatus(fs, storeDir);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    if (stats == null) return null;<a name="line.327"></a>
+<span class="sourceLineNo">328</span><a name="line.328"></a>
+<span class="sourceLineNo">329</span>    ArrayList&lt;StoreFileInfo&gt; storeFiles = new ArrayList&lt;&gt;(stats.length);<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    for (int i = 0; i &lt; stats.length; ++i) {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      storeFiles.add(new StoreFileInfo(conf, fs, stats[i]));<a name="line.331"></a>
 <span class="sourceLineNo">332</span>    }<a name="line.332"></a>
-<span class="sourceLineNo">333</span>  }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span>  /**<a name="line.335"></a>
-<span class="sourceLineNo">336</span>   * Load the information in the SnapshotManifest. Called by SnapshotManifest.open()<a name="line.336"></a>
-<span class="sourceLineNo">337</span>   *<a name="line.337"></a>
-<span class="sourceLineNo">338</span>   * If the format is v2 and there is no data-manifest, means that we are loading an<a name="line.338"></a>
-<span class="sourceLineNo">339</span>   * in-progress snapshot. Since we support rolling-upgrades, we loook for v1 and v2<a name="line.339"></a>
-<span class="sourceLineNo">340</span>   * regions format.<a name="line.340"></a>
-<span class="sourceLineNo">341</span>   */<a name="line.341"></a>
-<span class="sourceLineNo">342</span>  private void load() throws IOException {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>    switch (getSnapshotFormat(desc)) {<a name="line.343"></a>
-<span class="sourceLineNo">344</span>      case SnapshotManifestV1.DESCRIPTOR_VERSION: {<a name="line.344"></a>
-<span class="sourceLineNo">345</span>        this.htd = FSTableDescriptors.getTableDescriptorFromFs(fs, workingDir);<a name="line.345"></a>
-<span class="sourceLineNo">346</span>        ThreadPoolExecutor tpool = createExecutor("SnapshotManifestLoader");<a name="line.346"></a>
-<span class="sourceLineNo">347</span>        try {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>          this.regionManifests =<a name="line.348"></a>
-<span class="sourceLineNo">349</span>            SnapshotManifestV1.loadRegionManifests(conf, tpool, fs, workingDir, desc);<a name="line.349"></a>
-<span class="sourceLineNo">350</span>        } finally {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>          tpool.shutdown();<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        }<a name="line.352"></a>
-<span class="sourceLineNo">353</span>        break;<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      }<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      case SnapshotManifestV2.DESCRIPTOR_VERSION: {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>        SnapshotDataManifest dataManifest = readDataManifest();<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        if (dataManifest != null) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>          htd = ProtobufUtil.convertToHTableDesc(dataManifest.getTableSchema());<a name="line.358"></a>
-<span class="sourceLineNo">359</span>          regionManifests = dataManifest.getRegionManifestsList();<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        } else {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>          // Compatibility, load the v1 regions<a name="line.361"></a>
-<span class="sourceLineNo">362</span>          // This happens only when the snapshot is in-progress and the cache wants to refresh.<a name="line.362"></a>
-<span class="sourceLineNo">363</span>          List&lt;SnapshotRegionManifest&gt; v1Regions, v2Regions;<a name="line.363"></a>
-<span class="sourceLineNo">364</span>          ThreadPoolExecutor tpool = createExecutor("SnapshotManifestLoader");<a name="line.364"></a>
-<span class="sourceLineNo">365</span>          try {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>            v1Regions = SnapshotManifestV1.loadRegionManifests(conf, tpool, fs, workingDir, desc);<a name="line.366"></a>
-<span class="sourceLineNo">367</span>            v2Regions = SnapshotManifestV2.loadRegionManifests(conf, tpool, fs, workingDir, desc,<a name="line.367"></a>
-<span class="sourceLineNo">368</span>                manifestSizeLimit);<a name="line.368"></a>
-<span class="sourceLineNo">369</span>          } catch (InvalidProtocolBufferException e) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>            throw new CorruptedSnapshotException("unable to parse region manifest " +<a name="line.370"></a>
-<span class="sourceLineNo">371</span>                e.getMessage(), e);<a name="line.371"></a>
-<span class="sourceLineNo">372</span>          } finally {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>            tpool.shutdown();<a name="line.373"></a>
-<span class="sourceLineNo">374</span>          }<a name="line.374"></a>
-<span class="sourceLineNo">375</span>          if (v1Regions != null &amp;&amp; v2Regions != null) {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>            regionManifests = new ArrayList&lt;&gt;(v1Regions.size() + v2Regions.size());<a name="line.376"></a>
-<span class="sourceLineNo">377</span>            regionManifests.addAll(v1Regions);<a name="line.377"></a>
-<span class="sourceLineNo">378</span>            regionManifests.addAll(v2Regions);<a name="line.378"></a>
-<span class="sourceLineNo">379</span>          } else if (v1Regions != null) {<a name="line.379"></a>
-<span class="sourceLineNo">380</span>            regionManifests = v1Regions;<a name="line.380"></a>
-<span class="sourceLineNo">381</span>          } else /* if (v2Regions != null) */ {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>            regionManifests = v2Regions;<a name="line.382"></a>
-<span class="sourceLineNo">383</span>          }<a name="line.383"></a>
-<span class="sourceLineNo">384</span>        }<a name="line.384"></a>
-<span class="sourceLineNo">385</span>        break;<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      }<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      default:<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      throw new CorruptedSnapshotException("Invalid Snapshot version: " + desc.getVersion(),<a name="line.388"></a>
-<span class="sourceLineNo">389</span>        ProtobufUtil.createSnapshotDesc(desc));<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    }<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  }<a name="line.391"></a>
-<span class="sourceLineNo">392</span><a name="line.392"></a>
-<span class="sourceLineNo">393</span>  /**<a name="line.393"></a>
-<span class="sourceLineNo">394</span>   * Get the current snapshot working dir<a name="line.394"></a>
-<span class="sourceLineNo">395</span>   */<a name="line.395"></a>
-<span class="sourceLineNo">396</span>  public Path getSnapshotDir() {<a name="line.396"></a>
-<span class="sourceLineNo">397</span>    return this.workingDir;<a name="line.397"></a>
-<span class="sourceLineNo">398</span>  }<a name="line.398"></a>
-<span class="sourceLineNo">399</span><a name="line.399"></a>
-<span class="sourceLineNo">400</span>  /**<a name="line.400"></a>
-<span class="sourceLineNo">401</span>   * Get the SnapshotDescription<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   */<a name="line.402"></a>
-<span class="sourceLineNo">403</span>  public SnapshotDescription getSnapshotDescription() {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    return this.desc;<a name="line.404"></a>
-<span class="sourceLineNo">405</span>  }<a name="line.405"></a>
-<span class="sourceLineNo">406</span><a name="line.406"></a>
-<span class="sourceLineNo">407</span>  /**<a name="line.407"></a>
-<span class="sourceLineNo">408</span>   * Get the table descriptor from the Snapshot<a name="line.408"></a>
-<span class="sourceLineNo">409</span>   */<a name="line.409"></a>
-<span class="sourceLineNo">410</span>  public HTableDescriptor getTableDescriptor() {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    return this.htd;<a name="line.411"></a>
-<span class="sourceLineNo">412</span>  }<a name="line.412"></a>
-<span class="sourceLineNo">413</span><a name="line.413"></a>
-<span class="sourceLineNo">414</span>  /**<a name="line.414"></a>
-<span class="sourceLineNo">415</span>   * Get all the Region Manifest from the snapshot<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   */<a name="line.416"></a>
-<span class="sourceLineNo">417</span>  public List&lt;SnapshotRegionManifest&gt; getRegionManifests() {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    return this.regionManifests;<a name="line.418"></a>
-<span class="sourceLineNo">419</span>  }<a name="line.419"></a>
-<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span>  /**<a name="line.421"></a>
-<span class="sourceLineNo">422</span>   * Get all the Region Manifest from the snapshot.<a name="line.422"></a>
-<span class="sourceLineNo">423</span>   * This is an helper to get a map with the region encoded name<a name="line.423"></a>
+<span class="sourceLineNo">333</span>    return storeFiles;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>  }<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span>  private void addReferenceFiles(RegionVisitor visitor, Object regionData, Object familyData,<a name="line.336"></a>
+<span class="sourceLineNo">337</span>      Collection&lt;StoreFileInfo&gt; storeFiles, boolean isMob) throws IOException {<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    final String fileType = isMob ? "mob file" : "hfile";<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span>    if (LOG.isDebugEnabled()) {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      LOG.debug(String.format("Adding snapshot references for %s %ss", storeFiles, fileType));<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    }<a name="line.342"></a>
+<span class="sourceLineNo">343</span><a name="line.343"></a>
+<span class="sourceLineNo">344</span>    int i = 0;<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    int sz = storeFiles.size();<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    for (StoreFileInfo storeFile: storeFiles) {<a name="line.346"></a>
+<span class="sourceLineNo">347</span>      monitor.rethrowException();<a name="line.347"></a>
+<span class="sourceLineNo">348</span><a name="line.348"></a>
+<span class="sourceLineNo">349</span>      LOG.debug(String.format("Adding reference for %s (%d/%d): %s",<a name="line.349"></a>
+<span class="sourceLineNo">350</span>          fileType, ++i, sz, storeFile.getPath()));<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span>      // create "reference" to this store file.<a name="line.352"></a>
+<span class="sourceLineNo">353</span>      visitor.storeFile(regionData, familyData, storeFile);<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    }<a name="line.354"></a>
+<span class="sourceLineNo">355</span>  }<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>  /**<a name="line.357"></a>
+<span class="sourceLineNo">358</span>   * Load the information in the SnapshotManifest. Called by SnapshotManifest.open()<a name="line.358"></a>
+<span class="sourceLineNo">359</span>   *<a name="line.359"></a>
+<span class="sourceLineNo">360</span>   * If the format is v2 and there is no data-manifest, means that we are loading an<a name="line.360"></a>
+<span class="sourceLineNo">361</span>   * in-progress snapshot. Since we support rolling-upgrades, we loook for v1 and v2<a name="line.361"></a>
+<span class="sourceLineNo">362</span>   * regions format.<a name="line.362"></a>
+<span class="sourceLineNo">363</span>   */<a name="line.363"></a>
+<span class="sourceLineNo">364</span>  private void load() throws IOException {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    switch (getSnapshotFormat(desc)) {<a name="line.365"></a>
+<span class="sourceLineNo">366</span>      case SnapshotManifestV1.DESCRIPTOR_VERSION: {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>        this.htd = FSTableDescriptors.getTableDescriptorFromFs(fs, workingDir);<a name="line.367"></a>
+<span class="sourceLineNo">368</span>        ThreadPoolExecutor tpool = createExecutor("SnapshotManifestLoader");<a name="line.368"></a>
+<span class="sourceLineNo">369</span>        try {<a name="line.369"></a>
+<span class="sourceLineNo">370</span>          this.regionManifests =<a name="line.370"></a>
+<span class="sourceLineNo">371</span>            SnapshotManifestV1.loadRegionManifests(conf, tpool, fs, workingDir, desc);<a name="line.371"></a>
+<span class="sourceLineNo">372</span>        } finally {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>          tpool.shutdown();<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        }<a name="line.374"></a>
+<span class="sourceLineNo">375</span>        break;<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      }<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      case SnapshotManifestV2.DESCRIPTOR_VERSION: {<a name="line.377"></a>
+<span class="sourceLineNo">378</span>        SnapshotDataManifest dataManifest = readDataManifest();<a name="line.378"></a>
+<span class="sourceLineNo">379</span>        if (dataManifest != null) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>          htd = ProtobufUtil.convertToHTableDesc(dataManifest.getTableSchema());<a name="line.380"></a>
+<span class="sourceLineNo">381</span>          regionManifests = dataManifest.getRegionManifestsList();<a name="line.381"></a>
+<span class="sourceLineNo">382</span>        } else {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>          // Compatibility, load the v1 regions<a name="line.383"></a>
+<span class="sourceLineNo">384</span>          // This happens only when the snapshot is in-progress and the cache wants to refresh.<a name="line.384"></a>
+<span class="sourceLineNo">385</span>          List&lt;SnapshotRegionManifest&gt; v1Regions, v2Regions;<a name="line.385"></a>
+<span class="sourceLineNo">386</span>          ThreadPoolExecutor tpool = createExecutor("SnapshotManifestLoader");<a name="line.386"></a>
+<span class="sourceLineNo">387</span>          try {<a name="line.387"></a>
+<span class="sourceLineNo">388</span>            v1Regions = SnapshotManifestV1.loadRegionManifests(conf, tpool, fs, workingDir, desc);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>            v2Regions = SnapshotManifestV2.loadRegionManifests(conf, tpool, fs, workingDir, desc,<a name="line.389"></a>
+<span class="sourceLineNo">390</span>                manifestSizeLimit);<a name="line.390"></a>
+<span class="sourceLineNo">391</span>          } catch (InvalidProtocolBufferException e) {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>            throw new CorruptedSnapshotException("unable to parse region manifest " +<a name="line.392"></a>
+<span class="sourceLineNo">393</span>                e.getMessage(), e);<a name="line.393"></a>
+<span class="sourceLineNo">394</span>          } finally {<a name="line.394"></a>
+<span class="sourceLineNo">395</span>            tpool.shutdown();<a name="line.395"></a>
+<span class="sourceLineNo">396</span>          }<a name="line.396"></a>
+<span class="sourceLineNo">397</span>          if (v1Regions != null &amp;&amp; v2Regions != null) {<a name="line.397"></a>
+<span class="sourceLineNo">398</span>            regionManifests = new ArrayList&lt;&gt;(v1Regions.size() + v2Regions.size());<a name="line.398"></a>
+<span class="sourceLineNo">399</span>            regionManifests.addAll(v1Regions);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>            regionManifests.addAll(v2Regions);<a name="line.400"></a>
+<span class="sourceLineNo">401</span>          } else if (v1Regions != null) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>            regionManifests = v1Regions;<a name="line.402"></a>
+<span class="sourceLineNo">403</span>          } else /* if (v2Regions != null) */ {<a name="line.403"></a>
+<span class="sourceLineNo">404</span>            regionManifests = v2Regions;<a name="line.404"></a>
+<span class="sourceLineNo">405</span>          }<a name="line.405"></a>
+<span class="sourceLineNo">406</span>        }<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        break;<a name="line.407"></a>
+<span class="sourceLineNo">408</span>      }<a name="line.408"></a>
+<span class="sourceLineNo">409</span>      default:<a name="line.409"></a>
+<span class="sourceLineNo">410</span>      throw new CorruptedSnapshotException("Invalid Snapshot version: " + desc.getVersion(),<a name="line.410"></a>
+<span class="sourceLineNo">411</span>        ProtobufUtil.createSnapshotDesc(desc));<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    }<a name="line.412"></a>
+<span class="sourceLineNo">413</span>  }<a name="line.413"></a>
+<span class="sourceLineNo">414</span><a name="line.414"></a>
+<span class="sourceLineNo">415</span>  /**<a name="line.415"></a>
+<span class="sourceLineNo">416</span>   * Get the current snapshot working dir<a name="line.416"></a>
+<span class="sourceLineNo">417</span>   */<a name="line.417"></a>
+<span class="sourceLineNo">418</span>  public Path getSnapshotDir() {<a name="line.418"></a>
+<span class="sourceLineNo">419</span>    return this.workingDir;<a name="line.419"></a>
+<span class="sourceLineNo">420</span>  }<a name="line.420"></a>
+<span class="sourceLineNo">421</span><a name="line.421"></a>
+<span class="sourceLineNo">422</span>  /**<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   * Get the SnapshotDescription<a name="line.423"></a>
 <span class="sourceLineNo">424</span>   */<a name="line.424"></a>
-<span class="sourceLineNo">425</span>  public Map&lt;String, SnapshotRegionManifest&gt; getRegionManifestsMap() {<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    if (regionManifests == null || regionManifests.isEmpty()) return null;<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span>    HashMap&lt;String, SnapshotRegionManifest&gt; regionsMap = new HashMap&lt;&gt;(regionManifests.size());<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    for (SnapshotRegionManifest manifest: regionManifests) {<a name="line.429"></a>
-<span class="sourceLineNo">430</span>      String regionName = getRegionNameFromManifest(manifest);<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      regionsMap.put(regionName, manifest);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    }<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    return regionsMap;<a name="line.433"></a>
+<span class="sourceLineNo">425</span>  public SnapshotDescription getSnapshotDescription() {<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    return this.desc;<a name="line.426"></a>
+<span class="sourceLineNo">427</span>  }<a name="line.427"></a>
+<span class="sourceLineNo">428</span><a name="line.428"></a>
+<span class="sourceLineNo">429</span>  /**<a name="line.429"></a>
+<span class="sourceLineNo">430</span>   * Get the table descriptor from the Snapshot<a name="line.430"></a>
+<span class="sourceLineNo">431</span>   */<a name="line.431"></a>
+<span class="sourceLineNo">432</span>  public HTableDescriptor getTableDescriptor() {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    return this.htd;<a name="line.433"></a>
 <span class="sourceLineNo">434</span>  }<a name="line.434"></a>
 <span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span>  public void consolidate() throws IOException {<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    if (getSnapshotFormat(desc) == SnapshotManifestV1.DESCRIPTOR_VERSION) {<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      Path rootDir = FSUtils.getRootDir(conf);<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      LOG.info("Using old Snapshot Format");<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      // write a copy of descriptor to the snapshot directory<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      new FSTableDescriptors(conf, fs, rootDir)<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        .createTableDescriptorForTableDirectory(workingDir, htd, false);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    } else {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      LOG.debug("Convert to Single Snapshot Manifest");<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      convertToV2SingleManifest();<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    }<a name="line.446"></a>
-<span class="sourceLineNo">447</span>  }<a name="line.447"></a>
-<span class="sourceLineNo">448</span><a name="line.448"></a>
-<span class="sourceLineNo">449</span>  /*<a name="line.449"></a>
-<span class="sourceLineNo">450</span>   * In case of rolling-upgrade, we try to read all the formats and build<a name="line.450"></a>
-<span class="sourceLineNo">451</span>   * the snapshot with the latest format.<a name="line.451"></a>
-<span class="sourceLineNo">452</span>   */<a name="line.452"></a>
-<span class="sourceLineNo">453</span>  private void convertToV2SingleManifest() throws IOException {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    // Try to load v1 and v2 regions<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    List&lt;SnapshotRegionManifest&gt; v1Regions, v2Regions;<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    ThreadPoolExecutor tpool = createExecutor("SnapshotManifestLoader");<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    try {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      v1Regions = SnapshotManifestV1.loadRegionManifests(conf, tpool, fs, workingDir, desc);<a name="line.458"></a>
-<span class="sourceLineNo">459</span>      v2Regions = SnapshotManifestV2.loadRegionManifests(conf, tpool, fs, workingDir, desc,<a name="line.459"></a>
-<span class="sourceLineNo">460</span>          manifestSizeLimit);<a name="line.460"></a>
-<span class="sourceLineNo">461</span>    } finally {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      tpool.shutdown();<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    }<a name="line.463"></a>
-<span class="sourceLineNo">464</span><a name="line.464"></a>
-<span class="sourceLineNo">465</span>    SnapshotDataManifest.Builder dataManifestBuilder = SnapshotDataManifest.newBuilder();<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    dataManifestBuilder.setTableSchema(ProtobufUtil.convertToTableSchema(htd));<a name="line.466"></a>
-<span class="sourceLineNo">467</span><a name="line.467"></a>
-<span class="sourceLineNo">468</span>    if (v1Regions != null &amp;&amp; v1Regions.size() &gt; 0) {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      dataManifestBuilder.addAllRegionManifests(v1Regions);<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    }<a name="line.470"></a>
-<span class="sourceLineNo">471</span>    if (v2Regions != null &amp;&amp; v2Regions.size() &gt; 0) {<a name="line.471"></a>
-<span class="sourceLineNo">472</span>      dataManifestBuilder.addAllRegionManifests(v2Regions);<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    }<a name="line.473"></a>
-<span class="sourceLineNo">474</span><a name="line.474"></a>
-<span class="sourceLineNo">475</span>    // Write the v2 Data Manifest.<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    // Once the data-manifest is written, the snapshot can be considered complete.<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    // Currently snapshots are written in a "temporary" directory and later<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    // moved to the "complated" snapshot directory.<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    SnapshotDataManifest dataManifest = dataManifestBuilder.build();<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    writeDataManifest(dataManifest);<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    this.regionManifests = dataManifest.getRegionManifestsList();<a name="line.481"></a>
-<span class="sourceLineNo">482</span><a name="line.482"></a>
-<span class="sourceLineNo">483</span>    // Remove the region manifests. Everything is now in the data-manifest.<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    // The delete operation is "relaxed", unless we get an exception we keep going.<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    // The extra files in the snapshot directory will not give any problem,<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    // since they have the same content as the data manifest, and even by re-reading<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    // them we will get the same information.<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    if (v1Regions != null &amp;&amp; v1Regions.size() &gt; 0) {<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      for (SnapshotRegionManifest regionManifest: v1Regions) {<a name="line.489"></a>
-<span class="sourceLineNo">490</span>        SnapshotManifestV1.deleteRegionManifest(fs, workingDir, regionManifest);<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      }<a name="line.491"></a>
+<span class="sourceLineNo">436</span>  /**<a name="line.436"></a>
+<span class="sourceLineNo">437</span>   * Get all the Region Manifest from the snapshot<a name="line.437"></a>
+<span class="sourceLineNo">438</span>   */<a name="line.438"></a>
+<span class="sourceLineNo">439</span>  public List&lt;SnapshotRegionManifest&gt; getRegionManifests() {<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    return this.regionManifests;<a name="line.440"></a>
+<span class="sourceLineNo">441</span>  }<a name="line.441"></a>
+<span class="sourceLineNo">442</span><a name="line.442"></a>
+<span class="sourceLineNo">443</span>  /**<a name="line.443"></a>
+<span class="sourceLineNo">444</span>   * Get all the Region Manifest from the snapshot.<a name="line.444"></a>
+<span class="sourceLineNo">445</span>   * This is an helper to get a map with the region encoded name<a name="line.445"></a>
+<span class="sourceLineNo">446</span>   */<a name="line.446"></a>
+<span class="sourceLineNo">447</span>  public Map&lt;String, SnapshotRegionManifest&gt; getRegionManifestsMap() {<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    if (regionManifests == null || regionManifests.isEmpty()) return null;<a name="line.448"></a>
+<span class="sourceLineNo">449</span><a name="line.449"></a>
+<span class="sourceLineNo">450</span>    HashMap&lt;String, SnapshotRegionManifest&gt; regionsMap = new HashMap&lt;&gt;(regionManifests.size());<a name="line.450"></a>
+<span class="sourceLineNo">451</span>    for (SnapshotRegionManifest manifest: regionManifests) {<a name="line.451"></a>
+<span class="sourceLineNo">452</span>      String regionName = getRegionNameFromManifest(manifest);<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      regionsMap.put(regionName, manifest);<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    }<a name="line.454"></a>
+<span class="sourceLineNo">455</span>    return regionsMap;<a name="line.455"></a>
+<span class="sourceLineNo">456</span>  }<a name="line.456"></a>
+<span class="sourceLineNo">457</span><a name="line.457"></a>
+<span class="sourceLineNo">458</span>  public void consolidate() throws IOException {<a name="line.458"></a>
+<span class="sourceLineNo">459</span>    if (getSnapshotFormat(desc) == SnapshotManifestV1.DESCRIPTOR_VERSION) {<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      Path rootDir = FSUtils.getRootDir(conf);<a name="line.460"></a>
+<span class="sourceLineNo">461</span>      LOG.info("Using old Snapshot Format");<a name="line.461"></a>
+<span class="sourceLineNo">462</span>      // write a copy of descriptor to the snapshot directory<a name="line.462"></a>
+<span class="sourceLineNo">463</span>      new FSTableDescriptors(conf, fs, rootDir)<a name="line.463"></a>
+<span class="sourceLineNo">464</span>        .createTableDescriptorForTableDirectory(workingDir, htd, false);<a name="line.464"></a>
+<span class="sourceLineNo">465</span>    } else {<a name="line.465"></a>
+<span class="sourceLineNo">466</span>      LOG.debug("Convert to Single Snapshot Manifest");<a name="line.466"></a>
+<span class="sourceLineNo">467</span>      convertToV2SingleManifest();<a name="line.467"></a>
+<span class="sourceLineNo">468</span>    }<a name="line.468"></a>
+<span class="sourceLineNo">469</span>  }<a name="line.469"></a>
+<span class="sourceLineNo">470</span><a name="line.470"></a>
+<span class="sourceLineNo">471</span>  /*<a name="line.471"></a>
+<span class="sourceLineNo">472</span>   * In case of rolling-upgrade, we try to read all the formats and build<a name="line.472"></a>
+<span class="sourceLineNo">473</span>   * the snapshot with the latest format.<a name="line.473"></a>
+<span class="sourceLineNo">474</span>   */<a name="line.474"></a>
+<span class="sourceLineNo">475</span>  private void convertToV2SingleManifest() throws IOException {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    // Try to load v1 and v2 regions<a name="line.476"></a>
+<span class="sourceLineNo">477</span>    List&lt;SnapshotRegionManifest&gt; v1Regions, v2Regions;<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    ThreadPoolExecutor tpool = createExecutor("SnapshotManifestLoader");<a name="line.478"></a>
+<span class="sourceLineNo">479</span>    try {<a name="line.479"></a>
+<span class="sourceLineNo">480</span>      v1Regions = SnapshotManifestV1.loadRegionManifests(conf, tpool, fs, workingDir, desc);<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      v2Regions = SnapshotManifestV2.loadRegionManifests(conf, tpool, fs, workingDir, desc,<a name="line.481"></a>
+<span class="sourceLineNo">482</span>          manifestSizeLimit);<a name="line.482"></a>
+<span class="sourceLineNo">483</span>    } finally {<a name="line.483"></a>
+<span class="sourceLineNo">484</span>      tpool.shutdown();<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    }<a name="line.485"></a>
+<span class="sourceLineNo">486</span><a name="line.486"></a>
+<span class="sourceLineNo">487</span>    SnapshotDataManifest.Builder dataManifestBuilder = SnapshotDataManifest.newBuilder();<a name="line.487"></a>
+<span class="sourceLineNo">488</span>    dataManifestBuilder.setTableSchema(ProtobufUtil.convertToTableSchema(htd));<a name="line.488"></a>
+<span class

<TRUNCATED>

[13/33] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.html
index f6a717e..a701ece 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.html
@@ -7930,329 +7930,342 @@
 <span class="sourceLineNo">7922</span>      case DELETE:<a name="line.7922"></a>
 <span class="sourceLineNo">7923</span>      case BATCH_MUTATE:<a name="line.7923"></a>
 <span class="sourceLineNo">7924</span>      case COMPACT_REGION:<a name="line.7924"></a>
-<span class="sourceLineNo">7925</span>        // when a region is in recovering state, no read, split or merge is allowed<a name="line.7925"></a>
-<span class="sourceLineNo">7926</span>        if (isRecovering() &amp;&amp; (this.disallowWritesInRecovering ||<a name="line.7926"></a>
-<span class="sourceLineNo">7927</span>              (op != Operation.PUT &amp;&amp; op != Operation.DELETE &amp;&amp; op != Operation.BATCH_MUTATE))) {<a name="line.7927"></a>
-<span class="sourceLineNo">7928</span>          throw new RegionInRecoveryException(getRegionInfo().getRegionNameAsString() +<a name="line.7928"></a>
-<span class="sourceLineNo">7929</span>            " is recovering; cannot take reads");<a name="line.7929"></a>
-<span class="sourceLineNo">7930</span>        }<a name="line.7930"></a>
-<span class="sourceLineNo">7931</span>        break;<a name="line.7931"></a>
-<span class="sourceLineNo">7932</span>      default:<a name="line.7932"></a>
-<span class="sourceLineNo">7933</span>        break;<a name="line.7933"></a>
-<span class="sourceLineNo">7934</span>    }<a name="line.7934"></a>
-<span class="sourceLineNo">7935</span>    if (op == Operation.MERGE_REGION || op == Operation.SPLIT_REGION<a name="line.7935"></a>
-<span class="sourceLineNo">7936</span>        || op == Operation.COMPACT_REGION) {<a name="line.7936"></a>
-<span class="sourceLineNo">7937</span>      // split, merge or compact region doesn't need to check the closing/closed state or lock the<a name="line.7937"></a>
-<span class="sourceLineNo">7938</span>      // region<a name="line.7938"></a>
-<span class="sourceLineNo">7939</span>      return;<a name="line.7939"></a>
-<span class="sourceLineNo">7940</span>    }<a name="line.7940"></a>
-<span class="sourceLineNo">7941</span>    if (this.closing.get()) {<a name="line.7941"></a>
-<span class="sourceLineNo">7942</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.7942"></a>
-<span class="sourceLineNo">7943</span>    }<a name="line.7943"></a>
-<span class="sourceLineNo">7944</span>    lock(lock.readLock());<a name="line.7944"></a>
-<span class="sourceLineNo">7945</span>    if (this.closed.get()) {<a name="line.7945"></a>
-<span class="sourceLineNo">7946</span>      lock.readLock().unlock();<a name="line.7946"></a>
-<span class="sourceLineNo">7947</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.7947"></a>
-<span class="sourceLineNo">7948</span>    }<a name="line.7948"></a>
-<span class="sourceLineNo">7949</span>    try {<a name="line.7949"></a>
-<span class="sourceLineNo">7950</span>      if (coprocessorHost != null) {<a name="line.7950"></a>
-<span class="sourceLineNo">7951</span>        coprocessorHost.postStartRegionOperation(op);<a name="line.7951"></a>
-<span class="sourceLineNo">7952</span>      }<a name="line.7952"></a>
-<span class="sourceLineNo">7953</span>    } catch (Exception e) {<a name="line.7953"></a>
-<span class="sourceLineNo">7954</span>      lock.readLock().unlock();<a name="line.7954"></a>
-<span class="sourceLineNo">7955</span>      throw new IOException(e);<a name="line.7955"></a>
-<span class="sourceLineNo">7956</span>    }<a name="line.7956"></a>
-<span class="sourceLineNo">7957</span>  }<a name="line.7957"></a>
-<span class="sourceLineNo">7958</span><a name="line.7958"></a>
-<span class="sourceLineNo">7959</span>  @Override<a name="line.7959"></a>
-<span class="sourceLineNo">7960</span>  public void closeRegionOperation() throws IOException {<a name="line.7960"></a>
-<span class="sourceLineNo">7961</span>    closeRegionOperation(Operation.ANY);<a name="line.7961"></a>
-<span class="sourceLineNo">7962</span>  }<a name="line.7962"></a>
-<span class="sourceLineNo">7963</span><a name="line.7963"></a>
-<span class="sourceLineNo">7964</span>  /**<a name="line.7964"></a>
-<span class="sourceLineNo">7965</span>   * Closes the lock. This needs to be called in the finally block corresponding<a name="line.7965"></a>
-<span class="sourceLineNo">7966</span>   * to the try block of {@link #startRegionOperation(Operation)}<a name="line.7966"></a>
-<span class="sourceLineNo">7967</span>   * @throws IOException<a name="line.7967"></a>
-<span class="sourceLineNo">7968</span>   */<a name="line.7968"></a>
-<span class="sourceLineNo">7969</span>  public void closeRegionOperation(Operation operation) throws IOException {<a name="line.7969"></a>
-<span class="sourceLineNo">7970</span>    lock.readLock().unlock();<a name="line.7970"></a>
-<span class="sourceLineNo">7971</span>    if (coprocessorHost != null) {<a name="line.7971"></a>
-<span class="sourceLineNo">7972</span>      coprocessorHost.postCloseRegionOperation(operation);<a name="line.7972"></a>
-<span class="sourceLineNo">7973</span>    }<a name="line.7973"></a>
-<span class="sourceLineNo">7974</span>  }<a name="line.7974"></a>
-<span class="sourceLineNo">7975</span><a name="line.7975"></a>
-<span class="sourceLineNo">7976</span>  /**<a name="line.7976"></a>
-<span class="sourceLineNo">7977</span>   * This method needs to be called before any public call that reads or<a name="line.7977"></a>
-<span class="sourceLineNo">7978</span>   * modifies stores in bulk. It has to be called just before a try.<a name="line.7978"></a>
-<span class="sourceLineNo">7979</span>   * #closeBulkRegionOperation needs to be called in the try's finally block<a name="line.7979"></a>
-<span class="sourceLineNo">7980</span>   * Acquires a writelock and checks if the region is closing or closed.<a name="line.7980"></a>
-<span class="sourceLineNo">7981</span>   * @throws NotServingRegionException when the region is closing or closed<a name="line.7981"></a>
-<span class="sourceLineNo">7982</span>   * @throws RegionTooBusyException if failed to get the lock in time<a name="line.7982"></a>
-<span class="sourceLineNo">7983</span>   * @throws InterruptedIOException if interrupted while waiting for a lock<a name="line.7983"></a>
-<span class="sourceLineNo">7984</span>   */<a name="line.7984"></a>
-<span class="sourceLineNo">7985</span>  private void startBulkRegionOperation(boolean writeLockNeeded)<a name="line.7985"></a>
-<span class="sourceLineNo">7986</span>      throws NotServingRegionException, RegionTooBusyException, InterruptedIOException {<a name="line.7986"></a>
-<span class="sourceLineNo">7987</span>    if (this.closing.get()) {<a name="line.7987"></a>
-<span class="sourceLineNo">7988</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.7988"></a>
-<span class="sourceLineNo">7989</span>    }<a name="line.7989"></a>
-<span class="sourceLineNo">7990</span>    if (writeLockNeeded) lock(lock.writeLock());<a name="line.7990"></a>
-<span class="sourceLineNo">7991</span>    else lock(lock.readLock());<a name="line.7991"></a>
-<span class="sourceLineNo">7992</span>    if (this.closed.get()) {<a name="line.7992"></a>
-<span class="sourceLineNo">7993</span>      if (writeLockNeeded) lock.writeLock().unlock();<a name="line.7993"></a>
-<span class="sourceLineNo">7994</span>      else lock.readLock().unlock();<a name="line.7994"></a>
-<span class="sourceLineNo">7995</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.7995"></a>
-<span class="sourceLineNo">7996</span>    }<a name="line.7996"></a>
-<span class="sourceLineNo">7997</span>  }<a name="line.7997"></a>
-<span class="sourceLineNo">7998</span><a name="line.7998"></a>
-<span class="sourceLineNo">7999</span>  /**<a name="line.7999"></a>
-<span class="sourceLineNo">8000</span>   * Closes the lock. This needs to be called in the finally block corresponding<a name="line.8000"></a>
-<span class="sourceLineNo">8001</span>   * to the try block of #startRegionOperation<a name="line.8001"></a>
-<span class="sourceLineNo">8002</span>   */<a name="line.8002"></a>
-<span class="sourceLineNo">8003</span>  private void closeBulkRegionOperation(){<a name="line.8003"></a>
-<span class="sourceLineNo">8004</span>    if (lock.writeLock().isHeldByCurrentThread()) lock.writeLock().unlock();<a name="line.8004"></a>
-<span class="sourceLineNo">8005</span>    else lock.readLock().unlock();<a name="line.8005"></a>
-<span class="sourceLineNo">8006</span>  }<a name="line.8006"></a>
-<span class="sourceLineNo">8007</span><a name="line.8007"></a>
-<span class="sourceLineNo">8008</span>  /**<a name="line.8008"></a>
-<span class="sourceLineNo">8009</span>   * Update LongAdders for number of puts without wal and the size of possible data loss.<a name="line.8009"></a>
-<span class="sourceLineNo">8010</span>   * These information are exposed by the region server metrics.<a name="line.8010"></a>
-<span class="sourceLineNo">8011</span>   */<a name="line.8011"></a>
-<span class="sourceLineNo">8012</span>  private void recordMutationWithoutWal(final Map&lt;byte [], List&lt;Cell&gt;&gt; familyMap) {<a name="line.8012"></a>
-<span class="sourceLineNo">8013</span>    numMutationsWithoutWAL.increment();<a name="line.8013"></a>
-<span class="sourceLineNo">8014</span>    if (numMutationsWithoutWAL.sum() &lt;= 1) {<a name="line.8014"></a>
-<span class="sourceLineNo">8015</span>      LOG.info("writing data to region " + this +<a name="line.8015"></a>
-<span class="sourceLineNo">8016</span>               " with WAL disabled. Data may be lost in the event of a crash.");<a name="line.8016"></a>
-<span class="sourceLineNo">8017</span>    }<a name="line.8017"></a>
-<span class="sourceLineNo">8018</span><a name="line.8018"></a>
-<span class="sourceLineNo">8019</span>    long mutationSize = 0;<a name="line.8019"></a>
-<span class="sourceLineNo">8020</span>    for (List&lt;Cell&gt; cells: familyMap.values()) {<a name="line.8020"></a>
-<span class="sourceLineNo">8021</span>      assert cells instanceof RandomAccess;<a name="line.8021"></a>
-<span class="sourceLineNo">8022</span>      int listSize = cells.size();<a name="line.8022"></a>
-<span class="sourceLineNo">8023</span>      for (int i=0; i &lt; listSize; i++) {<a name="line.8023"></a>
-<span class="sourceLineNo">8024</span>        Cell cell = cells.get(i);<a name="line.8024"></a>
-<span class="sourceLineNo">8025</span>        mutationSize += KeyValueUtil.length(cell);<a name="line.8025"></a>
-<span class="sourceLineNo">8026</span>      }<a name="line.8026"></a>
-<span class="sourceLineNo">8027</span>    }<a name="line.8027"></a>
-<span class="sourceLineNo">8028</span><a name="line.8028"></a>
-<span class="sourceLineNo">8029</span>    dataInMemoryWithoutWAL.add(mutationSize);<a name="line.8029"></a>
-<span class="sourceLineNo">8030</span>  }<a name="line.8030"></a>
+<span class="sourceLineNo">7925</span>      case SNAPSHOT:<a name="line.7925"></a>
+<span class="sourceLineNo">7926</span>        // when a region is in recovering state, no read, split, merge or snapshot is allowed<a name="line.7926"></a>
+<span class="sourceLineNo">7927</span>        if (isRecovering() &amp;&amp; (this.disallowWritesInRecovering ||<a name="line.7927"></a>
+<span class="sourceLineNo">7928</span>              (op != Operation.PUT &amp;&amp; op != Operation.DELETE &amp;&amp; op != Operation.BATCH_MUTATE))) {<a name="line.7928"></a>
+<span class="sourceLineNo">7929</span>          throw new RegionInRecoveryException(getRegionInfo().getRegionNameAsString() +<a name="line.7929"></a>
+<span class="sourceLineNo">7930</span>            " is recovering; cannot take reads");<a name="line.7930"></a>
+<span class="sourceLineNo">7931</span>        }<a name="line.7931"></a>
+<span class="sourceLineNo">7932</span>        break;<a name="line.7932"></a>
+<span class="sourceLineNo">7933</span>      default:<a name="line.7933"></a>
+<span class="sourceLineNo">7934</span>        break;<a name="line.7934"></a>
+<span class="sourceLineNo">7935</span>    }<a name="line.7935"></a>
+<span class="sourceLineNo">7936</span>    if (op == Operation.MERGE_REGION || op == Operation.SPLIT_REGION<a name="line.7936"></a>
+<span class="sourceLineNo">7937</span>        || op == Operation.COMPACT_REGION) {<a name="line.7937"></a>
+<span class="sourceLineNo">7938</span>      // split, merge or compact region doesn't need to check the closing/closed state or lock the<a name="line.7938"></a>
+<span class="sourceLineNo">7939</span>      // region<a name="line.7939"></a>
+<span class="sourceLineNo">7940</span>      return;<a name="line.7940"></a>
+<span class="sourceLineNo">7941</span>    }<a name="line.7941"></a>
+<span class="sourceLineNo">7942</span>    if (this.closing.get()) {<a name="line.7942"></a>
+<span class="sourceLineNo">7943</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.7943"></a>
+<span class="sourceLineNo">7944</span>    }<a name="line.7944"></a>
+<span class="sourceLineNo">7945</span>    lock(lock.readLock());<a name="line.7945"></a>
+<span class="sourceLineNo">7946</span>    if (this.closed.get()) {<a name="line.7946"></a>
+<span class="sourceLineNo">7947</span>      lock.readLock().unlock();<a name="line.7947"></a>
+<span class="sourceLineNo">7948</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.7948"></a>
+<span class="sourceLineNo">7949</span>    }<a name="line.7949"></a>
+<span class="sourceLineNo">7950</span>    // The unit for snapshot is a region. So, all stores for this region must be<a name="line.7950"></a>
+<span class="sourceLineNo">7951</span>    // prepared for snapshot operation before proceeding.<a name="line.7951"></a>
+<span class="sourceLineNo">7952</span>    if (op == Operation.SNAPSHOT) {<a name="line.7952"></a>
+<span class="sourceLineNo">7953</span>      for (Store store : stores.values()) {<a name="line.7953"></a>
+<span class="sourceLineNo">7954</span>        if (store instanceof HStore) {<a name="line.7954"></a>
+<span class="sourceLineNo">7955</span>          ((HStore)store).preSnapshotOperation();<a name="line.7955"></a>
+<span class="sourceLineNo">7956</span>        }<a name="line.7956"></a>
+<span class="sourceLineNo">7957</span>      }<a name="line.7957"></a>
+<span class="sourceLineNo">7958</span>    }<a name="line.7958"></a>
+<span class="sourceLineNo">7959</span>    try {<a name="line.7959"></a>
+<span class="sourceLineNo">7960</span>      if (coprocessorHost != null) {<a name="line.7960"></a>
+<span class="sourceLineNo">7961</span>        coprocessorHost.postStartRegionOperation(op);<a name="line.7961"></a>
+<span class="sourceLineNo">7962</span>      }<a name="line.7962"></a>
+<span class="sourceLineNo">7963</span>    } catch (Exception e) {<a name="line.7963"></a>
+<span class="sourceLineNo">7964</span>      lock.readLock().unlock();<a name="line.7964"></a>
+<span class="sourceLineNo">7965</span>      throw new IOException(e);<a name="line.7965"></a>
+<span class="sourceLineNo">7966</span>    }<a name="line.7966"></a>
+<span class="sourceLineNo">7967</span>  }<a name="line.7967"></a>
+<span class="sourceLineNo">7968</span><a name="line.7968"></a>
+<span class="sourceLineNo">7969</span>  @Override<a name="line.7969"></a>
+<span class="sourceLineNo">7970</span>  public void closeRegionOperation() throws IOException {<a name="line.7970"></a>
+<span class="sourceLineNo">7971</span>    closeRegionOperation(Operation.ANY);<a name="line.7971"></a>
+<span class="sourceLineNo">7972</span>  }<a name="line.7972"></a>
+<span class="sourceLineNo">7973</span><a name="line.7973"></a>
+<span class="sourceLineNo">7974</span>  @Override<a name="line.7974"></a>
+<span class="sourceLineNo">7975</span>  public void closeRegionOperation(Operation operation) throws IOException {<a name="line.7975"></a>
+<span class="sourceLineNo">7976</span>    if (operation == Operation.SNAPSHOT) {<a name="line.7976"></a>
+<span class="sourceLineNo">7977</span>      for (Store store: stores.values()) {<a name="line.7977"></a>
+<span class="sourceLineNo">7978</span>        if (store instanceof HStore) {<a name="line.7978"></a>
+<span class="sourceLineNo">7979</span>          ((HStore)store).postSnapshotOperation();<a name="line.7979"></a>
+<span class="sourceLineNo">7980</span>        }<a name="line.7980"></a>
+<span class="sourceLineNo">7981</span>      }<a name="line.7981"></a>
+<span class="sourceLineNo">7982</span>    }<a name="line.7982"></a>
+<span class="sourceLineNo">7983</span>    lock.readLock().unlock();<a name="line.7983"></a>
+<span class="sourceLineNo">7984</span>    if (coprocessorHost != null) {<a name="line.7984"></a>
+<span class="sourceLineNo">7985</span>      coprocessorHost.postCloseRegionOperation(operation);<a name="line.7985"></a>
+<span class="sourceLineNo">7986</span>    }<a name="line.7986"></a>
+<span class="sourceLineNo">7987</span>  }<a name="line.7987"></a>
+<span class="sourceLineNo">7988</span><a name="line.7988"></a>
+<span class="sourceLineNo">7989</span>  /**<a name="line.7989"></a>
+<span class="sourceLineNo">7990</span>   * This method needs to be called before any public call that reads or<a name="line.7990"></a>
+<span class="sourceLineNo">7991</span>   * modifies stores in bulk. It has to be called just before a try.<a name="line.7991"></a>
+<span class="sourceLineNo">7992</span>   * #closeBulkRegionOperation needs to be called in the try's finally block<a name="line.7992"></a>
+<span class="sourceLineNo">7993</span>   * Acquires a writelock and checks if the region is closing or closed.<a name="line.7993"></a>
+<span class="sourceLineNo">7994</span>   * @throws NotServingRegionException when the region is closing or closed<a name="line.7994"></a>
+<span class="sourceLineNo">7995</span>   * @throws RegionTooBusyException if failed to get the lock in time<a name="line.7995"></a>
+<span class="sourceLineNo">7996</span>   * @throws InterruptedIOException if interrupted while waiting for a lock<a name="line.7996"></a>
+<span class="sourceLineNo">7997</span>   */<a name="line.7997"></a>
+<span class="sourceLineNo">7998</span>  private void startBulkRegionOperation(boolean writeLockNeeded)<a name="line.7998"></a>
+<span class="sourceLineNo">7999</span>      throws NotServingRegionException, RegionTooBusyException, InterruptedIOException {<a name="line.7999"></a>
+<span class="sourceLineNo">8000</span>    if (this.closing.get()) {<a name="line.8000"></a>
+<span class="sourceLineNo">8001</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.8001"></a>
+<span class="sourceLineNo">8002</span>    }<a name="line.8002"></a>
+<span class="sourceLineNo">8003</span>    if (writeLockNeeded) lock(lock.writeLock());<a name="line.8003"></a>
+<span class="sourceLineNo">8004</span>    else lock(lock.readLock());<a name="line.8004"></a>
+<span class="sourceLineNo">8005</span>    if (this.closed.get()) {<a name="line.8005"></a>
+<span class="sourceLineNo">8006</span>      if (writeLockNeeded) lock.writeLock().unlock();<a name="line.8006"></a>
+<span class="sourceLineNo">8007</span>      else lock.readLock().unlock();<a name="line.8007"></a>
+<span class="sourceLineNo">8008</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.8008"></a>
+<span class="sourceLineNo">8009</span>    }<a name="line.8009"></a>
+<span class="sourceLineNo">8010</span>  }<a name="line.8010"></a>
+<span class="sourceLineNo">8011</span><a name="line.8011"></a>
+<span class="sourceLineNo">8012</span>  /**<a name="line.8012"></a>
+<span class="sourceLineNo">8013</span>   * Closes the lock. This needs to be called in the finally block corresponding<a name="line.8013"></a>
+<span class="sourceLineNo">8014</span>   * to the try block of #startRegionOperation<a name="line.8014"></a>
+<span class="sourceLineNo">8015</span>   */<a name="line.8015"></a>
+<span class="sourceLineNo">8016</span>  private void closeBulkRegionOperation(){<a name="line.8016"></a>
+<span class="sourceLineNo">8017</span>    if (lock.writeLock().isHeldByCurrentThread()) lock.writeLock().unlock();<a name="line.8017"></a>
+<span class="sourceLineNo">8018</span>    else lock.readLock().unlock();<a name="line.8018"></a>
+<span class="sourceLineNo">8019</span>  }<a name="line.8019"></a>
+<span class="sourceLineNo">8020</span><a name="line.8020"></a>
+<span class="sourceLineNo">8021</span>  /**<a name="line.8021"></a>
+<span class="sourceLineNo">8022</span>   * Update LongAdders for number of puts without wal and the size of possible data loss.<a name="line.8022"></a>
+<span class="sourceLineNo">8023</span>   * These information are exposed by the region server metrics.<a name="line.8023"></a>
+<span class="sourceLineNo">8024</span>   */<a name="line.8024"></a>
+<span class="sourceLineNo">8025</span>  private void recordMutationWithoutWal(final Map&lt;byte [], List&lt;Cell&gt;&gt; familyMap) {<a name="line.8025"></a>
+<span class="sourceLineNo">8026</span>    numMutationsWithoutWAL.increment();<a name="line.8026"></a>
+<span class="sourceLineNo">8027</span>    if (numMutationsWithoutWAL.sum() &lt;= 1) {<a name="line.8027"></a>
+<span class="sourceLineNo">8028</span>      LOG.info("writing data to region " + this +<a name="line.8028"></a>
+<span class="sourceLineNo">8029</span>               " with WAL disabled. Data may be lost in the event of a crash.");<a name="line.8029"></a>
+<span class="sourceLineNo">8030</span>    }<a name="line.8030"></a>
 <span class="sourceLineNo">8031</span><a name="line.8031"></a>
-<span class="sourceLineNo">8032</span>  private void lock(final Lock lock)<a name="line.8032"></a>
-<span class="sourceLineNo">8033</span>      throws RegionTooBusyException, InterruptedIOException {<a name="line.8033"></a>
-<span class="sourceLineNo">8034</span>    lock(lock, 1);<a name="line.8034"></a>
-<span class="sourceLineNo">8035</span>  }<a name="line.8035"></a>
-<span class="sourceLineNo">8036</span><a name="line.8036"></a>
-<span class="sourceLineNo">8037</span>  /**<a name="line.8037"></a>
-<span class="sourceLineNo">8038</span>   * Try to acquire a lock.  Throw RegionTooBusyException<a name="line.8038"></a>
-<span class="sourceLineNo">8039</span>   * if failed to get the lock in time. Throw InterruptedIOException<a name="line.8039"></a>
-<span class="sourceLineNo">8040</span>   * if interrupted while waiting for the lock.<a name="line.8040"></a>
-<span class="sourceLineNo">8041</span>   */<a name="line.8041"></a>
-<span class="sourceLineNo">8042</span>  private void lock(final Lock lock, final int multiplier)<a name="line.8042"></a>
-<span class="sourceLineNo">8043</span>      throws RegionTooBusyException, InterruptedIOException {<a name="line.8043"></a>
-<span class="sourceLineNo">8044</span>    try {<a name="line.8044"></a>
-<span class="sourceLineNo">8045</span>      final long waitTime = Math.min(maxBusyWaitDuration,<a name="line.8045"></a>
-<span class="sourceLineNo">8046</span>          busyWaitDuration * Math.min(multiplier, maxBusyWaitMultiplier));<a name="line.8046"></a>
-<span class="sourceLineNo">8047</span>      if (!lock.tryLock(waitTime, TimeUnit.MILLISECONDS)) {<a name="line.8047"></a>
-<span class="sourceLineNo">8048</span>        throw new RegionTooBusyException(<a name="line.8048"></a>
-<span class="sourceLineNo">8049</span>            "failed to get a lock in " + waitTime + " ms. " +<a name="line.8049"></a>
-<span class="sourceLineNo">8050</span>                "regionName=" + (this.getRegionInfo() == null ? "unknown" :<a name="line.8050"></a>
-<span class="sourceLineNo">8051</span>                this.getRegionInfo().getRegionNameAsString()) +<a name="line.8051"></a>
-<span class="sourceLineNo">8052</span>                ", server=" + (this.getRegionServerServices() == null ? "unknown" :<a name="line.8052"></a>
-<span class="sourceLineNo">8053</span>                this.getRegionServerServices().getServerName()));<a name="line.8053"></a>
-<span class="sourceLineNo">8054</span>      }<a name="line.8054"></a>
-<span class="sourceLineNo">8055</span>    } catch (InterruptedException ie) {<a name="line.8055"></a>
-<span class="sourceLineNo">8056</span>      LOG.info("Interrupted while waiting for a lock");<a name="line.8056"></a>
-<span class="sourceLineNo">8057</span>      InterruptedIOException iie = new InterruptedIOException();<a name="line.8057"></a>
-<span class="sourceLineNo">8058</span>      iie.initCause(ie);<a name="line.8058"></a>
-<span class="sourceLineNo">8059</span>      throw iie;<a name="line.8059"></a>
-<span class="sourceLineNo">8060</span>    }<a name="line.8060"></a>
-<span class="sourceLineNo">8061</span>  }<a name="line.8061"></a>
-<span class="sourceLineNo">8062</span><a name="line.8062"></a>
-<span class="sourceLineNo">8063</span>  /**<a name="line.8063"></a>
-<span class="sourceLineNo">8064</span>   * Calls sync with the given transaction ID<a name="line.8064"></a>
-<span class="sourceLineNo">8065</span>   * @param txid should sync up to which transaction<a name="line.8065"></a>
-<span class="sourceLineNo">8066</span>   * @throws IOException If anything goes wrong with DFS<a name="line.8066"></a>
-<span class="sourceLineNo">8067</span>   */<a name="line.8067"></a>
-<span class="sourceLineNo">8068</span>  private void sync(long txid, Durability durability) throws IOException {<a name="line.8068"></a>
-<span class="sourceLineNo">8069</span>    if (this.getRegionInfo().isMetaRegion()) {<a name="line.8069"></a>
-<span class="sourceLineNo">8070</span>      this.wal.sync(txid);<a name="line.8070"></a>
-<span class="sourceLineNo">8071</span>    } else {<a name="line.8071"></a>
-<span class="sourceLineNo">8072</span>      switch(durability) {<a name="line.8072"></a>
-<span class="sourceLineNo">8073</span>      case USE_DEFAULT:<a name="line.8073"></a>
-<span class="sourceLineNo">8074</span>        // do what table defaults to<a name="line.8074"></a>
-<span class="sourceLineNo">8075</span>        if (shouldSyncWAL()) {<a name="line.8075"></a>
-<span class="sourceLineNo">8076</span>          this.wal.sync(txid);<a name="line.8076"></a>
-<span class="sourceLineNo">8077</span>        }<a name="line.8077"></a>
-<span class="sourceLineNo">8078</span>        break;<a name="line.8078"></a>
-<span class="sourceLineNo">8079</span>      case SKIP_WAL:<a name="line.8079"></a>
-<span class="sourceLineNo">8080</span>        // nothing do to<a name="line.8080"></a>
-<span class="sourceLineNo">8081</span>        break;<a name="line.8081"></a>
-<span class="sourceLineNo">8082</span>      case ASYNC_WAL:<a name="line.8082"></a>
-<span class="sourceLineNo">8083</span>        // nothing do to<a name="line.8083"></a>
-<span class="sourceLineNo">8084</span>        break;<a name="line.8084"></a>
-<span class="sourceLineNo">8085</span>      case SYNC_WAL:<a name="line.8085"></a>
-<span class="sourceLineNo">8086</span>      case FSYNC_WAL:<a name="line.8086"></a>
-<span class="sourceLineNo">8087</span>        // sync the WAL edit (SYNC and FSYNC treated the same for now)<a name="line.8087"></a>
-<span class="sourceLineNo">8088</span>        this.wal.sync(txid);<a name="line.8088"></a>
-<span class="sourceLineNo">8089</span>        break;<a name="line.8089"></a>
-<span class="sourceLineNo">8090</span>      default:<a name="line.8090"></a>
-<span class="sourceLineNo">8091</span>        throw new RuntimeException("Unknown durability " + durability);<a name="line.8091"></a>
-<span class="sourceLineNo">8092</span>      }<a name="line.8092"></a>
-<span class="sourceLineNo">8093</span>    }<a name="line.8093"></a>
-<span class="sourceLineNo">8094</span>  }<a name="line.8094"></a>
-<span class="sourceLineNo">8095</span><a name="line.8095"></a>
-<span class="sourceLineNo">8096</span>  /**<a name="line.8096"></a>
-<span class="sourceLineNo">8097</span>   * Check whether we should sync the wal from the table's durability settings<a name="line.8097"></a>
-<span class="sourceLineNo">8098</span>   */<a name="line.8098"></a>
-<span class="sourceLineNo">8099</span>  private boolean shouldSyncWAL() {<a name="line.8099"></a>
-<span class="sourceLineNo">8100</span>    return durability.ordinal() &gt;  Durability.ASYNC_WAL.ordinal();<a name="line.8100"></a>
-<span class="sourceLineNo">8101</span>  }<a name="line.8101"></a>
-<span class="sourceLineNo">8102</span><a name="line.8102"></a>
-<span class="sourceLineNo">8103</span>  /**<a name="line.8103"></a>
-<span class="sourceLineNo">8104</span>   * A mocked list implementation - discards all updates.<a name="line.8104"></a>
-<span class="sourceLineNo">8105</span>   */<a name="line.8105"></a>
-<span class="sourceLineNo">8106</span>  private static final List&lt;Cell&gt; MOCKED_LIST = new AbstractList&lt;Cell&gt;() {<a name="line.8106"></a>
-<span class="sourceLineNo">8107</span><a name="line.8107"></a>
-<span class="sourceLineNo">8108</span>    @Override<a name="line.8108"></a>
-<span class="sourceLineNo">8109</span>    public void add(int index, Cell element) {<a name="line.8109"></a>
-<span class="sourceLineNo">8110</span>      // do nothing<a name="line.8110"></a>
-<span class="sourceLineNo">8111</span>    }<a name="line.8111"></a>
-<span class="sourceLineNo">8112</span><a name="line.8112"></a>
-<span class="sourceLineNo">8113</span>    @Override<a name="line.8113"></a>
-<span class="sourceLineNo">8114</span>    public boolean addAll(int index, Collection&lt;? extends Cell&gt; c) {<a name="line.8114"></a>
-<span class="sourceLineNo">8115</span>      return false; // this list is never changed as a result of an update<a name="line.8115"></a>
-<span class="sourceLineNo">8116</span>    }<a name="line.8116"></a>
-<span class="sourceLineNo">8117</span><a name="line.8117"></a>
-<span class="sourceLineNo">8118</span>    @Override<a name="line.8118"></a>
-<span class="sourceLineNo">8119</span>    public KeyValue get(int index) {<a name="line.8119"></a>
-<span class="sourceLineNo">8120</span>      throw new UnsupportedOperationException();<a name="line.8120"></a>
-<span class="sourceLineNo">8121</span>    }<a name="line.8121"></a>
-<span class="sourceLineNo">8122</span><a name="line.8122"></a>
-<span class="sourceLineNo">8123</span>    @Override<a name="line.8123"></a>
-<span class="sourceLineNo">8124</span>    public int size() {<a name="line.8124"></a>
-<span class="sourceLineNo">8125</span>      return 0;<a name="line.8125"></a>
-<span class="sourceLineNo">8126</span>    }<a name="line.8126"></a>
-<span class="sourceLineNo">8127</span>  };<a name="line.8127"></a>
-<span class="sourceLineNo">8128</span><a name="line.8128"></a>
-<span class="sourceLineNo">8129</span>  @Override<a name="line.8129"></a>
-<span class="sourceLineNo">8130</span>  public long getOpenSeqNum() {<a name="line.8130"></a>
-<span class="sourceLineNo">8131</span>    return this.openSeqNum;<a name="line.8131"></a>
-<span class="sourceLineNo">8132</span>  }<a name="line.8132"></a>
-<span class="sourceLineNo">8133</span><a name="line.8133"></a>
-<span class="sourceLineNo">8134</span>  @Override<a name="line.8134"></a>
-<span class="sourceLineNo">8135</span>  public Map&lt;byte[], Long&gt; getMaxStoreSeqId() {<a name="line.8135"></a>
-<span class="sourceLineNo">8136</span>    return this.maxSeqIdInStores;<a name="line.8136"></a>
-<span class="sourceLineNo">8137</span>  }<a name="line.8137"></a>
-<span class="sourceLineNo">8138</span><a name="line.8138"></a>
-<span class="sourceLineNo">8139</span>  @Override<a name="line.8139"></a>
-<span class="sourceLineNo">8140</span>  public long getOldestSeqIdOfStore(byte[] familyName) {<a name="line.8140"></a>
-<span class="sourceLineNo">8141</span>    return wal.getEarliestMemstoreSeqNum(getRegionInfo().getEncodedNameAsBytes(), familyName);<a name="line.8141"></a>
-<span class="sourceLineNo">8142</span>  }<a name="line.8142"></a>
-<span class="sourceLineNo">8143</span><a name="line.8143"></a>
-<span class="sourceLineNo">8144</span>  @Override<a name="line.8144"></a>
-<span class="sourceLineNo">8145</span>  public CompactionState getCompactionState() {<a name="line.8145"></a>
-<span class="sourceLineNo">8146</span>    boolean hasMajor = majorInProgress.get() &gt; 0, hasMinor = minorInProgress.get() &gt; 0;<a name="line.8146"></a>
-<span class="sourceLineNo">8147</span>    return (hasMajor ? (hasMinor ? CompactionState.MAJOR_AND_MINOR : CompactionState.MAJOR)<a name="line.8147"></a>
-<span class="sourceLineNo">8148</span>        : (hasMinor ? CompactionState.MINOR : CompactionState.NONE));<a name="line.8148"></a>
-<span class="sourceLineNo">8149</span>  }<a name="line.8149"></a>
-<span class="sourceLineNo">8150</span><a name="line.8150"></a>
-<span class="sourceLineNo">8151</span>  public void reportCompactionRequestStart(boolean isMajor){<a name="line.8151"></a>
-<span class="sourceLineNo">8152</span>    (isMajor ? majorInProgress : minorInProgress).incrementAndGet();<a name="line.8152"></a>
-<span class="sourceLineNo">8153</span>  }<a name="line.8153"></a>
-<span class="sourceLineNo">8154</span><a name="line.8154"></a>
-<span class="sourceLineNo">8155</span>  public void reportCompactionRequestEnd(boolean isMajor, int numFiles, long filesSizeCompacted) {<a name="line.8155"></a>
-<span class="sourceLineNo">8156</span>    int newValue = (isMajor ? majorInProgress : minorInProgress).decrementAndGet();<a name="line.8156"></a>
-<span class="sourceLineNo">8157</span><a name="line.8157"></a>
-<span class="sourceLineNo">8158</span>    // metrics<a name="line.8158"></a>
-<span class="sourceLineNo">8159</span>    compactionsFinished.incrementAndGet();<a name="line.8159"></a>
-<span class="sourceLineNo">8160</span>    compactionNumFilesCompacted.addAndGet(numFiles);<a name="line.8160"></a>
-<span class="sourceLineNo">8161</span>    compactionNumBytesCompacted.addAndGet(filesSizeCompacted);<a name="line.8161"></a>
-<span class="sourceLineNo">8162</span><a name="line.8162"></a>
-<span class="sourceLineNo">8163</span>    assert newValue &gt;= 0;<a name="line.8163"></a>
-<span class="sourceLineNo">8164</span>  }<a name="line.8164"></a>
-<span class="sourceLineNo">8165</span><a name="line.8165"></a>
-<span class="sourceLineNo">8166</span>  public void reportCompactionRequestFailure() {<a name="line.8166"></a>
-<span class="sourceLineNo">8167</span>    compactionsFailed.incrementAndGet();<a name="line.8167"></a>
-<span class="sourceLineNo">8168</span>  }<a name="line.8168"></a>
-<span class="sourceLineNo">8169</span><a name="line.8169"></a>
-<span class="sourceLineNo">8170</span>  public void incrementCompactionsQueuedCount() {<a name="line.8170"></a>
-<span class="sourceLineNo">8171</span>    compactionsQueued.incrementAndGet();<a name="line.8171"></a>
-<span class="sourceLineNo">8172</span>  }<a name="line.8172"></a>
-<span class="sourceLineNo">8173</span><a name="line.8173"></a>
-<span class="sourceLineNo">8174</span>  public void decrementCompactionsQueuedCount() {<a name="line.8174"></a>
-<span class="sourceLineNo">8175</span>    compactionsQueued.decrementAndGet();<a name="line.8175"></a>
-<span class="sourceLineNo">8176</span>  }<a name="line.8176"></a>
-<span class="sourceLineNo">8177</span><a name="line.8177"></a>
-<span class="sourceLineNo">8178</span>  public void incrementFlushesQueuedCount() {<a name="line.8178"></a>
-<span class="sourceLineNo">8179</span>    flushesQueued.incrementAndGet();<a name="line.8179"></a>
-<span class="sourceLineNo">8180</span>  }<a name="line.8180"></a>
-<span class="sourceLineNo">8181</span><a name="line.8181"></a>
-<span class="sourceLineNo">8182</span>  @VisibleForTesting<a name="line.8182"></a>
-<span class="sourceLineNo">8183</span>  public long getReadPoint() {<a name="line.8183"></a>
-<span class="sourceLineNo">8184</span>    return getReadPoint(IsolationLevel.READ_COMMITTED);<a name="line.8184"></a>
+<span class="sourceLineNo">8032</span>    long mutationSize = 0;<a name="line.8032"></a>
+<span class="sourceLineNo">8033</span>    for (List&lt;Cell&gt; cells: familyMap.values()) {<a name="line.8033"></a>
+<span class="sourceLineNo">8034</span>      assert cells instanceof RandomAccess;<a name="line.8034"></a>
+<span class="sourceLineNo">8035</span>      int listSize = cells.size();<a name="line.8035"></a>
+<span class="sourceLineNo">8036</span>      for (int i=0; i &lt; listSize; i++) {<a name="line.8036"></a>
+<span class="sourceLineNo">8037</span>        Cell cell = cells.get(i);<a name="line.8037"></a>
+<span class="sourceLineNo">8038</span>        mutationSize += KeyValueUtil.length(cell);<a name="line.8038"></a>
+<span class="sourceLineNo">8039</span>      }<a name="line.8039"></a>
+<span class="sourceLineNo">8040</span>    }<a name="line.8040"></a>
+<span class="sourceLineNo">8041</span><a name="line.8041"></a>
+<span class="sourceLineNo">8042</span>    dataInMemoryWithoutWAL.add(mutationSize);<a name="line.8042"></a>
+<span class="sourceLineNo">8043</span>  }<a name="line.8043"></a>
+<span class="sourceLineNo">8044</span><a name="line.8044"></a>
+<span class="sourceLineNo">8045</span>  private void lock(final Lock lock)<a name="line.8045"></a>
+<span class="sourceLineNo">8046</span>      throws RegionTooBusyException, InterruptedIOException {<a name="line.8046"></a>
+<span class="sourceLineNo">8047</span>    lock(lock, 1);<a name="line.8047"></a>
+<span class="sourceLineNo">8048</span>  }<a name="line.8048"></a>
+<span class="sourceLineNo">8049</span><a name="line.8049"></a>
+<span class="sourceLineNo">8050</span>  /**<a name="line.8050"></a>
+<span class="sourceLineNo">8051</span>   * Try to acquire a lock.  Throw RegionTooBusyException<a name="line.8051"></a>
+<span class="sourceLineNo">8052</span>   * if failed to get the lock in time. Throw InterruptedIOException<a name="line.8052"></a>
+<span class="sourceLineNo">8053</span>   * if interrupted while waiting for the lock.<a name="line.8053"></a>
+<span class="sourceLineNo">8054</span>   */<a name="line.8054"></a>
+<span class="sourceLineNo">8055</span>  private void lock(final Lock lock, final int multiplier)<a name="line.8055"></a>
+<span class="sourceLineNo">8056</span>      throws RegionTooBusyException, InterruptedIOException {<a name="line.8056"></a>
+<span class="sourceLineNo">8057</span>    try {<a name="line.8057"></a>
+<span class="sourceLineNo">8058</span>      final long waitTime = Math.min(maxBusyWaitDuration,<a name="line.8058"></a>
+<span class="sourceLineNo">8059</span>          busyWaitDuration * Math.min(multiplier, maxBusyWaitMultiplier));<a name="line.8059"></a>
+<span class="sourceLineNo">8060</span>      if (!lock.tryLock(waitTime, TimeUnit.MILLISECONDS)) {<a name="line.8060"></a>
+<span class="sourceLineNo">8061</span>        throw new RegionTooBusyException(<a name="line.8061"></a>
+<span class="sourceLineNo">8062</span>            "failed to get a lock in " + waitTime + " ms. " +<a name="line.8062"></a>
+<span class="sourceLineNo">8063</span>                "regionName=" + (this.getRegionInfo() == null ? "unknown" :<a name="line.8063"></a>
+<span class="sourceLineNo">8064</span>                this.getRegionInfo().getRegionNameAsString()) +<a name="line.8064"></a>
+<span class="sourceLineNo">8065</span>                ", server=" + (this.getRegionServerServices() == null ? "unknown" :<a name="line.8065"></a>
+<span class="sourceLineNo">8066</span>                this.getRegionServerServices().getServerName()));<a name="line.8066"></a>
+<span class="sourceLineNo">8067</span>      }<a name="line.8067"></a>
+<span class="sourceLineNo">8068</span>    } catch (InterruptedException ie) {<a name="line.8068"></a>
+<span class="sourceLineNo">8069</span>      LOG.info("Interrupted while waiting for a lock");<a name="line.8069"></a>
+<span class="sourceLineNo">8070</span>      InterruptedIOException iie = new InterruptedIOException();<a name="line.8070"></a>
+<span class="sourceLineNo">8071</span>      iie.initCause(ie);<a name="line.8071"></a>
+<span class="sourceLineNo">8072</span>      throw iie;<a name="line.8072"></a>
+<span class="sourceLineNo">8073</span>    }<a name="line.8073"></a>
+<span class="sourceLineNo">8074</span>  }<a name="line.8074"></a>
+<span class="sourceLineNo">8075</span><a name="line.8075"></a>
+<span class="sourceLineNo">8076</span>  /**<a name="line.8076"></a>
+<span class="sourceLineNo">8077</span>   * Calls sync with the given transaction ID<a name="line.8077"></a>
+<span class="sourceLineNo">8078</span>   * @param txid should sync up to which transaction<a name="line.8078"></a>
+<span class="sourceLineNo">8079</span>   * @throws IOException If anything goes wrong with DFS<a name="line.8079"></a>
+<span class="sourceLineNo">8080</span>   */<a name="line.8080"></a>
+<span class="sourceLineNo">8081</span>  private void sync(long txid, Durability durability) throws IOException {<a name="line.8081"></a>
+<span class="sourceLineNo">8082</span>    if (this.getRegionInfo().isMetaRegion()) {<a name="line.8082"></a>
+<span class="sourceLineNo">8083</span>      this.wal.sync(txid);<a name="line.8083"></a>
+<span class="sourceLineNo">8084</span>    } else {<a name="line.8084"></a>
+<span class="sourceLineNo">8085</span>      switch(durability) {<a name="line.8085"></a>
+<span class="sourceLineNo">8086</span>      case USE_DEFAULT:<a name="line.8086"></a>
+<span class="sourceLineNo">8087</span>        // do what table defaults to<a name="line.8087"></a>
+<span class="sourceLineNo">8088</span>        if (shouldSyncWAL()) {<a name="line.8088"></a>
+<span class="sourceLineNo">8089</span>          this.wal.sync(txid);<a name="line.8089"></a>
+<span class="sourceLineNo">8090</span>        }<a name="line.8090"></a>
+<span class="sourceLineNo">8091</span>        break;<a name="line.8091"></a>
+<span class="sourceLineNo">8092</span>      case SKIP_WAL:<a name="line.8092"></a>
+<span class="sourceLineNo">8093</span>        // nothing do to<a name="line.8093"></a>
+<span class="sourceLineNo">8094</span>        break;<a name="line.8094"></a>
+<span class="sourceLineNo">8095</span>      case ASYNC_WAL:<a name="line.8095"></a>
+<span class="sourceLineNo">8096</span>        // nothing do to<a name="line.8096"></a>
+<span class="sourceLineNo">8097</span>        break;<a name="line.8097"></a>
+<span class="sourceLineNo">8098</span>      case SYNC_WAL:<a name="line.8098"></a>
+<span class="sourceLineNo">8099</span>      case FSYNC_WAL:<a name="line.8099"></a>
+<span class="sourceLineNo">8100</span>        // sync the WAL edit (SYNC and FSYNC treated the same for now)<a name="line.8100"></a>
+<span class="sourceLineNo">8101</span>        this.wal.sync(txid);<a name="line.8101"></a>
+<span class="sourceLineNo">8102</span>        break;<a name="line.8102"></a>
+<span class="sourceLineNo">8103</span>      default:<a name="line.8103"></a>
+<span class="sourceLineNo">8104</span>        throw new RuntimeException("Unknown durability " + durability);<a name="line.8104"></a>
+<span class="sourceLineNo">8105</span>      }<a name="line.8105"></a>
+<span class="sourceLineNo">8106</span>    }<a name="line.8106"></a>
+<span class="sourceLineNo">8107</span>  }<a name="line.8107"></a>
+<span class="sourceLineNo">8108</span><a name="line.8108"></a>
+<span class="sourceLineNo">8109</span>  /**<a name="line.8109"></a>
+<span class="sourceLineNo">8110</span>   * Check whether we should sync the wal from the table's durability settings<a name="line.8110"></a>
+<span class="sourceLineNo">8111</span>   */<a name="line.8111"></a>
+<span class="sourceLineNo">8112</span>  private boolean shouldSyncWAL() {<a name="line.8112"></a>
+<span class="sourceLineNo">8113</span>    return durability.ordinal() &gt;  Durability.ASYNC_WAL.ordinal();<a name="line.8113"></a>
+<span class="sourceLineNo">8114</span>  }<a name="line.8114"></a>
+<span class="sourceLineNo">8115</span><a name="line.8115"></a>
+<span class="sourceLineNo">8116</span>  /**<a name="line.8116"></a>
+<span class="sourceLineNo">8117</span>   * A mocked list implementation - discards all updates.<a name="line.8117"></a>
+<span class="sourceLineNo">8118</span>   */<a name="line.8118"></a>
+<span class="sourceLineNo">8119</span>  private static final List&lt;Cell&gt; MOCKED_LIST = new AbstractList&lt;Cell&gt;() {<a name="line.8119"></a>
+<span class="sourceLineNo">8120</span><a name="line.8120"></a>
+<span class="sourceLineNo">8121</span>    @Override<a name="line.8121"></a>
+<span class="sourceLineNo">8122</span>    public void add(int index, Cell element) {<a name="line.8122"></a>
+<span class="sourceLineNo">8123</span>      // do nothing<a name="line.8123"></a>
+<span class="sourceLineNo">8124</span>    }<a name="line.8124"></a>
+<span class="sourceLineNo">8125</span><a name="line.8125"></a>
+<span class="sourceLineNo">8126</span>    @Override<a name="line.8126"></a>
+<span class="sourceLineNo">8127</span>    public boolean addAll(int index, Collection&lt;? extends Cell&gt; c) {<a name="line.8127"></a>
+<span class="sourceLineNo">8128</span>      return false; // this list is never changed as a result of an update<a name="line.8128"></a>
+<span class="sourceLineNo">8129</span>    }<a name="line.8129"></a>
+<span class="sourceLineNo">8130</span><a name="line.8130"></a>
+<span class="sourceLineNo">8131</span>    @Override<a name="line.8131"></a>
+<span class="sourceLineNo">8132</span>    public KeyValue get(int index) {<a name="line.8132"></a>
+<span class="sourceLineNo">8133</span>      throw new UnsupportedOperationException();<a name="line.8133"></a>
+<span class="sourceLineNo">8134</span>    }<a name="line.8134"></a>
+<span class="sourceLineNo">8135</span><a name="line.8135"></a>
+<span class="sourceLineNo">8136</span>    @Override<a name="line.8136"></a>
+<span class="sourceLineNo">8137</span>    public int size() {<a name="line.8137"></a>
+<span class="sourceLineNo">8138</span>      return 0;<a name="line.8138"></a>
+<span class="sourceLineNo">8139</span>    }<a name="line.8139"></a>
+<span class="sourceLineNo">8140</span>  };<a name="line.8140"></a>
+<span class="sourceLineNo">8141</span><a name="line.8141"></a>
+<span class="sourceLineNo">8142</span>  @Override<a name="line.8142"></a>
+<span class="sourceLineNo">8143</span>  public long getOpenSeqNum() {<a name="line.8143"></a>
+<span class="sourceLineNo">8144</span>    return this.openSeqNum;<a name="line.8144"></a>
+<span class="sourceLineNo">8145</span>  }<a name="line.8145"></a>
+<span class="sourceLineNo">8146</span><a name="line.8146"></a>
+<span class="sourceLineNo">8147</span>  @Override<a name="line.8147"></a>
+<span class="sourceLineNo">8148</span>  public Map&lt;byte[], Long&gt; getMaxStoreSeqId() {<a name="line.8148"></a>
+<span class="sourceLineNo">8149</span>    return this.maxSeqIdInStores;<a name="line.8149"></a>
+<span class="sourceLineNo">8150</span>  }<a name="line.8150"></a>
+<span class="sourceLineNo">8151</span><a name="line.8151"></a>
+<span class="sourceLineNo">8152</span>  @Override<a name="line.8152"></a>
+<span class="sourceLineNo">8153</span>  public long getOldestSeqIdOfStore(byte[] familyName) {<a name="line.8153"></a>
+<span class="sourceLineNo">8154</span>    return wal.getEarliestMemstoreSeqNum(getRegionInfo().getEncodedNameAsBytes(), familyName);<a name="line.8154"></a>
+<span class="sourceLineNo">8155</span>  }<a name="line.8155"></a>
+<span class="sourceLineNo">8156</span><a name="line.8156"></a>
+<span class="sourceLineNo">8157</span>  @Override<a name="line.8157"></a>
+<span class="sourceLineNo">8158</span>  public CompactionState getCompactionState() {<a name="line.8158"></a>
+<span class="sourceLineNo">8159</span>    boolean hasMajor = majorInProgress.get() &gt; 0, hasMinor = minorInProgress.get() &gt; 0;<a name="line.8159"></a>
+<span class="sourceLineNo">8160</span>    return (hasMajor ? (hasMinor ? CompactionState.MAJOR_AND_MINOR : CompactionState.MAJOR)<a name="line.8160"></a>
+<span class="sourceLineNo">8161</span>        : (hasMinor ? CompactionState.MINOR : CompactionState.NONE));<a name="line.8161"></a>
+<span class="sourceLineNo">8162</span>  }<a name="line.8162"></a>
+<span class="sourceLineNo">8163</span><a name="line.8163"></a>
+<span class="sourceLineNo">8164</span>  public void reportCompactionRequestStart(boolean isMajor){<a name="line.8164"></a>
+<span class="sourceLineNo">8165</span>    (isMajor ? majorInProgress : minorInProgress).incrementAndGet();<a name="line.8165"></a>
+<span class="sourceLineNo">8166</span>  }<a name="line.8166"></a>
+<span class="sourceLineNo">8167</span><a name="line.8167"></a>
+<span class="sourceLineNo">8168</span>  public void reportCompactionRequestEnd(boolean isMajor, int numFiles, long filesSizeCompacted) {<a name="line.8168"></a>
+<span class="sourceLineNo">8169</span>    int newValue = (isMajor ? majorInProgress : minorInProgress).decrementAndGet();<a name="line.8169"></a>
+<span class="sourceLineNo">8170</span><a name="line.8170"></a>
+<span class="sourceLineNo">8171</span>    // metrics<a name="line.8171"></a>
+<span class="sourceLineNo">8172</span>    compactionsFinished.incrementAndGet();<a name="line.8172"></a>
+<span class="sourceLineNo">8173</span>    compactionNumFilesCompacted.addAndGet(numFiles);<a name="line.8173"></a>
+<span class="sourceLineNo">8174</span>    compactionNumBytesCompacted.addAndGet(filesSizeCompacted);<a name="line.8174"></a>
+<span class="sourceLineNo">8175</span><a name="line.8175"></a>
+<span class="sourceLineNo">8176</span>    assert newValue &gt;= 0;<a name="line.8176"></a>
+<span class="sourceLineNo">8177</span>  }<a name="line.8177"></a>
+<span class="sourceLineNo">8178</span><a name="line.8178"></a>
+<span class="sourceLineNo">8179</span>  public void reportCompactionRequestFailure() {<a name="line.8179"></a>
+<span class="sourceLineNo">8180</span>    compactionsFailed.incrementAndGet();<a name="line.8180"></a>
+<span class="sourceLineNo">8181</span>  }<a name="line.8181"></a>
+<span class="sourceLineNo">8182</span><a name="line.8182"></a>
+<span class="sourceLineNo">8183</span>  public void incrementCompactionsQueuedCount() {<a name="line.8183"></a>
+<span class="sourceLineNo">8184</span>    compactionsQueued.incrementAndGet();<a name="line.8184"></a>
 <span class="sourceLineNo">8185</span>  }<a name="line.8185"></a>
 <span class="sourceLineNo">8186</span><a name="line.8186"></a>
-<span class="sourceLineNo">8187</span>  /**<a name="line.8187"></a>
-<span class="sourceLineNo">8188</span>   * {@inheritDoc}<a name="line.8188"></a>
-<span class="sourceLineNo">8189</span>   */<a name="line.8189"></a>
-<span class="sourceLineNo">8190</span>  @Override<a name="line.8190"></a>
-<span class="sourceLineNo">8191</span>  public void onConfigurationChange(Configuration conf) {<a name="line.8191"></a>
-<span class="sourceLineNo">8192</span>    // Do nothing for now.<a name="line.8192"></a>
+<span class="sourceLineNo">8187</span>  public void decrementCompactionsQueuedCount() {<a name="line.8187"></a>
+<span class="sourceLineNo">8188</span>    compactionsQueued.decrementAndGet();<a name="line.8188"></a>
+<span class="sourceLineNo">8189</span>  }<a name="line.8189"></a>
+<span class="sourceLineNo">8190</span><a name="line.8190"></a>
+<span class="sourceLineNo">8191</span>  public void incrementFlushesQueuedCount() {<a name="line.8191"></a>
+<span class="sourceLineNo">8192</span>    flushesQueued.incrementAndGet();<a name="line.8192"></a>
 <span class="sourceLineNo">8193</span>  }<a name="line.8193"></a>
 <span class="sourceLineNo">8194</span><a name="line.8194"></a>
-<span class="sourceLineNo">8195</span>  /**<a name="line.8195"></a>
-<span class="sourceLineNo">8196</span>   * {@inheritDoc}<a name="line.8196"></a>
-<span class="sourceLineNo">8197</span>   */<a name="line.8197"></a>
-<span class="sourceLineNo">8198</span>  @Override<a name="line.8198"></a>
-<span class="sourceLineNo">8199</span>  public void registerChildren(ConfigurationManager manager) {<a name="line.8199"></a>
-<span class="sourceLineNo">8200</span>    configurationManager = Optional.of(manager);<a name="line.8200"></a>
-<span class="sourceLineNo">8201</span>    for (Store s : this.stores.values()) {<a name="line.8201"></a>
-<span class="sourceLineNo">8202</span>      configurationManager.get().registerObserver(s);<a name="line.8202"></a>
-<span class="sourceLineNo">8203</span>    }<a name="line.8203"></a>
-<span class="sourceLineNo">8204</span>  }<a name="line.8204"></a>
-<span class="sourceLineNo">8205</span><a name="line.8205"></a>
-<span class="sourceLineNo">8206</span>  /**<a name="line.8206"></a>
-<span class="sourceLineNo">8207</span>   * {@inheritDoc}<a name="line.8207"></a>
-<span class="sourceLineNo">8208</span>   */<a name="line.8208"></a>
-<span class="sourceLineNo">8209</span>  @Override<a name="line.8209"></a>
-<span class="sourceLineNo">8210</span>  public void deregisterChildren(ConfigurationManager manager) {<a name="line.8210"></a>
-<span class="sourceLineNo">8211</span>    for (Store s : this.stores.values()) {<a name="line.8211"></a>
-<span class="sourceLineNo">8212</span>      configurationManager.get().deregisterObserver(s);<a name="line.8212"></a>
-<span class="sourceLineNo">8213</span>    }<a name="line.8213"></a>
-<span class="sourceLineNo">8214</span>  }<a name="line.8214"></a>
-<span class="sourceLineNo">8215</span><a name="line.8215"></a>
-<span class="sourceLineNo">8216</span>  @Override<a name="line.8216"></a>
-<span class="sourceLineNo">8217</span>  public CellComparator getCellComparator() {<a name="line.8217"></a>
-<span class="sourceLineNo">8218</span>    return this.getRegionInfo().isMetaRegion() ? CellComparator.META_COMPARATOR<a name="line.8218"></a>
-<span class="sourceLineNo">8219</span>        : CellComparator.COMPARATOR;<a name="line.8219"></a>
-<span class="sourceLineNo">8220</span>  }<a name="line.8220"></a>
-<span class="sourceLineNo">8221</span><a name="line.8221"></a>
-<span class="sourceLineNo">8222</span>  public long getMemstoreFlushSize() {<a name="line.8222"></a>
-<span class="sourceLineNo">8223</span>    return this.memstoreFlushSize;<a name="line.8223"></a>
-<span class="sourceLineNo">8224</span>  }<a name="line.8224"></a>
-<span class="sourceLineNo">8225</span><a name="line.8225"></a>
-<span class="sourceLineNo">8226</span>  //// method for debugging tests<a name="line.8226"></a>
-<span class="sourceLineNo">8227</span>  void throwException(String title, String regionName) {<a name="line.8227"></a>
-<span class="sourceLineNo">8228</span>    StringBuffer buf = new StringBuffer();<a name="line.8228"></a>
-<span class="sourceLineNo">8229</span>    buf.append(title + ", ");<a name="line.8229"></a>
-<span class="sourceLineNo">8230</span>    buf.append(getRegionInfo().toString());<a name="line.8230"></a>
-<span class="sourceLineNo">8231</span>    buf.append(getRegionInfo().isMetaRegion() ? " meta region " : " ");<a name="line.8231"></a>
-<span class="sourceLineNo">8232</span>    buf.append(getRegionInfo().isMetaTable() ? " meta table " : " ");<a name="line.8232"></a>
-<span class="sourceLineNo">8233</span>    buf.append("stores: ");<a name="line.8233"></a>
-<span class="sourceLineNo">8234</span>    for (Store s : getStores()) {<a name="line.8234"></a>
-<span class="sourceLineNo">8235</span>      buf.append(s.getColumnFamilyDescriptor().getNameAsString());<a name="line.8235"></a>
-<span class="sourceLineNo">8236</span>      buf.append(" size: ");<a name="line.8236"></a>
-<span class="sourceLineNo">8237</span>      buf.append(s.getSizeOfMemStore().getDataSize());<a name="line.8237"></a>
-<span class="sourceLineNo">8238</span>      buf.append(" ");<a name="line.8238"></a>
-<span class="sourceLineNo">8239</span>    }<a name="line.8239"></a>
-<span class="sourceLineNo">8240</span>    buf.append("end-of-stores");<a name="line.8240"></a>
-<span class="sourceLineNo">8241</span>    buf.append(", memstore size ");<a name="line.8241"></a>
-<span class="sourceLineNo">8242</span>    buf.append(getMemstoreSize());<a name="line.8242"></a>
-<span class="sourceLineNo">8243</span>    if (getRegionInfo().getRegionNameAsString().startsWith(regionName)) {<a name="line.8243"></a>
-<span class="sourceLineNo">8244</span>      throw new RuntimeException(buf.toString());<a name="line.8244"></a>
-<span class="sourceLineNo">8245</span>    }<a name="line.8245"></a>
-<span class="sourceLineNo">8246</span>  }<a name="line.8246"></a>
-<span class="sourceLineNo">8247</span>}<a name="line.8247"></a>
+<span class="sourceLineNo">8195</span>  @VisibleForTesting<a name="line.8195"></a>
+<span class="sourceLineNo">8196</span>  public long getReadPoint() {<a name="line.8196"></a>
+<span class="sourceLineNo">8197</span>    return getReadPoint(IsolationLevel.READ_COMMITTED);<a name="line.8197"></a>
+<span class="sourceLineNo">8198</span>  }<a name="line.8198"></a>
+<span class="sourceLineNo">8199</span><a name="line.8199"></a>
+<span class="sourceLineNo">8200</span>  /**<a name="line.8200"></a>
+<span class="sourceLineNo">8201</span>   * {@inheritDoc}<a name="line.8201"></a>
+<span class="sourceLineNo">8202</span>   */<a name="line.8202"></a>
+<span class="sourceLineNo">8203</span>  @Override<a name="line.8203"></a>
+<span class="sourceLineNo">8204</span>  public void onConfigurationChange(Configuration conf) {<a name="line.8204"></a>
+<span class="sourceLineNo">8205</span>    // Do nothing for now.<a name="line.8205"></a>
+<span class="sourceLineNo">8206</span>  }<a name="line.8206"></a>
+<span class="sourceLineNo">8207</span><a name="line.8207"></a>
+<span class="sourceLineNo">8208</span>  /**<a name="line.8208"></a>
+<span class="sourceLineNo">8209</span>   * {@inheritDoc}<a name="line.8209"></a>
+<span class="sourceLineNo">8210</span>   */<a name="line.8210"></a>
+<span class="sourceLineNo">8211</span>  @Override<a name="line.8211"></a>
+<span class="sourceLineNo">8212</span>  public void registerChildren(ConfigurationManager manager) {<a name="line.8212"></a>
+<span class="sourceLineNo">8213</span>    configurationManager = Optional.of(manager);<a name="line.8213"></a>
+<span class="sourceLineNo">8214</span>    for (Store s : this.stores.values()) {<a name="line.8214"></a>
+<span class="sourceLineNo">8215</span>      configurationManager.get().registerObserver(s);<a name="line.8215"></a>
+<span class="sourceLineNo">8216</span>    }<a name="line.8216"></a>
+<span class="sourceLineNo">8217</span>  }<a name="line.8217"></a>
+<span class="sourceLineNo">8218</span><a name="line.8218"></a>
+<span class="sourceLineNo">8219</span>  /**<a name="line.8219"></a>
+<span class="sourceLineNo">8220</span>   * {@inheritDoc}<a name="line.8220"></a>
+<span class="sourceLineNo">8221</span>   */<a name="line.8221"></a>
+<span class="sourceLineNo">8222</span>  @Override<a name="line.8222"></a>
+<span class="sourceLineNo">8223</span>  public void deregisterChildren(ConfigurationManager manager) {<a name="line.8223"></a>
+<span class="sourceLineNo">8224</span>    for (Store s : this.stores.values()) {<a name="line.8224"></a>
+<span class="sourceLineNo">8225</span>      configurationManager.get().deregisterObserver(s);<a name="line.8225"></a>
+<span class="sourceLineNo">8226</span>    }<a name="line.8226"></a>
+<span class="sourceLineNo">8227</span>  }<a name="line.8227"></a>
+<span class="sourceLineNo">8228</span><a name="line.8228"></a>
+<span class="sourceLineNo">8229</span>  @Override<a name="line.8229"></a>
+<span class="sourceLineNo">8230</span>  public CellComparator getCellComparator() {<a name="line.8230"></a>
+<span class="sourceLineNo">8231</span>    return this.getRegionInfo().isMetaRegion() ? CellComparator.META_COMPARATOR<a name="line.8231"></a>
+<span class="sourceLineNo">8232</span>        : CellComparator.COMPARATOR;<a name="line.8232"></a>
+<span class="sourceLineNo">8233</span>  }<a name="line.8233"></a>
+<span class="sourceLineNo">8234</span><a name="line.8234"></a>
+<span class="sourceLineNo">8235</span>  public long getMemstoreFlushSize() {<a name="line.8235"></a>
+<span class="sourceLineNo">8236</span>    return this.memstoreFlushSize;<a name="line.8236"></a>
+<span class="sourceLineNo">8237</span>  }<a name="line.8237"></a>
+<span class="sourceLineNo">8238</span><a name="line.8238"></a>
+<span class="sourceLineNo">8239</span>  //// method for debugging tests<a name="line.8239"></a>
+<span class="sourceLineNo">8240</span>  void throwException(String title, String regionName) {<a name="line.8240"></a>
+<span class="sourceLineNo">8241</span>    StringBuffer buf = new StringBuffer();<a name="line.8241"></a>
+<span class="sourceLineNo">8242</span>    buf.append(title + ", ");<a name="line.8242"></a>
+<span class="sourceLineNo">8243</span>    buf.append(getRegionInfo().toString());<a name="line.8243"></a>
+<span class="sourceLineNo">8244</span>    buf.append(getRegionInfo().isMetaRegion() ? " meta region " : " ");<a name="line.8244"></a>
+<span class="sourceLineNo">8245</span>    buf.append(getRegionInfo().isMetaTable() ? " meta table " : " ");<a name="line.8245"></a>
+<span class="sourceLineNo">8246</span>    buf.append("stores: ");<a name="line.8246"></a>
+<span class="sourceLineNo">8247</span>    for (Store s : getStores()) {<a name="line.8247"></a>
+<span class="sourceLineNo">8248</span>      buf.append(s.getColumnFamilyDescriptor().getNameAsString());<a name="line.8248"></a>
+<span class="sourceLineNo">8249</span>      buf.append(" size: ");<a name="line.8249"></a>
+<span class="sourceLineNo">8250</span>      buf.append(s.getSizeOfMemStore().getDataSize());<a name="line.8250"></a>
+<span class="sourceLineNo">8251</span>      buf.append(" ");<a name="line.8251"></a>
+<span class="sourceLineNo">8252</span>    }<a name="line.8252"></a>
+<span class="sourceLineNo">8253</span>    buf.append("end-of-stores");<a name="line.8253"></a>
+<span class="sourceLineNo">8254</span>    buf.append(", memstore size ");<a name="line.8254"></a>
+<span class="sourceLineNo">8255</span>    buf.append(getMemstoreSize());<a name="line.8255"></a>
+<span class="sourceLineNo">8256</span>    if (getRegionInfo().getRegionNameAsString().startsWith(regionName)) {<a name="line.8256"></a>
+<span class="sourceLineNo">8257</span>      throw new RuntimeException(buf.toString());<a name="line.8257"></a>
+<span class="sourceLineNo">8258</span>    }<a name="line.8258"></a>
+<span class="sourceLineNo">8259</span>  }<a name="line.8259"></a>
+<span class="sourceLineNo">8260</span>}<a name="line.8260"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html
index f2ed401..29c147d 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html
@@ -2494,127 +2494,143 @@
 <span class="sourceLineNo">2486</span>     return getRegionInfo().getReplicaId() == HRegionInfo.DEFAULT_REPLICA_ID;<a name="line.2486"></a>
 <span class="sourceLineNo">2487</span>  }<a name="line.2487"></a>
 <span class="sourceLineNo">2488</span><a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>  @Override<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>  public synchronized void closeAndArchiveCompactedFiles() throws IOException {<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    // ensure other threads do not attempt to archive the same files on close()<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    archiveLock.lock();<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>    try {<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>      lock.readLock().lock();<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>      Collection&lt;StoreFile&gt; copyCompactedfiles = null;<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>      try {<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>        Collection&lt;StoreFile&gt; compactedfiles =<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>            this.getStoreEngine().getStoreFileManager().getCompactedfiles();<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>        if (compactedfiles != null &amp;&amp; compactedfiles.size() != 0) {<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>          // Do a copy under read lock<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>          copyCompactedfiles = new ArrayList&lt;&gt;(compactedfiles);<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>        } else {<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>          if (LOG.isTraceEnabled()) {<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>            LOG.trace("No compacted files to archive");<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>            return;<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>          }<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>        }<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>      } finally {<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>        lock.readLock().unlock();<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>      }<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span>      if (copyCompactedfiles != null &amp;&amp; !copyCompactedfiles.isEmpty()) {<a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>        removeCompactedfiles(copyCompactedfiles);<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>      }<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>    } finally {<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>      archiveLock.unlock();<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>    }<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>  }<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span><a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>  /**<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span>   * Archives and removes the compacted files<a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>   * @param compactedfiles The compacted files in this store that are not active in reads<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>   * @throws IOException<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>   */<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>  private void removeCompactedfiles(Collection&lt;StoreFile&gt; compactedfiles)<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>      throws IOException {<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>    final List&lt;StoreFile&gt; filesToRemove = new ArrayList&lt;&gt;(compactedfiles.size());<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>    for (final StoreFile file : compactedfiles) {<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span>      synchronized (file) {<a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>        try {<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>          StoreFileReader r = file.getReader();<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>          if (r == null) {<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>            if (LOG.isDebugEnabled()) {<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>              LOG.debug("The file " + file + " was closed but still not archived.");<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span>            }<a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>            filesToRemove.add(file);<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>            continue;<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>          }<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>          if (file.isCompactedAway() &amp;&amp; !file.isReferencedInReads()) {<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>            // Even if deleting fails we need not bother as any new scanners won't be<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span>            // able to use the compacted file as the status is already compactedAway<a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>            if (LOG.isTraceEnabled()) {<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>              LOG.trace("Closing and archiving the file " + file.getPath());<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>            }<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>            r.close(true);<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>            // Just close and return<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span>            filesToRemove.add(file);<a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>          }<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>        } catch (Exception e) {<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>          LOG.error(<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>            "Exception while trying to close the compacted store file " + file.getPath().getName());<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>        }<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span>      }<a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>    }<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>    if (this.isPrimaryReplicaStore()) {<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>      // Only the primary region is allowed to move the file to archive.<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>      // The secondary region does not move the files to archive. Any active reads from<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      // the secondary region will still work because the file as such has active readers on it.<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span>      if (!filesToRemove.isEmpty()) {<a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>        if (LOG.isDebugEnabled()) {<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>          LOG.debug("Moving the files " + filesToRemove + " to archive");<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>        }<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>        // Only if this is successful it has to be removed<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>        try {<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span>          this.fs.removeStoreFiles(this.getColumnFamilyDescriptor().getNameAsString(), filesToRemove);<a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>        } catch (FailedArchiveException fae) {<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>          // Even if archiving some files failed, we still need to clear out any of the<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>          // files which were successfully archived.  Otherwise we will receive a<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>          // FileNotFoundException when we attempt to re-archive them in the next go around.<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>          Collection&lt;Path&gt; failedFiles = fae.getFailedFiles();<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span>          Iterator&lt;StoreFile&gt; iter = filesToRemove.iterator();<a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>          while (iter.hasNext()) {<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>            if (failedFiles.contains(iter.next().getPath())) {<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>              iter.remove();<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>            }<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>          }<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span>          if (!filesToRemove.isEmpty()) {<a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>            clearCompactedfiles(filesToRemove);<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>          }<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>          throw fae;<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>        }<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>      }<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span>    }<a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>    if (!filesToRemove.isEmpty()) {<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>      // Clear the compactedfiles from the store file manager<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>      clearCompactedfiles(filesToRemove);<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>    }<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>  }<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span><a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>  public Long preFlushSeqIDEstimation() {<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>    return memstore.preFlushSeqIDEstimation();<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>  }<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span><a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>  @Override<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span>  public boolean isSloppyMemstore() {<a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>    return this.memstore.isSloppy();<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>  }<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span><a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>  private void clearCompactedfiles(final List&lt;StoreFile&gt; filesToRemove) throws IOException {<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>    if (LOG.isTraceEnabled()) {<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span>      LOG.trace("Clearing the compacted file " + filesToRemove + " from this store");<a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>    }<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>    try {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>      lock.writeLock().lock();<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>      this.getStoreEngine().getStoreFileManager().removeCompactedFiles(filesToRemove);<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>    } finally {<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span>      lock.writeLock().unlock();<a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>    }<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>  }<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>}<a name="line.2609"></a>
+<span class="sourceLineNo">2489</span>  /**<a name="line.2489"></a>
+<span class="sourceLineNo">2490</span>   * Sets the store up for a region level snapshot operation.<a name="line.2490"></a>
+<span class="sourceLineNo">2491</span>   * @see #postSnapshotOperation()<a name="line.2491"></a>
+<span class="sourceLineNo">2492</span>   */<a name="line.2492"></a>
+<span class="sourceLineNo">2493</span>  public void preSnapshotOperation() {<a name="line.2493"></a>
+<span class="sourceLineNo">2494</span>    archiveLock.lock();<a name="line.2494"></a>
+<span class="sourceLineNo">2495</span>  }<a name="line.2495"></a>
+<span class="sourceLineNo">2496</span><a name="line.2496"></a>
+<span class="sourceLineNo">2497</span>  /**<a name="line.2497"></a>
+<span class="sourceLineNo">2498</span>   * Perform tasks needed after the completion of snapshot operation.<a name="line.2498"></a>
+<span class="sourceLineNo">2499</span>   * @see #preSnapshotOperation()<a name="line.2499"></a>
+<span class="sourceLineNo">2500</span>   */<a name="line.2500"></a>
+<span class="sourceLineNo">2501</span>  public void postSnapshotOperation() {<a name="line.2501"></a>
+<span class="sourceLineNo">2502</span>    archiveLock.unlock();<a name="line.2502"></a>
+<span class="sourceLineNo">2503</span>  }<a name="line.2503"></a>
+<span class="sourceLineNo">2504</span><a name="line.2504"></a>
+<span class="sourceLineNo">2505</span>  @Override<a name="line.2505"></a>
+<span class="sourceLineNo">2506</span>  public synchronized void closeAndArchiveCompactedFiles() throws IOException {<a name="line.2506"></a>
+<span class="sourceLineNo">2507</span>    // ensure other threads do not attempt to archive the same files on close()<a name="line.2507"></a>
+<span class="sourceLineNo">2508</span>    archiveLock.lock();<a name="line.2508"></a>
+<span class="sourceLineNo">2509</span>    try {<a name="line.2509"></a>
+<span class="sourceLineNo">2510</span>      lock.readLock().lock();<a name="line.2510"></a>
+<span class="sourceLineNo">2511</span>      Collection&lt;StoreFile&gt; copyCompactedfiles = null;<a name="line.2511"></a>
+<span class="sourceLineNo">2512</span>      try {<a name="line.2512"></a>
+<span class="sourceLineNo">2513</span>        Collection&lt;StoreFile&gt; compactedfiles =<a name="line.2513"></a>
+<span class="sourceLineNo">2514</span>            this.getStoreEngine().getStoreFileManager().getCompactedfiles();<a name="line.2514"></a>
+<span class="sourceLineNo">2515</span>        if (compactedfiles != null &amp;&amp; compactedfiles.size() != 0) {<a name="line.2515"></a>
+<span class="sourceLineNo">2516</span>          // Do a copy under read lock<a name="line.2516"></a>
+<span class="sourceLineNo">2517</span>          copyCompactedfiles = new ArrayList&lt;&gt;(compactedfiles);<a name="line.2517"></a>
+<span class="sourceLineNo">2518</span>        } else {<a name="line.2518"></a>
+<span class="sourceLineNo">2519</span>          if (LOG.isTraceEnabled()) {<a name="line.2519"></a>
+<span class="sourceLineNo">2520</span>            LOG.trace("No compacted files to archive");<a name="line.2520"></a>
+<span class="sourceLineNo">2521</span>            return;<a name="line.2521"></a>
+<span class="sourceLineNo">2522</span>          }<a name="line.2522"></a>
+<span class="sourceLineNo">2523</span>        }<a name="line.2523"></a>
+<span class="sourceLineNo">2524</span>      } finally {<a name="line.2524"></a>
+<span class="sourceLineNo">2525</span>        lock.readLock().unlock();<a name="line.2525"></a>
+<span class="sourceLineNo">2526</span>      }<a name="line.2526"></a>
+<span class="sourceLineNo">2527</span>      if (copyCompactedfiles != null &amp;&amp; !copyCompactedfiles.isEmpty()) {<a name="line.2527"></a>
+<span class="sourceLineNo">2528</span>        removeCompactedfiles(copyCompactedfiles);<a name="line.2528"></a>
+<span class="sourceLineNo">2529</span>      }<a name="line.2529"></a>
+<span class="sourceLineNo">2530</span>    } finally {<a name="line.2530"></a>
+<span class="sourceLineNo">2531</span>      archiveLock.unlock();<a name="line.2531"></a>
+<span class="sourceLineNo">2532</span>    }<a name="line.2532"></a>
+<span class="sourceLineNo">2533</span>  }<a name="line.2533"></a>
+<span class="sourceLineNo">2534</span><a name="line.2534"></a>
+<span class="sourceLineNo">2535</span>  /**<a name="line.2535"></a>
+<span class="sourceLineNo">2536</span>   * Archives and removes the compacted files<a name="line.2536"></a>
+<span class="sourceLineNo">2537</span>   * @param compactedfiles The compacted files in this store that are not active in reads<a name="line.2537"></a>
+<span class="sourceLineNo">2538</span>   * @throws IOException<a name="line.2538"></a>
+<span class="sourceLineNo">2539</span>   */<a name="line.2539"></a>
+<span class="sourceLineNo">2540</span>  private void removeCompactedfiles(Collection&lt;StoreFile&gt; compactedfiles)<a name="line.2540"></a>
+<span class="sourceLineNo">2541</span>      throws IOException {<a name="line.2541"></a>
+<span class="sourceLineNo">2542</span>    final List&lt;StoreFile&gt; filesToRemove = new ArrayList&lt;&gt;(compactedfiles.size());<a name="line.2542"></a>
+<span class="sourceLineNo">2543</span>    for (final StoreFile file : compactedfiles) {<a name="line.2543"></a>
+<span class="sourceLineNo">2544</span>      synchronized (file) {<a name="line.2544"></a>
+<span class="sourceLineNo">2545</span>        try {<a name="line.2545"></a>
+<span class="sourceLineNo">2546</span>          StoreFileReader r = file.getReader();<a name="line.2546"></a>
+<span class="sourceLineNo">2547</span>          if (r == null) {<a name="line.2547"></a>
+<span class="sourceLineNo">2548</span>            if (LOG.isDebugEnabled()) {<a name="line.2548"></a>
+<span class="sourceLineNo">2549</span>              LOG.debug("The file " + file + " was closed but still not archived.");<a name="line.2549"></a>
+<span class="sourceLineNo">2550</span>            }<a name="line.2550"></a>
+<span class="sourceLineNo">2551</span>            filesToRemove.add(file);<a name="line.2551"></a>
+<span class="sourceLineNo">2552</span>            continue;<a name="line.2552"></a>
+<span class="sourceLineNo">2553</span>          }<a name="line.2553"></a>
+<span class="sourceLineNo">2554</span>          if (file.isCompactedAway() &amp;&amp; !file.isReferencedInReads()) {<a name="line.2554"></a>
+<span class="sourceLineNo">2555</span>            // Even if deleting fails we need not bother as any new scanners won't be<a name="line.2555"></a>
+<span class="sourceLineNo">2556</span>            // able to use the compacted file as the status is already compactedAway<a name="line.2556"></a>
+<span class="sourceLineNo">2557</span>            if (LOG.isTraceEnabled()) {<a name="line.2557"></a>
+<span class="sourceLineNo">2558</span>              LOG.trace("Closing and archiving the file " + file.getPath());<a name="line.2558"></a>
+<span class="sourceLineNo">2559</span>            }<a name="line.2559"></a>
+<span class="sourceLineNo">2560</span>            r.close(true);<a name="line.2560"></a>
+<span class="sourceLineNo">2561</span>            // Just close and return<a name="line.2561"></a>
+<span class="sourceLineNo">2562</span>            filesToRemove.add(file);<a name="line.2562"></a>
+<span class="sourceLineNo">2563</span>          }<a name="line.2563"></a>
+<span class="sourceLineNo">2564</span>        } catch (Exception e) {<a name="line.2564"></a>
+<span class="sourceLineNo">2565</span>          LOG.error(<a name="line.2565"></a>
+<span class="sourceLineNo">2566</span>            "Exception while trying to close the compacted store file " + file.getPath().getName());<a name="line.2566"></a>
+<span class="sourceLineNo">2567</span>        }<a name="line.2567"></a>
+<span class="sourceLineNo">2568</span>      }<a name="line.2568"></a>
+<span class="sourceLineNo">2569</span>    }<a name="line.2569"></a>
+<span class="sourceLineNo">2570</span>    if (this.isPrimaryReplicaStore()) {<a name="line.2570"></a>
+<span class="sourceLineNo">2571</span>      // Only the primary region is allowed to move the file to archive.<a name="line.2571"></a>
+<span class="sourceLineNo">2572</span>      // The secondary region does not move the files to archive. Any active reads from<a name="line.2572"></a>
+<span class="sourceLineNo">2573</span>      // the secondary region will still work because the file as such has active readers on it.<a name="line.2573"></a>
+<span class="sourceLineNo">2574</span>      if (!filesToRemove.isEmpty()) {<a name="line.2574"></a>
+<span class="sourceLineNo">2575</span>        if (LOG.isDebugEnabled()) {<a name="line.2575"></a>
+<span class="sourceLineNo">2576</span>          LOG.debug("Moving the files " + filesToRemove + " to archive");<a name="line.2576"></a>
+<span class="sourceLineNo">2577</span>        }<a name="line.2577"></a>
+<span class="sourceLineNo">2578</span>        // Only if this is successful it has to be removed<a name="line.2578"></a>
+<span class="sourceLineNo">2579</span>        try {<a name="line.2579"></a>
+<span class="sourceLineNo">2580</span>          this.fs.removeStoreFiles(this.getColumnFamilyDescriptor().getNameAsString(), filesToRemove);<a name="line.2580"></a>
+<span class="sourceLineNo">2581</span>        } catch (FailedArchiveException fae) {<a name="line.2581"></a>
+<span class="sourceLineNo">2582</span>          // Even if archiving some files failed, we still need to clear out any of the<a name="line.2582"></a>
+<span class="sourceLineNo">2583</span>          // files which were successfully archived.  Otherwise we will receive a<a name="line.2583"></a>
+<span class="sourceLineNo">2584</span>          // FileNotFoundException when we attempt to re-archive them in the next go around.<a name="line.2584"></a>
+<span class="sourceLineNo">2585</span>          Collection&lt;Path&gt; failedFiles = fae.getFailedFiles();<a name="line.2585"></a>
+<span class="sourceLineNo">2586</span>          Iterator&lt;StoreFile&gt; iter = filesToRemove.iterator();<a name="line.2586"></a>
+<span class="sourceLineNo">2587</span>          while (iter.hasNext()) {<a name="line.2587"></a>
+<span class="sourceLineNo">2588</span>            if (failedFiles.contains(iter.next().getPath())) {<a name="line.2588"></a>
+<span class="sourceLineNo">2589</span>              iter.remove();<a name="line.2589"></a>
+<span class="sourceLineNo">2590</span>            }<a name="line.2590"></a>
+<span class="sourceLineNo">2591</span>          }<a name="line.2591"></a>
+<span class="sourceLineNo">2592</span>          if (!filesToRemove.isEmpty()) {<a name="line.2592"></a>
+<span class="sourceLineNo">2593</span>            clearCompactedfiles(filesToRemove);<a name="line.2593"></a>
+<span class="sourceLineNo">2594</span>          }<a name="line.2594"></a>
+<span class="sourceLineNo">2595</span>          throw fae;<a name="line.2595"></a>
+<span class="sourceLineNo">2596</span>        }<a name="line.2596"></a>
+<span class="sourceLineNo">2597</span>      }<a name="line.2597"></a>
+<span class="sourceLineNo">2598</span>    }<a name="line.2598"></a>
+<span class="sourceLineNo">2599</span>    if (!filesToRemove.isEmpty()) {<a name="line.2599"></a>
+<span class="sourceLineNo">2600</span>      // Clear the compactedfiles from the store file manager<a name="line.2600"></a>
+<span class="sourceLineNo">2601</span>      clearCompactedfiles(filesToRemove);<a name="line.2601"></a>
+<span class="sourceLineNo">2602</span>    }<a name="line.2602"></a>
+<span class="sourceLineNo">2603</span>  }<a name="line.2603"></a>
+<span class="sourceLineNo">2604</span><a name="line.2604"></a>
+<span class="sourceLineNo">2605</span>  public Long preFlushSeqIDEstimation() {<a name="line.2605"></a>
+<span class="sourceLineNo">2606</span>    return memstore.preFlushSeqIDEstimation();<a name="line.2606"></a>
+<span class="sourceLineNo">2607</span>  }<a name="line.2607"></a>
+<span class="sourceLineNo">2608</span><a name="line.2608"></a>
+<span class="sourceLineNo">2609</span>  @Override<a name="line.2609"></a>
+<span class="sourceLineNo">2610</span>  public boolean isSloppyMemstore() {<a name="line.2610"></a>
+<span class="sourceLineNo">2611</span>    return this.memstore.isSloppy();<a name="line.2611"></a>
+<span class="sourceLineNo">2612</span>  }<a name="line.2612"></a>
+<span class="sourceLineNo">2613</span><a name="line.2613"></a>
+<span class="sourceLineNo">2614</span>  private void clearCompactedfiles(final List&lt;StoreFile&gt; filesToRemove) throws IOException {<a name="line.2614"></a>
+<span class="sourceLineNo">2615</span>    if (LOG.isTraceEnabled()) {<a name="line.2615"></a>
+<span class="sourceLineNo">2616</span>      LOG.trace("Clearing the compacted file " + filesToRemove + " from this store");<a name="line.2616"></a>
+<span class="sourceLineNo">2617</span>    }<a name="line.2617"></a>
+<span class="sourceLineNo">2618</span>    try {<a name="line.2618"></a>
+<span class="sourceLineNo">2619</span>      lock.writeLock().lock();<a name="line.2619"></a>
+<span class="sourceLineNo">2620</span>      this.getStoreEngine().getStoreFileManager().removeCompactedFiles(filesToRemove);<a name="line.2620"></a>
+<span class="sourceLineNo">2621</span>    } finally {<a name="line.2621"></a>
+<span class="sourceLineNo">2622</span>      lock.writeLock().unlock();<a name="line.2622"></a>
+<span class="sourceLineNo">2623</span>    }<a name="line.2623"></a>
+<span class="sourceLineNo">2624</span>  }<a name="line.2624"></a>
+<span class="sourceLineNo">2625</span>}<a name="line.2625"></a>
 
 
 


[28/33] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/org/apache/hadoop/hbase/regionserver/HMobStore.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HMobStore.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HMobStore.html
index 95cb9ab..6a9d201 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HMobStore.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HMobStore.html
@@ -472,7 +472,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#add-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.regionserver.MemstoreSize-">add</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#add-java.lang.Iterable-org.apache.hadoop.hbase.regionserver.MemstoreSize-">add</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#addChangedReaderObserver-org.apache.hadoop.hbase.regionserver.ChangedReadersObserver-">addChangedReaderObserver</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#areWritesEnabled--">areWritesEnabled</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#assertBulkLoadHFileOk-org.apache.hadoop.fs.Path-">assertBulkLoadHFileOk</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#bulkLoadHFile-byte:A-java.lang.String-org.apache.hadoop.fs.Path-">bulkLoadHFile</a>, <a href="../../../../../org/apache/hadoop/hbase/region
 server/HStore.html#bulkLoadHFile-org.apache.hadoop.hbase.regionserver.StoreFileInfo-">bulkLoadHFile</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#cancelRequestedCompaction-org.apache.hadoop.hbase.regionserver.compactions.CompactionContext-">cancelRequestedCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#canSplit--">canSplit</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#close--">close</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#closeAndArchiveCompactedFiles--">closeAndArchiveCompactedFiles</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#compact-org.apache.hadoop.hbase.regionserver.compactions.CompactionContext-org.apache.hadoop.hbase.regionserver.throttle.ThroughputController-">compact</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#compact-org.apache.hadoop.hbase.regionserver.compactions.
 CompactionContext-org.apache.hadoop.hbase.regionserver.throttle.ThroughputController-org.apache.hadoop.hbase.security.User-">compact</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#compactRecentForTestingAssumingDefaultPolicy-int-">compactRecentForTestingAssumingDefaultPolicy</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#completeCompaction-java.util.Collection-">completeCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#createFlushContext-long-">createFlushContext</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#createWriterInTmp-long-org.apache.hadoop.hbase.io.compress.Compression.Algorithm-boolean-boolean-boolean-">createWriterInTmp</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#createWriterInTmp-long-org.apache.hadoop.hbase.io.compress.Compression.Algorithm-boolean-boolean-boolean-boolean-">createWriterInTmp</a>, <a href="
 ../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#createWriterInTmp-long-org.apache.hadoop.hbase.io.compress.Compression.Algorithm-boolean-boolean-boolean-boolean-org.apache.hadoop.hbase.regionserver.TimeRangeTracker-">createWriterInTmp</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#deleteChangedReaderObserver-org.apache.hadoop.hbase.regionserver.ChangedReadersObserver-">deleteChangedReaderObserver</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#deregisterChildren-org.apache.hadoop.hbase.conf.ConfigurationManager-">deregisterChildren</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#determineTTLFromFamily-org.apache.hadoop.hbase.client.ColumnFamilyDescriptor-">determineTTLFromFamily</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#flushCache-long-org.apache.hadoop.hbase.regionserver.MemStoreSnapshot-org.apache.hadoop.hbase.monitoring.MonitoredTask-org.a
 pache.hadoop.hbase.regionserver.throttle.ThroughputController-">flushCache</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getAvgStoreFileAge--">getAvgStoreFileAge</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getBlockingFileCount--">getBlockingFileCount</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getBytesPerChecksum-org.apache.hadoop.conf.Configuration-">getBytesPerChecksum</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCacheConfig--">getCacheConfig</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getChecksumType-org.apache.hadoop.conf.Configuration-">getChecksumType</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCloseCheckInterval--">getCloseCheckInterval</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getColumnFamilyDescriptor--">getColumnFamilyDescriptor</a>, 
 <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getColumnFamilyName--">getColumnFamilyName</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCompactedCellsCount--">getCompactedCellsCount</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCompactedCellsSize--">getCompactedCellsSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCompactedFiles--">getCompactedFiles</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCompactedFilesCount--">getCompactedFilesCount</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCompactionCheckMultiplier--">getCompactionCheckMultiplier</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCompactionPressure--">getCompactionPressure</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCompactionProgress--">getCompactionProgr
 ess</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCompactPriority--">getCompactPriority</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getComparator--">getComparator</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCoprocessorHost--">getCoprocessorHost</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getDataBlockEncoder--">getDataBlockEncoder</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getFileSystem--">getFileSystem</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getFlushableSize--">getFlushableSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getFlushedCellsCount--">getFlushedCellsCount</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getFlushedCellsSize--">getFlushedCellsSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regi
 onserver/HStore.html#getFlushedOutputFileSize--">getFlushedOutputFileSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getHFilesSize--">getHFilesSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getHRegion--">getHRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getLastCompactSize--">getLastCompactSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getMajorCompactedCellsCount--">getMajorCompactedCellsCount</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getMajorCompactedCellsSize--">getMajorCompactedCellsSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getMaxMemstoreTS--">getMaxMemstoreTS</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getMaxSequenceId--">getMaxSequenceId</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getMaxStoreF
 ileAge--">getMaxStoreFileAge</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getMemstoreFlushSize--">getMemstoreFlushSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getMemStoreSize--">getMemStoreSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getMinStoreFileAge--">getMinStoreFileAge</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getNumHFiles--">getNumHFiles</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getNumReferenceFiles--">getNumReferenceFiles</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getOffPeakHours--">getOffPeakHours</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getRegionFileSystem--">getRegionFileSystem</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getRegionInfo--">getRegionInfo</a>, <a href="../../../../../org/apache/
 hadoop/hbase/regionserver/HStore.html#getScanInfo--">getScanInfo</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getScanner-org.apache.hadoop.hbase.client.Scan-java.util.NavigableSet-long-">getScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getScanners-boolean-boolean-boolean-org.apache.hadoop.hbase.regionserver.querymatcher.ScanQueryMatcher-byte:A-boolean-byte:A-boolean-long-">getScanners</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getScanners-java.util.List-boolean-boolean-boolean-org.apache.hadoop.hbase.regionserver.querymatcher.ScanQueryMatcher-byte:A-boolean-byte:A-boolean-long-boolean-">getScanners</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getSize--">getSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getSizeOfMemStore--">getSizeOfMemStore</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HSt
 ore.html#getSizeOfSnapshot--">getSizeOfSnapshot</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getSizeToFlush--">getSizeToFlush</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getSmallestReadPoint--">getSmallestReadPoint</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getSnapshotSize--">getSnapshotSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getSplitPoint--">getSplitPoint</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStoreEngine--">getStoreEngine</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStorefiles--">getStorefiles</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStorefilesCount--">getStorefilesCount</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStorefilesIndexSize--">getStorefilesIndexSize</a>, <a href="../../../../.
 ./org/apache/hadoop/hbase/regionserver/HStore.html#getStorefilesSize--">getStorefilesSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStoreFileTtl--">getStoreFileTtl</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStoreHomedir-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.HRegionInfo-byte:A-">getStoreHomedir</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStoreHomedir-org.apache.hadoop.fs.Path-java.lang.String-byte:A-">getStoreHomedir</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStoreSizeUncompressed--">getStoreSizeUncompressed</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getTableName--">getTableName</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getTotalStaticBloomSize--">getTotalStaticBloomSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getTot
 alStaticIndexSize--">getTotalStaticIndexSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#hasReferences--">hasReferences</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#hasTooManyStoreFiles--">hasTooManyStoreFiles</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#heapSize--">heapSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#isMajorCompaction--">isMajorCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#isPrimaryReplicaStore--">isPrimaryReplicaStore</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#isSloppyMemstore--">isSloppyMemstore</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#moveFileIntoPlace-org.apache.hadoop.fs.Path-">moveFileIntoPlace</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#needsCompaction--">needsCompaction</a>, <a h
 ref="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#onConfigurationChange-org.apache.hadoop.conf.Configuration-">onConfigurationChange</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#preBulkLoadHFile-java.lang.String-long-">preBulkLoadHFile</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#preFlushSeqIDEstimation--">preFlushSeqIDEstimation</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#recreateScanners-java.util.List-boolean-boolean-boolean-org.apache.hadoop.hbase.regionserver.querymatcher.ScanQueryMatcher-byte:A-boolean-byte:A-boolean-long-boolean-">recreateScanners</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#refreshStoreFiles--">refreshStoreFiles</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#refreshStoreFiles-java.util.Collection-">refreshStoreFiles</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserv
 er/HStore.html#registerChildren-org.apache.hadoop.hbase.conf.ConfigurationManager-">registerChildren</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#replaceStoreFiles-java.util.Collection-java.util.Collection-">replaceStoreFiles</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#replayCompactionMarker-org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.CompactionDescriptor-boolean-boolean-">replayCompactionMarker</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#requestCompaction--">requestCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#requestCompaction-int-org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest-">requestCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#requestCompaction-int-org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest-org.apache.hadoop.hbase.security.User-">requ
 estCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#setDataBlockEncoderInTest-org.apache.hadoop.hbase.io.hfile.HFileDataBlockEncoder-">setDataBlockEncoderInTest</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#setScanInfo-org.apache.hadoop.hbase.regionserver.ScanInfo-">setScanInfo</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#snapshot--">snapshot</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#startReplayingFromWAL--">startReplayingFromWAL</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#stopReplayingFromWAL--">stopReplayingFromWAL</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#throttleCompaction-long-">throttleCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#timeOfOldestEdit--">timeOfOldestEdit</a>, <a href="../../../../../org/apache/hadoop/hbase/regionse
 rver/HStore.html#toString--">toString</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#triggerMajorCompaction--">triggerMajorCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#upsert-java.lang.Iterable-long-org.apache.hadoop.hbase.regionserver.MemstoreSize-">upsert</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#versionsToReturn-int-">versionsToReturn</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#add-org.apache.hadoop.hbase.Cell-org.apache.hadoop.hbase.regionserver.MemstoreSize-">add</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#add-java.lang.Iterable-org.apache.hadoop.hbase.regionserver.MemstoreSize-">add</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#addChangedReaderObserver-org.apache.hadoop.hbase.regionserver.ChangedReadersObserver-">addChangedReaderObserver</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#areWritesEnabled--">areWritesEnabled</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#assertBulkLoadHFileOk-org.apache.hadoop.fs.Path-">assertBulkLoadHFileOk</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#bulkLoadHFile-byte:A-java.lang.String-org.apache.hadoop.fs.Path-">bulkLoadHFile</a>, <a href="../../../../../org/apache/hadoop/hbase/region
 server/HStore.html#bulkLoadHFile-org.apache.hadoop.hbase.regionserver.StoreFileInfo-">bulkLoadHFile</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#cancelRequestedCompaction-org.apache.hadoop.hbase.regionserver.compactions.CompactionContext-">cancelRequestedCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#canSplit--">canSplit</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#close--">close</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#closeAndArchiveCompactedFiles--">closeAndArchiveCompactedFiles</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#compact-org.apache.hadoop.hbase.regionserver.compactions.CompactionContext-org.apache.hadoop.hbase.regionserver.throttle.ThroughputController-">compact</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#compact-org.apache.hadoop.hbase.regionserver.compactions.
 CompactionContext-org.apache.hadoop.hbase.regionserver.throttle.ThroughputController-org.apache.hadoop.hbase.security.User-">compact</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#compactRecentForTestingAssumingDefaultPolicy-int-">compactRecentForTestingAssumingDefaultPolicy</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#completeCompaction-java.util.Collection-">completeCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#createFlushContext-long-">createFlushContext</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#createWriterInTmp-long-org.apache.hadoop.hbase.io.compress.Compression.Algorithm-boolean-boolean-boolean-">createWriterInTmp</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#createWriterInTmp-long-org.apache.hadoop.hbase.io.compress.Compression.Algorithm-boolean-boolean-boolean-boolean-">createWriterInTmp</a>, <a href="
 ../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#createWriterInTmp-long-org.apache.hadoop.hbase.io.compress.Compression.Algorithm-boolean-boolean-boolean-boolean-org.apache.hadoop.hbase.regionserver.TimeRangeTracker-">createWriterInTmp</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#deleteChangedReaderObserver-org.apache.hadoop.hbase.regionserver.ChangedReadersObserver-">deleteChangedReaderObserver</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#deregisterChildren-org.apache.hadoop.hbase.conf.ConfigurationManager-">deregisterChildren</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#determineTTLFromFamily-org.apache.hadoop.hbase.client.ColumnFamilyDescriptor-">determineTTLFromFamily</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#flushCache-long-org.apache.hadoop.hbase.regionserver.MemStoreSnapshot-org.apache.hadoop.hbase.monitoring.MonitoredTask-org.a
 pache.hadoop.hbase.regionserver.throttle.ThroughputController-">flushCache</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getAvgStoreFileAge--">getAvgStoreFileAge</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getBlockingFileCount--">getBlockingFileCount</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getBytesPerChecksum-org.apache.hadoop.conf.Configuration-">getBytesPerChecksum</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCacheConfig--">getCacheConfig</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getChecksumType-org.apache.hadoop.conf.Configuration-">getChecksumType</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCloseCheckInterval--">getCloseCheckInterval</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getColumnFamilyDescriptor--">getColumnFamilyDescriptor</a>, 
 <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getColumnFamilyName--">getColumnFamilyName</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCompactedCellsCount--">getCompactedCellsCount</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCompactedCellsSize--">getCompactedCellsSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCompactedFiles--">getCompactedFiles</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCompactedFilesCount--">getCompactedFilesCount</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCompactionCheckMultiplier--">getCompactionCheckMultiplier</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCompactionPressure--">getCompactionPressure</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCompactionProgress--">getCompactionProgr
 ess</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCompactPriority--">getCompactPriority</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getComparator--">getComparator</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCoprocessorHost--">getCoprocessorHost</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getDataBlockEncoder--">getDataBlockEncoder</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getFileSystem--">getFileSystem</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getFlushableSize--">getFlushableSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getFlushedCellsCount--">getFlushedCellsCount</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getFlushedCellsSize--">getFlushedCellsSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regi
 onserver/HStore.html#getFlushedOutputFileSize--">getFlushedOutputFileSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getHFilesSize--">getHFilesSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getHRegion--">getHRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getLastCompactSize--">getLastCompactSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getMajorCompactedCellsCount--">getMajorCompactedCellsCount</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getMajorCompactedCellsSize--">getMajorCompactedCellsSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getMaxMemstoreTS--">getMaxMemstoreTS</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getMaxSequenceId--">getMaxSequenceId</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getMaxStoreF
 ileAge--">getMaxStoreFileAge</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getMemstoreFlushSize--">getMemstoreFlushSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getMemStoreSize--">getMemStoreSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getMinStoreFileAge--">getMinStoreFileAge</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getNumHFiles--">getNumHFiles</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getNumReferenceFiles--">getNumReferenceFiles</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getOffPeakHours--">getOffPeakHours</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getRegionFileSystem--">getRegionFileSystem</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getRegionInfo--">getRegionInfo</a>, <a href="../../../../../org/apache/
 hadoop/hbase/regionserver/HStore.html#getScanInfo--">getScanInfo</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getScanner-org.apache.hadoop.hbase.client.Scan-java.util.NavigableSet-long-">getScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getScanners-boolean-boolean-boolean-org.apache.hadoop.hbase.regionserver.querymatcher.ScanQueryMatcher-byte:A-boolean-byte:A-boolean-long-">getScanners</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getScanners-java.util.List-boolean-boolean-boolean-org.apache.hadoop.hbase.regionserver.querymatcher.ScanQueryMatcher-byte:A-boolean-byte:A-boolean-long-boolean-">getScanners</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getSize--">getSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getSizeOfMemStore--">getSizeOfMemStore</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HSt
 ore.html#getSizeOfSnapshot--">getSizeOfSnapshot</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getSizeToFlush--">getSizeToFlush</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getSmallestReadPoint--">getSmallestReadPoint</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getSnapshotSize--">getSnapshotSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getSplitPoint--">getSplitPoint</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStoreEngine--">getStoreEngine</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStorefiles--">getStorefiles</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStorefilesCount--">getStorefilesCount</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStorefilesIndexSize--">getStorefilesIndexSize</a>, <a href="../../../../.
 ./org/apache/hadoop/hbase/regionserver/HStore.html#getStorefilesSize--">getStorefilesSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStoreFileTtl--">getStoreFileTtl</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStoreHomedir-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.HRegionInfo-byte:A-">getStoreHomedir</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStoreHomedir-org.apache.hadoop.fs.Path-java.lang.String-byte:A-">getStoreHomedir</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStoreSizeUncompressed--">getStoreSizeUncompressed</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getTableName--">getTableName</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getTotalStaticBloomSize--">getTotalStaticBloomSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getTot
 alStaticIndexSize--">getTotalStaticIndexSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#hasReferences--">hasReferences</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#hasTooManyStoreFiles--">hasTooManyStoreFiles</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#heapSize--">heapSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#isMajorCompaction--">isMajorCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#isPrimaryReplicaStore--">isPrimaryReplicaStore</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#isSloppyMemstore--">isSloppyMemstore</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#moveFileIntoPlace-org.apache.hadoop.fs.Path-">moveFileIntoPlace</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#needsCompaction--">needsCompaction</a>, <a h
 ref="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#onConfigurationChange-org.apache.hadoop.conf.Configuration-">onConfigurationChange</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#postSnapshotOperation--">postSnapshotOperation</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#preBulkLoadHFile-java.lang.String-long-">preBulkLoadHFile</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#preFlushSeqIDEstimation--">preFlushSeqIDEstimation</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#preSnapshotOperation--">preSnapshotOperation</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#recreateScanners-java.util.List-boolean-boolean-boolean-org.apache.hadoop.hbase.regionserver.querymatcher.ScanQueryMatcher-byte:A-boolean-byte:A-boolean-long-boolean-">recreateScanners</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HSt
 ore.html#refreshStoreFiles--">refreshStoreFiles</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#refreshStoreFiles-java.util.Collection-">refreshStoreFiles</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#registerChildren-org.apache.hadoop.hbase.conf.ConfigurationManager-">registerChildren</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#replaceStoreFiles-java.util.Collection-java.util.Collection-">replaceStoreFiles</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#replayCompactionMarker-org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.CompactionDescriptor-boolean-boolean-">replayCompactionMarker</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#requestCompaction--">requestCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#requestCompaction-int-org.apache.hadoop.hbase.regionserver.compactions.C
 ompactionRequest-">requestCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#requestCompaction-int-org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest-org.apache.hadoop.hbase.security.User-">requestCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#setDataBlockEncoderInTest-org.apache.hadoop.hbase.io.hfile.HFileDataBlockEncoder-">setDataBlockEncoderInTest</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#setScanInfo-org.apache.hadoop.hbase.regionserver.ScanInfo-">setScanInfo</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#snapshot--">snapshot</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#startReplayingFromWAL--">startReplayingFromWAL</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#stopReplayingFromWAL--">stopReplayingFromWAL</a>, <a href="../../../../../org/apache/hadoop/hbas
 e/regionserver/HStore.html#throttleCompaction-long-">throttleCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#timeOfOldestEdit--">timeOfOldestEdit</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#toString--">toString</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#triggerMajorCompaction--">triggerMajorCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#upsert-java.lang.Iterable-long-org.apache.hadoop.hbase.regionserver.MemstoreSize-">upsert</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#versionsToReturn-int-">versionsToReturn</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.html
index bd95cf0..ed159f5 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.html
@@ -940,7 +940,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" tit
 <tr id="i41" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html#closeRegionOperation-org.apache.hadoop.hbase.regionserver.Region.Operation-">closeRegionOperation</a></span>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.Operation</a>&nbsp;operation)</code>
-<div class="block">Closes the lock.</div>
+<div class="block">Closes the region operation lock.</div>
 </td>
 </tr>
 <tr id="i42" class="altColor">
@@ -3290,7 +3290,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" tit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MOCKED_LIST</h4>
-<pre>private static final&nbsp;<a href="http://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="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8106">MOCKED_LIST</a></pre>
+<pre>private static final&nbsp;<a href="http://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="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8119">MOCKED_LIST</a></pre>
 <div class="block">A mocked list implementation - discards all updates.</div>
 </li>
 </ul>
@@ -7701,7 +7701,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>closeRegionOperation</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7960">closeRegionOperation</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7970">closeRegionOperation</a>()
                           throws <a href="http://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"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#closeRegionOperation--">Region</a></code></span></div>
 <div class="block">Closes the region operation lock.</div>
@@ -7719,11 +7719,14 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>closeRegionOperation</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7969">closeRegionOperation</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.Operation</a>&nbsp;operation)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7975">closeRegionOperation</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.Operation</a>&nbsp;operation)
                           throws <a href="http://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">Closes the lock. This needs to be called in the finally block corresponding
+<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#closeRegionOperation-org.apache.hadoop.hbase.regionserver.Region.Operation-">Region</a></code></span></div>
+<div class="block">Closes the region operation lock. This needs to be called in the finally block corresponding
  to the try block of <a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#startRegionOperation-org.apache.hadoop.hbase.regionserver.Region.Operation-"><code>Region.startRegionOperation(Operation)</code></a></div>
 <dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#closeRegionOperation-org.apache.hadoop.hbase.regionserver.Region.Operation-">closeRegionOperation</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a></code></dd>
 <dt><span class="throwsLabel">Throws:</span></dt>
 <dd><code><a href="http://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>
@@ -7735,7 +7738,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>startBulkRegionOperation</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7985">startBulkRegionOperation</a>(boolean&nbsp;writeLockNeeded)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7998">startBulkRegionOperation</a>(boolean&nbsp;writeLockNeeded)
                                throws <a href="../../../../../org/apache/hadoop/hbase/NotServingRegionException.html" title="class in org.apache.hadoop.hbase">NotServingRegionException</a>,
                                       <a href="../../../../../org/apache/hadoop/hbase/RegionTooBusyException.html" title="class in org.apache.hadoop.hbase">RegionTooBusyException</a>,
                                       <a href="http://docs.oracle.com/javase/8/docs/api/java/io/InterruptedIOException.html?is-external=true" title="class or interface in java.io">InterruptedIOException</a></pre>
@@ -7757,7 +7760,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>closeBulkRegionOperation</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8003">closeBulkRegionOperation</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8016">closeBulkRegionOperation</a>()</pre>
 <div class="block">Closes the lock. This needs to be called in the finally block corresponding
  to the try block of #startRegionOperation</div>
 </li>
@@ -7768,7 +7771,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>recordMutationWithoutWal</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8012">recordMutationWithoutWal</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="http://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="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&gt;&nbsp;familyMap)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8025">recordMutationWithoutWal</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="http://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="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&gt;&nbsp;familyMap)</pre>
 <div class="block">Update LongAdders for number of puts without wal and the size of possible data loss.
  These information are exposed by the region server metrics.</div>
 </li>
@@ -7779,7 +7782,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>lock</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8032">lock</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/Lock.html?is-external=true" title="class or interface in java.util.concurrent.locks">Lock</a>&nbsp;lock)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8045">lock</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/Lock.html?is-external=true" title="class or interface in java.util.concurrent.locks">Lock</a>&nbsp;lock)
            throws <a href="../../../../../org/apache/hadoop/hbase/RegionTooBusyException.html" title="class in org.apache.hadoop.hbase">RegionTooBusyException</a>,
                   <a href="http://docs.oracle.com/javase/8/docs/api/java/io/InterruptedIOException.html?is-external=true" title="class or interface in java.io">InterruptedIOException</a></pre>
 <dl>
@@ -7795,7 +7798,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>lock</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8042">lock</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/Lock.html?is-external=true" title="class or interface in java.util.concurrent.locks">Lock</a>&nbsp;lock,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8055">lock</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/Lock.html?is-external=true" title="class or interface in java.util.concurrent.locks">Lock</a>&nbsp;lock,
                   int&nbsp;multiplier)
            throws <a href="../../../../../org/apache/hadoop/hbase/RegionTooBusyException.html" title="class in org.apache.hadoop.hbase">RegionTooBusyException</a>,
                   <a href="http://docs.oracle.com/javase/8/docs/api/java/io/InterruptedIOException.html?is-external=true" title="class or interface in java.io">InterruptedIOException</a></pre>
@@ -7815,7 +7818,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>sync</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8068">sync</a>(long&nbsp;txid,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8081">sync</a>(long&nbsp;txid,
                   <a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;durability)
            throws <a href="http://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">Calls sync with the given transaction ID</div>
@@ -7833,7 +7836,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldSyncWAL</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8099">shouldSyncWAL</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8112">shouldSyncWAL</a>()</pre>
 <div class="block">Check whether we should sync the wal from the table's durability settings</div>
 </li>
 </ul>
@@ -7843,7 +7846,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getOpenSeqNum</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8130">getOpenSeqNum</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8143">getOpenSeqNum</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getOpenSeqNum--">getOpenSeqNum</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a></code></dd>
@@ -7858,7 +7861,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxStoreSeqId</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8135">getMaxStoreSeqId</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8148">getMaxStoreSeqId</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getMaxStoreSeqId--">getMaxStoreSeqId</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a></code></dd>
@@ -7874,7 +7877,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getOldestSeqIdOfStore</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8140">getOldestSeqIdOfStore</a>(byte[]&nbsp;familyName)</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8153">getOldestSeqIdOfStore</a>(byte[]&nbsp;familyName)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getOldestSeqIdOfStore-byte:A-">getOldestSeqIdOfStore</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a></code></dd>
@@ -7891,7 +7894,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getCompactionState</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse.CompactionState&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8145">getCompactionState</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse.CompactionState&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8158">getCompactionState</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getCompactionState--">getCompactionState</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a></code></dd>
@@ -7906,7 +7909,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>reportCompactionRequestStart</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8151">reportCompactionRequestStart</a>(boolean&nbsp;isMajor)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8164">reportCompactionRequestStart</a>(boolean&nbsp;isMajor)</pre>
 </li>
 </ul>
 <a name="reportCompactionRequestEnd-boolean-int-long-">
@@ -7915,7 +7918,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>reportCompactionRequestEnd</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8155">reportCompactionRequestEnd</a>(boolean&nbsp;isMajor,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8168">reportCompactionRequestEnd</a>(boolean&nbsp;isMajor,
                                        int&nbsp;numFiles,
                                        long&nbsp;filesSizeCompacted)</pre>
 </li>
@@ -7926,7 +7929,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>reportCompactionRequestFailure</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8166">reportCompactionRequestFailure</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8179">reportCompactionRequestFailure</a>()</pre>
 </li>
 </ul>
 <a name="incrementCompactionsQueuedCount--">
@@ -7935,7 +7938,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>incrementCompactionsQueuedCount</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8170">incrementCompactionsQueuedCount</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8183">incrementCompactionsQueuedCount</a>()</pre>
 </li>
 </ul>
 <a name="decrementCompactionsQueuedCount--">
@@ -7944,7 +7947,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>decrementCompactionsQueuedCount</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8174">decrementCompactionsQueuedCount</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8187">decrementCompactionsQueuedCount</a>()</pre>
 </li>
 </ul>
 <a name="incrementFlushesQueuedCount--">
@@ -7953,7 +7956,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>incrementFlushesQueuedCount</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8178">incrementFlushesQueuedCount</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8191">incrementFlushesQueuedCount</a>()</pre>
 </li>
 </ul>
 <a name="getReadPoint--">
@@ -7962,7 +7965,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getReadPoint</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8183">getReadPoint</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8196">getReadPoint</a>()</pre>
 </li>
 </ul>
 <a name="onConfigurationChange-org.apache.hadoop.conf.Configuration-">
@@ -7971,7 +7974,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>onConfigurationChange</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8191">onConfigurationChange</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8204">onConfigurationChange</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 <div class="block">This method would be called by the <a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationManager.html" title="class in org.apache.hadoop.hbase.conf"><code>ConfigurationManager</code></a>
  object when the <code>Configuration</code> object is reloaded from disk.</div>
 <dl>
@@ -7986,7 +7989,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>registerChildren</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8199">registerChildren</a>(<a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationManager.html" title="class in org.apache.hadoop.hbase.conf">ConfigurationManager</a>&nbsp;manager)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8212">registerChildren</a>(<a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationManager.html" title="class in org.apache.hadoop.hbase.conf">ConfigurationManager</a>&nbsp;manager)</pre>
 <div class="block">Needs to be called to register the children to the manager.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -8002,7 +8005,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>deregisterChildren</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8210">deregisterChildren</a>(<a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationManager.html" title="class in org.apache.hadoop.hbase.conf">ConfigurationManager</a>&nbsp;manager)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8223">deregisterChildren</a>(<a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationManager.html" title="class in org.apache.hadoop.hbase.conf">ConfigurationManager</a>&nbsp;manager)</pre>
 <div class="block">Needs to be called to deregister the children from the manager.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -8018,7 +8021,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getCellComparator</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8217">getCellComparator</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8230">getCellComparator</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getCellComparator--">Region</a></code></span></div>
 <div class="block">The comparator to be used with the region</div>
 <dl>
@@ -8033,7 +8036,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getMemstoreFlushSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8222">getMemstoreFlushSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8235">getMemstoreFlushSize</a>()</pre>
 </li>
 </ul>
 <a name="throwException-java.lang.String-java.lang.String-">
@@ -8042,7 +8045,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockListLast">
 <li class="blockList">
 <h4>throwException</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8227">throwException</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;title,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8240">throwException</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;title,
                     <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;regionName)</pre>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/org/apache/hadoop/hbase/regionserver/HStore.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HStore.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HStore.html
index 7c48389..5233c02 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HStore.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HStore.html
@@ -18,7 +18,7 @@
     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":10,"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":9,"i32":10,"i33":10,"i34":10,"i35":10,"i36":9,"i37":10,"i38":9,"i39":9,"i40":10,"i41":10,"i42":10,"i43":10,"i44":10,"i45":10,"i46":10,"i47":10,"i48":10,"i49":10,"i50":10,"i51":10,"i52":10,"i53":10,"i54":42,"i55":10,"i56":10,"i57":10,"i58":10,"i59":10,"i60":10,"i61":10,"i62":10,"i63":10,"i64":10,"i65":10,"i66":10,"i67":42,"i68":10,"i69":10,"i70":10,"i71":10,"i72":10,"i73":10,"i74":10,"i75":10,"i76":10,"i77":10,"i78":10,"i79":10,"i80":10,"i81":10,"i82":10,"i83":42,"i84":10,"i85":10,"i86":10,"i87":10,"i88":10,"i89":10,"i90":10,"i91":10,"i92":41,"i93":41,"i94":10,"i95":10,"i96":10,"i97":10,"i98":10,"i99":10,"i100":10,"i101":10,"i102":10,"i103":10,"i104":10,"i105":10,"i106":10,"i107":10,"i108":10,"i109"
 :10,"i110":10,"i111":10,"i112":10,"i113":10,"i114":10,"i115":10,"i116":10,"i117":10,"i118":10,"i119":10,"i120":10,"i121":10,"i122":10,"i123":10,"i124":10,"i125":10,"i126":10,"i127":10,"i128":10,"i129":10,"i130":10,"i131":10,"i132":10,"i133":10,"i134":10,"i135":10,"i136":10,"i137":10,"i138":10,"i139":10};
+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":10,"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":9,"i32":10,"i33":10,"i34":10,"i35":10,"i36":9,"i37":10,"i38":9,"i39":9,"i40":10,"i41":10,"i42":10,"i43":10,"i44":10,"i45":10,"i46":10,"i47":10,"i48":10,"i49":10,"i50":10,"i51":10,"i52":10,"i53":10,"i54":42,"i55":10,"i56":10,"i57":10,"i58":10,"i59":10,"i60":10,"i61":10,"i62":10,"i63":10,"i64":10,"i65":10,"i66":10,"i67":42,"i68":10,"i69":10,"i70":10,"i71":10,"i72":10,"i73":10,"i74":10,"i75":10,"i76":10,"i77":10,"i78":10,"i79":10,"i80":10,"i81":10,"i82":10,"i83":42,"i84":10,"i85":10,"i86":10,"i87":10,"i88":10,"i89":10,"i90":10,"i91":10,"i92":41,"i93":41,"i94":10,"i95":10,"i96":10,"i97":10,"i98":10,"i99":10,"i100":10,"i101":10,"i102":10,"i103":10,"i104":10,"i105":10,"i106":10,"i107":10,"i108":10,"i109"
 :10,"i110":10,"i111":10,"i112":10,"i113":10,"i114":10,"i115":10,"i116":10,"i117":10,"i118":10,"i119":10,"i120":10,"i121":10,"i122":10,"i123":10,"i124":10,"i125":10,"i126":10,"i127":10,"i128":10,"i129":10,"i130":10,"i131":10,"i132":10,"i133":10,"i134":10,"i135":10,"i136":10,"i137":10,"i138":10,"i139":10,"i140":10,"i141":10};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"],32:["t6","Deprecated Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -1002,17 +1002,29 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#openStoreFiles-java.util.Collection-">openStoreFiles</a></span>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileInfo</a>&gt;&nbsp;files)</code>&nbsp;</td>
 </tr>
 <tr id="i112" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#postSnapshotOperation--">postSnapshotOperation</a></span>()</code>
+<div class="block">Perform tasks needed after the completion of snapshot operation.</div>
+</td>
+</tr>
+<tr id="i113" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;org.apache.hadoop.fs.Path,org.apache.hadoop.fs.Path&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#preBulkLoadHFile-java.lang.String-long-">preBulkLoadHFile</a></span>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;srcPathStr,
                 long&nbsp;seqNum)</code>
 <div class="block">This method should only be called from Region.</div>
 </td>
 </tr>
-<tr id="i113" class="rowColor">
+<tr id="i114" class="altColor">
 <td class="colFirst"><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#preFlushSeqIDEstimation--">preFlushSeqIDEstimation</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i114" class="altColor">
+<tr id="i115" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#preSnapshotOperation--">preSnapshotOperation</a></span>()</code>
+<div class="block">Sets the store up for a region level snapshot operation.</div>
+</td>
+</tr>
+<tr id="i116" class="altColor">
 <td class="colFirst"><code><a href="http://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="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#recreateScanners-java.util.List-boolean-boolean-boolean-org.apache.hadoop.hbase.regionserver.querymatcher.ScanQueryMatcher-byte:A-boolean-byte:A-boolean-long-boolean-">recreateScanners</a></span>(<a href="http://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="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;currentFileScanners,
                 boolean&nbsp;cacheBlocks,
@@ -1028,7 +1040,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
 <div class="block">Recreates the scanners on the current list of active store file scanners</div>
 </td>
 </tr>
-<tr id="i115" class="rowColor">
+<tr id="i117" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#refreshStoreFiles--">refreshStoreFiles</a></span>()</code>
 <div class="block">Checks the underlying store files, and opens the files that  have not
@@ -1036,13 +1048,13 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
  available.</div>
 </td>
 </tr>
-<tr id="i116" class="altColor">
+<tr id="i118" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#refreshStoreFiles-java.util.Collection-">refreshStoreFiles</a></span>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="http://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;newFiles)</code>
 <div class="block">Replaces the store files that the store has with the given files.</div>
 </td>
 </tr>
-<tr id="i117" class="rowColor">
+<tr id="i119" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#refreshStoreFilesInternal-java.util.Collection-">refreshStoreFilesInternal</a></span>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileInfo</a>&gt;&nbsp;newFiles)</code>
 <div class="block">Checks the underlying store files, and opens the files that  have not
@@ -1050,28 +1062,28 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
  available.</div>
 </td>
 </tr>
-<tr id="i118" class="altColor">
+<tr id="i120" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#registerChildren-org.apache.hadoop.hbase.conf.ConfigurationManager-">registerChildren</a></span>(<a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationManager.html" title="class in org.apache.hadoop.hbase.conf">ConfigurationManager</a>&nbsp;manager)</code>
 <div class="block">Needs to be called to register the children to the manager.</div>
 </td>
 </tr>
-<tr id="i119" class="rowColor">
+<tr id="i121" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#removeCompactedfiles-java.util.Collection-">removeCompactedfiles</a></span>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="interface in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;compactedfiles)</code>
 <div class="block">Archives and removes the compacted files</div>
 </td>
 </tr>
-<tr id="i120" class="altColor">
+<tr id="i122" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#removeUnneededFiles--">removeUnneededFiles</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i121" class="rowColor">
+<tr id="i123" class="rowColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#replaceStoreFiles-java.util.Collection-java.util.Collection-">replaceStoreFiles</a></span>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="interface in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;compactedFiles,
                  <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="interface in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;result)</code>&nbsp;</td>
 </tr>
-<tr id="i122" class="altColor">
+<tr id="i124" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#replayCompactionMarker-org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.CompactionDescriptor-boolean-boolean-">replayCompactionMarker</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.CompactionDescriptor&nbsp;compaction,
                       boolean&nbsp;pickCompactionFiles,
@@ -1079,77 +1091,77 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
 <div class="block">Call to complete a compaction.</div>
 </td>
 </tr>
-<tr id="i123" class="rowColor">
+<tr id="i125" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionContext</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#requestCompaction--">requestCompaction</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i124" class="altColor">
+<tr id="i126" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionContext</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#requestCompaction-int-org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest-">requestCompaction</a></span>(int&nbsp;priority,
                  <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionRequest.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionRequest</a>&nbsp;baseRequest)</code>&nbsp;</td>
 </tr>
-<tr id="i125" class="rowColor">
+<tr id="i127" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionContext</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#requestCompaction-int-org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest-org.apache.hadoop.hbase.security.User-">requestCompaction</a></span>(int&nbsp;priority,
                  <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionRequest.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionRequest</a>&nbsp;baseRequest,
                  <a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user)</code>&nbsp;</td>
 </tr>
-<tr id="i126" class="altColor">
+<tr id="i128" class="altColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#setDataBlockEncoderInTest-org.apache.hadoop.hbase.io.hfile.HFileDataBlockEncoder-">setDataBlockEncoderInTest</a></span>(<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileDataBlockEncoder.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFileDataBlockEncoder</a>&nbsp;blockEncoder)</code>
 <div class="block">Should be used only in tests.</div>
 </td>
 </tr>
-<tr id="i127" class="rowColor">
+<tr id="i129" class="rowColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#setScanInfo-org.apache.hadoop.hbase.regionserver.ScanInfo-">setScanInfo</a></span>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanInfo.html" title="class in org.apache.hadoop.hbase.regionserver">ScanInfo</a>&nbsp;scanInfo)</code>
 <div class="block">Set scan info, used by test</div>
 </td>
 </tr>
-<tr id="i128" class="altColor">
+<tr id="i130" class="altColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#snapshot--">snapshot</a></span>()</code>
 <div class="block">Snapshot this stores memstore.</div>
 </td>
 </tr>
-<tr id="i129" class="rowColor">
+<tr id="i131" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#startReplayingFromWAL--">startReplayingFromWAL</a></span>()</code>
 <div class="block">This message intends to inform the MemStore that next coming updates
  are going to be part of the replaying edits from WAL</div>
 </td>
 </tr>
-<tr id="i130" class="altColor">
+<tr id="i132" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#stopReplayingFromWAL--">stopReplayingFromWAL</a></span>()</code>
 <div class="block">This message intends to inform the MemStore that the replaying edits from WAL
  are done</div>
 </td>
 </tr>
-<tr id="i131" class="rowColor">
+<tr id="i133" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#throttleCompaction-long-">throttleCompaction</a></span>(long&nbsp;compactionSize)</code>&nbsp;</td>
 </tr>
-<tr id="i132" class="altColor">
+<tr id="i134" class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#timeOfOldestEdit--">timeOfOldestEdit</a></span>()</code>
 <div class="block">When was the last edit done in the memstore</div>
 </td>
 </tr>
-<tr id="i133" class="rowColor">
+<tr id="i135" class="rowColor">
 <td class="colFirst"><code><a href="http://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/hbase/regionserver/HStore.html#toString--">toString</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i134" class="altColor">
+<tr id="i136" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#triggerMajorCompaction--">triggerMajorCompaction</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i135" class="rowColor">
+<tr id="i137" class="rowColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#updateStorefiles-java.util.List-long-">updateStorefiles</a></span>(<a href="http://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="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="interface in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;sfs,
                 long&nbsp;snapshotId)</code>&nbsp;</td>
 </tr>
-<tr id="i136" class="altColor">
+<tr id="i138" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#upsert-java.lang.Iterable-long-org.apache.hadoop.hbase.regionserver.MemstoreSize-">upsert</a></span>(<a href="http://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/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;cells,
       long&nbsp;readpoint,
@@ -1157,17 +1169,17 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
 <div class="block">Adds or replaces the specified KeyValues.</div>
 </td>
 </tr>
-<tr id="i137" class="rowColor">
+<tr id="i139" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#validateStoreFile-org.apache.hadoop.fs.Path-">validateStoreFile</a></span>(org.apache.hadoop.fs.Path&nbsp;path)</code>
 <div class="block">Validates a store file by opening and closing it.</div>
 </td>
 </tr>
-<tr id="i138" class="altColor">
+<tr id="i140" class="altColor">
 <td class="colFirst"><code>(package private) int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#versionsToReturn-int-">versionsToReturn</a></span>(int&nbsp;wantedVersions)</code>&nbsp;</td>
 </tr>
-<tr id="i139" class="rowColor">
+<tr id="i141" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#writeCompactionWalRecord-java.util.Collection-java.util.Collection-">writeCompactionWalRecord</a></span>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="interface in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;filesCompacted,
                         <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="interface in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;newFiles)</code>
@@ -3976,13 +3988,41 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 </dl>
 </li>
 </ul>
+<a name="preSnapshotOperation--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>preSnapshotOperation</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2493">preSnapshotOperation</a>()</pre>
+<div class="block">Sets the store up for a region level snapshot operation.</div>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#postSnapshotOperation--"><code>postSnapshotOperation()</code></a></dd>
+</dl>
+</li>
+</ul>
+<a name="postSnapshotOperation--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>postSnapshotOperation</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2501">postSnapshotOperation</a>()</pre>
+<div class="block">Perform tasks needed after the completion of snapshot operation.</div>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#preSnapshotOperation--"><code>preSnapshotOperation()</code></a></dd>
+</dl>
+</li>
+</ul>
 <a name="closeAndArchiveCompactedFiles--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>closeAndArchiveCompactedFiles</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2490">closeAndArchiveCompactedFiles</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2506">closeAndArchiveCompactedFiles</a>()
                                    throws <a href="http://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"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#closeAndArchiveCompactedFiles--">Store</a></code></span></div>
 <div class="block">Closes and archives the compacted files under this store</div>
@@ -4000,7 +4040,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>removeCompactedfiles</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2524">removeCompactedfiles</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="interface in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;compactedfiles)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2540">removeCompactedfiles</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="interface in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;compactedfiles)
                            throws <a href="http://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">Archives and removes the compacted files</div>
 <dl>
@@ -4017,7 +4057,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>preFlushSeqIDEstimation</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2589">preFlushSeqIDEstimation</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2605">preFlushSeqIDEstimation</a>()</pre>
 </li>
 </ul>
 <a name="isSloppyMemstore--">
@@ -4026,7 +4066,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>isSloppyMemstore</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2594">isSloppyMemstore</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2610">isSloppyMemstore</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#isSloppyMemstore--">isSloppyMemstore</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
@@ -4041,7 +4081,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockListLast">
 <li class="blockList">
 <h4>clearCompactedfiles</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2598">clearCompactedfiles</a>(<a href="http://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="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="interface in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;filesToRemove)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2614">clearCompactedfiles</a>(<a href="http://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="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="interface in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;filesToRemove)
                           throws <a href="http://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>


[27/33] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/org/apache/hadoop/hbase/regionserver/Region.BulkLoadListener.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/Region.BulkLoadListener.html b/devapidocs/org/apache/hadoop/hbase/regionserver/Region.BulkLoadListener.html
index 9a54538..10c76b7 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/Region.BulkLoadListener.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/Region.BulkLoadListener.html
@@ -109,7 +109,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.535">Region.BulkLoadListener</a></pre>
+<pre>public static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.542">Region.BulkLoadListener</a></pre>
 <div class="block">Listener class to enable callers of
  bulkLoadHFile() to perform any necessary
  pre/post processing of a given bulkload call</div>
@@ -174,7 +174,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockList">
 <li class="blockList">
 <h4>prepareBulkLoad</h4>
-<pre><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.BulkLoadListener.html#line.543">prepareBulkLoad</a>(byte[]&nbsp;family,
+<pre><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.BulkLoadListener.html#line.550">prepareBulkLoad</a>(byte[]&nbsp;family,
                        <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;srcPath,
                        boolean&nbsp;copyFile)
                 throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -196,7 +196,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockList">
 <li class="blockList">
 <h4>doneBulkLoad</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.BulkLoadListener.html#line.552">doneBulkLoad</a>(byte[]&nbsp;family,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.BulkLoadListener.html#line.559">doneBulkLoad</a>(byte[]&nbsp;family,
                   <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;srcPath)
            throws <a href="http://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">Called after a successful HFile load</div>
@@ -215,7 +215,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockListLast">
 <li class="blockList">
 <h4>failedBulkLoad</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.BulkLoadListener.html#line.560">failedBulkLoad</a>(byte[]&nbsp;family,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.BulkLoadListener.html#line.567">failedBulkLoad</a>(byte[]&nbsp;family,
                     <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;srcPath)
              throws <a href="http://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">Called after a failed HFile load</div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/org/apache/hadoop/hbase/regionserver/Region.FlushResult.Result.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/Region.FlushResult.Result.html b/devapidocs/org/apache/hadoop/hbase/regionserver/Region.FlushResult.Result.html
index d595da9..7ecd44f 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/Region.FlushResult.Result.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/Region.FlushResult.Result.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static enum <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.FlushResult.html#line.684">Region.FlushResult.Result</a>
+<pre>public static enum <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.FlushResult.html#line.691">Region.FlushResult.Result</a>
 extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.FlushResult.Result</a>&gt;</pre>
 </li>
 </ul>
@@ -216,7 +216,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>FLUSHED_NO_COMPACTION_NEEDED</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.FlushResult.Result</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.FlushResult.Result.html#line.685">FLUSHED_NO_COMPACTION_NEEDED</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.FlushResult.Result</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.FlushResult.Result.html#line.692">FLUSHED_NO_COMPACTION_NEEDED</a></pre>
 </li>
 </ul>
 <a name="FLUSHED_COMPACTION_NEEDED">
@@ -225,7 +225,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>FLUSHED_COMPACTION_NEEDED</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.FlushResult.Result</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.FlushResult.Result.html#line.686">FLUSHED_COMPACTION_NEEDED</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.FlushResult.Result</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.FlushResult.Result.html#line.693">FLUSHED_COMPACTION_NEEDED</a></pre>
 </li>
 </ul>
 <a name="CANNOT_FLUSH_MEMSTORE_EMPTY">
@@ -234,7 +234,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>CANNOT_FLUSH_MEMSTORE_EMPTY</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.FlushResult.Result</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.FlushResult.Result.html#line.689">CANNOT_FLUSH_MEMSTORE_EMPTY</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.FlushResult.Result</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.FlushResult.Result.html#line.696">CANNOT_FLUSH_MEMSTORE_EMPTY</a></pre>
 </li>
 </ul>
 <a name="CANNOT_FLUSH">
@@ -243,7 +243,7 @@ the order they are declared.</div>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>CANNOT_FLUSH</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.FlushResult.Result</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.FlushResult.Result.html#line.690">CANNOT_FLUSH</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.FlushResult.Result</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.FlushResult.Result.html#line.697">CANNOT_FLUSH</a></pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/org/apache/hadoop/hbase/regionserver/Region.FlushResult.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/Region.FlushResult.html b/devapidocs/org/apache/hadoop/hbase/regionserver/Region.FlushResult.html
index 1f020f0..f7508d0 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/Region.FlushResult.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/Region.FlushResult.html
@@ -109,7 +109,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.683">Region.FlushResult</a></pre>
+<pre>public static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.690">Region.FlushResult</a></pre>
 </li>
 </ul>
 </div>
@@ -180,7 +180,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockList">
 <li class="blockList">
 <h4>getResult</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.FlushResult.Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.FlushResult.html#line.694">getResult</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.FlushResult.Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.FlushResult.html#line.701">getResult</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the detailed result code</dd>
@@ -193,7 +193,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockList">
 <li class="blockList">
 <h4>isFlushSucceeded</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.FlushResult.html#line.697">isFlushSucceeded</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.FlushResult.html#line.704">isFlushSucceeded</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>true if the memstores were flushed, else false</dd>
@@ -206,7 +206,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockListLast">
 <li class="blockList">
 <h4>isCompactionNeeded</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.FlushResult.html#line.700">isCompactionNeeded</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.FlushResult.html#line.707">isCompactionNeeded</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>True if the flush requested a compaction, else false</dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/org/apache/hadoop/hbase/regionserver/Region.Operation.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/Region.Operation.html b/devapidocs/org/apache/hadoop/hbase/regionserver/Region.Operation.html
index b7b2ec5..a4591eb 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/Region.Operation.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/Region.Operation.html
@@ -180,6 +180,9 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is
 <td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html#SCAN">SCAN</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html#SNAPSHOT">SNAPSHOT</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html#SPLIT_REGION">SPLIT_REGION</a></span></code>&nbsp;</td>
 </tr>
 </table>
@@ -350,12 +353,21 @@ the order they are declared.</div>
 <a name="REPLAY_EVENT">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>REPLAY_EVENT</h4>
 <pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.Operation</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.Operation.html#line.250">REPLAY_EVENT</a></pre>
 </li>
 </ul>
+<a name="SNAPSHOT">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>SNAPSHOT</h4>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.Operation</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.Operation.html#line.250">SNAPSHOT</a></pre>
+</li>
+</ul>
 </li>
 </ul>
 <!-- ============ METHOD DETAIL ========== -->

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/org/apache/hadoop/hbase/regionserver/Region.RowLock.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/Region.RowLock.html b/devapidocs/org/apache/hadoop/hbase/regionserver/Region.RowLock.html
index 238ec44..649327f 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/Region.RowLock.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/Region.RowLock.html
@@ -109,7 +109,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.287">Region.RowLock</a></pre>
+<pre>public static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.294">Region.RowLock</a></pre>
 <div class="block">Row lock held by a given thread.
  One thread may acquire multiple locks on the same row simultaneously.
  The locks must be released by calling release() from the same thread.</div>
@@ -158,7 +158,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockListLast">
 <li class="blockList">
 <h4>release</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.RowLock.html#line.294">release</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.RowLock.html#line.301">release</a>()</pre>
 <div class="block">Release the given lock.  If there are no remaining locks held by the current thread
  then unlock the row and allow other threads to acquire the lock.</div>
 <dl>


[15/33] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockImpl.html
index f6a717e..a701ece 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockImpl.html
@@ -7930,329 +7930,342 @@
 <span class="sourceLineNo">7922</span>      case DELETE:<a name="line.7922"></a>
 <span class="sourceLineNo">7923</span>      case BATCH_MUTATE:<a name="line.7923"></a>
 <span class="sourceLineNo">7924</span>      case COMPACT_REGION:<a name="line.7924"></a>
-<span class="sourceLineNo">7925</span>        // when a region is in recovering state, no read, split or merge is allowed<a name="line.7925"></a>
-<span class="sourceLineNo">7926</span>        if (isRecovering() &amp;&amp; (this.disallowWritesInRecovering ||<a name="line.7926"></a>
-<span class="sourceLineNo">7927</span>              (op != Operation.PUT &amp;&amp; op != Operation.DELETE &amp;&amp; op != Operation.BATCH_MUTATE))) {<a name="line.7927"></a>
-<span class="sourceLineNo">7928</span>          throw new RegionInRecoveryException(getRegionInfo().getRegionNameAsString() +<a name="line.7928"></a>
-<span class="sourceLineNo">7929</span>            " is recovering; cannot take reads");<a name="line.7929"></a>
-<span class="sourceLineNo">7930</span>        }<a name="line.7930"></a>
-<span class="sourceLineNo">7931</span>        break;<a name="line.7931"></a>
-<span class="sourceLineNo">7932</span>      default:<a name="line.7932"></a>
-<span class="sourceLineNo">7933</span>        break;<a name="line.7933"></a>
-<span class="sourceLineNo">7934</span>    }<a name="line.7934"></a>
-<span class="sourceLineNo">7935</span>    if (op == Operation.MERGE_REGION || op == Operation.SPLIT_REGION<a name="line.7935"></a>
-<span class="sourceLineNo">7936</span>        || op == Operation.COMPACT_REGION) {<a name="line.7936"></a>
-<span class="sourceLineNo">7937</span>      // split, merge or compact region doesn't need to check the closing/closed state or lock the<a name="line.7937"></a>
-<span class="sourceLineNo">7938</span>      // region<a name="line.7938"></a>
-<span class="sourceLineNo">7939</span>      return;<a name="line.7939"></a>
-<span class="sourceLineNo">7940</span>    }<a name="line.7940"></a>
-<span class="sourceLineNo">7941</span>    if (this.closing.get()) {<a name="line.7941"></a>
-<span class="sourceLineNo">7942</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.7942"></a>
-<span class="sourceLineNo">7943</span>    }<a name="line.7943"></a>
-<span class="sourceLineNo">7944</span>    lock(lock.readLock());<a name="line.7944"></a>
-<span class="sourceLineNo">7945</span>    if (this.closed.get()) {<a name="line.7945"></a>
-<span class="sourceLineNo">7946</span>      lock.readLock().unlock();<a name="line.7946"></a>
-<span class="sourceLineNo">7947</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.7947"></a>
-<span class="sourceLineNo">7948</span>    }<a name="line.7948"></a>
-<span class="sourceLineNo">7949</span>    try {<a name="line.7949"></a>
-<span class="sourceLineNo">7950</span>      if (coprocessorHost != null) {<a name="line.7950"></a>
-<span class="sourceLineNo">7951</span>        coprocessorHost.postStartRegionOperation(op);<a name="line.7951"></a>
-<span class="sourceLineNo">7952</span>      }<a name="line.7952"></a>
-<span class="sourceLineNo">7953</span>    } catch (Exception e) {<a name="line.7953"></a>
-<span class="sourceLineNo">7954</span>      lock.readLock().unlock();<a name="line.7954"></a>
-<span class="sourceLineNo">7955</span>      throw new IOException(e);<a name="line.7955"></a>
-<span class="sourceLineNo">7956</span>    }<a name="line.7956"></a>
-<span class="sourceLineNo">7957</span>  }<a name="line.7957"></a>
-<span class="sourceLineNo">7958</span><a name="line.7958"></a>
-<span class="sourceLineNo">7959</span>  @Override<a name="line.7959"></a>
-<span class="sourceLineNo">7960</span>  public void closeRegionOperation() throws IOException {<a name="line.7960"></a>
-<span class="sourceLineNo">7961</span>    closeRegionOperation(Operation.ANY);<a name="line.7961"></a>
-<span class="sourceLineNo">7962</span>  }<a name="line.7962"></a>
-<span class="sourceLineNo">7963</span><a name="line.7963"></a>
-<span class="sourceLineNo">7964</span>  /**<a name="line.7964"></a>
-<span class="sourceLineNo">7965</span>   * Closes the lock. This needs to be called in the finally block corresponding<a name="line.7965"></a>
-<span class="sourceLineNo">7966</span>   * to the try block of {@link #startRegionOperation(Operation)}<a name="line.7966"></a>
-<span class="sourceLineNo">7967</span>   * @throws IOException<a name="line.7967"></a>
-<span class="sourceLineNo">7968</span>   */<a name="line.7968"></a>
-<span class="sourceLineNo">7969</span>  public void closeRegionOperation(Operation operation) throws IOException {<a name="line.7969"></a>
-<span class="sourceLineNo">7970</span>    lock.readLock().unlock();<a name="line.7970"></a>
-<span class="sourceLineNo">7971</span>    if (coprocessorHost != null) {<a name="line.7971"></a>
-<span class="sourceLineNo">7972</span>      coprocessorHost.postCloseRegionOperation(operation);<a name="line.7972"></a>
-<span class="sourceLineNo">7973</span>    }<a name="line.7973"></a>
-<span class="sourceLineNo">7974</span>  }<a name="line.7974"></a>
-<span class="sourceLineNo">7975</span><a name="line.7975"></a>
-<span class="sourceLineNo">7976</span>  /**<a name="line.7976"></a>
-<span class="sourceLineNo">7977</span>   * This method needs to be called before any public call that reads or<a name="line.7977"></a>
-<span class="sourceLineNo">7978</span>   * modifies stores in bulk. It has to be called just before a try.<a name="line.7978"></a>
-<span class="sourceLineNo">7979</span>   * #closeBulkRegionOperation needs to be called in the try's finally block<a name="line.7979"></a>
-<span class="sourceLineNo">7980</span>   * Acquires a writelock and checks if the region is closing or closed.<a name="line.7980"></a>
-<span class="sourceLineNo">7981</span>   * @throws NotServingRegionException when the region is closing or closed<a name="line.7981"></a>
-<span class="sourceLineNo">7982</span>   * @throws RegionTooBusyException if failed to get the lock in time<a name="line.7982"></a>
-<span class="sourceLineNo">7983</span>   * @throws InterruptedIOException if interrupted while waiting for a lock<a name="line.7983"></a>
-<span class="sourceLineNo">7984</span>   */<a name="line.7984"></a>
-<span class="sourceLineNo">7985</span>  private void startBulkRegionOperation(boolean writeLockNeeded)<a name="line.7985"></a>
-<span class="sourceLineNo">7986</span>      throws NotServingRegionException, RegionTooBusyException, InterruptedIOException {<a name="line.7986"></a>
-<span class="sourceLineNo">7987</span>    if (this.closing.get()) {<a name="line.7987"></a>
-<span class="sourceLineNo">7988</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.7988"></a>
-<span class="sourceLineNo">7989</span>    }<a name="line.7989"></a>
-<span class="sourceLineNo">7990</span>    if (writeLockNeeded) lock(lock.writeLock());<a name="line.7990"></a>
-<span class="sourceLineNo">7991</span>    else lock(lock.readLock());<a name="line.7991"></a>
-<span class="sourceLineNo">7992</span>    if (this.closed.get()) {<a name="line.7992"></a>
-<span class="sourceLineNo">7993</span>      if (writeLockNeeded) lock.writeLock().unlock();<a name="line.7993"></a>
-<span class="sourceLineNo">7994</span>      else lock.readLock().unlock();<a name="line.7994"></a>
-<span class="sourceLineNo">7995</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.7995"></a>
-<span class="sourceLineNo">7996</span>    }<a name="line.7996"></a>
-<span class="sourceLineNo">7997</span>  }<a name="line.7997"></a>
-<span class="sourceLineNo">7998</span><a name="line.7998"></a>
-<span class="sourceLineNo">7999</span>  /**<a name="line.7999"></a>
-<span class="sourceLineNo">8000</span>   * Closes the lock. This needs to be called in the finally block corresponding<a name="line.8000"></a>
-<span class="sourceLineNo">8001</span>   * to the try block of #startRegionOperation<a name="line.8001"></a>
-<span class="sourceLineNo">8002</span>   */<a name="line.8002"></a>
-<span class="sourceLineNo">8003</span>  private void closeBulkRegionOperation(){<a name="line.8003"></a>
-<span class="sourceLineNo">8004</span>    if (lock.writeLock().isHeldByCurrentThread()) lock.writeLock().unlock();<a name="line.8004"></a>
-<span class="sourceLineNo">8005</span>    else lock.readLock().unlock();<a name="line.8005"></a>
-<span class="sourceLineNo">8006</span>  }<a name="line.8006"></a>
-<span class="sourceLineNo">8007</span><a name="line.8007"></a>
-<span class="sourceLineNo">8008</span>  /**<a name="line.8008"></a>
-<span class="sourceLineNo">8009</span>   * Update LongAdders for number of puts without wal and the size of possible data loss.<a name="line.8009"></a>
-<span class="sourceLineNo">8010</span>   * These information are exposed by the region server metrics.<a name="line.8010"></a>
-<span class="sourceLineNo">8011</span>   */<a name="line.8011"></a>
-<span class="sourceLineNo">8012</span>  private void recordMutationWithoutWal(final Map&lt;byte [], List&lt;Cell&gt;&gt; familyMap) {<a name="line.8012"></a>
-<span class="sourceLineNo">8013</span>    numMutationsWithoutWAL.increment();<a name="line.8013"></a>
-<span class="sourceLineNo">8014</span>    if (numMutationsWithoutWAL.sum() &lt;= 1) {<a name="line.8014"></a>
-<span class="sourceLineNo">8015</span>      LOG.info("writing data to region " + this +<a name="line.8015"></a>
-<span class="sourceLineNo">8016</span>               " with WAL disabled. Data may be lost in the event of a crash.");<a name="line.8016"></a>
-<span class="sourceLineNo">8017</span>    }<a name="line.8017"></a>
-<span class="sourceLineNo">8018</span><a name="line.8018"></a>
-<span class="sourceLineNo">8019</span>    long mutationSize = 0;<a name="line.8019"></a>
-<span class="sourceLineNo">8020</span>    for (List&lt;Cell&gt; cells: familyMap.values()) {<a name="line.8020"></a>
-<span class="sourceLineNo">8021</span>      assert cells instanceof RandomAccess;<a name="line.8021"></a>
-<span class="sourceLineNo">8022</span>      int listSize = cells.size();<a name="line.8022"></a>
-<span class="sourceLineNo">8023</span>      for (int i=0; i &lt; listSize; i++) {<a name="line.8023"></a>
-<span class="sourceLineNo">8024</span>        Cell cell = cells.get(i);<a name="line.8024"></a>
-<span class="sourceLineNo">8025</span>        mutationSize += KeyValueUtil.length(cell);<a name="line.8025"></a>
-<span class="sourceLineNo">8026</span>      }<a name="line.8026"></a>
-<span class="sourceLineNo">8027</span>    }<a name="line.8027"></a>
-<span class="sourceLineNo">8028</span><a name="line.8028"></a>
-<span class="sourceLineNo">8029</span>    dataInMemoryWithoutWAL.add(mutationSize);<a name="line.8029"></a>
-<span class="sourceLineNo">8030</span>  }<a name="line.8030"></a>
+<span class="sourceLineNo">7925</span>      case SNAPSHOT:<a name="line.7925"></a>
+<span class="sourceLineNo">7926</span>        // when a region is in recovering state, no read, split, merge or snapshot is allowed<a name="line.7926"></a>
+<span class="sourceLineNo">7927</span>        if (isRecovering() &amp;&amp; (this.disallowWritesInRecovering ||<a name="line.7927"></a>
+<span class="sourceLineNo">7928</span>              (op != Operation.PUT &amp;&amp; op != Operation.DELETE &amp;&amp; op != Operation.BATCH_MUTATE))) {<a name="line.7928"></a>
+<span class="sourceLineNo">7929</span>          throw new RegionInRecoveryException(getRegionInfo().getRegionNameAsString() +<a name="line.7929"></a>
+<span class="sourceLineNo">7930</span>            " is recovering; cannot take reads");<a name="line.7930"></a>
+<span class="sourceLineNo">7931</span>        }<a name="line.7931"></a>
+<span class="sourceLineNo">7932</span>        break;<a name="line.7932"></a>
+<span class="sourceLineNo">7933</span>      default:<a name="line.7933"></a>
+<span class="sourceLineNo">7934</span>        break;<a name="line.7934"></a>
+<span class="sourceLineNo">7935</span>    }<a name="line.7935"></a>
+<span class="sourceLineNo">7936</span>    if (op == Operation.MERGE_REGION || op == Operation.SPLIT_REGION<a name="line.7936"></a>
+<span class="sourceLineNo">7937</span>        || op == Operation.COMPACT_REGION) {<a name="line.7937"></a>
+<span class="sourceLineNo">7938</span>      // split, merge or compact region doesn't need to check the closing/closed state or lock the<a name="line.7938"></a>
+<span class="sourceLineNo">7939</span>      // region<a name="line.7939"></a>
+<span class="sourceLineNo">7940</span>      return;<a name="line.7940"></a>
+<span class="sourceLineNo">7941</span>    }<a name="line.7941"></a>
+<span class="sourceLineNo">7942</span>    if (this.closing.get()) {<a name="line.7942"></a>
+<span class="sourceLineNo">7943</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.7943"></a>
+<span class="sourceLineNo">7944</span>    }<a name="line.7944"></a>
+<span class="sourceLineNo">7945</span>    lock(lock.readLock());<a name="line.7945"></a>
+<span class="sourceLineNo">7946</span>    if (this.closed.get()) {<a name="line.7946"></a>
+<span class="sourceLineNo">7947</span>      lock.readLock().unlock();<a name="line.7947"></a>
+<span class="sourceLineNo">7948</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.7948"></a>
+<span class="sourceLineNo">7949</span>    }<a name="line.7949"></a>
+<span class="sourceLineNo">7950</span>    // The unit for snapshot is a region. So, all stores for this region must be<a name="line.7950"></a>
+<span class="sourceLineNo">7951</span>    // prepared for snapshot operation before proceeding.<a name="line.7951"></a>
+<span class="sourceLineNo">7952</span>    if (op == Operation.SNAPSHOT) {<a name="line.7952"></a>
+<span class="sourceLineNo">7953</span>      for (Store store : stores.values()) {<a name="line.7953"></a>
+<span class="sourceLineNo">7954</span>        if (store instanceof HStore) {<a name="line.7954"></a>
+<span class="sourceLineNo">7955</span>          ((HStore)store).preSnapshotOperation();<a name="line.7955"></a>
+<span class="sourceLineNo">7956</span>        }<a name="line.7956"></a>
+<span class="sourceLineNo">7957</span>      }<a name="line.7957"></a>
+<span class="sourceLineNo">7958</span>    }<a name="line.7958"></a>
+<span class="sourceLineNo">7959</span>    try {<a name="line.7959"></a>
+<span class="sourceLineNo">7960</span>      if (coprocessorHost != null) {<a name="line.7960"></a>
+<span class="sourceLineNo">7961</span>        coprocessorHost.postStartRegionOperation(op);<a name="line.7961"></a>
+<span class="sourceLineNo">7962</span>      }<a name="line.7962"></a>
+<span class="sourceLineNo">7963</span>    } catch (Exception e) {<a name="line.7963"></a>
+<span class="sourceLineNo">7964</span>      lock.readLock().unlock();<a name="line.7964"></a>
+<span class="sourceLineNo">7965</span>      throw new IOException(e);<a name="line.7965"></a>
+<span class="sourceLineNo">7966</span>    }<a name="line.7966"></a>
+<span class="sourceLineNo">7967</span>  }<a name="line.7967"></a>
+<span class="sourceLineNo">7968</span><a name="line.7968"></a>
+<span class="sourceLineNo">7969</span>  @Override<a name="line.7969"></a>
+<span class="sourceLineNo">7970</span>  public void closeRegionOperation() throws IOException {<a name="line.7970"></a>
+<span class="sourceLineNo">7971</span>    closeRegionOperation(Operation.ANY);<a name="line.7971"></a>
+<span class="sourceLineNo">7972</span>  }<a name="line.7972"></a>
+<span class="sourceLineNo">7973</span><a name="line.7973"></a>
+<span class="sourceLineNo">7974</span>  @Override<a name="line.7974"></a>
+<span class="sourceLineNo">7975</span>  public void closeRegionOperation(Operation operation) throws IOException {<a name="line.7975"></a>
+<span class="sourceLineNo">7976</span>    if (operation == Operation.SNAPSHOT) {<a name="line.7976"></a>
+<span class="sourceLineNo">7977</span>      for (Store store: stores.values()) {<a name="line.7977"></a>
+<span class="sourceLineNo">7978</span>        if (store instanceof HStore) {<a name="line.7978"></a>
+<span class="sourceLineNo">7979</span>          ((HStore)store).postSnapshotOperation();<a name="line.7979"></a>
+<span class="sourceLineNo">7980</span>        }<a name="line.7980"></a>
+<span class="sourceLineNo">7981</span>      }<a name="line.7981"></a>
+<span class="sourceLineNo">7982</span>    }<a name="line.7982"></a>
+<span class="sourceLineNo">7983</span>    lock.readLock().unlock();<a name="line.7983"></a>
+<span class="sourceLineNo">7984</span>    if (coprocessorHost != null) {<a name="line.7984"></a>
+<span class="sourceLineNo">7985</span>      coprocessorHost.postCloseRegionOperation(operation);<a name="line.7985"></a>
+<span class="sourceLineNo">7986</span>    }<a name="line.7986"></a>
+<span class="sourceLineNo">7987</span>  }<a name="line.7987"></a>
+<span class="sourceLineNo">7988</span><a name="line.7988"></a>
+<span class="sourceLineNo">7989</span>  /**<a name="line.7989"></a>
+<span class="sourceLineNo">7990</span>   * This method needs to be called before any public call that reads or<a name="line.7990"></a>
+<span class="sourceLineNo">7991</span>   * modifies stores in bulk. It has to be called just before a try.<a name="line.7991"></a>
+<span class="sourceLineNo">7992</span>   * #closeBulkRegionOperation needs to be called in the try's finally block<a name="line.7992"></a>
+<span class="sourceLineNo">7993</span>   * Acquires a writelock and checks if the region is closing or closed.<a name="line.7993"></a>
+<span class="sourceLineNo">7994</span>   * @throws NotServingRegionException when the region is closing or closed<a name="line.7994"></a>
+<span class="sourceLineNo">7995</span>   * @throws RegionTooBusyException if failed to get the lock in time<a name="line.7995"></a>
+<span class="sourceLineNo">7996</span>   * @throws InterruptedIOException if interrupted while waiting for a lock<a name="line.7996"></a>
+<span class="sourceLineNo">7997</span>   */<a name="line.7997"></a>
+<span class="sourceLineNo">7998</span>  private void startBulkRegionOperation(boolean writeLockNeeded)<a name="line.7998"></a>
+<span class="sourceLineNo">7999</span>      throws NotServingRegionException, RegionTooBusyException, InterruptedIOException {<a name="line.7999"></a>
+<span class="sourceLineNo">8000</span>    if (this.closing.get()) {<a name="line.8000"></a>
+<span class="sourceLineNo">8001</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.8001"></a>
+<span class="sourceLineNo">8002</span>    }<a name="line.8002"></a>
+<span class="sourceLineNo">8003</span>    if (writeLockNeeded) lock(lock.writeLock());<a name="line.8003"></a>
+<span class="sourceLineNo">8004</span>    else lock(lock.readLock());<a name="line.8004"></a>
+<span class="sourceLineNo">8005</span>    if (this.closed.get()) {<a name="line.8005"></a>
+<span class="sourceLineNo">8006</span>      if (writeLockNeeded) lock.writeLock().unlock();<a name="line.8006"></a>
+<span class="sourceLineNo">8007</span>      else lock.readLock().unlock();<a name="line.8007"></a>
+<span class="sourceLineNo">8008</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.8008"></a>
+<span class="sourceLineNo">8009</span>    }<a name="line.8009"></a>
+<span class="sourceLineNo">8010</span>  }<a name="line.8010"></a>
+<span class="sourceLineNo">8011</span><a name="line.8011"></a>
+<span class="sourceLineNo">8012</span>  /**<a name="line.8012"></a>
+<span class="sourceLineNo">8013</span>   * Closes the lock. This needs to be called in the finally block corresponding<a name="line.8013"></a>
+<span class="sourceLineNo">8014</span>   * to the try block of #startRegionOperation<a name="line.8014"></a>
+<span class="sourceLineNo">8015</span>   */<a name="line.8015"></a>
+<span class="sourceLineNo">8016</span>  private void closeBulkRegionOperation(){<a name="line.8016"></a>
+<span class="sourceLineNo">8017</span>    if (lock.writeLock().isHeldByCurrentThread()) lock.writeLock().unlock();<a name="line.8017"></a>
+<span class="sourceLineNo">8018</span>    else lock.readLock().unlock();<a name="line.8018"></a>
+<span class="sourceLineNo">8019</span>  }<a name="line.8019"></a>
+<span class="sourceLineNo">8020</span><a name="line.8020"></a>
+<span class="sourceLineNo">8021</span>  /**<a name="line.8021"></a>
+<span class="sourceLineNo">8022</span>   * Update LongAdders for number of puts without wal and the size of possible data loss.<a name="line.8022"></a>
+<span class="sourceLineNo">8023</span>   * These information are exposed by the region server metrics.<a name="line.8023"></a>
+<span class="sourceLineNo">8024</span>   */<a name="line.8024"></a>
+<span class="sourceLineNo">8025</span>  private void recordMutationWithoutWal(final Map&lt;byte [], List&lt;Cell&gt;&gt; familyMap) {<a name="line.8025"></a>
+<span class="sourceLineNo">8026</span>    numMutationsWithoutWAL.increment();<a name="line.8026"></a>
+<span class="sourceLineNo">8027</span>    if (numMutationsWithoutWAL.sum() &lt;= 1) {<a name="line.8027"></a>
+<span class="sourceLineNo">8028</span>      LOG.info("writing data to region " + this +<a name="line.8028"></a>
+<span class="sourceLineNo">8029</span>               " with WAL disabled. Data may be lost in the event of a crash.");<a name="line.8029"></a>
+<span class="sourceLineNo">8030</span>    }<a name="line.8030"></a>
 <span class="sourceLineNo">8031</span><a name="line.8031"></a>
-<span class="sourceLineNo">8032</span>  private void lock(final Lock lock)<a name="line.8032"></a>
-<span class="sourceLineNo">8033</span>      throws RegionTooBusyException, InterruptedIOException {<a name="line.8033"></a>
-<span class="sourceLineNo">8034</span>    lock(lock, 1);<a name="line.8034"></a>
-<span class="sourceLineNo">8035</span>  }<a name="line.8035"></a>
-<span class="sourceLineNo">8036</span><a name="line.8036"></a>
-<span class="sourceLineNo">8037</span>  /**<a name="line.8037"></a>
-<span class="sourceLineNo">8038</span>   * Try to acquire a lock.  Throw RegionTooBusyException<a name="line.8038"></a>
-<span class="sourceLineNo">8039</span>   * if failed to get the lock in time. Throw InterruptedIOException<a name="line.8039"></a>
-<span class="sourceLineNo">8040</span>   * if interrupted while waiting for the lock.<a name="line.8040"></a>
-<span class="sourceLineNo">8041</span>   */<a name="line.8041"></a>
-<span class="sourceLineNo">8042</span>  private void lock(final Lock lock, final int multiplier)<a name="line.8042"></a>
-<span class="sourceLineNo">8043</span>      throws RegionTooBusyException, InterruptedIOException {<a name="line.8043"></a>
-<span class="sourceLineNo">8044</span>    try {<a name="line.8044"></a>
-<span class="sourceLineNo">8045</span>      final long waitTime = Math.min(maxBusyWaitDuration,<a name="line.8045"></a>
-<span class="sourceLineNo">8046</span>          busyWaitDuration * Math.min(multiplier, maxBusyWaitMultiplier));<a name="line.8046"></a>
-<span class="sourceLineNo">8047</span>      if (!lock.tryLock(waitTime, TimeUnit.MILLISECONDS)) {<a name="line.8047"></a>
-<span class="sourceLineNo">8048</span>        throw new RegionTooBusyException(<a name="line.8048"></a>
-<span class="sourceLineNo">8049</span>            "failed to get a lock in " + waitTime + " ms. " +<a name="line.8049"></a>
-<span class="sourceLineNo">8050</span>                "regionName=" + (this.getRegionInfo() == null ? "unknown" :<a name="line.8050"></a>
-<span class="sourceLineNo">8051</span>                this.getRegionInfo().getRegionNameAsString()) +<a name="line.8051"></a>
-<span class="sourceLineNo">8052</span>                ", server=" + (this.getRegionServerServices() == null ? "unknown" :<a name="line.8052"></a>
-<span class="sourceLineNo">8053</span>                this.getRegionServerServices().getServerName()));<a name="line.8053"></a>
-<span class="sourceLineNo">8054</span>      }<a name="line.8054"></a>
-<span class="sourceLineNo">8055</span>    } catch (InterruptedException ie) {<a name="line.8055"></a>
-<span class="sourceLineNo">8056</span>      LOG.info("Interrupted while waiting for a lock");<a name="line.8056"></a>
-<span class="sourceLineNo">8057</span>      InterruptedIOException iie = new InterruptedIOException();<a name="line.8057"></a>
-<span class="sourceLineNo">8058</span>      iie.initCause(ie);<a name="line.8058"></a>
-<span class="sourceLineNo">8059</span>      throw iie;<a name="line.8059"></a>
-<span class="sourceLineNo">8060</span>    }<a name="line.8060"></a>
-<span class="sourceLineNo">8061</span>  }<a name="line.8061"></a>
-<span class="sourceLineNo">8062</span><a name="line.8062"></a>
-<span class="sourceLineNo">8063</span>  /**<a name="line.8063"></a>
-<span class="sourceLineNo">8064</span>   * Calls sync with the given transaction ID<a name="line.8064"></a>
-<span class="sourceLineNo">8065</span>   * @param txid should sync up to which transaction<a name="line.8065"></a>
-<span class="sourceLineNo">8066</span>   * @throws IOException If anything goes wrong with DFS<a name="line.8066"></a>
-<span class="sourceLineNo">8067</span>   */<a name="line.8067"></a>
-<span class="sourceLineNo">8068</span>  private void sync(long txid, Durability durability) throws IOException {<a name="line.8068"></a>
-<span class="sourceLineNo">8069</span>    if (this.getRegionInfo().isMetaRegion()) {<a name="line.8069"></a>
-<span class="sourceLineNo">8070</span>      this.wal.sync(txid);<a name="line.8070"></a>
-<span class="sourceLineNo">8071</span>    } else {<a name="line.8071"></a>
-<span class="sourceLineNo">8072</span>      switch(durability) {<a name="line.8072"></a>
-<span class="sourceLineNo">8073</span>      case USE_DEFAULT:<a name="line.8073"></a>
-<span class="sourceLineNo">8074</span>        // do what table defaults to<a name="line.8074"></a>
-<span class="sourceLineNo">8075</span>        if (shouldSyncWAL()) {<a name="line.8075"></a>
-<span class="sourceLineNo">8076</span>          this.wal.sync(txid);<a name="line.8076"></a>
-<span class="sourceLineNo">8077</span>        }<a name="line.8077"></a>
-<span class="sourceLineNo">8078</span>        break;<a name="line.8078"></a>
-<span class="sourceLineNo">8079</span>      case SKIP_WAL:<a name="line.8079"></a>
-<span class="sourceLineNo">8080</span>        // nothing do to<a name="line.8080"></a>
-<span class="sourceLineNo">8081</span>        break;<a name="line.8081"></a>
-<span class="sourceLineNo">8082</span>      case ASYNC_WAL:<a name="line.8082"></a>
-<span class="sourceLineNo">8083</span>        // nothing do to<a name="line.8083"></a>
-<span class="sourceLineNo">8084</span>        break;<a name="line.8084"></a>
-<span class="sourceLineNo">8085</span>      case SYNC_WAL:<a name="line.8085"></a>
-<span class="sourceLineNo">8086</span>      case FSYNC_WAL:<a name="line.8086"></a>
-<span class="sourceLineNo">8087</span>        // sync the WAL edit (SYNC and FSYNC treated the same for now)<a name="line.8087"></a>
-<span class="sourceLineNo">8088</span>        this.wal.sync(txid);<a name="line.8088"></a>
-<span class="sourceLineNo">8089</span>        break;<a name="line.8089"></a>
-<span class="sourceLineNo">8090</span>      default:<a name="line.8090"></a>
-<span class="sourceLineNo">8091</span>        throw new RuntimeException("Unknown durability " + durability);<a name="line.8091"></a>
-<span class="sourceLineNo">8092</span>      }<a name="line.8092"></a>
-<span class="sourceLineNo">8093</span>    }<a name="line.8093"></a>
-<span class="sourceLineNo">8094</span>  }<a name="line.8094"></a>
-<span class="sourceLineNo">8095</span><a name="line.8095"></a>
-<span class="sourceLineNo">8096</span>  /**<a name="line.8096"></a>
-<span class="sourceLineNo">8097</span>   * Check whether we should sync the wal from the table's durability settings<a name="line.8097"></a>
-<span class="sourceLineNo">8098</span>   */<a name="line.8098"></a>
-<span class="sourceLineNo">8099</span>  private boolean shouldSyncWAL() {<a name="line.8099"></a>
-<span class="sourceLineNo">8100</span>    return durability.ordinal() &gt;  Durability.ASYNC_WAL.ordinal();<a name="line.8100"></a>
-<span class="sourceLineNo">8101</span>  }<a name="line.8101"></a>
-<span class="sourceLineNo">8102</span><a name="line.8102"></a>
-<span class="sourceLineNo">8103</span>  /**<a name="line.8103"></a>
-<span class="sourceLineNo">8104</span>   * A mocked list implementation - discards all updates.<a name="line.8104"></a>
-<span class="sourceLineNo">8105</span>   */<a name="line.8105"></a>
-<span class="sourceLineNo">8106</span>  private static final List&lt;Cell&gt; MOCKED_LIST = new AbstractList&lt;Cell&gt;() {<a name="line.8106"></a>
-<span class="sourceLineNo">8107</span><a name="line.8107"></a>
-<span class="sourceLineNo">8108</span>    @Override<a name="line.8108"></a>
-<span class="sourceLineNo">8109</span>    public void add(int index, Cell element) {<a name="line.8109"></a>
-<span class="sourceLineNo">8110</span>      // do nothing<a name="line.8110"></a>
-<span class="sourceLineNo">8111</span>    }<a name="line.8111"></a>
-<span class="sourceLineNo">8112</span><a name="line.8112"></a>
-<span class="sourceLineNo">8113</span>    @Override<a name="line.8113"></a>
-<span class="sourceLineNo">8114</span>    public boolean addAll(int index, Collection&lt;? extends Cell&gt; c) {<a name="line.8114"></a>
-<span class="sourceLineNo">8115</span>      return false; // this list is never changed as a result of an update<a name="line.8115"></a>
-<span class="sourceLineNo">8116</span>    }<a name="line.8116"></a>
-<span class="sourceLineNo">8117</span><a name="line.8117"></a>
-<span class="sourceLineNo">8118</span>    @Override<a name="line.8118"></a>
-<span class="sourceLineNo">8119</span>    public KeyValue get(int index) {<a name="line.8119"></a>
-<span class="sourceLineNo">8120</span>      throw new UnsupportedOperationException();<a name="line.8120"></a>
-<span class="sourceLineNo">8121</span>    }<a name="line.8121"></a>
-<span class="sourceLineNo">8122</span><a name="line.8122"></a>
-<span class="sourceLineNo">8123</span>    @Override<a name="line.8123"></a>
-<span class="sourceLineNo">8124</span>    public int size() {<a name="line.8124"></a>
-<span class="sourceLineNo">8125</span>      return 0;<a name="line.8125"></a>
-<span class="sourceLineNo">8126</span>    }<a name="line.8126"></a>
-<span class="sourceLineNo">8127</span>  };<a name="line.8127"></a>
-<span class="sourceLineNo">8128</span><a name="line.8128"></a>
-<span class="sourceLineNo">8129</span>  @Override<a name="line.8129"></a>
-<span class="sourceLineNo">8130</span>  public long getOpenSeqNum() {<a name="line.8130"></a>
-<span class="sourceLineNo">8131</span>    return this.openSeqNum;<a name="line.8131"></a>
-<span class="sourceLineNo">8132</span>  }<a name="line.8132"></a>
-<span class="sourceLineNo">8133</span><a name="line.8133"></a>
-<span class="sourceLineNo">8134</span>  @Override<a name="line.8134"></a>
-<span class="sourceLineNo">8135</span>  public Map&lt;byte[], Long&gt; getMaxStoreSeqId() {<a name="line.8135"></a>
-<span class="sourceLineNo">8136</span>    return this.maxSeqIdInStores;<a name="line.8136"></a>
-<span class="sourceLineNo">8137</span>  }<a name="line.8137"></a>
-<span class="sourceLineNo">8138</span><a name="line.8138"></a>
-<span class="sourceLineNo">8139</span>  @Override<a name="line.8139"></a>
-<span class="sourceLineNo">8140</span>  public long getOldestSeqIdOfStore(byte[] familyName) {<a name="line.8140"></a>
-<span class="sourceLineNo">8141</span>    return wal.getEarliestMemstoreSeqNum(getRegionInfo().getEncodedNameAsBytes(), familyName);<a name="line.8141"></a>
-<span class="sourceLineNo">8142</span>  }<a name="line.8142"></a>
-<span class="sourceLineNo">8143</span><a name="line.8143"></a>
-<span class="sourceLineNo">8144</span>  @Override<a name="line.8144"></a>
-<span class="sourceLineNo">8145</span>  public CompactionState getCompactionState() {<a name="line.8145"></a>
-<span class="sourceLineNo">8146</span>    boolean hasMajor = majorInProgress.get() &gt; 0, hasMinor = minorInProgress.get() &gt; 0;<a name="line.8146"></a>
-<span class="sourceLineNo">8147</span>    return (hasMajor ? (hasMinor ? CompactionState.MAJOR_AND_MINOR : CompactionState.MAJOR)<a name="line.8147"></a>
-<span class="sourceLineNo">8148</span>        : (hasMinor ? CompactionState.MINOR : CompactionState.NONE));<a name="line.8148"></a>
-<span class="sourceLineNo">8149</span>  }<a name="line.8149"></a>
-<span class="sourceLineNo">8150</span><a name="line.8150"></a>
-<span class="sourceLineNo">8151</span>  public void reportCompactionRequestStart(boolean isMajor){<a name="line.8151"></a>
-<span class="sourceLineNo">8152</span>    (isMajor ? majorInProgress : minorInProgress).incrementAndGet();<a name="line.8152"></a>
-<span class="sourceLineNo">8153</span>  }<a name="line.8153"></a>
-<span class="sourceLineNo">8154</span><a name="line.8154"></a>
-<span class="sourceLineNo">8155</span>  public void reportCompactionRequestEnd(boolean isMajor, int numFiles, long filesSizeCompacted) {<a name="line.8155"></a>
-<span class="sourceLineNo">8156</span>    int newValue = (isMajor ? majorInProgress : minorInProgress).decrementAndGet();<a name="line.8156"></a>
-<span class="sourceLineNo">8157</span><a name="line.8157"></a>
-<span class="sourceLineNo">8158</span>    // metrics<a name="line.8158"></a>
-<span class="sourceLineNo">8159</span>    compactionsFinished.incrementAndGet();<a name="line.8159"></a>
-<span class="sourceLineNo">8160</span>    compactionNumFilesCompacted.addAndGet(numFiles);<a name="line.8160"></a>
-<span class="sourceLineNo">8161</span>    compactionNumBytesCompacted.addAndGet(filesSizeCompacted);<a name="line.8161"></a>
-<span class="sourceLineNo">8162</span><a name="line.8162"></a>
-<span class="sourceLineNo">8163</span>    assert newValue &gt;= 0;<a name="line.8163"></a>
-<span class="sourceLineNo">8164</span>  }<a name="line.8164"></a>
-<span class="sourceLineNo">8165</span><a name="line.8165"></a>
-<span class="sourceLineNo">8166</span>  public void reportCompactionRequestFailure() {<a name="line.8166"></a>
-<span class="sourceLineNo">8167</span>    compactionsFailed.incrementAndGet();<a name="line.8167"></a>
-<span class="sourceLineNo">8168</span>  }<a name="line.8168"></a>
-<span class="sourceLineNo">8169</span><a name="line.8169"></a>
-<span class="sourceLineNo">8170</span>  public void incrementCompactionsQueuedCount() {<a name="line.8170"></a>
-<span class="sourceLineNo">8171</span>    compactionsQueued.incrementAndGet();<a name="line.8171"></a>
-<span class="sourceLineNo">8172</span>  }<a name="line.8172"></a>
-<span class="sourceLineNo">8173</span><a name="line.8173"></a>
-<span class="sourceLineNo">8174</span>  public void decrementCompactionsQueuedCount() {<a name="line.8174"></a>
-<span class="sourceLineNo">8175</span>    compactionsQueued.decrementAndGet();<a name="line.8175"></a>
-<span class="sourceLineNo">8176</span>  }<a name="line.8176"></a>
-<span class="sourceLineNo">8177</span><a name="line.8177"></a>
-<span class="sourceLineNo">8178</span>  public void incrementFlushesQueuedCount() {<a name="line.8178"></a>
-<span class="sourceLineNo">8179</span>    flushesQueued.incrementAndGet();<a name="line.8179"></a>
-<span class="sourceLineNo">8180</span>  }<a name="line.8180"></a>
-<span class="sourceLineNo">8181</span><a name="line.8181"></a>
-<span class="sourceLineNo">8182</span>  @VisibleForTesting<a name="line.8182"></a>
-<span class="sourceLineNo">8183</span>  public long getReadPoint() {<a name="line.8183"></a>
-<span class="sourceLineNo">8184</span>    return getReadPoint(IsolationLevel.READ_COMMITTED);<a name="line.8184"></a>
+<span class="sourceLineNo">8032</span>    long mutationSize = 0;<a name="line.8032"></a>
+<span class="sourceLineNo">8033</span>    for (List&lt;Cell&gt; cells: familyMap.values()) {<a name="line.8033"></a>
+<span class="sourceLineNo">8034</span>      assert cells instanceof RandomAccess;<a name="line.8034"></a>
+<span class="sourceLineNo">8035</span>      int listSize = cells.size();<a name="line.8035"></a>
+<span class="sourceLineNo">8036</span>      for (int i=0; i &lt; listSize; i++) {<a name="line.8036"></a>
+<span class="sourceLineNo">8037</span>        Cell cell = cells.get(i);<a name="line.8037"></a>
+<span class="sourceLineNo">8038</span>        mutationSize += KeyValueUtil.length(cell);<a name="line.8038"></a>
+<span class="sourceLineNo">8039</span>      }<a name="line.8039"></a>
+<span class="sourceLineNo">8040</span>    }<a name="line.8040"></a>
+<span class="sourceLineNo">8041</span><a name="line.8041"></a>
+<span class="sourceLineNo">8042</span>    dataInMemoryWithoutWAL.add(mutationSize);<a name="line.8042"></a>
+<span class="sourceLineNo">8043</span>  }<a name="line.8043"></a>
+<span class="sourceLineNo">8044</span><a name="line.8044"></a>
+<span class="sourceLineNo">8045</span>  private void lock(final Lock lock)<a name="line.8045"></a>
+<span class="sourceLineNo">8046</span>      throws RegionTooBusyException, InterruptedIOException {<a name="line.8046"></a>
+<span class="sourceLineNo">8047</span>    lock(lock, 1);<a name="line.8047"></a>
+<span class="sourceLineNo">8048</span>  }<a name="line.8048"></a>
+<span class="sourceLineNo">8049</span><a name="line.8049"></a>
+<span class="sourceLineNo">8050</span>  /**<a name="line.8050"></a>
+<span class="sourceLineNo">8051</span>   * Try to acquire a lock.  Throw RegionTooBusyException<a name="line.8051"></a>
+<span class="sourceLineNo">8052</span>   * if failed to get the lock in time. Throw InterruptedIOException<a name="line.8052"></a>
+<span class="sourceLineNo">8053</span>   * if interrupted while waiting for the lock.<a name="line.8053"></a>
+<span class="sourceLineNo">8054</span>   */<a name="line.8054"></a>
+<span class="sourceLineNo">8055</span>  private void lock(final Lock lock, final int multiplier)<a name="line.8055"></a>
+<span class="sourceLineNo">8056</span>      throws RegionTooBusyException, InterruptedIOException {<a name="line.8056"></a>
+<span class="sourceLineNo">8057</span>    try {<a name="line.8057"></a>
+<span class="sourceLineNo">8058</span>      final long waitTime = Math.min(maxBusyWaitDuration,<a name="line.8058"></a>
+<span class="sourceLineNo">8059</span>          busyWaitDuration * Math.min(multiplier, maxBusyWaitMultiplier));<a name="line.8059"></a>
+<span class="sourceLineNo">8060</span>      if (!lock.tryLock(waitTime, TimeUnit.MILLISECONDS)) {<a name="line.8060"></a>
+<span class="sourceLineNo">8061</span>        throw new RegionTooBusyException(<a name="line.8061"></a>
+<span class="sourceLineNo">8062</span>            "failed to get a lock in " + waitTime + " ms. " +<a name="line.8062"></a>
+<span class="sourceLineNo">8063</span>                "regionName=" + (this.getRegionInfo() == null ? "unknown" :<a name="line.8063"></a>
+<span class="sourceLineNo">8064</span>                this.getRegionInfo().getRegionNameAsString()) +<a name="line.8064"></a>
+<span class="sourceLineNo">8065</span>                ", server=" + (this.getRegionServerServices() == null ? "unknown" :<a name="line.8065"></a>
+<span class="sourceLineNo">8066</span>                this.getRegionServerServices().getServerName()));<a name="line.8066"></a>
+<span class="sourceLineNo">8067</span>      }<a name="line.8067"></a>
+<span class="sourceLineNo">8068</span>    } catch (InterruptedException ie) {<a name="line.8068"></a>
+<span class="sourceLineNo">8069</span>      LOG.info("Interrupted while waiting for a lock");<a name="line.8069"></a>
+<span class="sourceLineNo">8070</span>      InterruptedIOException iie = new InterruptedIOException();<a name="line.8070"></a>
+<span class="sourceLineNo">8071</span>      iie.initCause(ie);<a name="line.8071"></a>
+<span class="sourceLineNo">8072</span>      throw iie;<a name="line.8072"></a>
+<span class="sourceLineNo">8073</span>    }<a name="line.8073"></a>
+<span class="sourceLineNo">8074</span>  }<a name="line.8074"></a>
+<span class="sourceLineNo">8075</span><a name="line.8075"></a>
+<span class="sourceLineNo">8076</span>  /**<a name="line.8076"></a>
+<span class="sourceLineNo">8077</span>   * Calls sync with the given transaction ID<a name="line.8077"></a>
+<span class="sourceLineNo">8078</span>   * @param txid should sync up to which transaction<a name="line.8078"></a>
+<span class="sourceLineNo">8079</span>   * @throws IOException If anything goes wrong with DFS<a name="line.8079"></a>
+<span class="sourceLineNo">8080</span>   */<a name="line.8080"></a>
+<span class="sourceLineNo">8081</span>  private void sync(long txid, Durability durability) throws IOException {<a name="line.8081"></a>
+<span class="sourceLineNo">8082</span>    if (this.getRegionInfo().isMetaRegion()) {<a name="line.8082"></a>
+<span class="sourceLineNo">8083</span>      this.wal.sync(txid);<a name="line.8083"></a>
+<span class="sourceLineNo">8084</span>    } else {<a name="line.8084"></a>
+<span class="sourceLineNo">8085</span>      switch(durability) {<a name="line.8085"></a>
+<span class="sourceLineNo">8086</span>      case USE_DEFAULT:<a name="line.8086"></a>
+<span class="sourceLineNo">8087</span>        // do what table defaults to<a name="line.8087"></a>
+<span class="sourceLineNo">8088</span>        if (shouldSyncWAL()) {<a name="line.8088"></a>
+<span class="sourceLineNo">8089</span>          this.wal.sync(txid);<a name="line.8089"></a>
+<span class="sourceLineNo">8090</span>        }<a name="line.8090"></a>
+<span class="sourceLineNo">8091</span>        break;<a name="line.8091"></a>
+<span class="sourceLineNo">8092</span>      case SKIP_WAL:<a name="line.8092"></a>
+<span class="sourceLineNo">8093</span>        // nothing do to<a name="line.8093"></a>
+<span class="sourceLineNo">8094</span>        break;<a name="line.8094"></a>
+<span class="sourceLineNo">8095</span>      case ASYNC_WAL:<a name="line.8095"></a>
+<span class="sourceLineNo">8096</span>        // nothing do to<a name="line.8096"></a>
+<span class="sourceLineNo">8097</span>        break;<a name="line.8097"></a>
+<span class="sourceLineNo">8098</span>      case SYNC_WAL:<a name="line.8098"></a>
+<span class="sourceLineNo">8099</span>      case FSYNC_WAL:<a name="line.8099"></a>
+<span class="sourceLineNo">8100</span>        // sync the WAL edit (SYNC and FSYNC treated the same for now)<a name="line.8100"></a>
+<span class="sourceLineNo">8101</span>        this.wal.sync(txid);<a name="line.8101"></a>
+<span class="sourceLineNo">8102</span>        break;<a name="line.8102"></a>
+<span class="sourceLineNo">8103</span>      default:<a name="line.8103"></a>
+<span class="sourceLineNo">8104</span>        throw new RuntimeException("Unknown durability " + durability);<a name="line.8104"></a>
+<span class="sourceLineNo">8105</span>      }<a name="line.8105"></a>
+<span class="sourceLineNo">8106</span>    }<a name="line.8106"></a>
+<span class="sourceLineNo">8107</span>  }<a name="line.8107"></a>
+<span class="sourceLineNo">8108</span><a name="line.8108"></a>
+<span class="sourceLineNo">8109</span>  /**<a name="line.8109"></a>
+<span class="sourceLineNo">8110</span>   * Check whether we should sync the wal from the table's durability settings<a name="line.8110"></a>
+<span class="sourceLineNo">8111</span>   */<a name="line.8111"></a>
+<span class="sourceLineNo">8112</span>  private boolean shouldSyncWAL() {<a name="line.8112"></a>
+<span class="sourceLineNo">8113</span>    return durability.ordinal() &gt;  Durability.ASYNC_WAL.ordinal();<a name="line.8113"></a>
+<span class="sourceLineNo">8114</span>  }<a name="line.8114"></a>
+<span class="sourceLineNo">8115</span><a name="line.8115"></a>
+<span class="sourceLineNo">8116</span>  /**<a name="line.8116"></a>
+<span class="sourceLineNo">8117</span>   * A mocked list implementation - discards all updates.<a name="line.8117"></a>
+<span class="sourceLineNo">8118</span>   */<a name="line.8118"></a>
+<span class="sourceLineNo">8119</span>  private static final List&lt;Cell&gt; MOCKED_LIST = new AbstractList&lt;Cell&gt;() {<a name="line.8119"></a>
+<span class="sourceLineNo">8120</span><a name="line.8120"></a>
+<span class="sourceLineNo">8121</span>    @Override<a name="line.8121"></a>
+<span class="sourceLineNo">8122</span>    public void add(int index, Cell element) {<a name="line.8122"></a>
+<span class="sourceLineNo">8123</span>      // do nothing<a name="line.8123"></a>
+<span class="sourceLineNo">8124</span>    }<a name="line.8124"></a>
+<span class="sourceLineNo">8125</span><a name="line.8125"></a>
+<span class="sourceLineNo">8126</span>    @Override<a name="line.8126"></a>
+<span class="sourceLineNo">8127</span>    public boolean addAll(int index, Collection&lt;? extends Cell&gt; c) {<a name="line.8127"></a>
+<span class="sourceLineNo">8128</span>      return false; // this list is never changed as a result of an update<a name="line.8128"></a>
+<span class="sourceLineNo">8129</span>    }<a name="line.8129"></a>
+<span class="sourceLineNo">8130</span><a name="line.8130"></a>
+<span class="sourceLineNo">8131</span>    @Override<a name="line.8131"></a>
+<span class="sourceLineNo">8132</span>    public KeyValue get(int index) {<a name="line.8132"></a>
+<span class="sourceLineNo">8133</span>      throw new UnsupportedOperationException();<a name="line.8133"></a>
+<span class="sourceLineNo">8134</span>    }<a name="line.8134"></a>
+<span class="sourceLineNo">8135</span><a name="line.8135"></a>
+<span class="sourceLineNo">8136</span>    @Override<a name="line.8136"></a>
+<span class="sourceLineNo">8137</span>    public int size() {<a name="line.8137"></a>
+<span class="sourceLineNo">8138</span>      return 0;<a name="line.8138"></a>
+<span class="sourceLineNo">8139</span>    }<a name="line.8139"></a>
+<span class="sourceLineNo">8140</span>  };<a name="line.8140"></a>
+<span class="sourceLineNo">8141</span><a name="line.8141"></a>
+<span class="sourceLineNo">8142</span>  @Override<a name="line.8142"></a>
+<span class="sourceLineNo">8143</span>  public long getOpenSeqNum() {<a name="line.8143"></a>
+<span class="sourceLineNo">8144</span>    return this.openSeqNum;<a name="line.8144"></a>
+<span class="sourceLineNo">8145</span>  }<a name="line.8145"></a>
+<span class="sourceLineNo">8146</span><a name="line.8146"></a>
+<span class="sourceLineNo">8147</span>  @Override<a name="line.8147"></a>
+<span class="sourceLineNo">8148</span>  public Map&lt;byte[], Long&gt; getMaxStoreSeqId() {<a name="line.8148"></a>
+<span class="sourceLineNo">8149</span>    return this.maxSeqIdInStores;<a name="line.8149"></a>
+<span class="sourceLineNo">8150</span>  }<a name="line.8150"></a>
+<span class="sourceLineNo">8151</span><a name="line.8151"></a>
+<span class="sourceLineNo">8152</span>  @Override<a name="line.8152"></a>
+<span class="sourceLineNo">8153</span>  public long getOldestSeqIdOfStore(byte[] familyName) {<a name="line.8153"></a>
+<span class="sourceLineNo">8154</span>    return wal.getEarliestMemstoreSeqNum(getRegionInfo().getEncodedNameAsBytes(), familyName);<a name="line.8154"></a>
+<span class="sourceLineNo">8155</span>  }<a name="line.8155"></a>
+<span class="sourceLineNo">8156</span><a name="line.8156"></a>
+<span class="sourceLineNo">8157</span>  @Override<a name="line.8157"></a>
+<span class="sourceLineNo">8158</span>  public CompactionState getCompactionState() {<a name="line.8158"></a>
+<span class="sourceLineNo">8159</span>    boolean hasMajor = majorInProgress.get() &gt; 0, hasMinor = minorInProgress.get() &gt; 0;<a name="line.8159"></a>
+<span class="sourceLineNo">8160</span>    return (hasMajor ? (hasMinor ? CompactionState.MAJOR_AND_MINOR : CompactionState.MAJOR)<a name="line.8160"></a>
+<span class="sourceLineNo">8161</span>        : (hasMinor ? CompactionState.MINOR : CompactionState.NONE));<a name="line.8161"></a>
+<span class="sourceLineNo">8162</span>  }<a name="line.8162"></a>
+<span class="sourceLineNo">8163</span><a name="line.8163"></a>
+<span class="sourceLineNo">8164</span>  public void reportCompactionRequestStart(boolean isMajor){<a name="line.8164"></a>
+<span class="sourceLineNo">8165</span>    (isMajor ? majorInProgress : minorInProgress).incrementAndGet();<a name="line.8165"></a>
+<span class="sourceLineNo">8166</span>  }<a name="line.8166"></a>
+<span class="sourceLineNo">8167</span><a name="line.8167"></a>
+<span class="sourceLineNo">8168</span>  public void reportCompactionRequestEnd(boolean isMajor, int numFiles, long filesSizeCompacted) {<a name="line.8168"></a>
+<span class="sourceLineNo">8169</span>    int newValue = (isMajor ? majorInProgress : minorInProgress).decrementAndGet();<a name="line.8169"></a>
+<span class="sourceLineNo">8170</span><a name="line.8170"></a>
+<span class="sourceLineNo">8171</span>    // metrics<a name="line.8171"></a>
+<span class="sourceLineNo">8172</span>    compactionsFinished.incrementAndGet();<a name="line.8172"></a>
+<span class="sourceLineNo">8173</span>    compactionNumFilesCompacted.addAndGet(numFiles);<a name="line.8173"></a>
+<span class="sourceLineNo">8174</span>    compactionNumBytesCompacted.addAndGet(filesSizeCompacted);<a name="line.8174"></a>
+<span class="sourceLineNo">8175</span><a name="line.8175"></a>
+<span class="sourceLineNo">8176</span>    assert newValue &gt;= 0;<a name="line.8176"></a>
+<span class="sourceLineNo">8177</span>  }<a name="line.8177"></a>
+<span class="sourceLineNo">8178</span><a name="line.8178"></a>
+<span class="sourceLineNo">8179</span>  public void reportCompactionRequestFailure() {<a name="line.8179"></a>
+<span class="sourceLineNo">8180</span>    compactionsFailed.incrementAndGet();<a name="line.8180"></a>
+<span class="sourceLineNo">8181</span>  }<a name="line.8181"></a>
+<span class="sourceLineNo">8182</span><a name="line.8182"></a>
+<span class="sourceLineNo">8183</span>  public void incrementCompactionsQueuedCount() {<a name="line.8183"></a>
+<span class="sourceLineNo">8184</span>    compactionsQueued.incrementAndGet();<a name="line.8184"></a>
 <span class="sourceLineNo">8185</span>  }<a name="line.8185"></a>
 <span class="sourceLineNo">8186</span><a name="line.8186"></a>
-<span class="sourceLineNo">8187</span>  /**<a name="line.8187"></a>
-<span class="sourceLineNo">8188</span>   * {@inheritDoc}<a name="line.8188"></a>
-<span class="sourceLineNo">8189</span>   */<a name="line.8189"></a>
-<span class="sourceLineNo">8190</span>  @Override<a name="line.8190"></a>
-<span class="sourceLineNo">8191</span>  public void onConfigurationChange(Configuration conf) {<a name="line.8191"></a>
-<span class="sourceLineNo">8192</span>    // Do nothing for now.<a name="line.8192"></a>
+<span class="sourceLineNo">8187</span>  public void decrementCompactionsQueuedCount() {<a name="line.8187"></a>
+<span class="sourceLineNo">8188</span>    compactionsQueued.decrementAndGet();<a name="line.8188"></a>
+<span class="sourceLineNo">8189</span>  }<a name="line.8189"></a>
+<span class="sourceLineNo">8190</span><a name="line.8190"></a>
+<span class="sourceLineNo">8191</span>  public void incrementFlushesQueuedCount() {<a name="line.8191"></a>
+<span class="sourceLineNo">8192</span>    flushesQueued.incrementAndGet();<a name="line.8192"></a>
 <span class="sourceLineNo">8193</span>  }<a name="line.8193"></a>
 <span class="sourceLineNo">8194</span><a name="line.8194"></a>
-<span class="sourceLineNo">8195</span>  /**<a name="line.8195"></a>
-<span class="sourceLineNo">8196</span>   * {@inheritDoc}<a name="line.8196"></a>
-<span class="sourceLineNo">8197</span>   */<a name="line.8197"></a>
-<span class="sourceLineNo">8198</span>  @Override<a name="line.8198"></a>
-<span class="sourceLineNo">8199</span>  public void registerChildren(ConfigurationManager manager) {<a name="line.8199"></a>
-<span class="sourceLineNo">8200</span>    configurationManager = Optional.of(manager);<a name="line.8200"></a>
-<span class="sourceLineNo">8201</span>    for (Store s : this.stores.values()) {<a name="line.8201"></a>
-<span class="sourceLineNo">8202</span>      configurationManager.get().registerObserver(s);<a name="line.8202"></a>
-<span class="sourceLineNo">8203</span>    }<a name="line.8203"></a>
-<span class="sourceLineNo">8204</span>  }<a name="line.8204"></a>
-<span class="sourceLineNo">8205</span><a name="line.8205"></a>
-<span class="sourceLineNo">8206</span>  /**<a name="line.8206"></a>
-<span class="sourceLineNo">8207</span>   * {@inheritDoc}<a name="line.8207"></a>
-<span class="sourceLineNo">8208</span>   */<a name="line.8208"></a>
-<span class="sourceLineNo">8209</span>  @Override<a name="line.8209"></a>
-<span class="sourceLineNo">8210</span>  public void deregisterChildren(ConfigurationManager manager) {<a name="line.8210"></a>
-<span class="sourceLineNo">8211</span>    for (Store s : this.stores.values()) {<a name="line.8211"></a>
-<span class="sourceLineNo">8212</span>      configurationManager.get().deregisterObserver(s);<a name="line.8212"></a>
-<span class="sourceLineNo">8213</span>    }<a name="line.8213"></a>
-<span class="sourceLineNo">8214</span>  }<a name="line.8214"></a>
-<span class="sourceLineNo">8215</span><a name="line.8215"></a>
-<span class="sourceLineNo">8216</span>  @Override<a name="line.8216"></a>
-<span class="sourceLineNo">8217</span>  public CellComparator getCellComparator() {<a name="line.8217"></a>
-<span class="sourceLineNo">8218</span>    return this.getRegionInfo().isMetaRegion() ? CellComparator.META_COMPARATOR<a name="line.8218"></a>
-<span class="sourceLineNo">8219</span>        : CellComparator.COMPARATOR;<a name="line.8219"></a>
-<span class="sourceLineNo">8220</span>  }<a name="line.8220"></a>
-<span class="sourceLineNo">8221</span><a name="line.8221"></a>
-<span class="sourceLineNo">8222</span>  public long getMemstoreFlushSize() {<a name="line.8222"></a>
-<span class="sourceLineNo">8223</span>    return this.memstoreFlushSize;<a name="line.8223"></a>
-<span class="sourceLineNo">8224</span>  }<a name="line.8224"></a>
-<span class="sourceLineNo">8225</span><a name="line.8225"></a>
-<span class="sourceLineNo">8226</span>  //// method for debugging tests<a name="line.8226"></a>
-<span class="sourceLineNo">8227</span>  void throwException(String title, String regionName) {<a name="line.8227"></a>
-<span class="sourceLineNo">8228</span>    StringBuffer buf = new StringBuffer();<a name="line.8228"></a>
-<span class="sourceLineNo">8229</span>    buf.append(title + ", ");<a name="line.8229"></a>
-<span class="sourceLineNo">8230</span>    buf.append(getRegionInfo().toString());<a name="line.8230"></a>
-<span class="sourceLineNo">8231</span>    buf.append(getRegionInfo().isMetaRegion() ? " meta region " : " ");<a name="line.8231"></a>
-<span class="sourceLineNo">8232</span>    buf.append(getRegionInfo().isMetaTable() ? " meta table " : " ");<a name="line.8232"></a>
-<span class="sourceLineNo">8233</span>    buf.append("stores: ");<a name="line.8233"></a>
-<span class="sourceLineNo">8234</span>    for (Store s : getStores()) {<a name="line.8234"></a>
-<span class="sourceLineNo">8235</span>      buf.append(s.getColumnFamilyDescriptor().getNameAsString());<a name="line.8235"></a>
-<span class="sourceLineNo">8236</span>      buf.append(" size: ");<a name="line.8236"></a>
-<span class="sourceLineNo">8237</span>      buf.append(s.getSizeOfMemStore().getDataSize());<a name="line.8237"></a>
-<span class="sourceLineNo">8238</span>      buf.append(" ");<a name="line.8238"></a>
-<span class="sourceLineNo">8239</span>    }<a name="line.8239"></a>
-<span class="sourceLineNo">8240</span>    buf.append("end-of-stores");<a name="line.8240"></a>
-<span class="sourceLineNo">8241</span>    buf.append(", memstore size ");<a name="line.8241"></a>
-<span class="sourceLineNo">8242</span>    buf.append(getMemstoreSize());<a name="line.8242"></a>
-<span class="sourceLineNo">8243</span>    if (getRegionInfo().getRegionNameAsString().startsWith(regionName)) {<a name="line.8243"></a>
-<span class="sourceLineNo">8244</span>      throw new RuntimeException(buf.toString());<a name="line.8244"></a>
-<span class="sourceLineNo">8245</span>    }<a name="line.8245"></a>
-<span class="sourceLineNo">8246</span>  }<a name="line.8246"></a>
-<span class="sourceLineNo">8247</span>}<a name="line.8247"></a>
+<span class="sourceLineNo">8195</span>  @VisibleForTesting<a name="line.8195"></a>
+<span class="sourceLineNo">8196</span>  public long getReadPoint() {<a name="line.8196"></a>
+<span class="sourceLineNo">8197</span>    return getReadPoint(IsolationLevel.READ_COMMITTED);<a name="line.8197"></a>
+<span class="sourceLineNo">8198</span>  }<a name="line.8198"></a>
+<span class="sourceLineNo">8199</span><a name="line.8199"></a>
+<span class="sourceLineNo">8200</span>  /**<a name="line.8200"></a>
+<span class="sourceLineNo">8201</span>   * {@inheritDoc}<a name="line.8201"></a>
+<span class="sourceLineNo">8202</span>   */<a name="line.8202"></a>
+<span class="sourceLineNo">8203</span>  @Override<a name="line.8203"></a>
+<span class="sourceLineNo">8204</span>  public void onConfigurationChange(Configuration conf) {<a name="line.8204"></a>
+<span class="sourceLineNo">8205</span>    // Do nothing for now.<a name="line.8205"></a>
+<span class="sourceLineNo">8206</span>  }<a name="line.8206"></a>
+<span class="sourceLineNo">8207</span><a name="line.8207"></a>
+<span class="sourceLineNo">8208</span>  /**<a name="line.8208"></a>
+<span class="sourceLineNo">8209</span>   * {@inheritDoc}<a name="line.8209"></a>
+<span class="sourceLineNo">8210</span>   */<a name="line.8210"></a>
+<span class="sourceLineNo">8211</span>  @Override<a name="line.8211"></a>
+<span class="sourceLineNo">8212</span>  public void registerChildren(ConfigurationManager manager) {<a name="line.8212"></a>
+<span class="sourceLineNo">8213</span>    configurationManager = Optional.of(manager);<a name="line.8213"></a>
+<span class="sourceLineNo">8214</span>    for (Store s : this.stores.values()) {<a name="line.8214"></a>
+<span class="sourceLineNo">8215</span>      configurationManager.get().registerObserver(s);<a name="line.8215"></a>
+<span class="sourceLineNo">8216</span>    }<a name="line.8216"></a>
+<span class="sourceLineNo">8217</span>  }<a name="line.8217"></a>
+<span class="sourceLineNo">8218</span><a name="line.8218"></a>
+<span class="sourceLineNo">8219</span>  /**<a name="line.8219"></a>
+<span class="sourceLineNo">8220</span>   * {@inheritDoc}<a name="line.8220"></a>
+<span class="sourceLineNo">8221</span>   */<a name="line.8221"></a>
+<span class="sourceLineNo">8222</span>  @Override<a name="line.8222"></a>
+<span class="sourceLineNo">8223</span>  public void deregisterChildren(ConfigurationManager manager) {<a name="line.8223"></a>
+<span class="sourceLineNo">8224</span>    for (Store s : this.stores.values()) {<a name="line.8224"></a>
+<span class="sourceLineNo">8225</span>      configurationManager.get().deregisterObserver(s);<a name="line.8225"></a>
+<span class="sourceLineNo">8226</span>    }<a name="line.8226"></a>
+<span class="sourceLineNo">8227</span>  }<a name="line.8227"></a>
+<span class="sourceLineNo">8228</span><a name="line.8228"></a>
+<span class="sourceLineNo">8229</span>  @Override<a name="line.8229"></a>
+<span class="sourceLineNo">8230</span>  public CellComparator getCellComparator() {<a name="line.8230"></a>
+<span class="sourceLineNo">8231</span>    return this.getRegionInfo().isMetaRegion() ? CellComparator.META_COMPARATOR<a name="line.8231"></a>
+<span class="sourceLineNo">8232</span>        : CellComparator.COMPARATOR;<a name="line.8232"></a>
+<span class="sourceLineNo">8233</span>  }<a name="line.8233"></a>
+<span class="sourceLineNo">8234</span><a name="line.8234"></a>
+<span class="sourceLineNo">8235</span>  public long getMemstoreFlushSize() {<a name="line.8235"></a>
+<span class="sourceLineNo">8236</span>    return this.memstoreFlushSize;<a name="line.8236"></a>
+<span class="sourceLineNo">8237</span>  }<a name="line.8237"></a>
+<span class="sourceLineNo">8238</span><a name="line.8238"></a>
+<span class="sourceLineNo">8239</span>  //// method for debugging tests<a name="line.8239"></a>
+<span class="sourceLineNo">8240</span>  void throwException(String title, String regionName) {<a name="line.8240"></a>
+<span class="sourceLineNo">8241</span>    StringBuffer buf = new StringBuffer();<a name="line.8241"></a>
+<span class="sourceLineNo">8242</span>    buf.append(title + ", ");<a name="line.8242"></a>
+<span class="sourceLineNo">8243</span>    buf.append(getRegionInfo().toString());<a name="line.8243"></a>
+<span class="sourceLineNo">8244</span>    buf.append(getRegionInfo().isMetaRegion() ? " meta region " : " ");<a name="line.8244"></a>
+<span class="sourceLineNo">8245</span>    buf.append(getRegionInfo().isMetaTable() ? " meta table " : " ");<a name="line.8245"></a>
+<span class="sourceLineNo">8246</span>    buf.append("stores: ");<a name="line.8246"></a>
+<span class="sourceLineNo">8247</span>    for (Store s : getStores()) {<a name="line.8247"></a>
+<span class="sourceLineNo">8248</span>      buf.append(s.getColumnFamilyDescriptor().getNameAsString());<a name="line.8248"></a>
+<span class="sourceLineNo">8249</span>      buf.append(" size: ");<a name="line.8249"></a>
+<span class="sourceLineNo">8250</span>      buf.append(s.getSizeOfMemStore().getDataSize());<a name="line.8250"></a>
+<span class="sourceLineNo">8251</span>      buf.append(" ");<a name="line.8251"></a>
+<span class="sourceLineNo">8252</span>    }<a name="line.8252"></a>
+<span class="sourceLineNo">8253</span>    buf.append("end-of-stores");<a name="line.8253"></a>
+<span class="sourceLineNo">8254</span>    buf.append(", memstore size ");<a name="line.8254"></a>
+<span class="sourceLineNo">8255</span>    buf.append(getMemstoreSize());<a name="line.8255"></a>
+<span class="sourceLineNo">8256</span>    if (getRegionInfo().getRegionNameAsString().startsWith(regionName)) {<a name="line.8256"></a>
+<span class="sourceLineNo">8257</span>      throw new RuntimeException(buf.toString());<a name="line.8257"></a>
+<span class="sourceLineNo">8258</span>    }<a name="line.8258"></a>
+<span class="sourceLineNo">8259</span>  }<a name="line.8259"></a>
+<span class="sourceLineNo">8260</span>}<a name="line.8260"></a>
 
 
 


[05/33] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.RegionSnapshotTask.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.RegionSnapshotTask.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.RegionSnapshotTask.html
index c73100f..b3c1730 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.RegionSnapshotTask.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.RegionSnapshotTask.html
@@ -41,181 +41,190 @@
 <span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.33"></a>
 <span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.regionserver.Region;<a name="line.34"></a>
 <span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.regionserver.Region.FlushResult;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.regionserver.snapshot.RegionServerSnapshotManager.SnapshotSubprocedurePool;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.snapshot.ClientSnapshotDescriptionUtils;<a name="line.38"></a>
-<span class="sourceLineNo">039</span><a name="line.39"></a>
-<span class="sourceLineNo">040</span>/**<a name="line.40"></a>
-<span class="sourceLineNo">041</span> * This online snapshot implementation uses the distributed procedure framework to force a<a name="line.41"></a>
-<span class="sourceLineNo">042</span> * store flush and then records the hfiles.  Its enter stage does nothing.  Its leave stage then<a name="line.42"></a>
-<span class="sourceLineNo">043</span> * flushes the memstore, builds the region server's snapshot manifest from its hfiles list, and<a name="line.43"></a>
-<span class="sourceLineNo">044</span> * copies .regioninfos into the snapshot working directory.  At the master side, there is an atomic<a name="line.44"></a>
-<span class="sourceLineNo">045</span> * rename of the working dir into the proper snapshot directory.<a name="line.45"></a>
-<span class="sourceLineNo">046</span> */<a name="line.46"></a>
-<span class="sourceLineNo">047</span>@InterfaceAudience.Private<a name="line.47"></a>
-<span class="sourceLineNo">048</span>@InterfaceStability.Unstable<a name="line.48"></a>
-<span class="sourceLineNo">049</span>public class FlushSnapshotSubprocedure extends Subprocedure {<a name="line.49"></a>
-<span class="sourceLineNo">050</span>  private static final Log LOG = LogFactory.getLog(FlushSnapshotSubprocedure.class);<a name="line.50"></a>
-<span class="sourceLineNo">051</span><a name="line.51"></a>
-<span class="sourceLineNo">052</span>  private final List&lt;Region&gt; regions;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>  private final SnapshotDescription snapshot;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>  private final SnapshotSubprocedurePool taskManager;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>  private boolean snapshotSkipFlush = false;<a name="line.55"></a>
-<span class="sourceLineNo">056</span><a name="line.56"></a>
-<span class="sourceLineNo">057</span>  // the maximum number of attempts we flush<a name="line.57"></a>
-<span class="sourceLineNo">058</span>  final static int MAX_RETRIES = 3;<a name="line.58"></a>
-<span class="sourceLineNo">059</span><a name="line.59"></a>
-<span class="sourceLineNo">060</span>  public FlushSnapshotSubprocedure(ProcedureMember member,<a name="line.60"></a>
-<span class="sourceLineNo">061</span>      ForeignExceptionDispatcher errorListener, long wakeFrequency, long timeout,<a name="line.61"></a>
-<span class="sourceLineNo">062</span>      List&lt;Region&gt; regions, SnapshotDescription snapshot,<a name="line.62"></a>
-<span class="sourceLineNo">063</span>      SnapshotSubprocedurePool taskManager) {<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    super(member, snapshot.getName(), errorListener, wakeFrequency, timeout);<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    this.snapshot = snapshot;<a name="line.65"></a>
-<span class="sourceLineNo">066</span><a name="line.66"></a>
-<span class="sourceLineNo">067</span>    if (this.snapshot.getType() == SnapshotDescription.Type.SKIPFLUSH) {<a name="line.67"></a>
-<span class="sourceLineNo">068</span>      snapshotSkipFlush = true;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    }<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    this.regions = regions;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    this.taskManager = taskManager;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  }<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>  /**<a name="line.74"></a>
-<span class="sourceLineNo">075</span>   * Callable for adding files to snapshot manifest working dir.  Ready for multithreading.<a name="line.75"></a>
-<span class="sourceLineNo">076</span>   */<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  private class RegionSnapshotTask implements Callable&lt;Void&gt; {<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    Region region;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    RegionSnapshotTask(Region region) {<a name="line.79"></a>
-<span class="sourceLineNo">080</span>      this.region = region;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>    }<a name="line.81"></a>
-<span class="sourceLineNo">082</span><a name="line.82"></a>
-<span class="sourceLineNo">083</span>    @Override<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    public Void call() throws Exception {<a name="line.84"></a>
-<span class="sourceLineNo">085</span>      // Taking the region read lock prevents the individual region from being closed while a<a name="line.85"></a>
-<span class="sourceLineNo">086</span>      // snapshot is in progress.  This is helpful but not sufficient for preventing races with<a name="line.86"></a>
-<span class="sourceLineNo">087</span>      // snapshots that involve multiple regions and regionservers.  It is still possible to have<a name="line.87"></a>
-<span class="sourceLineNo">088</span>      // an interleaving such that globally regions are missing, so we still need the verification<a name="line.88"></a>
-<span class="sourceLineNo">089</span>      // step.<a name="line.89"></a>
-<span class="sourceLineNo">090</span>      LOG.debug("Starting region operation on " + region);<a name="line.90"></a>
-<span class="sourceLineNo">091</span>      region.startRegionOperation();<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      try {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>        if (snapshotSkipFlush) {<a name="line.93"></a>
-<span class="sourceLineNo">094</span>        /*<a name="line.94"></a>
-<span class="sourceLineNo">095</span>         * This is to take an online-snapshot without force a coordinated flush to prevent pause<a name="line.95"></a>
-<span class="sourceLineNo">096</span>         * The snapshot type is defined inside the snapshot description. FlushSnapshotSubprocedure<a name="line.96"></a>
-<span class="sourceLineNo">097</span>         * should be renamed to distributedSnapshotSubprocedure, and the flush() behavior can be<a name="line.97"></a>
-<span class="sourceLineNo">098</span>         * turned on/off based on the flush type.<a name="line.98"></a>
-<span class="sourceLineNo">099</span>         * To minimized the code change, class name is not changed.<a name="line.99"></a>
-<span class="sourceLineNo">100</span>         */<a name="line.100"></a>
-<span class="sourceLineNo">101</span>          LOG.debug("take snapshot without flush memstore first");<a name="line.101"></a>
-<span class="sourceLineNo">102</span>        } else {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>          LOG.debug("Flush Snapshotting region " + region.toString() + " started...");<a name="line.103"></a>
-<span class="sourceLineNo">104</span>          boolean succeeded = false;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>          long readPt = region.getReadpoint(IsolationLevel.READ_COMMITTED);<a name="line.105"></a>
-<span class="sourceLineNo">106</span>          for (int i = 0; i &lt; MAX_RETRIES; i++) {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>            FlushResult res = region.flush(true);<a name="line.107"></a>
-<span class="sourceLineNo">108</span>            if (res.getResult() == FlushResult.Result.CANNOT_FLUSH) {<a name="line.108"></a>
-<span class="sourceLineNo">109</span>              // CANNOT_FLUSH may mean that a flush is already on-going<a name="line.109"></a>
-<span class="sourceLineNo">110</span>              // we need to wait for that flush to complete<a name="line.110"></a>
-<span class="sourceLineNo">111</span>              region.waitForFlushes();<a name="line.111"></a>
-<span class="sourceLineNo">112</span>              if (region.getMaxFlushedSeqId() &gt;= readPt) {<a name="line.112"></a>
-<span class="sourceLineNo">113</span>                // writes at the start of the snapshot have been persisted<a name="line.113"></a>
-<span class="sourceLineNo">114</span>                succeeded = true;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>                break;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>              }<a name="line.116"></a>
-<span class="sourceLineNo">117</span>            } else {<a name="line.117"></a>
-<span class="sourceLineNo">118</span>              succeeded = true;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>              break;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>            }<a name="line.120"></a>
-<span class="sourceLineNo">121</span>          }<a name="line.121"></a>
-<span class="sourceLineNo">122</span>          if (!succeeded) {<a name="line.122"></a>
-<span class="sourceLineNo">123</span>            throw new IOException("Unable to complete flush after " + MAX_RETRIES + " attempts");<a name="line.123"></a>
-<span class="sourceLineNo">124</span>          }<a name="line.124"></a>
-<span class="sourceLineNo">125</span>        }<a name="line.125"></a>
-<span class="sourceLineNo">126</span>        ((HRegion)region).addRegionToSnapshot(snapshot, monitor);<a name="line.126"></a>
-<span class="sourceLineNo">127</span>        if (snapshotSkipFlush) {<a name="line.127"></a>
-<span class="sourceLineNo">128</span>          LOG.debug("... SkipFlush Snapshotting region " + region.toString() + " completed.");<a name="line.128"></a>
-<span class="sourceLineNo">129</span>        } else {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>          LOG.debug("... Flush Snapshotting region " + region.toString() + " completed.");<a name="line.130"></a>
-<span class="sourceLineNo">131</span>        }<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      } finally {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>        LOG.debug("Closing region operation on " + region);<a name="line.133"></a>
-<span class="sourceLineNo">134</span>        region.closeRegionOperation();<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      }<a name="line.135"></a>
-<span class="sourceLineNo">136</span>      return null;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    }<a name="line.137"></a>
-<span class="sourceLineNo">138</span>  }<a name="line.138"></a>
-<span class="sourceLineNo">139</span><a name="line.139"></a>
-<span class="sourceLineNo">140</span>  private void flushSnapshot() throws ForeignException {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    if (regions.isEmpty()) {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      // No regions on this RS, we are basically done.<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      return;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    }<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>    monitor.rethrowException();<a name="line.146"></a>
-<span class="sourceLineNo">147</span><a name="line.147"></a>
-<span class="sourceLineNo">148</span>    // assert that the taskManager is empty.<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    if (taskManager.hasTasks()) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      throw new IllegalStateException("Attempting to take snapshot "<a name="line.150"></a>
-<span class="sourceLineNo">151</span>          + ClientSnapshotDescriptionUtils.toString(snapshot)<a name="line.151"></a>
-<span class="sourceLineNo">152</span>          + " but we currently have outstanding tasks");<a name="line.152"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.regionserver.Region.Operation;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.regionserver.snapshot.RegionServerSnapshotManager.SnapshotSubprocedurePool;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.snapshot.ClientSnapshotDescriptionUtils;<a name="line.39"></a>
+<span class="sourceLineNo">040</span><a name="line.40"></a>
+<span class="sourceLineNo">041</span>/**<a name="line.41"></a>
+<span class="sourceLineNo">042</span> * This online snapshot implementation uses the distributed procedure framework to force a<a name="line.42"></a>
+<span class="sourceLineNo">043</span> * store flush and then records the hfiles.  Its enter stage does nothing.  Its leave stage then<a name="line.43"></a>
+<span class="sourceLineNo">044</span> * flushes the memstore, builds the region server's snapshot manifest from its hfiles list, and<a name="line.44"></a>
+<span class="sourceLineNo">045</span> * copies .regioninfos into the snapshot working directory.  At the master side, there is an atomic<a name="line.45"></a>
+<span class="sourceLineNo">046</span> * rename of the working dir into the proper snapshot directory.<a name="line.46"></a>
+<span class="sourceLineNo">047</span> */<a name="line.47"></a>
+<span class="sourceLineNo">048</span>@InterfaceAudience.Private<a name="line.48"></a>
+<span class="sourceLineNo">049</span>@InterfaceStability.Unstable<a name="line.49"></a>
+<span class="sourceLineNo">050</span>public class FlushSnapshotSubprocedure extends Subprocedure {<a name="line.50"></a>
+<span class="sourceLineNo">051</span>  private static final Log LOG = LogFactory.getLog(FlushSnapshotSubprocedure.class);<a name="line.51"></a>
+<span class="sourceLineNo">052</span><a name="line.52"></a>
+<span class="sourceLineNo">053</span>  private final List&lt;Region&gt; regions;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>  private final SnapshotDescription snapshot;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>  private final SnapshotSubprocedurePool taskManager;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>  private boolean snapshotSkipFlush = false;<a name="line.56"></a>
+<span class="sourceLineNo">057</span><a name="line.57"></a>
+<span class="sourceLineNo">058</span>  // the maximum number of attempts we flush<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  final static int MAX_RETRIES = 3;<a name="line.59"></a>
+<span class="sourceLineNo">060</span><a name="line.60"></a>
+<span class="sourceLineNo">061</span>  public FlushSnapshotSubprocedure(ProcedureMember member,<a name="line.61"></a>
+<span class="sourceLineNo">062</span>      ForeignExceptionDispatcher errorListener, long wakeFrequency, long timeout,<a name="line.62"></a>
+<span class="sourceLineNo">063</span>      List&lt;Region&gt; regions, SnapshotDescription snapshot,<a name="line.63"></a>
+<span class="sourceLineNo">064</span>      SnapshotSubprocedurePool taskManager) {<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    super(member, snapshot.getName(), errorListener, wakeFrequency, timeout);<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    this.snapshot = snapshot;<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span>    if (this.snapshot.getType() == SnapshotDescription.Type.SKIPFLUSH) {<a name="line.68"></a>
+<span class="sourceLineNo">069</span>      snapshotSkipFlush = true;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    }<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    this.regions = regions;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>    this.taskManager = taskManager;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>  }<a name="line.73"></a>
+<span class="sourceLineNo">074</span><a name="line.74"></a>
+<span class="sourceLineNo">075</span>  /**<a name="line.75"></a>
+<span class="sourceLineNo">076</span>   * Callable for adding files to snapshot manifest working dir.  Ready for multithreading.<a name="line.76"></a>
+<span class="sourceLineNo">077</span>   */<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  public static class RegionSnapshotTask implements Callable&lt;Void&gt; {<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    private Region region;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    private boolean skipFlush;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    private ForeignExceptionDispatcher monitor;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    private SnapshotDescription snapshotDesc;<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>    public RegionSnapshotTask(Region region, SnapshotDescription snapshotDesc,<a name="line.84"></a>
+<span class="sourceLineNo">085</span>        boolean skipFlush, ForeignExceptionDispatcher monitor) {<a name="line.85"></a>
+<span class="sourceLineNo">086</span>      this.region = region;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>      this.skipFlush = skipFlush;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>      this.monitor = monitor;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>      this.snapshotDesc = snapshotDesc;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    }<a name="line.90"></a>
+<span class="sourceLineNo">091</span><a name="line.91"></a>
+<span class="sourceLineNo">092</span>    @Override<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    public Void call() throws Exception {<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      // Taking the region read lock prevents the individual region from being closed while a<a name="line.94"></a>
+<span class="sourceLineNo">095</span>      // snapshot is in progress.  This is helpful but not sufficient for preventing races with<a name="line.95"></a>
+<span class="sourceLineNo">096</span>      // snapshots that involve multiple regions and regionservers.  It is still possible to have<a name="line.96"></a>
+<span class="sourceLineNo">097</span>      // an interleaving such that globally regions are missing, so we still need the verification<a name="line.97"></a>
+<span class="sourceLineNo">098</span>      // step.<a name="line.98"></a>
+<span class="sourceLineNo">099</span>      LOG.debug("Starting snapshot operation on " + region);<a name="line.99"></a>
+<span class="sourceLineNo">100</span>      region.startRegionOperation(Operation.SNAPSHOT);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>      try {<a name="line.101"></a>
+<span class="sourceLineNo">102</span>        if (skipFlush) {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>        /*<a name="line.103"></a>
+<span class="sourceLineNo">104</span>         * This is to take an online-snapshot without force a coordinated flush to prevent pause<a name="line.104"></a>
+<span class="sourceLineNo">105</span>         * The snapshot type is defined inside the snapshot description. FlushSnapshotSubprocedure<a name="line.105"></a>
+<span class="sourceLineNo">106</span>         * should be renamed to distributedSnapshotSubprocedure, and the flush() behavior can be<a name="line.106"></a>
+<span class="sourceLineNo">107</span>         * turned on/off based on the flush type.<a name="line.107"></a>
+<span class="sourceLineNo">108</span>         * To minimized the code change, class name is not changed.<a name="line.108"></a>
+<span class="sourceLineNo">109</span>         */<a name="line.109"></a>
+<span class="sourceLineNo">110</span>          LOG.debug("take snapshot without flush memstore first");<a name="line.110"></a>
+<span class="sourceLineNo">111</span>        } else {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>          LOG.debug("Flush Snapshotting region " + region.toString() + " started...");<a name="line.112"></a>
+<span class="sourceLineNo">113</span>          boolean succeeded = false;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>          long readPt = region.getReadpoint(IsolationLevel.READ_COMMITTED);<a name="line.114"></a>
+<span class="sourceLineNo">115</span>          for (int i = 0; i &lt; MAX_RETRIES; i++) {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>            FlushResult res = region.flush(true);<a name="line.116"></a>
+<span class="sourceLineNo">117</span>            if (res.getResult() == FlushResult.Result.CANNOT_FLUSH) {<a name="line.117"></a>
+<span class="sourceLineNo">118</span>              // CANNOT_FLUSH may mean that a flush is already on-going<a name="line.118"></a>
+<span class="sourceLineNo">119</span>              // we need to wait for that flush to complete<a name="line.119"></a>
+<span class="sourceLineNo">120</span>              region.waitForFlushes();<a name="line.120"></a>
+<span class="sourceLineNo">121</span>              if (region.getMaxFlushedSeqId() &gt;= readPt) {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>                // writes at the start of the snapshot have been persisted<a name="line.122"></a>
+<span class="sourceLineNo">123</span>                succeeded = true;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>                break;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>              }<a name="line.125"></a>
+<span class="sourceLineNo">126</span>            } else {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>              succeeded = true;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>              break;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>            }<a name="line.129"></a>
+<span class="sourceLineNo">130</span>          }<a name="line.130"></a>
+<span class="sourceLineNo">131</span>          if (!succeeded) {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>            throw new IOException("Unable to complete flush after " + MAX_RETRIES + " attempts");<a name="line.132"></a>
+<span class="sourceLineNo">133</span>          }<a name="line.133"></a>
+<span class="sourceLineNo">134</span>        }<a name="line.134"></a>
+<span class="sourceLineNo">135</span>        ((HRegion)region).addRegionToSnapshot(snapshotDesc, monitor);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>        if (skipFlush) {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>          LOG.debug("... SkipFlush Snapshotting region " + region.toString() + " completed.");<a name="line.137"></a>
+<span class="sourceLineNo">138</span>        } else {<a name="line.138"></a>
+<span class="sourceLineNo">139</span>          LOG.debug("... Flush Snapshotting region " + region.toString() + " completed.");<a name="line.139"></a>
+<span class="sourceLineNo">140</span>        }<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      } finally {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>        LOG.debug("Closing snapshot operation on " + region);<a name="line.142"></a>
+<span class="sourceLineNo">143</span>        region.closeRegionOperation(Operation.SNAPSHOT);<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      }<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      return null;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    }<a name="line.146"></a>
+<span class="sourceLineNo">147</span>  }<a name="line.147"></a>
+<span class="sourceLineNo">148</span><a name="line.148"></a>
+<span class="sourceLineNo">149</span>  private void flushSnapshot() throws ForeignException {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    if (regions.isEmpty()) {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      // No regions on this RS, we are basically done.<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      return;<a name="line.152"></a>
 <span class="sourceLineNo">153</span>    }<a name="line.153"></a>
 <span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>    // Add all hfiles already existing in region.<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    for (Region region : regions) {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      // submit one task per region for parallelize by region.<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      taskManager.submitTask(new RegionSnapshotTask(region));<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      monitor.rethrowException();<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    }<a name="line.160"></a>
-<span class="sourceLineNo">161</span><a name="line.161"></a>
-<span class="sourceLineNo">162</span>    // wait for everything to complete.<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    LOG.debug("Flush Snapshot Tasks submitted for " + regions.size() + " regions");<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    try {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      taskManager.waitForOutstandingTasks();<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    } catch (InterruptedException e) {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      LOG.error("got interrupted exception for " + getMemberName());<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      throw new ForeignException(getMemberName(), e);<a name="line.168"></a>
+<span class="sourceLineNo">155</span>    monitor.rethrowException();<a name="line.155"></a>
+<span class="sourceLineNo">156</span><a name="line.156"></a>
+<span class="sourceLineNo">157</span>    // assert that the taskManager is empty.<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    if (taskManager.hasTasks()) {<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      throw new IllegalStateException("Attempting to take snapshot "<a name="line.159"></a>
+<span class="sourceLineNo">160</span>          + ClientSnapshotDescriptionUtils.toString(snapshot)<a name="line.160"></a>
+<span class="sourceLineNo">161</span>          + " but we currently have outstanding tasks");<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    }<a name="line.162"></a>
+<span class="sourceLineNo">163</span><a name="line.163"></a>
+<span class="sourceLineNo">164</span>    // Add all hfiles already existing in region.<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    for (Region region : regions) {<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      // submit one task per region for parallelize by region.<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      taskManager.submitTask(new RegionSnapshotTask(region, snapshot, snapshotSkipFlush, monitor));<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      monitor.rethrowException();<a name="line.168"></a>
 <span class="sourceLineNo">169</span>    }<a name="line.169"></a>
-<span class="sourceLineNo">170</span>  }<a name="line.170"></a>
-<span class="sourceLineNo">171</span><a name="line.171"></a>
-<span class="sourceLineNo">172</span>  /**<a name="line.172"></a>
-<span class="sourceLineNo">173</span>   * do nothing, core of snapshot is executed in {@link #insideBarrier} step.<a name="line.173"></a>
-<span class="sourceLineNo">174</span>   */<a name="line.174"></a>
-<span class="sourceLineNo">175</span>  @Override<a name="line.175"></a>
-<span class="sourceLineNo">176</span>  public void acquireBarrier() throws ForeignException {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    // NO OP<a name="line.177"></a>
-<span class="sourceLineNo">178</span>  }<a name="line.178"></a>
-<span class="sourceLineNo">179</span><a name="line.179"></a>
-<span class="sourceLineNo">180</span>  /**<a name="line.180"></a>
-<span class="sourceLineNo">181</span>   * do a flush snapshot of every region on this rs from the target table.<a name="line.181"></a>
-<span class="sourceLineNo">182</span>   */<a name="line.182"></a>
-<span class="sourceLineNo">183</span>  @Override<a name="line.183"></a>
-<span class="sourceLineNo">184</span>  public byte[] insideBarrier() throws ForeignException {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    flushSnapshot();<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    return new byte[0];<a name="line.186"></a>
+<span class="sourceLineNo">170</span><a name="line.170"></a>
+<span class="sourceLineNo">171</span>    // wait for everything to complete.<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    LOG.debug("Flush Snapshot Tasks submitted for " + regions.size() + " regions");<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    try {<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      taskManager.waitForOutstandingTasks();<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    } catch (InterruptedException e) {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>      LOG.error("got interrupted exception for " + getMemberName());<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      throw new ForeignException(getMemberName(), e);<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    }<a name="line.178"></a>
+<span class="sourceLineNo">179</span>  }<a name="line.179"></a>
+<span class="sourceLineNo">180</span><a name="line.180"></a>
+<span class="sourceLineNo">181</span>  /**<a name="line.181"></a>
+<span class="sourceLineNo">182</span>   * do nothing, core of snapshot is executed in {@link #insideBarrier} step.<a name="line.182"></a>
+<span class="sourceLineNo">183</span>   */<a name="line.183"></a>
+<span class="sourceLineNo">184</span>  @Override<a name="line.184"></a>
+<span class="sourceLineNo">185</span>  public void acquireBarrier() throws ForeignException {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    // NO OP<a name="line.186"></a>
 <span class="sourceLineNo">187</span>  }<a name="line.187"></a>
 <span class="sourceLineNo">188</span><a name="line.188"></a>
 <span class="sourceLineNo">189</span>  /**<a name="line.189"></a>
-<span class="sourceLineNo">190</span>   * Cancel threads if they haven't finished.<a name="line.190"></a>
+<span class="sourceLineNo">190</span>   * do a flush snapshot of every region on this rs from the target table.<a name="line.190"></a>
 <span class="sourceLineNo">191</span>   */<a name="line.191"></a>
 <span class="sourceLineNo">192</span>  @Override<a name="line.192"></a>
-<span class="sourceLineNo">193</span>  public void cleanup(Exception e) {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    LOG.info("Aborting all online FLUSH snapshot subprocedure task threads for '"<a name="line.194"></a>
-<span class="sourceLineNo">195</span>        + snapshot.getName() + "' due to error", e);<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    try {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      taskManager.cancelTasks();<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    } catch (InterruptedException e1) {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      Thread.currentThread().interrupt();<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    }<a name="line.200"></a>
-<span class="sourceLineNo">201</span>  }<a name="line.201"></a>
-<span class="sourceLineNo">202</span><a name="line.202"></a>
-<span class="sourceLineNo">203</span>  /**<a name="line.203"></a>
-<span class="sourceLineNo">204</span>   * Hooray!<a name="line.204"></a>
-<span class="sourceLineNo">205</span>   */<a name="line.205"></a>
-<span class="sourceLineNo">206</span>  public void releaseBarrier() {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    // NO OP<a name="line.207"></a>
-<span class="sourceLineNo">208</span>  }<a name="line.208"></a>
-<span class="sourceLineNo">209</span><a name="line.209"></a>
-<span class="sourceLineNo">210</span>}<a name="line.210"></a>
+<span class="sourceLineNo">193</span>  public byte[] insideBarrier() throws ForeignException {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    flushSnapshot();<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    return new byte[0];<a name="line.195"></a>
+<span class="sourceLineNo">196</span>  }<a name="line.196"></a>
+<span class="sourceLineNo">197</span><a name="line.197"></a>
+<span class="sourceLineNo">198</span>  /**<a name="line.198"></a>
+<span class="sourceLineNo">199</span>   * Cancel threads if they haven't finished.<a name="line.199"></a>
+<span class="sourceLineNo">200</span>   */<a name="line.200"></a>
+<span class="sourceLineNo">201</span>  @Override<a name="line.201"></a>
+<span class="sourceLineNo">202</span>  public void cleanup(Exception e) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    LOG.info("Aborting all online FLUSH snapshot subprocedure task threads for '"<a name="line.203"></a>
+<span class="sourceLineNo">204</span>        + snapshot.getName() + "' due to error", e);<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    try {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      taskManager.cancelTasks();<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    } catch (InterruptedException e1) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      Thread.currentThread().interrupt();<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    }<a name="line.209"></a>
+<span class="sourceLineNo">210</span>  }<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span>  /**<a name="line.212"></a>
+<span class="sourceLineNo">213</span>   * Hooray!<a name="line.213"></a>
+<span class="sourceLineNo">214</span>   */<a name="line.214"></a>
+<span class="sourceLineNo">215</span>  public void releaseBarrier() {<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    // NO OP<a name="line.216"></a>
+<span class="sourceLineNo">217</span>  }<a name="line.217"></a>
+<span class="sourceLineNo">218</span><a name="line.218"></a>
+<span class="sourceLineNo">219</span>}<a name="line.219"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.html
index c73100f..b3c1730 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.html
@@ -41,181 +41,190 @@
 <span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.33"></a>
 <span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.regionserver.Region;<a name="line.34"></a>
 <span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.regionserver.Region.FlushResult;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.regionserver.snapshot.RegionServerSnapshotManager.SnapshotSubprocedurePool;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.snapshot.ClientSnapshotDescriptionUtils;<a name="line.38"></a>
-<span class="sourceLineNo">039</span><a name="line.39"></a>
-<span class="sourceLineNo">040</span>/**<a name="line.40"></a>
-<span class="sourceLineNo">041</span> * This online snapshot implementation uses the distributed procedure framework to force a<a name="line.41"></a>
-<span class="sourceLineNo">042</span> * store flush and then records the hfiles.  Its enter stage does nothing.  Its leave stage then<a name="line.42"></a>
-<span class="sourceLineNo">043</span> * flushes the memstore, builds the region server's snapshot manifest from its hfiles list, and<a name="line.43"></a>
-<span class="sourceLineNo">044</span> * copies .regioninfos into the snapshot working directory.  At the master side, there is an atomic<a name="line.44"></a>
-<span class="sourceLineNo">045</span> * rename of the working dir into the proper snapshot directory.<a name="line.45"></a>
-<span class="sourceLineNo">046</span> */<a name="line.46"></a>
-<span class="sourceLineNo">047</span>@InterfaceAudience.Private<a name="line.47"></a>
-<span class="sourceLineNo">048</span>@InterfaceStability.Unstable<a name="line.48"></a>
-<span class="sourceLineNo">049</span>public class FlushSnapshotSubprocedure extends Subprocedure {<a name="line.49"></a>
-<span class="sourceLineNo">050</span>  private static final Log LOG = LogFactory.getLog(FlushSnapshotSubprocedure.class);<a name="line.50"></a>
-<span class="sourceLineNo">051</span><a name="line.51"></a>
-<span class="sourceLineNo">052</span>  private final List&lt;Region&gt; regions;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>  private final SnapshotDescription snapshot;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>  private final SnapshotSubprocedurePool taskManager;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>  private boolean snapshotSkipFlush = false;<a name="line.55"></a>
-<span class="sourceLineNo">056</span><a name="line.56"></a>
-<span class="sourceLineNo">057</span>  // the maximum number of attempts we flush<a name="line.57"></a>
-<span class="sourceLineNo">058</span>  final static int MAX_RETRIES = 3;<a name="line.58"></a>
-<span class="sourceLineNo">059</span><a name="line.59"></a>
-<span class="sourceLineNo">060</span>  public FlushSnapshotSubprocedure(ProcedureMember member,<a name="line.60"></a>
-<span class="sourceLineNo">061</span>      ForeignExceptionDispatcher errorListener, long wakeFrequency, long timeout,<a name="line.61"></a>
-<span class="sourceLineNo">062</span>      List&lt;Region&gt; regions, SnapshotDescription snapshot,<a name="line.62"></a>
-<span class="sourceLineNo">063</span>      SnapshotSubprocedurePool taskManager) {<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    super(member, snapshot.getName(), errorListener, wakeFrequency, timeout);<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    this.snapshot = snapshot;<a name="line.65"></a>
-<span class="sourceLineNo">066</span><a name="line.66"></a>
-<span class="sourceLineNo">067</span>    if (this.snapshot.getType() == SnapshotDescription.Type.SKIPFLUSH) {<a name="line.67"></a>
-<span class="sourceLineNo">068</span>      snapshotSkipFlush = true;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    }<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    this.regions = regions;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    this.taskManager = taskManager;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  }<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>  /**<a name="line.74"></a>
-<span class="sourceLineNo">075</span>   * Callable for adding files to snapshot manifest working dir.  Ready for multithreading.<a name="line.75"></a>
-<span class="sourceLineNo">076</span>   */<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  private class RegionSnapshotTask implements Callable&lt;Void&gt; {<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    Region region;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    RegionSnapshotTask(Region region) {<a name="line.79"></a>
-<span class="sourceLineNo">080</span>      this.region = region;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>    }<a name="line.81"></a>
-<span class="sourceLineNo">082</span><a name="line.82"></a>
-<span class="sourceLineNo">083</span>    @Override<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    public Void call() throws Exception {<a name="line.84"></a>
-<span class="sourceLineNo">085</span>      // Taking the region read lock prevents the individual region from being closed while a<a name="line.85"></a>
-<span class="sourceLineNo">086</span>      // snapshot is in progress.  This is helpful but not sufficient for preventing races with<a name="line.86"></a>
-<span class="sourceLineNo">087</span>      // snapshots that involve multiple regions and regionservers.  It is still possible to have<a name="line.87"></a>
-<span class="sourceLineNo">088</span>      // an interleaving such that globally regions are missing, so we still need the verification<a name="line.88"></a>
-<span class="sourceLineNo">089</span>      // step.<a name="line.89"></a>
-<span class="sourceLineNo">090</span>      LOG.debug("Starting region operation on " + region);<a name="line.90"></a>
-<span class="sourceLineNo">091</span>      region.startRegionOperation();<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      try {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>        if (snapshotSkipFlush) {<a name="line.93"></a>
-<span class="sourceLineNo">094</span>        /*<a name="line.94"></a>
-<span class="sourceLineNo">095</span>         * This is to take an online-snapshot without force a coordinated flush to prevent pause<a name="line.95"></a>
-<span class="sourceLineNo">096</span>         * The snapshot type is defined inside the snapshot description. FlushSnapshotSubprocedure<a name="line.96"></a>
-<span class="sourceLineNo">097</span>         * should be renamed to distributedSnapshotSubprocedure, and the flush() behavior can be<a name="line.97"></a>
-<span class="sourceLineNo">098</span>         * turned on/off based on the flush type.<a name="line.98"></a>
-<span class="sourceLineNo">099</span>         * To minimized the code change, class name is not changed.<a name="line.99"></a>
-<span class="sourceLineNo">100</span>         */<a name="line.100"></a>
-<span class="sourceLineNo">101</span>          LOG.debug("take snapshot without flush memstore first");<a name="line.101"></a>
-<span class="sourceLineNo">102</span>        } else {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>          LOG.debug("Flush Snapshotting region " + region.toString() + " started...");<a name="line.103"></a>
-<span class="sourceLineNo">104</span>          boolean succeeded = false;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>          long readPt = region.getReadpoint(IsolationLevel.READ_COMMITTED);<a name="line.105"></a>
-<span class="sourceLineNo">106</span>          for (int i = 0; i &lt; MAX_RETRIES; i++) {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>            FlushResult res = region.flush(true);<a name="line.107"></a>
-<span class="sourceLineNo">108</span>            if (res.getResult() == FlushResult.Result.CANNOT_FLUSH) {<a name="line.108"></a>
-<span class="sourceLineNo">109</span>              // CANNOT_FLUSH may mean that a flush is already on-going<a name="line.109"></a>
-<span class="sourceLineNo">110</span>              // we need to wait for that flush to complete<a name="line.110"></a>
-<span class="sourceLineNo">111</span>              region.waitForFlushes();<a name="line.111"></a>
-<span class="sourceLineNo">112</span>              if (region.getMaxFlushedSeqId() &gt;= readPt) {<a name="line.112"></a>
-<span class="sourceLineNo">113</span>                // writes at the start of the snapshot have been persisted<a name="line.113"></a>
-<span class="sourceLineNo">114</span>                succeeded = true;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>                break;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>              }<a name="line.116"></a>
-<span class="sourceLineNo">117</span>            } else {<a name="line.117"></a>
-<span class="sourceLineNo">118</span>              succeeded = true;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>              break;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>            }<a name="line.120"></a>
-<span class="sourceLineNo">121</span>          }<a name="line.121"></a>
-<span class="sourceLineNo">122</span>          if (!succeeded) {<a name="line.122"></a>
-<span class="sourceLineNo">123</span>            throw new IOException("Unable to complete flush after " + MAX_RETRIES + " attempts");<a name="line.123"></a>
-<span class="sourceLineNo">124</span>          }<a name="line.124"></a>
-<span class="sourceLineNo">125</span>        }<a name="line.125"></a>
-<span class="sourceLineNo">126</span>        ((HRegion)region).addRegionToSnapshot(snapshot, monitor);<a name="line.126"></a>
-<span class="sourceLineNo">127</span>        if (snapshotSkipFlush) {<a name="line.127"></a>
-<span class="sourceLineNo">128</span>          LOG.debug("... SkipFlush Snapshotting region " + region.toString() + " completed.");<a name="line.128"></a>
-<span class="sourceLineNo">129</span>        } else {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>          LOG.debug("... Flush Snapshotting region " + region.toString() + " completed.");<a name="line.130"></a>
-<span class="sourceLineNo">131</span>        }<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      } finally {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>        LOG.debug("Closing region operation on " + region);<a name="line.133"></a>
-<span class="sourceLineNo">134</span>        region.closeRegionOperation();<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      }<a name="line.135"></a>
-<span class="sourceLineNo">136</span>      return null;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    }<a name="line.137"></a>
-<span class="sourceLineNo">138</span>  }<a name="line.138"></a>
-<span class="sourceLineNo">139</span><a name="line.139"></a>
-<span class="sourceLineNo">140</span>  private void flushSnapshot() throws ForeignException {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    if (regions.isEmpty()) {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      // No regions on this RS, we are basically done.<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      return;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    }<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>    monitor.rethrowException();<a name="line.146"></a>
-<span class="sourceLineNo">147</span><a name="line.147"></a>
-<span class="sourceLineNo">148</span>    // assert that the taskManager is empty.<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    if (taskManager.hasTasks()) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      throw new IllegalStateException("Attempting to take snapshot "<a name="line.150"></a>
-<span class="sourceLineNo">151</span>          + ClientSnapshotDescriptionUtils.toString(snapshot)<a name="line.151"></a>
-<span class="sourceLineNo">152</span>          + " but we currently have outstanding tasks");<a name="line.152"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.regionserver.Region.Operation;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.regionserver.snapshot.RegionServerSnapshotManager.SnapshotSubprocedurePool;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.snapshot.ClientSnapshotDescriptionUtils;<a name="line.39"></a>
+<span class="sourceLineNo">040</span><a name="line.40"></a>
+<span class="sourceLineNo">041</span>/**<a name="line.41"></a>
+<span class="sourceLineNo">042</span> * This online snapshot implementation uses the distributed procedure framework to force a<a name="line.42"></a>
+<span class="sourceLineNo">043</span> * store flush and then records the hfiles.  Its enter stage does nothing.  Its leave stage then<a name="line.43"></a>
+<span class="sourceLineNo">044</span> * flushes the memstore, builds the region server's snapshot manifest from its hfiles list, and<a name="line.44"></a>
+<span class="sourceLineNo">045</span> * copies .regioninfos into the snapshot working directory.  At the master side, there is an atomic<a name="line.45"></a>
+<span class="sourceLineNo">046</span> * rename of the working dir into the proper snapshot directory.<a name="line.46"></a>
+<span class="sourceLineNo">047</span> */<a name="line.47"></a>
+<span class="sourceLineNo">048</span>@InterfaceAudience.Private<a name="line.48"></a>
+<span class="sourceLineNo">049</span>@InterfaceStability.Unstable<a name="line.49"></a>
+<span class="sourceLineNo">050</span>public class FlushSnapshotSubprocedure extends Subprocedure {<a name="line.50"></a>
+<span class="sourceLineNo">051</span>  private static final Log LOG = LogFactory.getLog(FlushSnapshotSubprocedure.class);<a name="line.51"></a>
+<span class="sourceLineNo">052</span><a name="line.52"></a>
+<span class="sourceLineNo">053</span>  private final List&lt;Region&gt; regions;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>  private final SnapshotDescription snapshot;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>  private final SnapshotSubprocedurePool taskManager;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>  private boolean snapshotSkipFlush = false;<a name="line.56"></a>
+<span class="sourceLineNo">057</span><a name="line.57"></a>
+<span class="sourceLineNo">058</span>  // the maximum number of attempts we flush<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  final static int MAX_RETRIES = 3;<a name="line.59"></a>
+<span class="sourceLineNo">060</span><a name="line.60"></a>
+<span class="sourceLineNo">061</span>  public FlushSnapshotSubprocedure(ProcedureMember member,<a name="line.61"></a>
+<span class="sourceLineNo">062</span>      ForeignExceptionDispatcher errorListener, long wakeFrequency, long timeout,<a name="line.62"></a>
+<span class="sourceLineNo">063</span>      List&lt;Region&gt; regions, SnapshotDescription snapshot,<a name="line.63"></a>
+<span class="sourceLineNo">064</span>      SnapshotSubprocedurePool taskManager) {<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    super(member, snapshot.getName(), errorListener, wakeFrequency, timeout);<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    this.snapshot = snapshot;<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span>    if (this.snapshot.getType() == SnapshotDescription.Type.SKIPFLUSH) {<a name="line.68"></a>
+<span class="sourceLineNo">069</span>      snapshotSkipFlush = true;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    }<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    this.regions = regions;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>    this.taskManager = taskManager;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>  }<a name="line.73"></a>
+<span class="sourceLineNo">074</span><a name="line.74"></a>
+<span class="sourceLineNo">075</span>  /**<a name="line.75"></a>
+<span class="sourceLineNo">076</span>   * Callable for adding files to snapshot manifest working dir.  Ready for multithreading.<a name="line.76"></a>
+<span class="sourceLineNo">077</span>   */<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  public static class RegionSnapshotTask implements Callable&lt;Void&gt; {<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    private Region region;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    private boolean skipFlush;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    private ForeignExceptionDispatcher monitor;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    private SnapshotDescription snapshotDesc;<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>    public RegionSnapshotTask(Region region, SnapshotDescription snapshotDesc,<a name="line.84"></a>
+<span class="sourceLineNo">085</span>        boolean skipFlush, ForeignExceptionDispatcher monitor) {<a name="line.85"></a>
+<span class="sourceLineNo">086</span>      this.region = region;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>      this.skipFlush = skipFlush;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>      this.monitor = monitor;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>      this.snapshotDesc = snapshotDesc;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    }<a name="line.90"></a>
+<span class="sourceLineNo">091</span><a name="line.91"></a>
+<span class="sourceLineNo">092</span>    @Override<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    public Void call() throws Exception {<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      // Taking the region read lock prevents the individual region from being closed while a<a name="line.94"></a>
+<span class="sourceLineNo">095</span>      // snapshot is in progress.  This is helpful but not sufficient for preventing races with<a name="line.95"></a>
+<span class="sourceLineNo">096</span>      // snapshots that involve multiple regions and regionservers.  It is still possible to have<a name="line.96"></a>
+<span class="sourceLineNo">097</span>      // an interleaving such that globally regions are missing, so we still need the verification<a name="line.97"></a>
+<span class="sourceLineNo">098</span>      // step.<a name="line.98"></a>
+<span class="sourceLineNo">099</span>      LOG.debug("Starting snapshot operation on " + region);<a name="line.99"></a>
+<span class="sourceLineNo">100</span>      region.startRegionOperation(Operation.SNAPSHOT);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>      try {<a name="line.101"></a>
+<span class="sourceLineNo">102</span>        if (skipFlush) {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>        /*<a name="line.103"></a>
+<span class="sourceLineNo">104</span>         * This is to take an online-snapshot without force a coordinated flush to prevent pause<a name="line.104"></a>
+<span class="sourceLineNo">105</span>         * The snapshot type is defined inside the snapshot description. FlushSnapshotSubprocedure<a name="line.105"></a>
+<span class="sourceLineNo">106</span>         * should be renamed to distributedSnapshotSubprocedure, and the flush() behavior can be<a name="line.106"></a>
+<span class="sourceLineNo">107</span>         * turned on/off based on the flush type.<a name="line.107"></a>
+<span class="sourceLineNo">108</span>         * To minimized the code change, class name is not changed.<a name="line.108"></a>
+<span class="sourceLineNo">109</span>         */<a name="line.109"></a>
+<span class="sourceLineNo">110</span>          LOG.debug("take snapshot without flush memstore first");<a name="line.110"></a>
+<span class="sourceLineNo">111</span>        } else {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>          LOG.debug("Flush Snapshotting region " + region.toString() + " started...");<a name="line.112"></a>
+<span class="sourceLineNo">113</span>          boolean succeeded = false;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>          long readPt = region.getReadpoint(IsolationLevel.READ_COMMITTED);<a name="line.114"></a>
+<span class="sourceLineNo">115</span>          for (int i = 0; i &lt; MAX_RETRIES; i++) {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>            FlushResult res = region.flush(true);<a name="line.116"></a>
+<span class="sourceLineNo">117</span>            if (res.getResult() == FlushResult.Result.CANNOT_FLUSH) {<a name="line.117"></a>
+<span class="sourceLineNo">118</span>              // CANNOT_FLUSH may mean that a flush is already on-going<a name="line.118"></a>
+<span class="sourceLineNo">119</span>              // we need to wait for that flush to complete<a name="line.119"></a>
+<span class="sourceLineNo">120</span>              region.waitForFlushes();<a name="line.120"></a>
+<span class="sourceLineNo">121</span>              if (region.getMaxFlushedSeqId() &gt;= readPt) {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>                // writes at the start of the snapshot have been persisted<a name="line.122"></a>
+<span class="sourceLineNo">123</span>                succeeded = true;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>                break;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>              }<a name="line.125"></a>
+<span class="sourceLineNo">126</span>            } else {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>              succeeded = true;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>              break;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>            }<a name="line.129"></a>
+<span class="sourceLineNo">130</span>          }<a name="line.130"></a>
+<span class="sourceLineNo">131</span>          if (!succeeded) {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>            throw new IOException("Unable to complete flush after " + MAX_RETRIES + " attempts");<a name="line.132"></a>
+<span class="sourceLineNo">133</span>          }<a name="line.133"></a>
+<span class="sourceLineNo">134</span>        }<a name="line.134"></a>
+<span class="sourceLineNo">135</span>        ((HRegion)region).addRegionToSnapshot(snapshotDesc, monitor);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>        if (skipFlush) {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>          LOG.debug("... SkipFlush Snapshotting region " + region.toString() + " completed.");<a name="line.137"></a>
+<span class="sourceLineNo">138</span>        } else {<a name="line.138"></a>
+<span class="sourceLineNo">139</span>          LOG.debug("... Flush Snapshotting region " + region.toString() + " completed.");<a name="line.139"></a>
+<span class="sourceLineNo">140</span>        }<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      } finally {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>        LOG.debug("Closing snapshot operation on " + region);<a name="line.142"></a>
+<span class="sourceLineNo">143</span>        region.closeRegionOperation(Operation.SNAPSHOT);<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      }<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      return null;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    }<a name="line.146"></a>
+<span class="sourceLineNo">147</span>  }<a name="line.147"></a>
+<span class="sourceLineNo">148</span><a name="line.148"></a>
+<span class="sourceLineNo">149</span>  private void flushSnapshot() throws ForeignException {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    if (regions.isEmpty()) {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      // No regions on this RS, we are basically done.<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      return;<a name="line.152"></a>
 <span class="sourceLineNo">153</span>    }<a name="line.153"></a>
 <span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>    // Add all hfiles already existing in region.<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    for (Region region : regions) {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      // submit one task per region for parallelize by region.<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      taskManager.submitTask(new RegionSnapshotTask(region));<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      monitor.rethrowException();<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    }<a name="line.160"></a>
-<span class="sourceLineNo">161</span><a name="line.161"></a>
-<span class="sourceLineNo">162</span>    // wait for everything to complete.<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    LOG.debug("Flush Snapshot Tasks submitted for " + regions.size() + " regions");<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    try {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      taskManager.waitForOutstandingTasks();<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    } catch (InterruptedException e) {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      LOG.error("got interrupted exception for " + getMemberName());<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      throw new ForeignException(getMemberName(), e);<a name="line.168"></a>
+<span class="sourceLineNo">155</span>    monitor.rethrowException();<a name="line.155"></a>
+<span class="sourceLineNo">156</span><a name="line.156"></a>
+<span class="sourceLineNo">157</span>    // assert that the taskManager is empty.<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    if (taskManager.hasTasks()) {<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      throw new IllegalStateException("Attempting to take snapshot "<a name="line.159"></a>
+<span class="sourceLineNo">160</span>          + ClientSnapshotDescriptionUtils.toString(snapshot)<a name="line.160"></a>
+<span class="sourceLineNo">161</span>          + " but we currently have outstanding tasks");<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    }<a name="line.162"></a>
+<span class="sourceLineNo">163</span><a name="line.163"></a>
+<span class="sourceLineNo">164</span>    // Add all hfiles already existing in region.<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    for (Region region : regions) {<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      // submit one task per region for parallelize by region.<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      taskManager.submitTask(new RegionSnapshotTask(region, snapshot, snapshotSkipFlush, monitor));<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      monitor.rethrowException();<a name="line.168"></a>
 <span class="sourceLineNo">169</span>    }<a name="line.169"></a>
-<span class="sourceLineNo">170</span>  }<a name="line.170"></a>
-<span class="sourceLineNo">171</span><a name="line.171"></a>
-<span class="sourceLineNo">172</span>  /**<a name="line.172"></a>
-<span class="sourceLineNo">173</span>   * do nothing, core of snapshot is executed in {@link #insideBarrier} step.<a name="line.173"></a>
-<span class="sourceLineNo">174</span>   */<a name="line.174"></a>
-<span class="sourceLineNo">175</span>  @Override<a name="line.175"></a>
-<span class="sourceLineNo">176</span>  public void acquireBarrier() throws ForeignException {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    // NO OP<a name="line.177"></a>
-<span class="sourceLineNo">178</span>  }<a name="line.178"></a>
-<span class="sourceLineNo">179</span><a name="line.179"></a>
-<span class="sourceLineNo">180</span>  /**<a name="line.180"></a>
-<span class="sourceLineNo">181</span>   * do a flush snapshot of every region on this rs from the target table.<a name="line.181"></a>
-<span class="sourceLineNo">182</span>   */<a name="line.182"></a>
-<span class="sourceLineNo">183</span>  @Override<a name="line.183"></a>
-<span class="sourceLineNo">184</span>  public byte[] insideBarrier() throws ForeignException {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    flushSnapshot();<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    return new byte[0];<a name="line.186"></a>
+<span class="sourceLineNo">170</span><a name="line.170"></a>
+<span class="sourceLineNo">171</span>    // wait for everything to complete.<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    LOG.debug("Flush Snapshot Tasks submitted for " + regions.size() + " regions");<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    try {<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      taskManager.waitForOutstandingTasks();<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    } catch (InterruptedException e) {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>      LOG.error("got interrupted exception for " + getMemberName());<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      throw new ForeignException(getMemberName(), e);<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    }<a name="line.178"></a>
+<span class="sourceLineNo">179</span>  }<a name="line.179"></a>
+<span class="sourceLineNo">180</span><a name="line.180"></a>
+<span class="sourceLineNo">181</span>  /**<a name="line.181"></a>
+<span class="sourceLineNo">182</span>   * do nothing, core of snapshot is executed in {@link #insideBarrier} step.<a name="line.182"></a>
+<span class="sourceLineNo">183</span>   */<a name="line.183"></a>
+<span class="sourceLineNo">184</span>  @Override<a name="line.184"></a>
+<span class="sourceLineNo">185</span>  public void acquireBarrier() throws ForeignException {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    // NO OP<a name="line.186"></a>
 <span class="sourceLineNo">187</span>  }<a name="line.187"></a>
 <span class="sourceLineNo">188</span><a name="line.188"></a>
 <span class="sourceLineNo">189</span>  /**<a name="line.189"></a>
-<span class="sourceLineNo">190</span>   * Cancel threads if they haven't finished.<a name="line.190"></a>
+<span class="sourceLineNo">190</span>   * do a flush snapshot of every region on this rs from the target table.<a name="line.190"></a>
 <span class="sourceLineNo">191</span>   */<a name="line.191"></a>
 <span class="sourceLineNo">192</span>  @Override<a name="line.192"></a>
-<span class="sourceLineNo">193</span>  public void cleanup(Exception e) {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    LOG.info("Aborting all online FLUSH snapshot subprocedure task threads for '"<a name="line.194"></a>
-<span class="sourceLineNo">195</span>        + snapshot.getName() + "' due to error", e);<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    try {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      taskManager.cancelTasks();<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    } catch (InterruptedException e1) {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      Thread.currentThread().interrupt();<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    }<a name="line.200"></a>
-<span class="sourceLineNo">201</span>  }<a name="line.201"></a>
-<span class="sourceLineNo">202</span><a name="line.202"></a>
-<span class="sourceLineNo">203</span>  /**<a name="line.203"></a>
-<span class="sourceLineNo">204</span>   * Hooray!<a name="line.204"></a>
-<span class="sourceLineNo">205</span>   */<a name="line.205"></a>
-<span class="sourceLineNo">206</span>  public void releaseBarrier() {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    // NO OP<a name="line.207"></a>
-<span class="sourceLineNo">208</span>  }<a name="line.208"></a>
-<span class="sourceLineNo">209</span><a name="line.209"></a>
-<span class="sourceLineNo">210</span>}<a name="line.210"></a>
+<span class="sourceLineNo">193</span>  public byte[] insideBarrier() throws ForeignException {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    flushSnapshot();<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    return new byte[0];<a name="line.195"></a>
+<span class="sourceLineNo">196</span>  }<a name="line.196"></a>
+<span class="sourceLineNo">197</span><a name="line.197"></a>
+<span class="sourceLineNo">198</span>  /**<a name="line.198"></a>
+<span class="sourceLineNo">199</span>   * Cancel threads if they haven't finished.<a name="line.199"></a>
+<span class="sourceLineNo">200</span>   */<a name="line.200"></a>
+<span class="sourceLineNo">201</span>  @Override<a name="line.201"></a>
+<span class="sourceLineNo">202</span>  public void cleanup(Exception e) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    LOG.info("Aborting all online FLUSH snapshot subprocedure task threads for '"<a name="line.203"></a>
+<span class="sourceLineNo">204</span>        + snapshot.getName() + "' due to error", e);<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    try {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      taskManager.cancelTasks();<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    } catch (InterruptedException e1) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      Thread.currentThread().interrupt();<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    }<a name="line.209"></a>
+<span class="sourceLineNo">210</span>  }<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span>  /**<a name="line.212"></a>
+<span class="sourceLineNo">213</span>   * Hooray!<a name="line.213"></a>
+<span class="sourceLineNo">214</span>   */<a name="line.214"></a>
+<span class="sourceLineNo">215</span>  public void releaseBarrier() {<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    // NO OP<a name="line.216"></a>
+<span class="sourceLineNo">217</span>  }<a name="line.217"></a>
+<span class="sourceLineNo">218</span><a name="line.218"></a>
+<span class="sourceLineNo">219</span>}<a name="line.219"></a>
 
 
 


[14/33] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.WriteState.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.WriteState.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.WriteState.html
index f6a717e..a701ece 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.WriteState.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.WriteState.html
@@ -7930,329 +7930,342 @@
 <span class="sourceLineNo">7922</span>      case DELETE:<a name="line.7922"></a>
 <span class="sourceLineNo">7923</span>      case BATCH_MUTATE:<a name="line.7923"></a>
 <span class="sourceLineNo">7924</span>      case COMPACT_REGION:<a name="line.7924"></a>
-<span class="sourceLineNo">7925</span>        // when a region is in recovering state, no read, split or merge is allowed<a name="line.7925"></a>
-<span class="sourceLineNo">7926</span>        if (isRecovering() &amp;&amp; (this.disallowWritesInRecovering ||<a name="line.7926"></a>
-<span class="sourceLineNo">7927</span>              (op != Operation.PUT &amp;&amp; op != Operation.DELETE &amp;&amp; op != Operation.BATCH_MUTATE))) {<a name="line.7927"></a>
-<span class="sourceLineNo">7928</span>          throw new RegionInRecoveryException(getRegionInfo().getRegionNameAsString() +<a name="line.7928"></a>
-<span class="sourceLineNo">7929</span>            " is recovering; cannot take reads");<a name="line.7929"></a>
-<span class="sourceLineNo">7930</span>        }<a name="line.7930"></a>
-<span class="sourceLineNo">7931</span>        break;<a name="line.7931"></a>
-<span class="sourceLineNo">7932</span>      default:<a name="line.7932"></a>
-<span class="sourceLineNo">7933</span>        break;<a name="line.7933"></a>
-<span class="sourceLineNo">7934</span>    }<a name="line.7934"></a>
-<span class="sourceLineNo">7935</span>    if (op == Operation.MERGE_REGION || op == Operation.SPLIT_REGION<a name="line.7935"></a>
-<span class="sourceLineNo">7936</span>        || op == Operation.COMPACT_REGION) {<a name="line.7936"></a>
-<span class="sourceLineNo">7937</span>      // split, merge or compact region doesn't need to check the closing/closed state or lock the<a name="line.7937"></a>
-<span class="sourceLineNo">7938</span>      // region<a name="line.7938"></a>
-<span class="sourceLineNo">7939</span>      return;<a name="line.7939"></a>
-<span class="sourceLineNo">7940</span>    }<a name="line.7940"></a>
-<span class="sourceLineNo">7941</span>    if (this.closing.get()) {<a name="line.7941"></a>
-<span class="sourceLineNo">7942</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.7942"></a>
-<span class="sourceLineNo">7943</span>    }<a name="line.7943"></a>
-<span class="sourceLineNo">7944</span>    lock(lock.readLock());<a name="line.7944"></a>
-<span class="sourceLineNo">7945</span>    if (this.closed.get()) {<a name="line.7945"></a>
-<span class="sourceLineNo">7946</span>      lock.readLock().unlock();<a name="line.7946"></a>
-<span class="sourceLineNo">7947</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.7947"></a>
-<span class="sourceLineNo">7948</span>    }<a name="line.7948"></a>
-<span class="sourceLineNo">7949</span>    try {<a name="line.7949"></a>
-<span class="sourceLineNo">7950</span>      if (coprocessorHost != null) {<a name="line.7950"></a>
-<span class="sourceLineNo">7951</span>        coprocessorHost.postStartRegionOperation(op);<a name="line.7951"></a>
-<span class="sourceLineNo">7952</span>      }<a name="line.7952"></a>
-<span class="sourceLineNo">7953</span>    } catch (Exception e) {<a name="line.7953"></a>
-<span class="sourceLineNo">7954</span>      lock.readLock().unlock();<a name="line.7954"></a>
-<span class="sourceLineNo">7955</span>      throw new IOException(e);<a name="line.7955"></a>
-<span class="sourceLineNo">7956</span>    }<a name="line.7956"></a>
-<span class="sourceLineNo">7957</span>  }<a name="line.7957"></a>
-<span class="sourceLineNo">7958</span><a name="line.7958"></a>
-<span class="sourceLineNo">7959</span>  @Override<a name="line.7959"></a>
-<span class="sourceLineNo">7960</span>  public void closeRegionOperation() throws IOException {<a name="line.7960"></a>
-<span class="sourceLineNo">7961</span>    closeRegionOperation(Operation.ANY);<a name="line.7961"></a>
-<span class="sourceLineNo">7962</span>  }<a name="line.7962"></a>
-<span class="sourceLineNo">7963</span><a name="line.7963"></a>
-<span class="sourceLineNo">7964</span>  /**<a name="line.7964"></a>
-<span class="sourceLineNo">7965</span>   * Closes the lock. This needs to be called in the finally block corresponding<a name="line.7965"></a>
-<span class="sourceLineNo">7966</span>   * to the try block of {@link #startRegionOperation(Operation)}<a name="line.7966"></a>
-<span class="sourceLineNo">7967</span>   * @throws IOException<a name="line.7967"></a>
-<span class="sourceLineNo">7968</span>   */<a name="line.7968"></a>
-<span class="sourceLineNo">7969</span>  public void closeRegionOperation(Operation operation) throws IOException {<a name="line.7969"></a>
-<span class="sourceLineNo">7970</span>    lock.readLock().unlock();<a name="line.7970"></a>
-<span class="sourceLineNo">7971</span>    if (coprocessorHost != null) {<a name="line.7971"></a>
-<span class="sourceLineNo">7972</span>      coprocessorHost.postCloseRegionOperation(operation);<a name="line.7972"></a>
-<span class="sourceLineNo">7973</span>    }<a name="line.7973"></a>
-<span class="sourceLineNo">7974</span>  }<a name="line.7974"></a>
-<span class="sourceLineNo">7975</span><a name="line.7975"></a>
-<span class="sourceLineNo">7976</span>  /**<a name="line.7976"></a>
-<span class="sourceLineNo">7977</span>   * This method needs to be called before any public call that reads or<a name="line.7977"></a>
-<span class="sourceLineNo">7978</span>   * modifies stores in bulk. It has to be called just before a try.<a name="line.7978"></a>
-<span class="sourceLineNo">7979</span>   * #closeBulkRegionOperation needs to be called in the try's finally block<a name="line.7979"></a>
-<span class="sourceLineNo">7980</span>   * Acquires a writelock and checks if the region is closing or closed.<a name="line.7980"></a>
-<span class="sourceLineNo">7981</span>   * @throws NotServingRegionException when the region is closing or closed<a name="line.7981"></a>
-<span class="sourceLineNo">7982</span>   * @throws RegionTooBusyException if failed to get the lock in time<a name="line.7982"></a>
-<span class="sourceLineNo">7983</span>   * @throws InterruptedIOException if interrupted while waiting for a lock<a name="line.7983"></a>
-<span class="sourceLineNo">7984</span>   */<a name="line.7984"></a>
-<span class="sourceLineNo">7985</span>  private void startBulkRegionOperation(boolean writeLockNeeded)<a name="line.7985"></a>
-<span class="sourceLineNo">7986</span>      throws NotServingRegionException, RegionTooBusyException, InterruptedIOException {<a name="line.7986"></a>
-<span class="sourceLineNo">7987</span>    if (this.closing.get()) {<a name="line.7987"></a>
-<span class="sourceLineNo">7988</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.7988"></a>
-<span class="sourceLineNo">7989</span>    }<a name="line.7989"></a>
-<span class="sourceLineNo">7990</span>    if (writeLockNeeded) lock(lock.writeLock());<a name="line.7990"></a>
-<span class="sourceLineNo">7991</span>    else lock(lock.readLock());<a name="line.7991"></a>
-<span class="sourceLineNo">7992</span>    if (this.closed.get()) {<a name="line.7992"></a>
-<span class="sourceLineNo">7993</span>      if (writeLockNeeded) lock.writeLock().unlock();<a name="line.7993"></a>
-<span class="sourceLineNo">7994</span>      else lock.readLock().unlock();<a name="line.7994"></a>
-<span class="sourceLineNo">7995</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.7995"></a>
-<span class="sourceLineNo">7996</span>    }<a name="line.7996"></a>
-<span class="sourceLineNo">7997</span>  }<a name="line.7997"></a>
-<span class="sourceLineNo">7998</span><a name="line.7998"></a>
-<span class="sourceLineNo">7999</span>  /**<a name="line.7999"></a>
-<span class="sourceLineNo">8000</span>   * Closes the lock. This needs to be called in the finally block corresponding<a name="line.8000"></a>
-<span class="sourceLineNo">8001</span>   * to the try block of #startRegionOperation<a name="line.8001"></a>
-<span class="sourceLineNo">8002</span>   */<a name="line.8002"></a>
-<span class="sourceLineNo">8003</span>  private void closeBulkRegionOperation(){<a name="line.8003"></a>
-<span class="sourceLineNo">8004</span>    if (lock.writeLock().isHeldByCurrentThread()) lock.writeLock().unlock();<a name="line.8004"></a>
-<span class="sourceLineNo">8005</span>    else lock.readLock().unlock();<a name="line.8005"></a>
-<span class="sourceLineNo">8006</span>  }<a name="line.8006"></a>
-<span class="sourceLineNo">8007</span><a name="line.8007"></a>
-<span class="sourceLineNo">8008</span>  /**<a name="line.8008"></a>
-<span class="sourceLineNo">8009</span>   * Update LongAdders for number of puts without wal and the size of possible data loss.<a name="line.8009"></a>
-<span class="sourceLineNo">8010</span>   * These information are exposed by the region server metrics.<a name="line.8010"></a>
-<span class="sourceLineNo">8011</span>   */<a name="line.8011"></a>
-<span class="sourceLineNo">8012</span>  private void recordMutationWithoutWal(final Map&lt;byte [], List&lt;Cell&gt;&gt; familyMap) {<a name="line.8012"></a>
-<span class="sourceLineNo">8013</span>    numMutationsWithoutWAL.increment();<a name="line.8013"></a>
-<span class="sourceLineNo">8014</span>    if (numMutationsWithoutWAL.sum() &lt;= 1) {<a name="line.8014"></a>
-<span class="sourceLineNo">8015</span>      LOG.info("writing data to region " + this +<a name="line.8015"></a>
-<span class="sourceLineNo">8016</span>               " with WAL disabled. Data may be lost in the event of a crash.");<a name="line.8016"></a>
-<span class="sourceLineNo">8017</span>    }<a name="line.8017"></a>
-<span class="sourceLineNo">8018</span><a name="line.8018"></a>
-<span class="sourceLineNo">8019</span>    long mutationSize = 0;<a name="line.8019"></a>
-<span class="sourceLineNo">8020</span>    for (List&lt;Cell&gt; cells: familyMap.values()) {<a name="line.8020"></a>
-<span class="sourceLineNo">8021</span>      assert cells instanceof RandomAccess;<a name="line.8021"></a>
-<span class="sourceLineNo">8022</span>      int listSize = cells.size();<a name="line.8022"></a>
-<span class="sourceLineNo">8023</span>      for (int i=0; i &lt; listSize; i++) {<a name="line.8023"></a>
-<span class="sourceLineNo">8024</span>        Cell cell = cells.get(i);<a name="line.8024"></a>
-<span class="sourceLineNo">8025</span>        mutationSize += KeyValueUtil.length(cell);<a name="line.8025"></a>
-<span class="sourceLineNo">8026</span>      }<a name="line.8026"></a>
-<span class="sourceLineNo">8027</span>    }<a name="line.8027"></a>
-<span class="sourceLineNo">8028</span><a name="line.8028"></a>
-<span class="sourceLineNo">8029</span>    dataInMemoryWithoutWAL.add(mutationSize);<a name="line.8029"></a>
-<span class="sourceLineNo">8030</span>  }<a name="line.8030"></a>
+<span class="sourceLineNo">7925</span>      case SNAPSHOT:<a name="line.7925"></a>
+<span class="sourceLineNo">7926</span>        // when a region is in recovering state, no read, split, merge or snapshot is allowed<a name="line.7926"></a>
+<span class="sourceLineNo">7927</span>        if (isRecovering() &amp;&amp; (this.disallowWritesInRecovering ||<a name="line.7927"></a>
+<span class="sourceLineNo">7928</span>              (op != Operation.PUT &amp;&amp; op != Operation.DELETE &amp;&amp; op != Operation.BATCH_MUTATE))) {<a name="line.7928"></a>
+<span class="sourceLineNo">7929</span>          throw new RegionInRecoveryException(getRegionInfo().getRegionNameAsString() +<a name="line.7929"></a>
+<span class="sourceLineNo">7930</span>            " is recovering; cannot take reads");<a name="line.7930"></a>
+<span class="sourceLineNo">7931</span>        }<a name="line.7931"></a>
+<span class="sourceLineNo">7932</span>        break;<a name="line.7932"></a>
+<span class="sourceLineNo">7933</span>      default:<a name="line.7933"></a>
+<span class="sourceLineNo">7934</span>        break;<a name="line.7934"></a>
+<span class="sourceLineNo">7935</span>    }<a name="line.7935"></a>
+<span class="sourceLineNo">7936</span>    if (op == Operation.MERGE_REGION || op == Operation.SPLIT_REGION<a name="line.7936"></a>
+<span class="sourceLineNo">7937</span>        || op == Operation.COMPACT_REGION) {<a name="line.7937"></a>
+<span class="sourceLineNo">7938</span>      // split, merge or compact region doesn't need to check the closing/closed state or lock the<a name="line.7938"></a>
+<span class="sourceLineNo">7939</span>      // region<a name="line.7939"></a>
+<span class="sourceLineNo">7940</span>      return;<a name="line.7940"></a>
+<span class="sourceLineNo">7941</span>    }<a name="line.7941"></a>
+<span class="sourceLineNo">7942</span>    if (this.closing.get()) {<a name="line.7942"></a>
+<span class="sourceLineNo">7943</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.7943"></a>
+<span class="sourceLineNo">7944</span>    }<a name="line.7944"></a>
+<span class="sourceLineNo">7945</span>    lock(lock.readLock());<a name="line.7945"></a>
+<span class="sourceLineNo">7946</span>    if (this.closed.get()) {<a name="line.7946"></a>
+<span class="sourceLineNo">7947</span>      lock.readLock().unlock();<a name="line.7947"></a>
+<span class="sourceLineNo">7948</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.7948"></a>
+<span class="sourceLineNo">7949</span>    }<a name="line.7949"></a>
+<span class="sourceLineNo">7950</span>    // The unit for snapshot is a region. So, all stores for this region must be<a name="line.7950"></a>
+<span class="sourceLineNo">7951</span>    // prepared for snapshot operation before proceeding.<a name="line.7951"></a>
+<span class="sourceLineNo">7952</span>    if (op == Operation.SNAPSHOT) {<a name="line.7952"></a>
+<span class="sourceLineNo">7953</span>      for (Store store : stores.values()) {<a name="line.7953"></a>
+<span class="sourceLineNo">7954</span>        if (store instanceof HStore) {<a name="line.7954"></a>
+<span class="sourceLineNo">7955</span>          ((HStore)store).preSnapshotOperation();<a name="line.7955"></a>
+<span class="sourceLineNo">7956</span>        }<a name="line.7956"></a>
+<span class="sourceLineNo">7957</span>      }<a name="line.7957"></a>
+<span class="sourceLineNo">7958</span>    }<a name="line.7958"></a>
+<span class="sourceLineNo">7959</span>    try {<a name="line.7959"></a>
+<span class="sourceLineNo">7960</span>      if (coprocessorHost != null) {<a name="line.7960"></a>
+<span class="sourceLineNo">7961</span>        coprocessorHost.postStartRegionOperation(op);<a name="line.7961"></a>
+<span class="sourceLineNo">7962</span>      }<a name="line.7962"></a>
+<span class="sourceLineNo">7963</span>    } catch (Exception e) {<a name="line.7963"></a>
+<span class="sourceLineNo">7964</span>      lock.readLock().unlock();<a name="line.7964"></a>
+<span class="sourceLineNo">7965</span>      throw new IOException(e);<a name="line.7965"></a>
+<span class="sourceLineNo">7966</span>    }<a name="line.7966"></a>
+<span class="sourceLineNo">7967</span>  }<a name="line.7967"></a>
+<span class="sourceLineNo">7968</span><a name="line.7968"></a>
+<span class="sourceLineNo">7969</span>  @Override<a name="line.7969"></a>
+<span class="sourceLineNo">7970</span>  public void closeRegionOperation() throws IOException {<a name="line.7970"></a>
+<span class="sourceLineNo">7971</span>    closeRegionOperation(Operation.ANY);<a name="line.7971"></a>
+<span class="sourceLineNo">7972</span>  }<a name="line.7972"></a>
+<span class="sourceLineNo">7973</span><a name="line.7973"></a>
+<span class="sourceLineNo">7974</span>  @Override<a name="line.7974"></a>
+<span class="sourceLineNo">7975</span>  public void closeRegionOperation(Operation operation) throws IOException {<a name="line.7975"></a>
+<span class="sourceLineNo">7976</span>    if (operation == Operation.SNAPSHOT) {<a name="line.7976"></a>
+<span class="sourceLineNo">7977</span>      for (Store store: stores.values()) {<a name="line.7977"></a>
+<span class="sourceLineNo">7978</span>        if (store instanceof HStore) {<a name="line.7978"></a>
+<span class="sourceLineNo">7979</span>          ((HStore)store).postSnapshotOperation();<a name="line.7979"></a>
+<span class="sourceLineNo">7980</span>        }<a name="line.7980"></a>
+<span class="sourceLineNo">7981</span>      }<a name="line.7981"></a>
+<span class="sourceLineNo">7982</span>    }<a name="line.7982"></a>
+<span class="sourceLineNo">7983</span>    lock.readLock().unlock();<a name="line.7983"></a>
+<span class="sourceLineNo">7984</span>    if (coprocessorHost != null) {<a name="line.7984"></a>
+<span class="sourceLineNo">7985</span>      coprocessorHost.postCloseRegionOperation(operation);<a name="line.7985"></a>
+<span class="sourceLineNo">7986</span>    }<a name="line.7986"></a>
+<span class="sourceLineNo">7987</span>  }<a name="line.7987"></a>
+<span class="sourceLineNo">7988</span><a name="line.7988"></a>
+<span class="sourceLineNo">7989</span>  /**<a name="line.7989"></a>
+<span class="sourceLineNo">7990</span>   * This method needs to be called before any public call that reads or<a name="line.7990"></a>
+<span class="sourceLineNo">7991</span>   * modifies stores in bulk. It has to be called just before a try.<a name="line.7991"></a>
+<span class="sourceLineNo">7992</span>   * #closeBulkRegionOperation needs to be called in the try's finally block<a name="line.7992"></a>
+<span class="sourceLineNo">7993</span>   * Acquires a writelock and checks if the region is closing or closed.<a name="line.7993"></a>
+<span class="sourceLineNo">7994</span>   * @throws NotServingRegionException when the region is closing or closed<a name="line.7994"></a>
+<span class="sourceLineNo">7995</span>   * @throws RegionTooBusyException if failed to get the lock in time<a name="line.7995"></a>
+<span class="sourceLineNo">7996</span>   * @throws InterruptedIOException if interrupted while waiting for a lock<a name="line.7996"></a>
+<span class="sourceLineNo">7997</span>   */<a name="line.7997"></a>
+<span class="sourceLineNo">7998</span>  private void startBulkRegionOperation(boolean writeLockNeeded)<a name="line.7998"></a>
+<span class="sourceLineNo">7999</span>      throws NotServingRegionException, RegionTooBusyException, InterruptedIOException {<a name="line.7999"></a>
+<span class="sourceLineNo">8000</span>    if (this.closing.get()) {<a name="line.8000"></a>
+<span class="sourceLineNo">8001</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.8001"></a>
+<span class="sourceLineNo">8002</span>    }<a name="line.8002"></a>
+<span class="sourceLineNo">8003</span>    if (writeLockNeeded) lock(lock.writeLock());<a name="line.8003"></a>
+<span class="sourceLineNo">8004</span>    else lock(lock.readLock());<a name="line.8004"></a>
+<span class="sourceLineNo">8005</span>    if (this.closed.get()) {<a name="line.8005"></a>
+<span class="sourceLineNo">8006</span>      if (writeLockNeeded) lock.writeLock().unlock();<a name="line.8006"></a>
+<span class="sourceLineNo">8007</span>      else lock.readLock().unlock();<a name="line.8007"></a>
+<span class="sourceLineNo">8008</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.8008"></a>
+<span class="sourceLineNo">8009</span>    }<a name="line.8009"></a>
+<span class="sourceLineNo">8010</span>  }<a name="line.8010"></a>
+<span class="sourceLineNo">8011</span><a name="line.8011"></a>
+<span class="sourceLineNo">8012</span>  /**<a name="line.8012"></a>
+<span class="sourceLineNo">8013</span>   * Closes the lock. This needs to be called in the finally block corresponding<a name="line.8013"></a>
+<span class="sourceLineNo">8014</span>   * to the try block of #startRegionOperation<a name="line.8014"></a>
+<span class="sourceLineNo">8015</span>   */<a name="line.8015"></a>
+<span class="sourceLineNo">8016</span>  private void closeBulkRegionOperation(){<a name="line.8016"></a>
+<span class="sourceLineNo">8017</span>    if (lock.writeLock().isHeldByCurrentThread()) lock.writeLock().unlock();<a name="line.8017"></a>
+<span class="sourceLineNo">8018</span>    else lock.readLock().unlock();<a name="line.8018"></a>
+<span class="sourceLineNo">8019</span>  }<a name="line.8019"></a>
+<span class="sourceLineNo">8020</span><a name="line.8020"></a>
+<span class="sourceLineNo">8021</span>  /**<a name="line.8021"></a>
+<span class="sourceLineNo">8022</span>   * Update LongAdders for number of puts without wal and the size of possible data loss.<a name="line.8022"></a>
+<span class="sourceLineNo">8023</span>   * These information are exposed by the region server metrics.<a name="line.8023"></a>
+<span class="sourceLineNo">8024</span>   */<a name="line.8024"></a>
+<span class="sourceLineNo">8025</span>  private void recordMutationWithoutWal(final Map&lt;byte [], List&lt;Cell&gt;&gt; familyMap) {<a name="line.8025"></a>
+<span class="sourceLineNo">8026</span>    numMutationsWithoutWAL.increment();<a name="line.8026"></a>
+<span class="sourceLineNo">8027</span>    if (numMutationsWithoutWAL.sum() &lt;= 1) {<a name="line.8027"></a>
+<span class="sourceLineNo">8028</span>      LOG.info("writing data to region " + this +<a name="line.8028"></a>
+<span class="sourceLineNo">8029</span>               " with WAL disabled. Data may be lost in the event of a crash.");<a name="line.8029"></a>
+<span class="sourceLineNo">8030</span>    }<a name="line.8030"></a>
 <span class="sourceLineNo">8031</span><a name="line.8031"></a>
-<span class="sourceLineNo">8032</span>  private void lock(final Lock lock)<a name="line.8032"></a>
-<span class="sourceLineNo">8033</span>      throws RegionTooBusyException, InterruptedIOException {<a name="line.8033"></a>
-<span class="sourceLineNo">8034</span>    lock(lock, 1);<a name="line.8034"></a>
-<span class="sourceLineNo">8035</span>  }<a name="line.8035"></a>
-<span class="sourceLineNo">8036</span><a name="line.8036"></a>
-<span class="sourceLineNo">8037</span>  /**<a name="line.8037"></a>
-<span class="sourceLineNo">8038</span>   * Try to acquire a lock.  Throw RegionTooBusyException<a name="line.8038"></a>
-<span class="sourceLineNo">8039</span>   * if failed to get the lock in time. Throw InterruptedIOException<a name="line.8039"></a>
-<span class="sourceLineNo">8040</span>   * if interrupted while waiting for the lock.<a name="line.8040"></a>
-<span class="sourceLineNo">8041</span>   */<a name="line.8041"></a>
-<span class="sourceLineNo">8042</span>  private void lock(final Lock lock, final int multiplier)<a name="line.8042"></a>
-<span class="sourceLineNo">8043</span>      throws RegionTooBusyException, InterruptedIOException {<a name="line.8043"></a>
-<span class="sourceLineNo">8044</span>    try {<a name="line.8044"></a>
-<span class="sourceLineNo">8045</span>      final long waitTime = Math.min(maxBusyWaitDuration,<a name="line.8045"></a>
-<span class="sourceLineNo">8046</span>          busyWaitDuration * Math.min(multiplier, maxBusyWaitMultiplier));<a name="line.8046"></a>
-<span class="sourceLineNo">8047</span>      if (!lock.tryLock(waitTime, TimeUnit.MILLISECONDS)) {<a name="line.8047"></a>
-<span class="sourceLineNo">8048</span>        throw new RegionTooBusyException(<a name="line.8048"></a>
-<span class="sourceLineNo">8049</span>            "failed to get a lock in " + waitTime + " ms. " +<a name="line.8049"></a>
-<span class="sourceLineNo">8050</span>                "regionName=" + (this.getRegionInfo() == null ? "unknown" :<a name="line.8050"></a>
-<span class="sourceLineNo">8051</span>                this.getRegionInfo().getRegionNameAsString()) +<a name="line.8051"></a>
-<span class="sourceLineNo">8052</span>                ", server=" + (this.getRegionServerServices() == null ? "unknown" :<a name="line.8052"></a>
-<span class="sourceLineNo">8053</span>                this.getRegionServerServices().getServerName()));<a name="line.8053"></a>
-<span class="sourceLineNo">8054</span>      }<a name="line.8054"></a>
-<span class="sourceLineNo">8055</span>    } catch (InterruptedException ie) {<a name="line.8055"></a>
-<span class="sourceLineNo">8056</span>      LOG.info("Interrupted while waiting for a lock");<a name="line.8056"></a>
-<span class="sourceLineNo">8057</span>      InterruptedIOException iie = new InterruptedIOException();<a name="line.8057"></a>
-<span class="sourceLineNo">8058</span>      iie.initCause(ie);<a name="line.8058"></a>
-<span class="sourceLineNo">8059</span>      throw iie;<a name="line.8059"></a>
-<span class="sourceLineNo">8060</span>    }<a name="line.8060"></a>
-<span class="sourceLineNo">8061</span>  }<a name="line.8061"></a>
-<span class="sourceLineNo">8062</span><a name="line.8062"></a>
-<span class="sourceLineNo">8063</span>  /**<a name="line.8063"></a>
-<span class="sourceLineNo">8064</span>   * Calls sync with the given transaction ID<a name="line.8064"></a>
-<span class="sourceLineNo">8065</span>   * @param txid should sync up to which transaction<a name="line.8065"></a>
-<span class="sourceLineNo">8066</span>   * @throws IOException If anything goes wrong with DFS<a name="line.8066"></a>
-<span class="sourceLineNo">8067</span>   */<a name="line.8067"></a>
-<span class="sourceLineNo">8068</span>  private void sync(long txid, Durability durability) throws IOException {<a name="line.8068"></a>
-<span class="sourceLineNo">8069</span>    if (this.getRegionInfo().isMetaRegion()) {<a name="line.8069"></a>
-<span class="sourceLineNo">8070</span>      this.wal.sync(txid);<a name="line.8070"></a>
-<span class="sourceLineNo">8071</span>    } else {<a name="line.8071"></a>
-<span class="sourceLineNo">8072</span>      switch(durability) {<a name="line.8072"></a>
-<span class="sourceLineNo">8073</span>      case USE_DEFAULT:<a name="line.8073"></a>
-<span class="sourceLineNo">8074</span>        // do what table defaults to<a name="line.8074"></a>
-<span class="sourceLineNo">8075</span>        if (shouldSyncWAL()) {<a name="line.8075"></a>
-<span class="sourceLineNo">8076</span>          this.wal.sync(txid);<a name="line.8076"></a>
-<span class="sourceLineNo">8077</span>        }<a name="line.8077"></a>
-<span class="sourceLineNo">8078</span>        break;<a name="line.8078"></a>
-<span class="sourceLineNo">8079</span>      case SKIP_WAL:<a name="line.8079"></a>
-<span class="sourceLineNo">8080</span>        // nothing do to<a name="line.8080"></a>
-<span class="sourceLineNo">8081</span>        break;<a name="line.8081"></a>
-<span class="sourceLineNo">8082</span>      case ASYNC_WAL:<a name="line.8082"></a>
-<span class="sourceLineNo">8083</span>        // nothing do to<a name="line.8083"></a>
-<span class="sourceLineNo">8084</span>        break;<a name="line.8084"></a>
-<span class="sourceLineNo">8085</span>      case SYNC_WAL:<a name="line.8085"></a>
-<span class="sourceLineNo">8086</span>      case FSYNC_WAL:<a name="line.8086"></a>
-<span class="sourceLineNo">8087</span>        // sync the WAL edit (SYNC and FSYNC treated the same for now)<a name="line.8087"></a>
-<span class="sourceLineNo">8088</span>        this.wal.sync(txid);<a name="line.8088"></a>
-<span class="sourceLineNo">8089</span>        break;<a name="line.8089"></a>
-<span class="sourceLineNo">8090</span>      default:<a name="line.8090"></a>
-<span class="sourceLineNo">8091</span>        throw new RuntimeException("Unknown durability " + durability);<a name="line.8091"></a>
-<span class="sourceLineNo">8092</span>      }<a name="line.8092"></a>
-<span class="sourceLineNo">8093</span>    }<a name="line.8093"></a>
-<span class="sourceLineNo">8094</span>  }<a name="line.8094"></a>
-<span class="sourceLineNo">8095</span><a name="line.8095"></a>
-<span class="sourceLineNo">8096</span>  /**<a name="line.8096"></a>
-<span class="sourceLineNo">8097</span>   * Check whether we should sync the wal from the table's durability settings<a name="line.8097"></a>
-<span class="sourceLineNo">8098</span>   */<a name="line.8098"></a>
-<span class="sourceLineNo">8099</span>  private boolean shouldSyncWAL() {<a name="line.8099"></a>
-<span class="sourceLineNo">8100</span>    return durability.ordinal() &gt;  Durability.ASYNC_WAL.ordinal();<a name="line.8100"></a>
-<span class="sourceLineNo">8101</span>  }<a name="line.8101"></a>
-<span class="sourceLineNo">8102</span><a name="line.8102"></a>
-<span class="sourceLineNo">8103</span>  /**<a name="line.8103"></a>
-<span class="sourceLineNo">8104</span>   * A mocked list implementation - discards all updates.<a name="line.8104"></a>
-<span class="sourceLineNo">8105</span>   */<a name="line.8105"></a>
-<span class="sourceLineNo">8106</span>  private static final List&lt;Cell&gt; MOCKED_LIST = new AbstractList&lt;Cell&gt;() {<a name="line.8106"></a>
-<span class="sourceLineNo">8107</span><a name="line.8107"></a>
-<span class="sourceLineNo">8108</span>    @Override<a name="line.8108"></a>
-<span class="sourceLineNo">8109</span>    public void add(int index, Cell element) {<a name="line.8109"></a>
-<span class="sourceLineNo">8110</span>      // do nothing<a name="line.8110"></a>
-<span class="sourceLineNo">8111</span>    }<a name="line.8111"></a>
-<span class="sourceLineNo">8112</span><a name="line.8112"></a>
-<span class="sourceLineNo">8113</span>    @Override<a name="line.8113"></a>
-<span class="sourceLineNo">8114</span>    public boolean addAll(int index, Collection&lt;? extends Cell&gt; c) {<a name="line.8114"></a>
-<span class="sourceLineNo">8115</span>      return false; // this list is never changed as a result of an update<a name="line.8115"></a>
-<span class="sourceLineNo">8116</span>    }<a name="line.8116"></a>
-<span class="sourceLineNo">8117</span><a name="line.8117"></a>
-<span class="sourceLineNo">8118</span>    @Override<a name="line.8118"></a>
-<span class="sourceLineNo">8119</span>    public KeyValue get(int index) {<a name="line.8119"></a>
-<span class="sourceLineNo">8120</span>      throw new UnsupportedOperationException();<a name="line.8120"></a>
-<span class="sourceLineNo">8121</span>    }<a name="line.8121"></a>
-<span class="sourceLineNo">8122</span><a name="line.8122"></a>
-<span class="sourceLineNo">8123</span>    @Override<a name="line.8123"></a>
-<span class="sourceLineNo">8124</span>    public int size() {<a name="line.8124"></a>
-<span class="sourceLineNo">8125</span>      return 0;<a name="line.8125"></a>
-<span class="sourceLineNo">8126</span>    }<a name="line.8126"></a>
-<span class="sourceLineNo">8127</span>  };<a name="line.8127"></a>
-<span class="sourceLineNo">8128</span><a name="line.8128"></a>
-<span class="sourceLineNo">8129</span>  @Override<a name="line.8129"></a>
-<span class="sourceLineNo">8130</span>  public long getOpenSeqNum() {<a name="line.8130"></a>
-<span class="sourceLineNo">8131</span>    return this.openSeqNum;<a name="line.8131"></a>
-<span class="sourceLineNo">8132</span>  }<a name="line.8132"></a>
-<span class="sourceLineNo">8133</span><a name="line.8133"></a>
-<span class="sourceLineNo">8134</span>  @Override<a name="line.8134"></a>
-<span class="sourceLineNo">8135</span>  public Map&lt;byte[], Long&gt; getMaxStoreSeqId() {<a name="line.8135"></a>
-<span class="sourceLineNo">8136</span>    return this.maxSeqIdInStores;<a name="line.8136"></a>
-<span class="sourceLineNo">8137</span>  }<a name="line.8137"></a>
-<span class="sourceLineNo">8138</span><a name="line.8138"></a>
-<span class="sourceLineNo">8139</span>  @Override<a name="line.8139"></a>
-<span class="sourceLineNo">8140</span>  public long getOldestSeqIdOfStore(byte[] familyName) {<a name="line.8140"></a>
-<span class="sourceLineNo">8141</span>    return wal.getEarliestMemstoreSeqNum(getRegionInfo().getEncodedNameAsBytes(), familyName);<a name="line.8141"></a>
-<span class="sourceLineNo">8142</span>  }<a name="line.8142"></a>
-<span class="sourceLineNo">8143</span><a name="line.8143"></a>
-<span class="sourceLineNo">8144</span>  @Override<a name="line.8144"></a>
-<span class="sourceLineNo">8145</span>  public CompactionState getCompactionState() {<a name="line.8145"></a>
-<span class="sourceLineNo">8146</span>    boolean hasMajor = majorInProgress.get() &gt; 0, hasMinor = minorInProgress.get() &gt; 0;<a name="line.8146"></a>
-<span class="sourceLineNo">8147</span>    return (hasMajor ? (hasMinor ? CompactionState.MAJOR_AND_MINOR : CompactionState.MAJOR)<a name="line.8147"></a>
-<span class="sourceLineNo">8148</span>        : (hasMinor ? CompactionState.MINOR : CompactionState.NONE));<a name="line.8148"></a>
-<span class="sourceLineNo">8149</span>  }<a name="line.8149"></a>
-<span class="sourceLineNo">8150</span><a name="line.8150"></a>
-<span class="sourceLineNo">8151</span>  public void reportCompactionRequestStart(boolean isMajor){<a name="line.8151"></a>
-<span class="sourceLineNo">8152</span>    (isMajor ? majorInProgress : minorInProgress).incrementAndGet();<a name="line.8152"></a>
-<span class="sourceLineNo">8153</span>  }<a name="line.8153"></a>
-<span class="sourceLineNo">8154</span><a name="line.8154"></a>
-<span class="sourceLineNo">8155</span>  public void reportCompactionRequestEnd(boolean isMajor, int numFiles, long filesSizeCompacted) {<a name="line.8155"></a>
-<span class="sourceLineNo">8156</span>    int newValue = (isMajor ? majorInProgress : minorInProgress).decrementAndGet();<a name="line.8156"></a>
-<span class="sourceLineNo">8157</span><a name="line.8157"></a>
-<span class="sourceLineNo">8158</span>    // metrics<a name="line.8158"></a>
-<span class="sourceLineNo">8159</span>    compactionsFinished.incrementAndGet();<a name="line.8159"></a>
-<span class="sourceLineNo">8160</span>    compactionNumFilesCompacted.addAndGet(numFiles);<a name="line.8160"></a>
-<span class="sourceLineNo">8161</span>    compactionNumBytesCompacted.addAndGet(filesSizeCompacted);<a name="line.8161"></a>
-<span class="sourceLineNo">8162</span><a name="line.8162"></a>
-<span class="sourceLineNo">8163</span>    assert newValue &gt;= 0;<a name="line.8163"></a>
-<span class="sourceLineNo">8164</span>  }<a name="line.8164"></a>
-<span class="sourceLineNo">8165</span><a name="line.8165"></a>
-<span class="sourceLineNo">8166</span>  public void reportCompactionRequestFailure() {<a name="line.8166"></a>
-<span class="sourceLineNo">8167</span>    compactionsFailed.incrementAndGet();<a name="line.8167"></a>
-<span class="sourceLineNo">8168</span>  }<a name="line.8168"></a>
-<span class="sourceLineNo">8169</span><a name="line.8169"></a>
-<span class="sourceLineNo">8170</span>  public void incrementCompactionsQueuedCount() {<a name="line.8170"></a>
-<span class="sourceLineNo">8171</span>    compactionsQueued.incrementAndGet();<a name="line.8171"></a>
-<span class="sourceLineNo">8172</span>  }<a name="line.8172"></a>
-<span class="sourceLineNo">8173</span><a name="line.8173"></a>
-<span class="sourceLineNo">8174</span>  public void decrementCompactionsQueuedCount() {<a name="line.8174"></a>
-<span class="sourceLineNo">8175</span>    compactionsQueued.decrementAndGet();<a name="line.8175"></a>
-<span class="sourceLineNo">8176</span>  }<a name="line.8176"></a>
-<span class="sourceLineNo">8177</span><a name="line.8177"></a>
-<span class="sourceLineNo">8178</span>  public void incrementFlushesQueuedCount() {<a name="line.8178"></a>
-<span class="sourceLineNo">8179</span>    flushesQueued.incrementAndGet();<a name="line.8179"></a>
-<span class="sourceLineNo">8180</span>  }<a name="line.8180"></a>
-<span class="sourceLineNo">8181</span><a name="line.8181"></a>
-<span class="sourceLineNo">8182</span>  @VisibleForTesting<a name="line.8182"></a>
-<span class="sourceLineNo">8183</span>  public long getReadPoint() {<a name="line.8183"></a>
-<span class="sourceLineNo">8184</span>    return getReadPoint(IsolationLevel.READ_COMMITTED);<a name="line.8184"></a>
+<span class="sourceLineNo">8032</span>    long mutationSize = 0;<a name="line.8032"></a>
+<span class="sourceLineNo">8033</span>    for (List&lt;Cell&gt; cells: familyMap.values()) {<a name="line.8033"></a>
+<span class="sourceLineNo">8034</span>      assert cells instanceof RandomAccess;<a name="line.8034"></a>
+<span class="sourceLineNo">8035</span>      int listSize = cells.size();<a name="line.8035"></a>
+<span class="sourceLineNo">8036</span>      for (int i=0; i &lt; listSize; i++) {<a name="line.8036"></a>
+<span class="sourceLineNo">8037</span>        Cell cell = cells.get(i);<a name="line.8037"></a>
+<span class="sourceLineNo">8038</span>        mutationSize += KeyValueUtil.length(cell);<a name="line.8038"></a>
+<span class="sourceLineNo">8039</span>      }<a name="line.8039"></a>
+<span class="sourceLineNo">8040</span>    }<a name="line.8040"></a>
+<span class="sourceLineNo">8041</span><a name="line.8041"></a>
+<span class="sourceLineNo">8042</span>    dataInMemoryWithoutWAL.add(mutationSize);<a name="line.8042"></a>
+<span class="sourceLineNo">8043</span>  }<a name="line.8043"></a>
+<span class="sourceLineNo">8044</span><a name="line.8044"></a>
+<span class="sourceLineNo">8045</span>  private void lock(final Lock lock)<a name="line.8045"></a>
+<span class="sourceLineNo">8046</span>      throws RegionTooBusyException, InterruptedIOException {<a name="line.8046"></a>
+<span class="sourceLineNo">8047</span>    lock(lock, 1);<a name="line.8047"></a>
+<span class="sourceLineNo">8048</span>  }<a name="line.8048"></a>
+<span class="sourceLineNo">8049</span><a name="line.8049"></a>
+<span class="sourceLineNo">8050</span>  /**<a name="line.8050"></a>
+<span class="sourceLineNo">8051</span>   * Try to acquire a lock.  Throw RegionTooBusyException<a name="line.8051"></a>
+<span class="sourceLineNo">8052</span>   * if failed to get the lock in time. Throw InterruptedIOException<a name="line.8052"></a>
+<span class="sourceLineNo">8053</span>   * if interrupted while waiting for the lock.<a name="line.8053"></a>
+<span class="sourceLineNo">8054</span>   */<a name="line.8054"></a>
+<span class="sourceLineNo">8055</span>  private void lock(final Lock lock, final int multiplier)<a name="line.8055"></a>
+<span class="sourceLineNo">8056</span>      throws RegionTooBusyException, InterruptedIOException {<a name="line.8056"></a>
+<span class="sourceLineNo">8057</span>    try {<a name="line.8057"></a>
+<span class="sourceLineNo">8058</span>      final long waitTime = Math.min(maxBusyWaitDuration,<a name="line.8058"></a>
+<span class="sourceLineNo">8059</span>          busyWaitDuration * Math.min(multiplier, maxBusyWaitMultiplier));<a name="line.8059"></a>
+<span class="sourceLineNo">8060</span>      if (!lock.tryLock(waitTime, TimeUnit.MILLISECONDS)) {<a name="line.8060"></a>
+<span class="sourceLineNo">8061</span>        throw new RegionTooBusyException(<a name="line.8061"></a>
+<span class="sourceLineNo">8062</span>            "failed to get a lock in " + waitTime + " ms. " +<a name="line.8062"></a>
+<span class="sourceLineNo">8063</span>                "regionName=" + (this.getRegionInfo() == null ? "unknown" :<a name="line.8063"></a>
+<span class="sourceLineNo">8064</span>                this.getRegionInfo().getRegionNameAsString()) +<a name="line.8064"></a>
+<span class="sourceLineNo">8065</span>                ", server=" + (this.getRegionServerServices() == null ? "unknown" :<a name="line.8065"></a>
+<span class="sourceLineNo">8066</span>                this.getRegionServerServices().getServerName()));<a name="line.8066"></a>
+<span class="sourceLineNo">8067</span>      }<a name="line.8067"></a>
+<span class="sourceLineNo">8068</span>    } catch (InterruptedException ie) {<a name="line.8068"></a>
+<span class="sourceLineNo">8069</span>      LOG.info("Interrupted while waiting for a lock");<a name="line.8069"></a>
+<span class="sourceLineNo">8070</span>      InterruptedIOException iie = new InterruptedIOException();<a name="line.8070"></a>
+<span class="sourceLineNo">8071</span>      iie.initCause(ie);<a name="line.8071"></a>
+<span class="sourceLineNo">8072</span>      throw iie;<a name="line.8072"></a>
+<span class="sourceLineNo">8073</span>    }<a name="line.8073"></a>
+<span class="sourceLineNo">8074</span>  }<a name="line.8074"></a>
+<span class="sourceLineNo">8075</span><a name="line.8075"></a>
+<span class="sourceLineNo">8076</span>  /**<a name="line.8076"></a>
+<span class="sourceLineNo">8077</span>   * Calls sync with the given transaction ID<a name="line.8077"></a>
+<span class="sourceLineNo">8078</span>   * @param txid should sync up to which transaction<a name="line.8078"></a>
+<span class="sourceLineNo">8079</span>   * @throws IOException If anything goes wrong with DFS<a name="line.8079"></a>
+<span class="sourceLineNo">8080</span>   */<a name="line.8080"></a>
+<span class="sourceLineNo">8081</span>  private void sync(long txid, Durability durability) throws IOException {<a name="line.8081"></a>
+<span class="sourceLineNo">8082</span>    if (this.getRegionInfo().isMetaRegion()) {<a name="line.8082"></a>
+<span class="sourceLineNo">8083</span>      this.wal.sync(txid);<a name="line.8083"></a>
+<span class="sourceLineNo">8084</span>    } else {<a name="line.8084"></a>
+<span class="sourceLineNo">8085</span>      switch(durability) {<a name="line.8085"></a>
+<span class="sourceLineNo">8086</span>      case USE_DEFAULT:<a name="line.8086"></a>
+<span class="sourceLineNo">8087</span>        // do what table defaults to<a name="line.8087"></a>
+<span class="sourceLineNo">8088</span>        if (shouldSyncWAL()) {<a name="line.8088"></a>
+<span class="sourceLineNo">8089</span>          this.wal.sync(txid);<a name="line.8089"></a>
+<span class="sourceLineNo">8090</span>        }<a name="line.8090"></a>
+<span class="sourceLineNo">8091</span>        break;<a name="line.8091"></a>
+<span class="sourceLineNo">8092</span>      case SKIP_WAL:<a name="line.8092"></a>
+<span class="sourceLineNo">8093</span>        // nothing do to<a name="line.8093"></a>
+<span class="sourceLineNo">8094</span>        break;<a name="line.8094"></a>
+<span class="sourceLineNo">8095</span>      case ASYNC_WAL:<a name="line.8095"></a>
+<span class="sourceLineNo">8096</span>        // nothing do to<a name="line.8096"></a>
+<span class="sourceLineNo">8097</span>        break;<a name="line.8097"></a>
+<span class="sourceLineNo">8098</span>      case SYNC_WAL:<a name="line.8098"></a>
+<span class="sourceLineNo">8099</span>      case FSYNC_WAL:<a name="line.8099"></a>
+<span class="sourceLineNo">8100</span>        // sync the WAL edit (SYNC and FSYNC treated the same for now)<a name="line.8100"></a>
+<span class="sourceLineNo">8101</span>        this.wal.sync(txid);<a name="line.8101"></a>
+<span class="sourceLineNo">8102</span>        break;<a name="line.8102"></a>
+<span class="sourceLineNo">8103</span>      default:<a name="line.8103"></a>
+<span class="sourceLineNo">8104</span>        throw new RuntimeException("Unknown durability " + durability);<a name="line.8104"></a>
+<span class="sourceLineNo">8105</span>      }<a name="line.8105"></a>
+<span class="sourceLineNo">8106</span>    }<a name="line.8106"></a>
+<span class="sourceLineNo">8107</span>  }<a name="line.8107"></a>
+<span class="sourceLineNo">8108</span><a name="line.8108"></a>
+<span class="sourceLineNo">8109</span>  /**<a name="line.8109"></a>
+<span class="sourceLineNo">8110</span>   * Check whether we should sync the wal from the table's durability settings<a name="line.8110"></a>
+<span class="sourceLineNo">8111</span>   */<a name="line.8111"></a>
+<span class="sourceLineNo">8112</span>  private boolean shouldSyncWAL() {<a name="line.8112"></a>
+<span class="sourceLineNo">8113</span>    return durability.ordinal() &gt;  Durability.ASYNC_WAL.ordinal();<a name="line.8113"></a>
+<span class="sourceLineNo">8114</span>  }<a name="line.8114"></a>
+<span class="sourceLineNo">8115</span><a name="line.8115"></a>
+<span class="sourceLineNo">8116</span>  /**<a name="line.8116"></a>
+<span class="sourceLineNo">8117</span>   * A mocked list implementation - discards all updates.<a name="line.8117"></a>
+<span class="sourceLineNo">8118</span>   */<a name="line.8118"></a>
+<span class="sourceLineNo">8119</span>  private static final List&lt;Cell&gt; MOCKED_LIST = new AbstractList&lt;Cell&gt;() {<a name="line.8119"></a>
+<span class="sourceLineNo">8120</span><a name="line.8120"></a>
+<span class="sourceLineNo">8121</span>    @Override<a name="line.8121"></a>
+<span class="sourceLineNo">8122</span>    public void add(int index, Cell element) {<a name="line.8122"></a>
+<span class="sourceLineNo">8123</span>      // do nothing<a name="line.8123"></a>
+<span class="sourceLineNo">8124</span>    }<a name="line.8124"></a>
+<span class="sourceLineNo">8125</span><a name="line.8125"></a>
+<span class="sourceLineNo">8126</span>    @Override<a name="line.8126"></a>
+<span class="sourceLineNo">8127</span>    public boolean addAll(int index, Collection&lt;? extends Cell&gt; c) {<a name="line.8127"></a>
+<span class="sourceLineNo">8128</span>      return false; // this list is never changed as a result of an update<a name="line.8128"></a>
+<span class="sourceLineNo">8129</span>    }<a name="line.8129"></a>
+<span class="sourceLineNo">8130</span><a name="line.8130"></a>
+<span class="sourceLineNo">8131</span>    @Override<a name="line.8131"></a>
+<span class="sourceLineNo">8132</span>    public KeyValue get(int index) {<a name="line.8132"></a>
+<span class="sourceLineNo">8133</span>      throw new UnsupportedOperationException();<a name="line.8133"></a>
+<span class="sourceLineNo">8134</span>    }<a name="line.8134"></a>
+<span class="sourceLineNo">8135</span><a name="line.8135"></a>
+<span class="sourceLineNo">8136</span>    @Override<a name="line.8136"></a>
+<span class="sourceLineNo">8137</span>    public int size() {<a name="line.8137"></a>
+<span class="sourceLineNo">8138</span>      return 0;<a name="line.8138"></a>
+<span class="sourceLineNo">8139</span>    }<a name="line.8139"></a>
+<span class="sourceLineNo">8140</span>  };<a name="line.8140"></a>
+<span class="sourceLineNo">8141</span><a name="line.8141"></a>
+<span class="sourceLineNo">8142</span>  @Override<a name="line.8142"></a>
+<span class="sourceLineNo">8143</span>  public long getOpenSeqNum() {<a name="line.8143"></a>
+<span class="sourceLineNo">8144</span>    return this.openSeqNum;<a name="line.8144"></a>
+<span class="sourceLineNo">8145</span>  }<a name="line.8145"></a>
+<span class="sourceLineNo">8146</span><a name="line.8146"></a>
+<span class="sourceLineNo">8147</span>  @Override<a name="line.8147"></a>
+<span class="sourceLineNo">8148</span>  public Map&lt;byte[], Long&gt; getMaxStoreSeqId() {<a name="line.8148"></a>
+<span class="sourceLineNo">8149</span>    return this.maxSeqIdInStores;<a name="line.8149"></a>
+<span class="sourceLineNo">8150</span>  }<a name="line.8150"></a>
+<span class="sourceLineNo">8151</span><a name="line.8151"></a>
+<span class="sourceLineNo">8152</span>  @Override<a name="line.8152"></a>
+<span class="sourceLineNo">8153</span>  public long getOldestSeqIdOfStore(byte[] familyName) {<a name="line.8153"></a>
+<span class="sourceLineNo">8154</span>    return wal.getEarliestMemstoreSeqNum(getRegionInfo().getEncodedNameAsBytes(), familyName);<a name="line.8154"></a>
+<span class="sourceLineNo">8155</span>  }<a name="line.8155"></a>
+<span class="sourceLineNo">8156</span><a name="line.8156"></a>
+<span class="sourceLineNo">8157</span>  @Override<a name="line.8157"></a>
+<span class="sourceLineNo">8158</span>  public CompactionState getCompactionState() {<a name="line.8158"></a>
+<span class="sourceLineNo">8159</span>    boolean hasMajor = majorInProgress.get() &gt; 0, hasMinor = minorInProgress.get() &gt; 0;<a name="line.8159"></a>
+<span class="sourceLineNo">8160</span>    return (hasMajor ? (hasMinor ? CompactionState.MAJOR_AND_MINOR : CompactionState.MAJOR)<a name="line.8160"></a>
+<span class="sourceLineNo">8161</span>        : (hasMinor ? CompactionState.MINOR : CompactionState.NONE));<a name="line.8161"></a>
+<span class="sourceLineNo">8162</span>  }<a name="line.8162"></a>
+<span class="sourceLineNo">8163</span><a name="line.8163"></a>
+<span class="sourceLineNo">8164</span>  public void reportCompactionRequestStart(boolean isMajor){<a name="line.8164"></a>
+<span class="sourceLineNo">8165</span>    (isMajor ? majorInProgress : minorInProgress).incrementAndGet();<a name="line.8165"></a>
+<span class="sourceLineNo">8166</span>  }<a name="line.8166"></a>
+<span class="sourceLineNo">8167</span><a name="line.8167"></a>
+<span class="sourceLineNo">8168</span>  public void reportCompactionRequestEnd(boolean isMajor, int numFiles, long filesSizeCompacted) {<a name="line.8168"></a>
+<span class="sourceLineNo">8169</span>    int newValue = (isMajor ? majorInProgress : minorInProgress).decrementAndGet();<a name="line.8169"></a>
+<span class="sourceLineNo">8170</span><a name="line.8170"></a>
+<span class="sourceLineNo">8171</span>    // metrics<a name="line.8171"></a>
+<span class="sourceLineNo">8172</span>    compactionsFinished.incrementAndGet();<a name="line.8172"></a>
+<span class="sourceLineNo">8173</span>    compactionNumFilesCompacted.addAndGet(numFiles);<a name="line.8173"></a>
+<span class="sourceLineNo">8174</span>    compactionNumBytesCompacted.addAndGet(filesSizeCompacted);<a name="line.8174"></a>
+<span class="sourceLineNo">8175</span><a name="line.8175"></a>
+<span class="sourceLineNo">8176</span>    assert newValue &gt;= 0;<a name="line.8176"></a>
+<span class="sourceLineNo">8177</span>  }<a name="line.8177"></a>
+<span class="sourceLineNo">8178</span><a name="line.8178"></a>
+<span class="sourceLineNo">8179</span>  public void reportCompactionRequestFailure() {<a name="line.8179"></a>
+<span class="sourceLineNo">8180</span>    compactionsFailed.incrementAndGet();<a name="line.8180"></a>
+<span class="sourceLineNo">8181</span>  }<a name="line.8181"></a>
+<span class="sourceLineNo">8182</span><a name="line.8182"></a>
+<span class="sourceLineNo">8183</span>  public void incrementCompactionsQueuedCount() {<a name="line.8183"></a>
+<span class="sourceLineNo">8184</span>    compactionsQueued.incrementAndGet();<a name="line.8184"></a>
 <span class="sourceLineNo">8185</span>  }<a name="line.8185"></a>
 <span class="sourceLineNo">8186</span><a name="line.8186"></a>
-<span class="sourceLineNo">8187</span>  /**<a name="line.8187"></a>
-<span class="sourceLineNo">8188</span>   * {@inheritDoc}<a name="line.8188"></a>
-<span class="sourceLineNo">8189</span>   */<a name="line.8189"></a>
-<span class="sourceLineNo">8190</span>  @Override<a name="line.8190"></a>
-<span class="sourceLineNo">8191</span>  public void onConfigurationChange(Configuration conf) {<a name="line.8191"></a>
-<span class="sourceLineNo">8192</span>    // Do nothing for now.<a name="line.8192"></a>
+<span class="sourceLineNo">8187</span>  public void decrementCompactionsQueuedCount() {<a name="line.8187"></a>
+<span class="sourceLineNo">8188</span>    compactionsQueued.decrementAndGet();<a name="line.8188"></a>
+<span class="sourceLineNo">8189</span>  }<a name="line.8189"></a>
+<span class="sourceLineNo">8190</span><a name="line.8190"></a>
+<span class="sourceLineNo">8191</span>  public void incrementFlushesQueuedCount() {<a name="line.8191"></a>
+<span class="sourceLineNo">8192</span>    flushesQueued.incrementAndGet();<a name="line.8192"></a>
 <span class="sourceLineNo">8193</span>  }<a name="line.8193"></a>
 <span class="sourceLineNo">8194</span><a name="line.8194"></a>
-<span class="sourceLineNo">8195</span>  /**<a name="line.8195"></a>
-<span class="sourceLineNo">8196</span>   * {@inheritDoc}<a name="line.8196"></a>
-<span class="sourceLineNo">8197</span>   */<a name="line.8197"></a>
-<span class="sourceLineNo">8198</span>  @Override<a name="line.8198"></a>
-<span class="sourceLineNo">8199</span>  public void registerChildren(ConfigurationManager manager) {<a name="line.8199"></a>
-<span class="sourceLineNo">8200</span>    configurationManager = Optional.of(manager);<a name="line.8200"></a>
-<span class="sourceLineNo">8201</span>    for (Store s : this.stores.values()) {<a name="line.8201"></a>
-<span class="sourceLineNo">8202</span>      configurationManager.get().registerObserver(s);<a name="line.8202"></a>
-<span class="sourceLineNo">8203</span>    }<a name="line.8203"></a>
-<span class="sourceLineNo">8204</span>  }<a name="line.8204"></a>
-<span class="sourceLineNo">8205</span><a name="line.8205"></a>
-<span class="sourceLineNo">8206</span>  /**<a name="line.8206"></a>
-<span class="sourceLineNo">8207</span>   * {@inheritDoc}<a name="line.8207"></a>
-<span class="sourceLineNo">8208</span>   */<a name="line.8208"></a>
-<span class="sourceLineNo">8209</span>  @Override<a name="line.8209"></a>
-<span class="sourceLineNo">8210</span>  public void deregisterChildren(ConfigurationManager manager) {<a name="line.8210"></a>
-<span class="sourceLineNo">8211</span>    for (Store s : this.stores.values()) {<a name="line.8211"></a>
-<span class="sourceLineNo">8212</span>      configurationManager.get().deregisterObserver(s);<a name="line.8212"></a>
-<span class="sourceLineNo">8213</span>    }<a name="line.8213"></a>
-<span class="sourceLineNo">8214</span>  }<a name="line.8214"></a>
-<span class="sourceLineNo">8215</span><a name="line.8215"></a>
-<span class="sourceLineNo">8216</span>  @Override<a name="line.8216"></a>
-<span class="sourceLineNo">8217</span>  public CellComparator getCellComparator() {<a name="line.8217"></a>
-<span class="sourceLineNo">8218</span>    return this.getRegionInfo().isMetaRegion() ? CellComparator.META_COMPARATOR<a name="line.8218"></a>
-<span class="sourceLineNo">8219</span>        : CellComparator.COMPARATOR;<a name="line.8219"></a>
-<span class="sourceLineNo">8220</span>  }<a name="line.8220"></a>
-<span class="sourceLineNo">8221</span><a name="line.8221"></a>
-<span class="sourceLineNo">8222</span>  public long getMemstoreFlushSize() {<a name="line.8222"></a>
-<span class="sourceLineNo">8223</span>    return this.memstoreFlushSize;<a name="line.8223"></a>
-<span class="sourceLineNo">8224</span>  }<a name="line.8224"></a>
-<span class="sourceLineNo">8225</span><a name="line.8225"></a>
-<span class="sourceLineNo">8226</span>  //// method for debugging tests<a name="line.8226"></a>
-<span class="sourceLineNo">8227</span>  void throwException(String title, String regionName) {<a name="line.8227"></a>
-<span class="sourceLineNo">8228</span>    StringBuffer buf = new StringBuffer();<a name="line.8228"></a>
-<span class="sourceLineNo">8229</span>    buf.append(title + ", ");<a name="line.8229"></a>
-<span class="sourceLineNo">8230</span>    buf.append(getRegionInfo().toString());<a name="line.8230"></a>
-<span class="sourceLineNo">8231</span>    buf.append(getRegionInfo().isMetaRegion() ? " meta region " : " ");<a name="line.8231"></a>
-<span class="sourceLineNo">8232</span>    buf.append(getRegionInfo().isMetaTable() ? " meta table " : " ");<a name="line.8232"></a>
-<span class="sourceLineNo">8233</span>    buf.append("stores: ");<a name="line.8233"></a>
-<span class="sourceLineNo">8234</span>    for (Store s : getStores()) {<a name="line.8234"></a>
-<span class="sourceLineNo">8235</span>      buf.append(s.getColumnFamilyDescriptor().getNameAsString());<a name="line.8235"></a>
-<span class="sourceLineNo">8236</span>      buf.append(" size: ");<a name="line.8236"></a>
-<span class="sourceLineNo">8237</span>      buf.append(s.getSizeOfMemStore().getDataSize());<a name="line.8237"></a>
-<span class="sourceLineNo">8238</span>      buf.append(" ");<a name="line.8238"></a>
-<span class="sourceLineNo">8239</span>    }<a name="line.8239"></a>
-<span class="sourceLineNo">8240</span>    buf.append("end-of-stores");<a name="line.8240"></a>
-<span class="sourceLineNo">8241</span>    buf.append(", memstore size ");<a name="line.8241"></a>
-<span class="sourceLineNo">8242</span>    buf.append(getMemstoreSize());<a name="line.8242"></a>
-<span class="sourceLineNo">8243</span>    if (getRegionInfo().getRegionNameAsString().startsWith(regionName)) {<a name="line.8243"></a>
-<span class="sourceLineNo">8244</span>      throw new RuntimeException(buf.toString());<a name="line.8244"></a>
-<span class="sourceLineNo">8245</span>    }<a name="line.8245"></a>
-<span class="sourceLineNo">8246</span>  }<a name="line.8246"></a>
-<span class="sourceLineNo">8247</span>}<a name="line.8247"></a>
+<span class="sourceLineNo">8195</span>  @VisibleForTesting<a name="line.8195"></a>
+<span class="sourceLineNo">8196</span>  public long getReadPoint() {<a name="line.8196"></a>
+<span class="sourceLineNo">8197</span>    return getReadPoint(IsolationLevel.READ_COMMITTED);<a name="line.8197"></a>
+<span class="sourceLineNo">8198</span>  }<a name="line.8198"></a>
+<span class="sourceLineNo">8199</span><a name="line.8199"></a>
+<span class="sourceLineNo">8200</span>  /**<a name="line.8200"></a>
+<span class="sourceLineNo">8201</span>   * {@inheritDoc}<a name="line.8201"></a>
+<span class="sourceLineNo">8202</span>   */<a name="line.8202"></a>
+<span class="sourceLineNo">8203</span>  @Override<a name="line.8203"></a>
+<span class="sourceLineNo">8204</span>  public void onConfigurationChange(Configuration conf) {<a name="line.8204"></a>
+<span class="sourceLineNo">8205</span>    // Do nothing for now.<a name="line.8205"></a>
+<span class="sourceLineNo">8206</span>  }<a name="line.8206"></a>
+<span class="sourceLineNo">8207</span><a name="line.8207"></a>
+<span class="sourceLineNo">8208</span>  /**<a name="line.8208"></a>
+<span class="sourceLineNo">8209</span>   * {@inheritDoc}<a name="line.8209"></a>
+<span class="sourceLineNo">8210</span>   */<a name="line.8210"></a>
+<span class="sourceLineNo">8211</span>  @Override<a name="line.8211"></a>
+<span class="sourceLineNo">8212</span>  public void registerChildren(ConfigurationManager manager) {<a name="line.8212"></a>
+<span class="sourceLineNo">8213</span>    configurationManager = Optional.of(manager);<a name="line.8213"></a>
+<span class="sourceLineNo">8214</span>    for (Store s : this.stores.values()) {<a name="line.8214"></a>
+<span class="sourceLineNo">8215</span>      configurationManager.get().registerObserver(s);<a name="line.8215"></a>
+<span class="sourceLineNo">8216</span>    }<a name="line.8216"></a>
+<span class="sourceLineNo">8217</span>  }<a name="line.8217"></a>
+<span class="sourceLineNo">8218</span><a name="line.8218"></a>
+<span class="sourceLineNo">8219</span>  /**<a name="line.8219"></a>
+<span class="sourceLineNo">8220</span>   * {@inheritDoc}<a name="line.8220"></a>
+<span class="sourceLineNo">8221</span>   */<a name="line.8221"></a>
+<span class="sourceLineNo">8222</span>  @Override<a name="line.8222"></a>
+<span class="sourceLineNo">8223</span>  public void deregisterChildren(ConfigurationManager manager) {<a name="line.8223"></a>
+<span class="sourceLineNo">8224</span>    for (Store s : this.stores.values()) {<a name="line.8224"></a>
+<span class="sourceLineNo">8225</span>      configurationManager.get().deregisterObserver(s);<a name="line.8225"></a>
+<span class="sourceLineNo">8226</span>    }<a name="line.8226"></a>
+<span class="sourceLineNo">8227</span>  }<a name="line.8227"></a>
+<span class="sourceLineNo">8228</span><a name="line.8228"></a>
+<span class="sourceLineNo">8229</span>  @Override<a name="line.8229"></a>
+<span class="sourceLineNo">8230</span>  public CellComparator getCellComparator() {<a name="line.8230"></a>
+<span class="sourceLineNo">8231</span>    return this.getRegionInfo().isMetaRegion() ? CellComparator.META_COMPARATOR<a name="line.8231"></a>
+<span class="sourceLineNo">8232</span>        : CellComparator.COMPARATOR;<a name="line.8232"></a>
+<span class="sourceLineNo">8233</span>  }<a name="line.8233"></a>
+<span class="sourceLineNo">8234</span><a name="line.8234"></a>
+<span class="sourceLineNo">8235</span>  public long getMemstoreFlushSize() {<a name="line.8235"></a>
+<span class="sourceLineNo">8236</span>    return this.memstoreFlushSize;<a name="line.8236"></a>
+<span class="sourceLineNo">8237</span>  }<a name="line.8237"></a>
+<span class="sourceLineNo">8238</span><a name="line.8238"></a>
+<span class="sourceLineNo">8239</span>  //// method for debugging tests<a name="line.8239"></a>
+<span class="sourceLineNo">8240</span>  void throwException(String title, String regionName) {<a name="line.8240"></a>
+<span class="sourceLineNo">8241</span>    StringBuffer buf = new StringBuffer();<a name="line.8241"></a>
+<span class="sourceLineNo">8242</span>    buf.append(title + ", ");<a name="line.8242"></a>
+<span class="sourceLineNo">8243</span>    buf.append(getRegionInfo().toString());<a name="line.8243"></a>
+<span class="sourceLineNo">8244</span>    buf.append(getRegionInfo().isMetaRegion() ? " meta region " : " ");<a name="line.8244"></a>
+<span class="sourceLineNo">8245</span>    buf.append(getRegionInfo().isMetaTable() ? " meta table " : " ");<a name="line.8245"></a>
+<span class="sourceLineNo">8246</span>    buf.append("stores: ");<a name="line.8246"></a>
+<span class="sourceLineNo">8247</span>    for (Store s : getStores()) {<a name="line.8247"></a>
+<span class="sourceLineNo">8248</span>      buf.append(s.getColumnFamilyDescriptor().getNameAsString());<a name="line.8248"></a>
+<span class="sourceLineNo">8249</span>      buf.append(" size: ");<a name="line.8249"></a>
+<span class="sourceLineNo">8250</span>      buf.append(s.getSizeOfMemStore().getDataSize());<a name="line.8250"></a>
+<span class="sourceLineNo">8251</span>      buf.append(" ");<a name="line.8251"></a>
+<span class="sourceLineNo">8252</span>    }<a name="line.8252"></a>
+<span class="sourceLineNo">8253</span>    buf.append("end-of-stores");<a name="line.8253"></a>
+<span class="sourceLineNo">8254</span>    buf.append(", memstore size ");<a name="line.8254"></a>
+<span class="sourceLineNo">8255</span>    buf.append(getMemstoreSize());<a name="line.8255"></a>
+<span class="sourceLineNo">8256</span>    if (getRegionInfo().getRegionNameAsString().startsWith(regionName)) {<a name="line.8256"></a>
+<span class="sourceLineNo">8257</span>      throw new RuntimeException(buf.toString());<a name="line.8257"></a>
+<span class="sourceLineNo">8258</span>    }<a name="line.8258"></a>
+<span class="sourceLineNo">8259</span>  }<a name="line.8259"></a>
+<span class="sourceLineNo">8260</span>}<a name="line.8260"></a>
 
 
 


[29/33] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/checkstyle.rss
----------------------------------------------------------------------
diff --git a/checkstyle.rss b/checkstyle.rss
index db68c65..665fba8 100644
--- a/checkstyle.rss
+++ b/checkstyle.rss
@@ -26,7 +26,7 @@ under the License.
     <copyright>&#169;2007 - 2017 The Apache Software Foundation</copyright>
     <item>
       <title>File: 2024,
-             Errors: 12788,
+             Errors: 12787,
              Warnings: 0,
              Infos: 0
       </title>
@@ -18969,7 +18969,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  6
+                  5
                 </td>
               </tr>
                           <tr>
@@ -24583,7 +24583,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  62
+                  63
                 </td>
               </tr>
                           <tr>
@@ -25633,7 +25633,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  210
+                  209
                 </td>
               </tr>
                           <tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/allclasses-frame.html
----------------------------------------------------------------------
diff --git a/devapidocs/allclasses-frame.html b/devapidocs/allclasses-frame.html
index 1edce50..fee2a83 100644
--- a/devapidocs/allclasses-frame.html
+++ b/devapidocs/allclasses-frame.html
@@ -885,6 +885,7 @@
 <li><a href="org/apache/hadoop/hbase/regionserver/FlushRequester.html" title="interface in org.apache.hadoop.hbase.regionserver" target="classFrame"><span class="interfaceName">FlushRequester</span></a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/FlushRequestListener.html" title="interface in org.apache.hadoop.hbase.regionserver" target="classFrame"><span class="interfaceName">FlushRequestListener</span></a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.html" title="class in org.apache.hadoop.hbase.regionserver.snapshot" target="classFrame">FlushSnapshotSubprocedure</a></li>
+<li><a href="org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.RegionSnapshotTask.html" title="class in org.apache.hadoop.hbase.regionserver.snapshot" target="classFrame">FlushSnapshotSubprocedure.RegionSnapshotTask</a></li>
 <li><a href="org/apache/hadoop/hbase/procedure/flush/FlushTableSubprocedure.html" title="class in org.apache.hadoop.hbase.procedure.flush" target="classFrame">FlushTableSubprocedure</a></li>
 <li><a href="org/apache/hadoop/hbase/procedure/flush/FlushTableSubprocedure.RegionFlushTask.html" title="class in org.apache.hadoop.hbase.procedure.flush" target="classFrame">FlushTableSubprocedure.RegionFlushTask</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/throttle/FlushThroughputControllerFactory.html" title="class in org.apache.hadoop.hbase.regionserver.throttle" target="classFrame">FlushThroughputControllerFactory</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/allclasses-noframe.html
----------------------------------------------------------------------
diff --git a/devapidocs/allclasses-noframe.html b/devapidocs/allclasses-noframe.html
index 8278c59..b8b8ba2 100644
--- a/devapidocs/allclasses-noframe.html
+++ b/devapidocs/allclasses-noframe.html
@@ -885,6 +885,7 @@
 <li><a href="org/apache/hadoop/hbase/regionserver/FlushRequester.html" title="interface in org.apache.hadoop.hbase.regionserver"><span class="interfaceName">FlushRequester</span></a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/FlushRequestListener.html" title="interface in org.apache.hadoop.hbase.regionserver"><span class="interfaceName">FlushRequestListener</span></a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.html" title="class in org.apache.hadoop.hbase.regionserver.snapshot">FlushSnapshotSubprocedure</a></li>
+<li><a href="org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.RegionSnapshotTask.html" title="class in org.apache.hadoop.hbase.regionserver.snapshot">FlushSnapshotSubprocedure.RegionSnapshotTask</a></li>
 <li><a href="org/apache/hadoop/hbase/procedure/flush/FlushTableSubprocedure.html" title="class in org.apache.hadoop.hbase.procedure.flush">FlushTableSubprocedure</a></li>
 <li><a href="org/apache/hadoop/hbase/procedure/flush/FlushTableSubprocedure.RegionFlushTask.html" title="class in org.apache.hadoop.hbase.procedure.flush">FlushTableSubprocedure.RegionFlushTask</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/throttle/FlushThroughputControllerFactory.html" title="class in org.apache.hadoop.hbase.regionserver.throttle">FlushThroughputControllerFactory</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/constant-values.html
----------------------------------------------------------------------
diff --git a/devapidocs/constant-values.html b/devapidocs/constant-values.html
index 272b99a..7c1e475 100644
--- a/devapidocs/constant-values.html
+++ b/devapidocs/constant-values.html
@@ -3836,21 +3836,21 @@
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://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><code><a href="org/apache/hadoop/hbase/Version.html#date">date</a></code></td>
-<td class="colLast"><code>"Thu Aug 10 14:40:12 UTC 2017"</code></td>
+<td class="colLast"><code>"Thu Aug 10 22:04:05 UTC 2017"</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.revision">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://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><code><a href="org/apache/hadoop/hbase/Version.html#revision">revision</a></code></td>
-<td class="colLast"><code>"624652373e6fb11a7aee0ce8bcfb7a394ed89dcb"</code></td>
+<td class="colLast"><code>"6114824b53c1299d2d79572800fb1e1cbc96cb66"</code></td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.srcChecksum">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://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><code><a href="org/apache/hadoop/hbase/Version.html#srcChecksum">srcChecksum</a></code></td>
-<td class="colLast"><code>"e53f3223b937b85695ec877f367c9fc2"</code></td>
+<td class="colLast"><code>"9e3fa0f1ca1a122ae35a8e67fc4f67ef"</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.url">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/devapidocs/index-all.html b/devapidocs/index-all.html
index 9ec3f1e..d3e74d7 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -1943,6 +1943,8 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#addMobRegion-org.apache.hadoop.hbase.HRegionInfo-">addMobRegion(HRegionInfo)</a></span> - Method in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/SnapshotManifest.html" title="class in org.apache.hadoop.hbase.snapshot">SnapshotManifest</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#addMobRegion-org.apache.hadoop.hbase.HRegionInfo-org.apache.hadoop.hbase.snapshot.SnapshotManifest.RegionVisitor-">addMobRegion(HRegionInfo, SnapshotManifest.RegionVisitor)</a></span> - Method in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/SnapshotManifest.html" title="class in org.apache.hadoop.hbase.snapshot">SnapshotManifest</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/http/HttpServer.html#addMultiException-org.eclipse.jetty.util.MultiException-java.lang.Exception-">addMultiException(MultiException, Exception)</a></span> - Method in class org.apache.hadoop.hbase.http.<a href="org/apache/hadoop/hbase/http/HttpServer.html" title="class in org.apache.hadoop.hbase.http">HttpServer</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/quotas/DefaultOperationQuota.html#addMutation-org.apache.hadoop.hbase.client.Mutation-">addMutation(Mutation)</a></span> - Method in class org.apache.hadoop.hbase.quotas.<a href="org/apache/hadoop/hbase/quotas/DefaultOperationQuota.html" title="class in org.apache.hadoop.hbase.quotas">DefaultOperationQuota</a></dt>
@@ -2080,10 +2082,14 @@
 <dd>
 <div class="block">Creates a 'manifest' for the specified region, by reading directly from the HRegion object.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#addRegion-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.snapshot.SnapshotManifest.RegionVisitor-">addRegion(HRegion, SnapshotManifest.RegionVisitor)</a></span> - Method in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/SnapshotManifest.html" title="class in org.apache.hadoop.hbase.snapshot">SnapshotManifest</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#addRegion-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.HRegionInfo-">addRegion(Path, HRegionInfo)</a></span> - Method in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/SnapshotManifest.html" title="class in org.apache.hadoop.hbase.snapshot">SnapshotManifest</a></dt>
 <dd>
 <div class="block">Creates a 'manifest' for the specified region, by reading directly from the disk.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#addRegion-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.HRegionInfo-org.apache.hadoop.hbase.snapshot.SnapshotManifest.RegionVisitor-">addRegion(Path, HRegionInfo, SnapshotManifest.RegionVisitor)</a></span> - Method in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/SnapshotManifest.html" title="class in org.apache.hadoop.hbase.snapshot">SnapshotManifest</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/MetaTableAccessor.html#addRegionInfo-org.apache.hadoop.hbase.client.Put-org.apache.hadoop.hbase.HRegionInfo-">addRegionInfo(Put, HRegionInfo)</a></span> - Static method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/MetaTableAccessor.html" title="class in org.apache.hadoop.hbase">MetaTableAccessor</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html#addRegionInfo-org.apache.hadoop.hbase.util.HBaseFsck.HbckInfo-">addRegionInfo(HBaseFsck.HbckInfo)</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/HBaseFsck.TableInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a></dt>
@@ -12651,10 +12657,12 @@
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/HRegion.html#closeRegionOperation--">closeRegionOperation()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/HRegion.html#closeRegionOperation-org.apache.hadoop.hbase.regionserver.Region.Operation-">closeRegionOperation(Region.Operation)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/Region.html#closeRegionOperation--">closeRegionOperation()</a></span> - Method in interface org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a></dt>
 <dd>
-<div class="block">Closes the lock.</div>
+<div class="block">Closes the region operation lock.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/Region.html#closeRegionOperation--">closeRegionOperation()</a></span> - Method in interface org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/Region.html#closeRegionOperation-org.apache.hadoop.hbase.regionserver.Region.Operation-">closeRegionOperation(Region.Operation)</a></span> - Method in interface org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a></dt>
 <dd>
 <div class="block">Closes the region operation lock.</div>
 </dd>
@@ -70818,6 +70826,8 @@
 <dd>
 <div class="block">monitor to check for errors</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.RegionSnapshotTask.html#monitor">monitor</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.snapshot.<a href="org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.RegionSnapshotTask.html" title="class in org.apache.hadoop.hbase.regionserver.snapshot">FlushSnapshotSubprocedure.RegionSnapshotTask</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#monitor">monitor</a></span> - Variable in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html" title="class in org.apache.hadoop.hbase.snapshot">RestoreSnapshotHelper</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#monitor">monitor</a></span> - Variable in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/SnapshotManifest.html" title="class in org.apache.hadoop.hbase.snapshot">SnapshotManifest</a></dt>
@@ -78499,6 +78509,10 @@ service.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/MasterCoprocessorHost.html#postSnapshot-org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription-org.apache.hadoop.hbase.HTableDescriptor-">postSnapshot(SnapshotProtos.SnapshotDescription, HTableDescriptor)</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/MasterCoprocessorHost.html" title="class in org.apache.hadoop.hbase.master">MasterCoprocessorHost</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/HStore.html#postSnapshotOperation--">postSnapshotOperation()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a></dt>
+<dd>
+<div class="block">Perform tasks needed after the completion of snapshot operation.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/RegionObserver.html#postSplit-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.regionserver.Region-org.apache.hadoop.hbase.regionserver.Region-">postSplit(ObserverContext&lt;RegionCoprocessorEnvironment&gt;, Region, Region)</a></span> - Method in interface org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/RegionObserver.html" title="interface in org.apache.hadoop.hbase.coprocessor">RegionObserver</a></dt>
 <dd>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>
@@ -80276,6 +80290,10 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/AccessController.html#preSnapshot-org.apache.hadoop.hbase.coprocessor.ObserverContext-org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription-org.apache.hadoop.hbase.client.TableDescriptor-">preSnapshot(ObserverContext&lt;MasterCoprocessorEnvironment&gt;, SnapshotProtos.SnapshotDescription, TableDescriptor)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/AccessController.html" title="class in org.apache.hadoop.hbase.security.access">AccessController</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/HStore.html#preSnapshotOperation--">preSnapshotOperation()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a></dt>
+<dd>
+<div class="block">Sets the store up for a region level snapshot operation.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/RegionObserver.html#preSplit-org.apache.hadoop.hbase.coprocessor.ObserverContext-">preSplit(ObserverContext&lt;RegionCoprocessorEnvironment&gt;)</a></span> - Method in interface org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/RegionObserver.html" title="interface in org.apache.hadoop.hbase.coprocessor">RegionObserver</a></dt>
 <dd>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>
@@ -86051,7 +86069,7 @@ service.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#regionsMap">regionsMap</a></span> - Variable in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html" title="class in org.apache.hadoop.hbase.snapshot">RestoreSnapshotHelper</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.RegionSnapshotTask.html#RegionSnapshotTask-org.apache.hadoop.hbase.regionserver.Region-">RegionSnapshotTask(Region)</a></span> - Constructor for class org.apache.hadoop.hbase.regionserver.snapshot.<a href="org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.RegionSnapshotTask.html" title="class in org.apache.hadoop.hbase.regionserver.snapshot">FlushSnapshotSubprocedure.RegionSnapshotTask</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.RegionSnapshotTask.html#RegionSnapshotTask-org.apache.hadoop.hbase.regionserver.Region-org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription-boolean-org.apache.hadoop.hbase.errorhandling.ForeignExceptionDispatcher-">RegionSnapshotTask(Region, SnapshotProtos.SnapshotDescription, boolean, ForeignExceptionDispatcher)</a></span> - Constructor for class org.apache.hadoop.hbase.regionserver.snapshot.<a href="org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.RegionSnapshotTask.html" title="class in org.apache.hadoop.hbase.regionserver.snapshot">FlushSnapshotSubprocedure.RegionSnapshotTask</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html#regionsOnCrashedServer">regionsOnCrashedServer</a></span> - Variable in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">ServerCrashProcedure</a></dt>
 <dd>
@@ -101018,6 +101036,8 @@ service.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/filter/SkipFilter.html#SkipFilter-org.apache.hadoop.hbase.filter.Filter-">SkipFilter(Filter)</a></span> - Constructor for class org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/SkipFilter.html" title="class in org.apache.hadoop.hbase.filter">SkipFilter</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.RegionSnapshotTask.html#skipFlush">skipFlush</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.snapshot.<a href="org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.RegionSnapshotTask.html" title="class in org.apache.hadoop.hbase.regionserver.snapshot">FlushSnapshotSubprocedure.RegionSnapshotTask</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ipc/ServerRpcConnection.html#skipInitialSaslHandshake">skipInitialSaslHandshake</a></span> - Variable in class org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/ServerRpcConnection.html" title="class in org.apache.hadoop.hbase.ipc">ServerRpcConnection</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#skipKVsNewerThanReadpoint--">skipKVsNewerThanReadpoint()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/StoreFileScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileScanner</a></dt>
@@ -101547,6 +101567,8 @@ service.</div>
 <dd>
 <div class="block">Failure to create the specified snapshot due to an external cause</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.RegionSnapshotTask.html#snapshotDesc">snapshotDesc</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.snapshot.<a href="org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.RegionSnapshotTask.html" title="class in org.apache.hadoop.hbase.regionserver.snapshot">FlushSnapshotSubprocedure.RegionSnapshotTask</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#snapshotDesc">snapshotDesc</a></span> - Variable in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html" title="class in org.apache.hadoop.hbase.snapshot">RestoreSnapshotHelper</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/client/SnapshotDescription.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">SnapshotDescription</span></a> - Class in <a href="org/apache/hadoop/hbase/client/package-summary.html">org.apache.hadoop.hbase.client</a></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
index 4af64c0..cc0a274 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
@@ -166,10 +166,10 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupPhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupPhase</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupRestoreConstants.BackupCommand</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupType.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupState.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupPhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupPhase</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupType.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/org/apache/hadoop/hbase/class-use/HRegionInfo.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/class-use/HRegionInfo.html b/devapidocs/org/apache/hadoop/hbase/class-use/HRegionInfo.html
index e77c61f..f99d8d9 100644
--- a/devapidocs/org/apache/hadoop/hbase/class-use/HRegionInfo.html
+++ b/devapidocs/org/apache/hadoop/hbase/class-use/HRegionInfo.html
@@ -6052,12 +6052,23 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 <td class="colLast"><span class="typeNameLabel">SnapshotManifest.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#addMobRegion-org.apache.hadoop.hbase.HRegionInfo-">addMobRegion</a></span>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;regionInfo)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><span class="typeNameLabel">SnapshotManifest.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#addMobRegion-org.apache.hadoop.hbase.HRegionInfo-org.apache.hadoop.hbase.snapshot.SnapshotManifest.RegionVisitor-">addMobRegion</a></span>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;regionInfo,
+            <a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html" title="interface in org.apache.hadoop.hbase.snapshot">SnapshotManifest.RegionVisitor</a>&nbsp;visitor)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">SnapshotManifest.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#addRegion-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.HRegionInfo-">addRegion</a></span>(org.apache.hadoop.fs.Path&nbsp;tableDir,
          <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;regionInfo)</code>
 <div class="block">Creates a 'manifest' for the specified region, by reading directly from the disk.</div>
 </td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><span class="typeNameLabel">SnapshotManifest.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#addRegion-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.HRegionInfo-org.apache.hadoop.hbase.snapshot.SnapshotManifest.RegionVisitor-">addRegion</a></span>(org.apache.hadoop.fs.Path&nbsp;tableDir,
+         <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;regionInfo,
+         <a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html" title="interface in org.apache.hadoop.hbase.snapshot">SnapshotManifest.RegionVisitor</a>&nbsp;visitor)</code>&nbsp;</td>
+</tr>
 <tr class="altColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><span class="typeNameLabel">RestoreSnapshotHelper.RestoreMetaChanges.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.RestoreMetaChanges.html#addRegionToRemove-org.apache.hadoop.hbase.HRegionInfo-">addRegionToRemove</a></span>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;hri)</code>&nbsp;</td>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/org/apache/hadoop/hbase/classification/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/classification/package-tree.html b/devapidocs/org/apache/hadoop/hbase/classification/package-tree.html
index 69c34d5..4959a61 100644
--- a/devapidocs/org/apache/hadoop/hbase/classification/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/classification/package-tree.html
@@ -89,11 +89,11 @@
 <h2 title="Annotation Type Hierarchy">Annotation Type Hierarchy</h2>
 <ul>
 <li type="circle">org.apache.hadoop.hbase.classification.<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceStability.Evolving.html" title="annotation in org.apache.hadoop.hbase.classification"><span class="typeNameLink">InterfaceStability.Evolving</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
-<li type="circle">org.apache.hadoop.hbase.classification.<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceStability.Unstable.html" title="annotation in org.apache.hadoop.hbase.classification"><span class="typeNameLink">InterfaceStability.Unstable</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.apache.hadoop.hbase.classification.<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceStability.Stable.html" title="annotation in org.apache.hadoop.hbase.classification"><span class="typeNameLink">InterfaceStability.Stable</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.classification.<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.LimitedPrivate.html" title="annotation in org.apache.hadoop.hbase.classification"><span class="typeNameLink">InterfaceAudience.LimitedPrivate</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
-<li type="circle">org.apache.hadoop.hbase.classification.<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Public.html" title="annotation in org.apache.hadoop.hbase.classification"><span class="typeNameLink">InterfaceAudience.Public</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.classification.<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification"><span class="typeNameLink">InterfaceAudience.Private</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
-<li type="circle">org.apache.hadoop.hbase.classification.<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceStability.Stable.html" title="annotation in org.apache.hadoop.hbase.classification"><span class="typeNameLink">InterfaceStability.Stable</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.apache.hadoop.hbase.classification.<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Public.html" title="annotation in org.apache.hadoop.hbase.classification"><span class="typeNameLink">InterfaceAudience.Public</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.apache.hadoop.hbase.classification.<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceStability.Unstable.html" title="annotation in org.apache.hadoop.hbase.classification"><span class="typeNameLink">InterfaceStability.Unstable</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
 </ul>
 </div>
 <!-- ======= START OF BOTTOM NAVBAR ====== -->

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
index 1653bcc..aad311e 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
@@ -538,25 +538,25 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.MoreResults.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">ScannerCallable.MoreResults</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Consistency</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AbstractResponse.ResponseType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AbstractResponse.ResponseType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.ReplicationState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">HBaseAdmin.ReplicationState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactionState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Durability</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">SnapshotType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RegionLocateType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RegionLocateType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RequestController.ReturnCode.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RequestController.ReturnCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Scan.ReadType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">IsolationLevel</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MasterSwitchType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TableState.State.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">TableState.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Scan.ReadType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncRequestFutureImpl.Retry.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncRequestFutureImpl.Retry</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AbstractResponse.ResponseType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AbstractResponse.ResponseType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Consistency</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Durability</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactionState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcessTask.SubmittedRows.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncProcessTask.SubmittedRows</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MobCompactPartitionPolicy.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MobCompactPartitionPolicy</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TableState.State.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">TableState.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MasterSwitchType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RequestController.ReturnCode.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RequestController.ReturnCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MobCompactPartitionPolicy.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MobCompactPartitionPolicy</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.ReplicationState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">HBaseAdmin.ReplicationState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.MoreResults.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">ScannerCallable.MoreResults</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/org/apache/hadoop/hbase/errorhandling/class-use/ForeignExceptionDispatcher.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/errorhandling/class-use/ForeignExceptionDispatcher.html b/devapidocs/org/apache/hadoop/hbase/errorhandling/class-use/ForeignExceptionDispatcher.html
index 3d85028..15344fa 100644
--- a/devapidocs/org/apache/hadoop/hbase/errorhandling/class-use/ForeignExceptionDispatcher.html
+++ b/devapidocs/org/apache/hadoop/hbase/errorhandling/class-use/ForeignExceptionDispatcher.html
@@ -279,6 +279,19 @@
 <!--   -->
 </a>
 <h3>Uses of <a href="../../../../../../org/apache/hadoop/hbase/errorhandling/ForeignExceptionDispatcher.html" title="class in org.apache.hadoop.hbase.errorhandling">ForeignExceptionDispatcher</a> in <a href="../../../../../../org/apache/hadoop/hbase/regionserver/snapshot/package-summary.html">org.apache.hadoop.hbase.regionserver.snapshot</a></h3>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
+<caption><span>Fields in <a href="../../../../../../org/apache/hadoop/hbase/regionserver/snapshot/package-summary.html">org.apache.hadoop.hbase.regionserver.snapshot</a> declared as <a href="../../../../../../org/apache/hadoop/hbase/errorhandling/ForeignExceptionDispatcher.html" title="class in org.apache.hadoop.hbase.errorhandling">ForeignExceptionDispatcher</a></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>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/errorhandling/ForeignExceptionDispatcher.html" title="class in org.apache.hadoop.hbase.errorhandling">ForeignExceptionDispatcher</a></code></td>
+<td class="colLast"><span class="typeNameLabel">FlushSnapshotSubprocedure.RegionSnapshotTask.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.RegionSnapshotTask.html#monitor">monitor</a></span></code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
 <table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing constructors, and an explanation">
 <caption><span>Constructors in <a href="../../../../../../org/apache/hadoop/hbase/regionserver/snapshot/package-summary.html">org.apache.hadoop.hbase.regionserver.snapshot</a> with parameters of type <a href="../../../../../../org/apache/hadoop/hbase/errorhandling/ForeignExceptionDispatcher.html" title="class in org.apache.hadoop.hbase.errorhandling">ForeignExceptionDispatcher</a></span><span class="tabEnd">&nbsp;</span></caption>
 <tr>
@@ -294,6 +307,12 @@
                          org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription&nbsp;snapshot,
                          <a href="../../../../../../org/apache/hadoop/hbase/regionserver/snapshot/RegionServerSnapshotManager.SnapshotSubprocedurePool.html" title="class in org.apache.hadoop.hbase.regionserver.snapshot">RegionServerSnapshotManager.SnapshotSubprocedurePool</a>&nbsp;taskManager)</code>&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.RegionSnapshotTask.html#RegionSnapshotTask-org.apache.hadoop.hbase.regionserver.Region-org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription-boolean-org.apache.hadoop.hbase.errorhandling.ForeignExceptionDispatcher-">RegionSnapshotTask</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region,
+                  org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription&nbsp;snapshotDesc,
+                  boolean&nbsp;skipFlush,
+                  <a href="../../../../../../org/apache/hadoop/hbase/errorhandling/ForeignExceptionDispatcher.html" title="class in org.apache.hadoop.hbase.errorhandling">ForeignExceptionDispatcher</a>&nbsp;monitor)</code>&nbsp;</td>
+</tr>
 </tbody>
 </table>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html b/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
index bbf68db..5bdab95 100644
--- a/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
@@ -104,8 +104,8 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.executor.<a href="../../../../../org/apache/hadoop/hbase/executor/EventType.html" title="enum in org.apache.hadoop.hbase.executor"><span class="typeNameLink">EventType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.executor.<a href="../../../../../org/apache/hadoop/hbase/executor/ExecutorType.html" title="enum in org.apache.hadoop.hbase.executor"><span class="typeNameLink">ExecutorType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.executor.<a href="../../../../../org/apache/hadoop/hbase/executor/EventType.html" title="enum in org.apache.hadoop.hbase.executor"><span class="typeNameLink">EventType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
index 0f94477..d592614 100644
--- a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
@@ -175,14 +175,14 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/BitComparator.BitwiseOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">BitComparator.BitwiseOp</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/RegexStringComparator.EngineType.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">RegexStringComparator.EngineType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.SatisfiesCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.SatisfiesCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterWrapper.FilterRowRetCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterWrapper.FilterRowRetCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterList.Operator.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterList.Operator</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/RegexStringComparator.EngineType.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">RegexStringComparator.EngineType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.Order.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.Order</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/CompareFilter.CompareOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">CompareFilter.CompareOp</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/BitComparator.BitwiseOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">BitComparator.BitwiseOp</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.ReturnCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">Filter.ReturnCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.SatisfiesCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.SatisfiesCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.Order.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.Order</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
index d73c348..d126181 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -273,12 +273,12 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockPriority.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockPriority</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.MemoryType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">Cacheable.MemoryType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.Writer.State.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">HFileBlock.Writer.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.ExternalBlockCaches.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">CacheConfig.ExternalBlockCaches</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType.BlockCategory</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.ExternalBlockCaches.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">CacheConfig.ExternalBlockCaches</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.Writer.State.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">HFileBlock.Writer.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockPriority.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockPriority</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html b/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
index 08990df..6db317d 100644
--- a/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
@@ -341,9 +341,9 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/CallEvent.Type.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">CallEvent.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/BufferCallBeforeInitHandler.BufferCallAction.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">BufferCallBeforeInitHandler.BufferCallAction</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerSourceFactoryImpl.SourceStorage.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">MetricsHBaseServerSourceFactoryImpl.SourceStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/CallEvent.Type.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">CallEvent.Type</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
index 94a7aeb..3dcc943 100644
--- a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
@@ -284,10 +284,10 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/CellCounter.CellCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">CellCounter.CellCounterMapper.Counters</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSplit.Version.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">TableSplit.Version</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/SyncTable.SyncMapper.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">SyncTable.SyncMapper.Counter</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">RowCounter.RowCounterMapper.Counters</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/CellCounter.CellCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">CellCounter.CellCounterMapper.Counters</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
index e458be7..c73f25f 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
@@ -197,8 +197,8 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BaseLoadBalancer.Cluster.Action.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BaseLoadBalancer.Cluster.LocalityType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BaseLoadBalancer.Cluster.Action.Type</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
index a31b14c..9b1d336 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
@@ -312,11 +312,11 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetricsMasterSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetricsMasterSourceFactoryImpl.FactoryStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServices.BalanceSwitchMode.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MasterRpcServices.BalanceSwitchMode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.ResubmitDirective.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.ResubmitDirective</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">RegionState.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.TerminationStatus.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.TerminationStatus</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServices.BalanceSwitchMode.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MasterRpcServices.BalanceSwitchMode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetricsMasterSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetricsMasterSourceFactoryImpl.FactoryStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">RegionState.State</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
index 3316cc9..0377dbe 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
@@ -211,8 +211,8 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/DisableTableProcedure.MarkRegionOfflineOpResult.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">DisableTableProcedure.MarkRegionOfflineOpResult</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">TableProcedureInterface.TableOperationType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/DisableTableProcedure.MarkRegionOfflineOpResult.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">DisableTableProcedure.MarkRegionOfflineOpResult</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.ServerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">ServerProcedureInterface.ServerOperationType</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/org/apache/hadoop/hbase/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/package-tree.html b/devapidocs/org/apache/hadoop/hbase/package-tree.html
index 950afcd..3d3cba5 100644
--- a/devapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -422,14 +422,14 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompatibilitySingletonFactory.SingletonStorage.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompatibilitySingletonFactory.SingletonStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MemoryCompactionPolicy.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MemoryCompactionPolicy</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeepDeletedCells.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeepDeletedCells</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MetaTableAccessor.QueryType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HConstants.Modify.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HConstants.Modify</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Coprocessor.State.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Coprocessor.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HConstants.OperationStatusCode.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HConstants.OperationStatusCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HConstants.Modify.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HConstants.Modify</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompatibilitySingletonFactory.SingletonStorage.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompatibilitySingletonFactory.SingletonStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MetaTableAccessor.QueryType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MemoryCompactionPolicy.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MemoryCompactionPolicy</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeyValue.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeyValue.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HConstants.OperationStatusCode.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HConstants.OperationStatusCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HealthChecker.HealthCheckerExitStatus.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HealthChecker.HealthCheckerExitStatus</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ProcedureState.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ProcedureState</span></a></li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
index 9e17275..bca0352 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -201,10 +201,10 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Procedure.LockState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockInfo.ResourceType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockInfo.ResourceType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">RootProcedureState.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockInfo.LockType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockInfo.LockType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Procedure.LockState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">RootProcedureState.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">StateMachineProcedure.Flow</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
index a020011..3930b2e 100644
--- a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
@@ -201,13 +201,13 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottleType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaScope.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaScope</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceViolationPolicy.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">SpaceViolationPolicy</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.OperationType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">OperationQuota.OperationType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottlingException.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceViolationPolicy.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">SpaceViolationPolicy</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaSnapshotStore.ViolationState.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaSnapshotStore.ViolationState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottlingException.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottleType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaScope.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaScope</span></a></li>
 </ul>
 </li>
 </ul>


[06/33] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/Region.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/Region.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/Region.html
index b361c26..53efdb2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/Region.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/Region.html
@@ -255,7 +255,7 @@
 <span class="sourceLineNo">247</span>   */<a name="line.247"></a>
 <span class="sourceLineNo">248</span>  enum Operation {<a name="line.248"></a>
 <span class="sourceLineNo">249</span>    ANY, GET, PUT, DELETE, SCAN, APPEND, INCREMENT, SPLIT_REGION, MERGE_REGION, BATCH_MUTATE,<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    REPLAY_BATCH_MUTATE, COMPACT_REGION, REPLAY_EVENT<a name="line.250"></a>
+<span class="sourceLineNo">250</span>    REPLAY_BATCH_MUTATE, COMPACT_REGION, REPLAY_EVENT, SNAPSHOT<a name="line.250"></a>
 <span class="sourceLineNo">251</span>  }<a name="line.251"></a>
 <span class="sourceLineNo">252</span><a name="line.252"></a>
 <span class="sourceLineNo">253</span>  /**<a name="line.253"></a>
@@ -285,487 +285,494 @@
 <span class="sourceLineNo">277</span>   */<a name="line.277"></a>
 <span class="sourceLineNo">278</span>  void closeRegionOperation() throws IOException;<a name="line.278"></a>
 <span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span>  // Row write locks<a name="line.280"></a>
-<span class="sourceLineNo">281</span><a name="line.281"></a>
-<span class="sourceLineNo">282</span>  /**<a name="line.282"></a>
-<span class="sourceLineNo">283</span>   * Row lock held by a given thread.<a name="line.283"></a>
-<span class="sourceLineNo">284</span>   * One thread may acquire multiple locks on the same row simultaneously.<a name="line.284"></a>
-<span class="sourceLineNo">285</span>   * The locks must be released by calling release() from the same thread.<a name="line.285"></a>
-<span class="sourceLineNo">286</span>   */<a name="line.286"></a>
-<span class="sourceLineNo">287</span>  public interface RowLock {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    /**<a name="line.288"></a>
-<span class="sourceLineNo">289</span>     * Release the given lock.  If there are no remaining locks held by the current thread<a name="line.289"></a>
-<span class="sourceLineNo">290</span>     * then unlock the row and allow other threads to acquire the lock.<a name="line.290"></a>
-<span class="sourceLineNo">291</span>     * @throws IllegalArgumentException if called by a different thread than the lock owning<a name="line.291"></a>
-<span class="sourceLineNo">292</span>     *     thread<a name="line.292"></a>
-<span class="sourceLineNo">293</span>     */<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    void release();<a name="line.294"></a>
-<span class="sourceLineNo">295</span>  }<a name="line.295"></a>
-<span class="sourceLineNo">296</span><a name="line.296"></a>
-<span class="sourceLineNo">297</span>  /**<a name="line.297"></a>
-<span class="sourceLineNo">298</span>   *<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   * Get a row lock for the specified row. All locks are reentrant.<a name="line.299"></a>
-<span class="sourceLineNo">300</span>   *<a name="line.300"></a>
-<span class="sourceLineNo">301</span>   * Before calling this function make sure that a region operation has already been<a name="line.301"></a>
-<span class="sourceLineNo">302</span>   * started (the calling thread has already acquired the region-close-guard lock).<a name="line.302"></a>
-<span class="sourceLineNo">303</span>   * <a name="line.303"></a>
-<span class="sourceLineNo">304</span>   * NOTE: the boolean passed here has changed. It used to be a boolean that<a name="line.304"></a>
-<span class="sourceLineNo">305</span>   * stated whether or not to wait on the lock. Now it is whether it an exclusive<a name="line.305"></a>
-<span class="sourceLineNo">306</span>   * lock is requested.<a name="line.306"></a>
-<span class="sourceLineNo">307</span>   * <a name="line.307"></a>
-<span class="sourceLineNo">308</span>   * @param row The row actions will be performed against<a name="line.308"></a>
-<span class="sourceLineNo">309</span>   * @param readLock is the lock reader or writer. True indicates that a non-exclusive<a name="line.309"></a>
-<span class="sourceLineNo">310</span>   * lock is requested<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   * @see #startRegionOperation()<a name="line.311"></a>
-<span class="sourceLineNo">312</span>   * @see #startRegionOperation(Operation)<a name="line.312"></a>
-<span class="sourceLineNo">313</span>   */<a name="line.313"></a>
-<span class="sourceLineNo">314</span>  RowLock getRowLock(byte[] row, boolean readLock) throws IOException;<a name="line.314"></a>
-<span class="sourceLineNo">315</span><a name="line.315"></a>
-<span class="sourceLineNo">316</span>  /**<a name="line.316"></a>
-<span class="sourceLineNo">317</span>   * If the given list of row locks is not null, releases all locks.<a name="line.317"></a>
-<span class="sourceLineNo">318</span>   */<a name="line.318"></a>
-<span class="sourceLineNo">319</span>  void releaseRowLocks(List&lt;RowLock&gt; rowLocks);<a name="line.319"></a>
-<span class="sourceLineNo">320</span><a name="line.320"></a>
-<span class="sourceLineNo">321</span>  ///////////////////////////////////////////////////////////////////////////<a name="line.321"></a>
-<span class="sourceLineNo">322</span>  // Region operations<a name="line.322"></a>
-<span class="sourceLineNo">323</span><a name="line.323"></a>
-<span class="sourceLineNo">324</span>  /**<a name="line.324"></a>
-<span class="sourceLineNo">325</span>   * Perform one or more append operations on a row.<a name="line.325"></a>
-<span class="sourceLineNo">326</span>   * @param append<a name="line.326"></a>
-<span class="sourceLineNo">327</span>   * @param nonceGroup<a name="line.327"></a>
-<span class="sourceLineNo">328</span>   * @param nonce<a name="line.328"></a>
-<span class="sourceLineNo">329</span>   * @return result of the operation<a name="line.329"></a>
-<span class="sourceLineNo">330</span>   * @throws IOException<a name="line.330"></a>
-<span class="sourceLineNo">331</span>   */<a name="line.331"></a>
-<span class="sourceLineNo">332</span>  Result append(Append append, long nonceGroup, long nonce) throws IOException;<a name="line.332"></a>
-<span class="sourceLineNo">333</span><a name="line.333"></a>
-<span class="sourceLineNo">334</span>  /**<a name="line.334"></a>
-<span class="sourceLineNo">335</span>   * Perform a batch of mutations.<a name="line.335"></a>
-<span class="sourceLineNo">336</span>   * &lt;p&gt;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>   * Note this supports only Put and Delete mutations and will ignore other types passed.<a name="line.337"></a>
-<span class="sourceLineNo">338</span>   * @param mutations the list of mutations<a name="line.338"></a>
-<span class="sourceLineNo">339</span>   * @param nonceGroup<a name="line.339"></a>
-<span class="sourceLineNo">340</span>   * @param nonce<a name="line.340"></a>
-<span class="sourceLineNo">341</span>   * @return an array of OperationStatus which internally contains the<a name="line.341"></a>
-<span class="sourceLineNo">342</span>   *         OperationStatusCode and the exceptionMessage if any.<a name="line.342"></a>
-<span class="sourceLineNo">343</span>   * @throws IOException<a name="line.343"></a>
-<span class="sourceLineNo">344</span>   */<a name="line.344"></a>
-<span class="sourceLineNo">345</span>  OperationStatus[] batchMutate(Mutation[] mutations, long nonceGroup, long nonce)<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      throws IOException;<a name="line.346"></a>
-<span class="sourceLineNo">347</span><a name="line.347"></a>
-<span class="sourceLineNo">348</span>  /**<a name="line.348"></a>
-<span class="sourceLineNo">349</span>   * Replay a batch of mutations.<a name="line.349"></a>
-<span class="sourceLineNo">350</span>   * @param mutations mutations to replay.<a name="line.350"></a>
-<span class="sourceLineNo">351</span>   * @param replaySeqId<a name="line.351"></a>
-<span class="sourceLineNo">352</span>   * @return an array of OperationStatus which internally contains the<a name="line.352"></a>
-<span class="sourceLineNo">353</span>   *         OperationStatusCode and the exceptionMessage if any.<a name="line.353"></a>
-<span class="sourceLineNo">354</span>   * @throws IOException<a name="line.354"></a>
-<span class="sourceLineNo">355</span>   */<a name="line.355"></a>
-<span class="sourceLineNo">356</span>   OperationStatus[] batchReplay(MutationReplay[] mutations, long replaySeqId) throws IOException;<a name="line.356"></a>
-<span class="sourceLineNo">357</span><a name="line.357"></a>
-<span class="sourceLineNo">358</span>  /**<a name="line.358"></a>
-<span class="sourceLineNo">359</span>   * Atomically checks if a row/family/qualifier value matches the expected value and if it does,<a name="line.359"></a>
-<span class="sourceLineNo">360</span>   * it performs the mutation. If the passed value is null, the lack of column value<a name="line.360"></a>
-<span class="sourceLineNo">361</span>   * (ie: non-existence) is used. See checkAndRowMutate to do many checkAndPuts at a time on a<a name="line.361"></a>
-<span class="sourceLineNo">362</span>   * single row.<a name="line.362"></a>
-<span class="sourceLineNo">363</span>   * @param row to check<a name="line.363"></a>
-<span class="sourceLineNo">364</span>   * @param family column family to check<a name="line.364"></a>
-<span class="sourceLineNo">365</span>   * @param qualifier column qualifier to check<a name="line.365"></a>
-<span class="sourceLineNo">366</span>   * @param compareOp the comparison operator<a name="line.366"></a>
-<span class="sourceLineNo">367</span>   * @param comparator<a name="line.367"></a>
-<span class="sourceLineNo">368</span>   * @param mutation<a name="line.368"></a>
-<span class="sourceLineNo">369</span>   * @param writeToWAL<a name="line.369"></a>
-<span class="sourceLineNo">370</span>   * @return true if mutation was applied, false otherwise<a name="line.370"></a>
-<span class="sourceLineNo">371</span>   * @throws IOException<a name="line.371"></a>
-<span class="sourceLineNo">372</span>   */<a name="line.372"></a>
-<span class="sourceLineNo">373</span>  boolean checkAndMutate(byte [] row, byte [] family, byte [] qualifier, CompareOp compareOp,<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      ByteArrayComparable comparator, Mutation mutation, boolean writeToWAL) throws IOException;<a name="line.374"></a>
-<span class="sourceLineNo">375</span><a name="line.375"></a>
-<span class="sourceLineNo">376</span>  /**<a name="line.376"></a>
-<span class="sourceLineNo">377</span>   * Atomically checks if a row/family/qualifier value matches the expected values and if it does,<a name="line.377"></a>
-<span class="sourceLineNo">378</span>   * it performs the row mutations. If the passed value is null, the lack of column value<a name="line.378"></a>
-<span class="sourceLineNo">379</span>   * (ie: non-existence) is used. Use to do many mutations on a single row. Use checkAndMutate<a name="line.379"></a>
-<span class="sourceLineNo">380</span>   * to do one checkAndMutate at a time.<a name="line.380"></a>
-<span class="sourceLineNo">381</span>   * @param row to check<a name="line.381"></a>
-<span class="sourceLineNo">382</span>   * @param family column family to check<a name="line.382"></a>
-<span class="sourceLineNo">383</span>   * @param qualifier column qualifier to check<a name="line.383"></a>
-<span class="sourceLineNo">384</span>   * @param compareOp the comparison operator<a name="line.384"></a>
-<span class="sourceLineNo">385</span>   * @param comparator<a name="line.385"></a>
-<span class="sourceLineNo">386</span>   * @param mutations<a name="line.386"></a>
-<span class="sourceLineNo">387</span>   * @param writeToWAL<a name="line.387"></a>
-<span class="sourceLineNo">388</span>   * @return true if mutations were applied, false otherwise<a name="line.388"></a>
-<span class="sourceLineNo">389</span>   * @throws IOException<a name="line.389"></a>
-<span class="sourceLineNo">390</span>   */<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  boolean checkAndRowMutate(byte [] row, byte [] family, byte [] qualifier, CompareOp compareOp,<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      ByteArrayComparable comparator, RowMutations mutations, boolean writeToWAL)<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      throws IOException;<a name="line.393"></a>
-<span class="sourceLineNo">394</span><a name="line.394"></a>
-<span class="sourceLineNo">395</span>  /**<a name="line.395"></a>
-<span class="sourceLineNo">396</span>   * Deletes the specified cells/row.<a name="line.396"></a>
-<span class="sourceLineNo">397</span>   * @param delete<a name="line.397"></a>
-<span class="sourceLineNo">398</span>   * @throws IOException<a name="line.398"></a>
-<span class="sourceLineNo">399</span>   */<a name="line.399"></a>
-<span class="sourceLineNo">400</span>  void delete(Delete delete) throws IOException;<a name="line.400"></a>
+<span class="sourceLineNo">280</span>  /**<a name="line.280"></a>
+<span class="sourceLineNo">281</span>   * Closes the region operation lock. This needs to be called in the finally block corresponding<a name="line.281"></a>
+<span class="sourceLineNo">282</span>   * to the try block of {@link #startRegionOperation(Operation)}<a name="line.282"></a>
+<span class="sourceLineNo">283</span>   * @throws IOException<a name="line.283"></a>
+<span class="sourceLineNo">284</span>   */<a name="line.284"></a>
+<span class="sourceLineNo">285</span>  void closeRegionOperation(Operation op) throws IOException;<a name="line.285"></a>
+<span class="sourceLineNo">286</span><a name="line.286"></a>
+<span class="sourceLineNo">287</span>  // Row write locks<a name="line.287"></a>
+<span class="sourceLineNo">288</span><a name="line.288"></a>
+<span class="sourceLineNo">289</span>  /**<a name="line.289"></a>
+<span class="sourceLineNo">290</span>   * Row lock held by a given thread.<a name="line.290"></a>
+<span class="sourceLineNo">291</span>   * One thread may acquire multiple locks on the same row simultaneously.<a name="line.291"></a>
+<span class="sourceLineNo">292</span>   * The locks must be released by calling release() from the same thread.<a name="line.292"></a>
+<span class="sourceLineNo">293</span>   */<a name="line.293"></a>
+<span class="sourceLineNo">294</span>  public interface RowLock {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    /**<a name="line.295"></a>
+<span class="sourceLineNo">296</span>     * Release the given lock.  If there are no remaining locks held by the current thread<a name="line.296"></a>
+<span class="sourceLineNo">297</span>     * then unlock the row and allow other threads to acquire the lock.<a name="line.297"></a>
+<span class="sourceLineNo">298</span>     * @throws IllegalArgumentException if called by a different thread than the lock owning<a name="line.298"></a>
+<span class="sourceLineNo">299</span>     *     thread<a name="line.299"></a>
+<span class="sourceLineNo">300</span>     */<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    void release();<a name="line.301"></a>
+<span class="sourceLineNo">302</span>  }<a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span>  /**<a name="line.304"></a>
+<span class="sourceLineNo">305</span>   *<a name="line.305"></a>
+<span class="sourceLineNo">306</span>   * Get a row lock for the specified row. All locks are reentrant.<a name="line.306"></a>
+<span class="sourceLineNo">307</span>   *<a name="line.307"></a>
+<span class="sourceLineNo">308</span>   * Before calling this function make sure that a region operation has already been<a name="line.308"></a>
+<span class="sourceLineNo">309</span>   * started (the calling thread has already acquired the region-close-guard lock).<a name="line.309"></a>
+<span class="sourceLineNo">310</span>   * <a name="line.310"></a>
+<span class="sourceLineNo">311</span>   * NOTE: the boolean passed here has changed. It used to be a boolean that<a name="line.311"></a>
+<span class="sourceLineNo">312</span>   * stated whether or not to wait on the lock. Now it is whether it an exclusive<a name="line.312"></a>
+<span class="sourceLineNo">313</span>   * lock is requested.<a name="line.313"></a>
+<span class="sourceLineNo">314</span>   * <a name="line.314"></a>
+<span class="sourceLineNo">315</span>   * @param row The row actions will be performed against<a name="line.315"></a>
+<span class="sourceLineNo">316</span>   * @param readLock is the lock reader or writer. True indicates that a non-exclusive<a name="line.316"></a>
+<span class="sourceLineNo">317</span>   * lock is requested<a name="line.317"></a>
+<span class="sourceLineNo">318</span>   * @see #startRegionOperation()<a name="line.318"></a>
+<span class="sourceLineNo">319</span>   * @see #startRegionOperation(Operation)<a name="line.319"></a>
+<span class="sourceLineNo">320</span>   */<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  RowLock getRowLock(byte[] row, boolean readLock) throws IOException;<a name="line.321"></a>
+<span class="sourceLineNo">322</span><a name="line.322"></a>
+<span class="sourceLineNo">323</span>  /**<a name="line.323"></a>
+<span class="sourceLineNo">324</span>   * If the given list of row locks is not null, releases all locks.<a name="line.324"></a>
+<span class="sourceLineNo">325</span>   */<a name="line.325"></a>
+<span class="sourceLineNo">326</span>  void releaseRowLocks(List&lt;RowLock&gt; rowLocks);<a name="line.326"></a>
+<span class="sourceLineNo">327</span><a name="line.327"></a>
+<span class="sourceLineNo">328</span>  ///////////////////////////////////////////////////////////////////////////<a name="line.328"></a>
+<span class="sourceLineNo">329</span>  // Region operations<a name="line.329"></a>
+<span class="sourceLineNo">330</span><a name="line.330"></a>
+<span class="sourceLineNo">331</span>  /**<a name="line.331"></a>
+<span class="sourceLineNo">332</span>   * Perform one or more append operations on a row.<a name="line.332"></a>
+<span class="sourceLineNo">333</span>   * @param append<a name="line.333"></a>
+<span class="sourceLineNo">334</span>   * @param nonceGroup<a name="line.334"></a>
+<span class="sourceLineNo">335</span>   * @param nonce<a name="line.335"></a>
+<span class="sourceLineNo">336</span>   * @return result of the operation<a name="line.336"></a>
+<span class="sourceLineNo">337</span>   * @throws IOException<a name="line.337"></a>
+<span class="sourceLineNo">338</span>   */<a name="line.338"></a>
+<span class="sourceLineNo">339</span>  Result append(Append append, long nonceGroup, long nonce) throws IOException;<a name="line.339"></a>
+<span class="sourceLineNo">340</span><a name="line.340"></a>
+<span class="sourceLineNo">341</span>  /**<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   * Perform a batch of mutations.<a name="line.342"></a>
+<span class="sourceLineNo">343</span>   * &lt;p&gt;<a name="line.343"></a>
+<span class="sourceLineNo">344</span>   * Note this supports only Put and Delete mutations and will ignore other types passed.<a name="line.344"></a>
+<span class="sourceLineNo">345</span>   * @param mutations the list of mutations<a name="line.345"></a>
+<span class="sourceLineNo">346</span>   * @param nonceGroup<a name="line.346"></a>
+<span class="sourceLineNo">347</span>   * @param nonce<a name="line.347"></a>
+<span class="sourceLineNo">348</span>   * @return an array of OperationStatus which internally contains the<a name="line.348"></a>
+<span class="sourceLineNo">349</span>   *         OperationStatusCode and the exceptionMessage if any.<a name="line.349"></a>
+<span class="sourceLineNo">350</span>   * @throws IOException<a name="line.350"></a>
+<span class="sourceLineNo">351</span>   */<a name="line.351"></a>
+<span class="sourceLineNo">352</span>  OperationStatus[] batchMutate(Mutation[] mutations, long nonceGroup, long nonce)<a name="line.352"></a>
+<span class="sourceLineNo">353</span>      throws IOException;<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>  /**<a name="line.355"></a>
+<span class="sourceLineNo">356</span>   * Replay a batch of mutations.<a name="line.356"></a>
+<span class="sourceLineNo">357</span>   * @param mutations mutations to replay.<a name="line.357"></a>
+<span class="sourceLineNo">358</span>   * @param replaySeqId<a name="line.358"></a>
+<span class="sourceLineNo">359</span>   * @return an array of OperationStatus which internally contains the<a name="line.359"></a>
+<span class="sourceLineNo">360</span>   *         OperationStatusCode and the exceptionMessage if any.<a name="line.360"></a>
+<span class="sourceLineNo">361</span>   * @throws IOException<a name="line.361"></a>
+<span class="sourceLineNo">362</span>   */<a name="line.362"></a>
+<span class="sourceLineNo">363</span>   OperationStatus[] batchReplay(MutationReplay[] mutations, long replaySeqId) throws IOException;<a name="line.363"></a>
+<span class="sourceLineNo">364</span><a name="line.364"></a>
+<span class="sourceLineNo">365</span>  /**<a name="line.365"></a>
+<span class="sourceLineNo">366</span>   * Atomically checks if a row/family/qualifier value matches the expected value and if it does,<a name="line.366"></a>
+<span class="sourceLineNo">367</span>   * it performs the mutation. If the passed value is null, the lack of column value<a name="line.367"></a>
+<span class="sourceLineNo">368</span>   * (ie: non-existence) is used. See checkAndRowMutate to do many checkAndPuts at a time on a<a name="line.368"></a>
+<span class="sourceLineNo">369</span>   * single row.<a name="line.369"></a>
+<span class="sourceLineNo">370</span>   * @param row to check<a name="line.370"></a>
+<span class="sourceLineNo">371</span>   * @param family column family to check<a name="line.371"></a>
+<span class="sourceLineNo">372</span>   * @param qualifier column qualifier to check<a name="line.372"></a>
+<span class="sourceLineNo">373</span>   * @param compareOp the comparison operator<a name="line.373"></a>
+<span class="sourceLineNo">374</span>   * @param comparator<a name="line.374"></a>
+<span class="sourceLineNo">375</span>   * @param mutation<a name="line.375"></a>
+<span class="sourceLineNo">376</span>   * @param writeToWAL<a name="line.376"></a>
+<span class="sourceLineNo">377</span>   * @return true if mutation was applied, false otherwise<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   * @throws IOException<a name="line.378"></a>
+<span class="sourceLineNo">379</span>   */<a name="line.379"></a>
+<span class="sourceLineNo">380</span>  boolean checkAndMutate(byte [] row, byte [] family, byte [] qualifier, CompareOp compareOp,<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      ByteArrayComparable comparator, Mutation mutation, boolean writeToWAL) throws IOException;<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span>  /**<a name="line.383"></a>
+<span class="sourceLineNo">384</span>   * Atomically checks if a row/family/qualifier value matches the expected values and if it does,<a name="line.384"></a>
+<span class="sourceLineNo">385</span>   * it performs the row mutations. If the passed value is null, the lack of column value<a name="line.385"></a>
+<span class="sourceLineNo">386</span>   * (ie: non-existence) is used. Use to do many mutations on a single row. Use checkAndMutate<a name="line.386"></a>
+<span class="sourceLineNo">387</span>   * to do one checkAndMutate at a time.<a name="line.387"></a>
+<span class="sourceLineNo">388</span>   * @param row to check<a name="line.388"></a>
+<span class="sourceLineNo">389</span>   * @param family column family to check<a name="line.389"></a>
+<span class="sourceLineNo">390</span>   * @param qualifier column qualifier to check<a name="line.390"></a>
+<span class="sourceLineNo">391</span>   * @param compareOp the comparison operator<a name="line.391"></a>
+<span class="sourceLineNo">392</span>   * @param comparator<a name="line.392"></a>
+<span class="sourceLineNo">393</span>   * @param mutations<a name="line.393"></a>
+<span class="sourceLineNo">394</span>   * @param writeToWAL<a name="line.394"></a>
+<span class="sourceLineNo">395</span>   * @return true if mutations were applied, false otherwise<a name="line.395"></a>
+<span class="sourceLineNo">396</span>   * @throws IOException<a name="line.396"></a>
+<span class="sourceLineNo">397</span>   */<a name="line.397"></a>
+<span class="sourceLineNo">398</span>  boolean checkAndRowMutate(byte [] row, byte [] family, byte [] qualifier, CompareOp compareOp,<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      ByteArrayComparable comparator, RowMutations mutations, boolean writeToWAL)<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      throws IOException;<a name="line.400"></a>
 <span class="sourceLineNo">401</span><a name="line.401"></a>
 <span class="sourceLineNo">402</span>  /**<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   * Do a get based on the get parameter.<a name="line.403"></a>
-<span class="sourceLineNo">404</span>   * @param get query parameters<a name="line.404"></a>
-<span class="sourceLineNo">405</span>   * @return result of the operation<a name="line.405"></a>
+<span class="sourceLineNo">403</span>   * Deletes the specified cells/row.<a name="line.403"></a>
+<span class="sourceLineNo">404</span>   * @param delete<a name="line.404"></a>
+<span class="sourceLineNo">405</span>   * @throws IOException<a name="line.405"></a>
 <span class="sourceLineNo">406</span>   */<a name="line.406"></a>
-<span class="sourceLineNo">407</span>  Result get(Get get) throws IOException;<a name="line.407"></a>
+<span class="sourceLineNo">407</span>  void delete(Delete delete) throws IOException;<a name="line.407"></a>
 <span class="sourceLineNo">408</span><a name="line.408"></a>
 <span class="sourceLineNo">409</span>  /**<a name="line.409"></a>
 <span class="sourceLineNo">410</span>   * Do a get based on the get parameter.<a name="line.410"></a>
 <span class="sourceLineNo">411</span>   * @param get query parameters<a name="line.411"></a>
-<span class="sourceLineNo">412</span>   * @param withCoprocessor invoke coprocessor or not. We don't want to<a name="line.412"></a>
-<span class="sourceLineNo">413</span>   * always invoke cp.<a name="line.413"></a>
-<span class="sourceLineNo">414</span>   * @return list of cells resulting from the operation<a name="line.414"></a>
-<span class="sourceLineNo">415</span>   */<a name="line.415"></a>
-<span class="sourceLineNo">416</span>  List&lt;Cell&gt; get(Get get, boolean withCoprocessor) throws IOException;<a name="line.416"></a>
-<span class="sourceLineNo">417</span><a name="line.417"></a>
-<span class="sourceLineNo">418</span>  /**<a name="line.418"></a>
-<span class="sourceLineNo">419</span>   * Do a get for duplicate non-idempotent operation.<a name="line.419"></a>
-<span class="sourceLineNo">420</span>   * @param get query parameters.<a name="line.420"></a>
-<span class="sourceLineNo">421</span>   * @param withCoprocessor<a name="line.421"></a>
-<span class="sourceLineNo">422</span>   * @param nonceGroup Nonce group.<a name="line.422"></a>
-<span class="sourceLineNo">423</span>   * @param nonce Nonce.<a name="line.423"></a>
-<span class="sourceLineNo">424</span>   * @return list of cells resulting from the operation<a name="line.424"></a>
-<span class="sourceLineNo">425</span>   * @throws IOException<a name="line.425"></a>
-<span class="sourceLineNo">426</span>   */<a name="line.426"></a>
-<span class="sourceLineNo">427</span>  List&lt;Cell&gt; get(Get get, boolean withCoprocessor, long nonceGroup, long nonce) throws IOException;<a name="line.427"></a>
-<span class="sourceLineNo">428</span><a name="line.428"></a>
-<span class="sourceLineNo">429</span>  /**<a name="line.429"></a>
-<span class="sourceLineNo">430</span>   * Return an iterator that scans over the HRegion, returning the indicated<a name="line.430"></a>
-<span class="sourceLineNo">431</span>   * columns and rows specified by the {@link Scan}.<a name="line.431"></a>
-<span class="sourceLineNo">432</span>   * &lt;p&gt;<a name="line.432"></a>
-<span class="sourceLineNo">433</span>   * This Iterator must be closed by the caller.<a name="line.433"></a>
-<span class="sourceLineNo">434</span>   *<a name="line.434"></a>
-<span class="sourceLineNo">435</span>   * @param scan configured {@link Scan}<a name="line.435"></a>
-<span class="sourceLineNo">436</span>   * @return RegionScanner<a name="line.436"></a>
-<span class="sourceLineNo">437</span>   * @throws IOException read exceptions<a name="line.437"></a>
-<span class="sourceLineNo">438</span>   */<a name="line.438"></a>
-<span class="sourceLineNo">439</span>  RegionScanner getScanner(Scan scan) throws IOException;<a name="line.439"></a>
-<span class="sourceLineNo">440</span><a name="line.440"></a>
-<span class="sourceLineNo">441</span>  /**<a name="line.441"></a>
-<span class="sourceLineNo">442</span>   * Return an iterator that scans over the HRegion, returning the indicated columns and rows<a name="line.442"></a>
-<span class="sourceLineNo">443</span>   * specified by the {@link Scan}. The scanner will also include the additional scanners passed<a name="line.443"></a>
-<span class="sourceLineNo">444</span>   * along with the scanners for the specified Scan instance. Should be careful with the usage to<a name="line.444"></a>
-<span class="sourceLineNo">445</span>   * pass additional scanners only within this Region<a name="line.445"></a>
-<span class="sourceLineNo">446</span>   * &lt;p&gt;<a name="line.446"></a>
-<span class="sourceLineNo">447</span>   * This Iterator must be closed by the caller.<a name="line.447"></a>
-<span class="sourceLineNo">448</span>   *<a name="line.448"></a>
-<span class="sourceLineNo">449</span>   * @param scan configured {@link Scan}<a name="line.449"></a>
-<span class="sourceLineNo">450</span>   * @param additionalScanners Any additional scanners to be used<a name="line.450"></a>
-<span class="sourceLineNo">451</span>   * @return RegionScanner<a name="line.451"></a>
-<span class="sourceLineNo">452</span>   * @throws IOException read exceptions<a name="line.452"></a>
-<span class="sourceLineNo">453</span>   */<a name="line.453"></a>
-<span class="sourceLineNo">454</span>  RegionScanner getScanner(Scan scan, List&lt;KeyValueScanner&gt; additionalScanners) throws IOException;<a name="line.454"></a>
-<span class="sourceLineNo">455</span><a name="line.455"></a>
-<span class="sourceLineNo">456</span>  /** The comparator to be used with the region */<a name="line.456"></a>
-<span class="sourceLineNo">457</span>  CellComparator getCellComparator();<a name="line.457"></a>
-<span class="sourceLineNo">458</span><a name="line.458"></a>
-<span class="sourceLineNo">459</span>  /**<a name="line.459"></a>
-<span class="sourceLineNo">460</span>   * Perform one or more increment operations on a row.<a name="line.460"></a>
-<span class="sourceLineNo">461</span>   * @param increment<a name="line.461"></a>
-<span class="sourceLineNo">462</span>   * @param nonceGroup<a name="line.462"></a>
-<span class="sourceLineNo">463</span>   * @param nonce<a name="line.463"></a>
-<span class="sourceLineNo">464</span>   * @return result of the operation<a name="line.464"></a>
-<span class="sourceLineNo">465</span>   * @throws IOException<a name="line.465"></a>
-<span class="sourceLineNo">466</span>   */<a name="line.466"></a>
-<span class="sourceLineNo">467</span>  Result increment(Increment increment, long nonceGroup, long nonce) throws IOException;<a name="line.467"></a>
-<span class="sourceLineNo">468</span><a name="line.468"></a>
-<span class="sourceLineNo">469</span>  /**<a name="line.469"></a>
-<span class="sourceLineNo">470</span>   * Performs multiple mutations atomically on a single row. Currently<a name="line.470"></a>
-<span class="sourceLineNo">471</span>   * {@link Put} and {@link Delete} are supported.<a name="line.471"></a>
-<span class="sourceLineNo">472</span>   *<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   * @param mutations object that specifies the set of mutations to perform atomically<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   * @throws IOException<a name="line.474"></a>
-<span class="sourceLineNo">475</span>   */<a name="line.475"></a>
-<span class="sourceLineNo">476</span>  void mutateRow(RowMutations mutations) throws IOException;<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>  /**<a name="line.478"></a>
-<span class="sourceLineNo">479</span>   * Perform atomic mutations within the region.<a name="line.479"></a>
-<span class="sourceLineNo">480</span>   *<a name="line.480"></a>
-<span class="sourceLineNo">481</span>   * @param mutations The list of mutations to perform.<a name="line.481"></a>
-<span class="sourceLineNo">482</span>   * &lt;code&gt;mutations&lt;/code&gt; can contain operations for multiple rows.<a name="line.482"></a>
-<span class="sourceLineNo">483</span>   * Caller has to ensure that all rows are contained in this region.<a name="line.483"></a>
-<span class="sourceLineNo">484</span>   * @param rowsToLock Rows to lock<a name="line.484"></a>
-<span class="sourceLineNo">485</span>   * @param nonceGroup Optional nonce group of the operation (client Id)<a name="line.485"></a>
-<span class="sourceLineNo">486</span>   * @param nonce Optional nonce of the operation (unique random id to ensure "more idempotence")<a name="line.486"></a>
-<span class="sourceLineNo">487</span>   * If multiple rows are locked care should be taken that<a name="line.487"></a>
-<span class="sourceLineNo">488</span>   * &lt;code&gt;rowsToLock&lt;/code&gt; is sorted in order to avoid deadlocks.<a name="line.488"></a>
-<span class="sourceLineNo">489</span>   * @throws IOException<a name="line.489"></a>
-<span class="sourceLineNo">490</span>   */<a name="line.490"></a>
-<span class="sourceLineNo">491</span>  void mutateRowsWithLocks(Collection&lt;Mutation&gt; mutations, Collection&lt;byte[]&gt; rowsToLock,<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      long nonceGroup, long nonce) throws IOException;<a name="line.492"></a>
-<span class="sourceLineNo">493</span><a name="line.493"></a>
-<span class="sourceLineNo">494</span>  /**<a name="line.494"></a>
-<span class="sourceLineNo">495</span>   * Performs atomic multiple reads and writes on a given row.<a name="line.495"></a>
-<span class="sourceLineNo">496</span>   *<a name="line.496"></a>
-<span class="sourceLineNo">497</span>   * @param processor The object defines the reads and writes to a row.<a name="line.497"></a>
-<span class="sourceLineNo">498</span>   */<a name="line.498"></a>
-<span class="sourceLineNo">499</span>  void processRowsWithLocks(RowProcessor&lt;?,?&gt; processor) throws IOException;<a name="line.499"></a>
+<span class="sourceLineNo">412</span>   * @return result of the operation<a name="line.412"></a>
+<span class="sourceLineNo">413</span>   */<a name="line.413"></a>
+<span class="sourceLineNo">414</span>  Result get(Get get) throws IOException;<a name="line.414"></a>
+<span class="sourceLineNo">415</span><a name="line.415"></a>
+<span class="sourceLineNo">416</span>  /**<a name="line.416"></a>
+<span class="sourceLineNo">417</span>   * Do a get based on the get parameter.<a name="line.417"></a>
+<span class="sourceLineNo">418</span>   * @param get query parameters<a name="line.418"></a>
+<span class="sourceLineNo">419</span>   * @param withCoprocessor invoke coprocessor or not. We don't want to<a name="line.419"></a>
+<span class="sourceLineNo">420</span>   * always invoke cp.<a name="line.420"></a>
+<span class="sourceLineNo">421</span>   * @return list of cells resulting from the operation<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   */<a name="line.422"></a>
+<span class="sourceLineNo">423</span>  List&lt;Cell&gt; get(Get get, boolean withCoprocessor) throws IOException;<a name="line.423"></a>
+<span class="sourceLineNo">424</span><a name="line.424"></a>
+<span class="sourceLineNo">425</span>  /**<a name="line.425"></a>
+<span class="sourceLineNo">426</span>   * Do a get for duplicate non-idempotent operation.<a name="line.426"></a>
+<span class="sourceLineNo">427</span>   * @param get query parameters.<a name="line.427"></a>
+<span class="sourceLineNo">428</span>   * @param withCoprocessor<a name="line.428"></a>
+<span class="sourceLineNo">429</span>   * @param nonceGroup Nonce group.<a name="line.429"></a>
+<span class="sourceLineNo">430</span>   * @param nonce Nonce.<a name="line.430"></a>
+<span class="sourceLineNo">431</span>   * @return list of cells resulting from the operation<a name="line.431"></a>
+<span class="sourceLineNo">432</span>   * @throws IOException<a name="line.432"></a>
+<span class="sourceLineNo">433</span>   */<a name="line.433"></a>
+<span class="sourceLineNo">434</span>  List&lt;Cell&gt; get(Get get, boolean withCoprocessor, long nonceGroup, long nonce) throws IOException;<a name="line.434"></a>
+<span class="sourceLineNo">435</span><a name="line.435"></a>
+<span class="sourceLineNo">436</span>  /**<a name="line.436"></a>
+<span class="sourceLineNo">437</span>   * Return an iterator that scans over the HRegion, returning the indicated<a name="line.437"></a>
+<span class="sourceLineNo">438</span>   * columns and rows specified by the {@link Scan}.<a name="line.438"></a>
+<span class="sourceLineNo">439</span>   * &lt;p&gt;<a name="line.439"></a>
+<span class="sourceLineNo">440</span>   * This Iterator must be closed by the caller.<a name="line.440"></a>
+<span class="sourceLineNo">441</span>   *<a name="line.441"></a>
+<span class="sourceLineNo">442</span>   * @param scan configured {@link Scan}<a name="line.442"></a>
+<span class="sourceLineNo">443</span>   * @return RegionScanner<a name="line.443"></a>
+<span class="sourceLineNo">444</span>   * @throws IOException read exceptions<a name="line.444"></a>
+<span class="sourceLineNo">445</span>   */<a name="line.445"></a>
+<span class="sourceLineNo">446</span>  RegionScanner getScanner(Scan scan) throws IOException;<a name="line.446"></a>
+<span class="sourceLineNo">447</span><a name="line.447"></a>
+<span class="sourceLineNo">448</span>  /**<a name="line.448"></a>
+<span class="sourceLineNo">449</span>   * Return an iterator that scans over the HRegion, returning the indicated columns and rows<a name="line.449"></a>
+<span class="sourceLineNo">450</span>   * specified by the {@link Scan}. The scanner will also include the additional scanners passed<a name="line.450"></a>
+<span class="sourceLineNo">451</span>   * along with the scanners for the specified Scan instance. Should be careful with the usage to<a name="line.451"></a>
+<span class="sourceLineNo">452</span>   * pass additional scanners only within this Region<a name="line.452"></a>
+<span class="sourceLineNo">453</span>   * &lt;p&gt;<a name="line.453"></a>
+<span class="sourceLineNo">454</span>   * This Iterator must be closed by the caller.<a name="line.454"></a>
+<span class="sourceLineNo">455</span>   *<a name="line.455"></a>
+<span class="sourceLineNo">456</span>   * @param scan configured {@link Scan}<a name="line.456"></a>
+<span class="sourceLineNo">457</span>   * @param additionalScanners Any additional scanners to be used<a name="line.457"></a>
+<span class="sourceLineNo">458</span>   * @return RegionScanner<a name="line.458"></a>
+<span class="sourceLineNo">459</span>   * @throws IOException read exceptions<a name="line.459"></a>
+<span class="sourceLineNo">460</span>   */<a name="line.460"></a>
+<span class="sourceLineNo">461</span>  RegionScanner getScanner(Scan scan, List&lt;KeyValueScanner&gt; additionalScanners) throws IOException;<a name="line.461"></a>
+<span class="sourceLineNo">462</span><a name="line.462"></a>
+<span class="sourceLineNo">463</span>  /** The comparator to be used with the region */<a name="line.463"></a>
+<span class="sourceLineNo">464</span>  CellComparator getCellComparator();<a name="line.464"></a>
+<span class="sourceLineNo">465</span><a name="line.465"></a>
+<span class="sourceLineNo">466</span>  /**<a name="line.466"></a>
+<span class="sourceLineNo">467</span>   * Perform one or more increment operations on a row.<a name="line.467"></a>
+<span class="sourceLineNo">468</span>   * @param increment<a name="line.468"></a>
+<span class="sourceLineNo">469</span>   * @param nonceGroup<a name="line.469"></a>
+<span class="sourceLineNo">470</span>   * @param nonce<a name="line.470"></a>
+<span class="sourceLineNo">471</span>   * @return result of the operation<a name="line.471"></a>
+<span class="sourceLineNo">472</span>   * @throws IOException<a name="line.472"></a>
+<span class="sourceLineNo">473</span>   */<a name="line.473"></a>
+<span class="sourceLineNo">474</span>  Result increment(Increment increment, long nonceGroup, long nonce) throws IOException;<a name="line.474"></a>
+<span class="sourceLineNo">475</span><a name="line.475"></a>
+<span class="sourceLineNo">476</span>  /**<a name="line.476"></a>
+<span class="sourceLineNo">477</span>   * Performs multiple mutations atomically on a single row. Currently<a name="line.477"></a>
+<span class="sourceLineNo">478</span>   * {@link Put} and {@link Delete} are supported.<a name="line.478"></a>
+<span class="sourceLineNo">479</span>   *<a name="line.479"></a>
+<span class="sourceLineNo">480</span>   * @param mutations object that specifies the set of mutations to perform atomically<a name="line.480"></a>
+<span class="sourceLineNo">481</span>   * @throws IOException<a name="line.481"></a>
+<span class="sourceLineNo">482</span>   */<a name="line.482"></a>
+<span class="sourceLineNo">483</span>  void mutateRow(RowMutations mutations) throws IOException;<a name="line.483"></a>
+<span class="sourceLineNo">484</span><a name="line.484"></a>
+<span class="sourceLineNo">485</span>  /**<a name="line.485"></a>
+<span class="sourceLineNo">486</span>   * Perform atomic mutations within the region.<a name="line.486"></a>
+<span class="sourceLineNo">487</span>   *<a name="line.487"></a>
+<span class="sourceLineNo">488</span>   * @param mutations The list of mutations to perform.<a name="line.488"></a>
+<span class="sourceLineNo">489</span>   * &lt;code&gt;mutations&lt;/code&gt; can contain operations for multiple rows.<a name="line.489"></a>
+<span class="sourceLineNo">490</span>   * Caller has to ensure that all rows are contained in this region.<a name="line.490"></a>
+<span class="sourceLineNo">491</span>   * @param rowsToLock Rows to lock<a name="line.491"></a>
+<span class="sourceLineNo">492</span>   * @param nonceGroup Optional nonce group of the operation (client Id)<a name="line.492"></a>
+<span class="sourceLineNo">493</span>   * @param nonce Optional nonce of the operation (unique random id to ensure "more idempotence")<a name="line.493"></a>
+<span class="sourceLineNo">494</span>   * If multiple rows are locked care should be taken that<a name="line.494"></a>
+<span class="sourceLineNo">495</span>   * &lt;code&gt;rowsToLock&lt;/code&gt; is sorted in order to avoid deadlocks.<a name="line.495"></a>
+<span class="sourceLineNo">496</span>   * @throws IOException<a name="line.496"></a>
+<span class="sourceLineNo">497</span>   */<a name="line.497"></a>
+<span class="sourceLineNo">498</span>  void mutateRowsWithLocks(Collection&lt;Mutation&gt; mutations, Collection&lt;byte[]&gt; rowsToLock,<a name="line.498"></a>
+<span class="sourceLineNo">499</span>      long nonceGroup, long nonce) throws IOException;<a name="line.499"></a>
 <span class="sourceLineNo">500</span><a name="line.500"></a>
 <span class="sourceLineNo">501</span>  /**<a name="line.501"></a>
 <span class="sourceLineNo">502</span>   * Performs atomic multiple reads and writes on a given row.<a name="line.502"></a>
 <span class="sourceLineNo">503</span>   *<a name="line.503"></a>
 <span class="sourceLineNo">504</span>   * @param processor The object defines the reads and writes to a row.<a name="line.504"></a>
-<span class="sourceLineNo">505</span>   * @param nonceGroup Optional nonce group of the operation (client Id)<a name="line.505"></a>
-<span class="sourceLineNo">506</span>   * @param nonce Optional nonce of the operation (unique random id to ensure "more idempotence")<a name="line.506"></a>
-<span class="sourceLineNo">507</span>   */<a name="line.507"></a>
-<span class="sourceLineNo">508</span>  void processRowsWithLocks(RowProcessor&lt;?,?&gt; processor, long nonceGroup, long nonce)<a name="line.508"></a>
-<span class="sourceLineNo">509</span>      throws IOException;<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span>  /**<a name="line.511"></a>
-<span class="sourceLineNo">512</span>   * Performs atomic multiple reads and writes on a given row.<a name="line.512"></a>
-<span class="sourceLineNo">513</span>   *<a name="line.513"></a>
-<span class="sourceLineNo">514</span>   * @param processor The object defines the reads and writes to a row.<a name="line.514"></a>
-<span class="sourceLineNo">515</span>   * @param timeout The timeout of the processor.process() execution<a name="line.515"></a>
-<span class="sourceLineNo">516</span>   *                Use a negative number to switch off the time bound<a name="line.516"></a>
-<span class="sourceLineNo">517</span>   * @param nonceGroup Optional nonce group of the operation (client Id)<a name="line.517"></a>
-<span class="sourceLineNo">518</span>   * @param nonce Optional nonce of the operation (unique random id to ensure "more idempotence")<a name="line.518"></a>
-<span class="sourceLineNo">519</span>   */<a name="line.519"></a>
-<span class="sourceLineNo">520</span>  void processRowsWithLocks(RowProcessor&lt;?,?&gt; processor, long timeout, long nonceGroup, long nonce)<a name="line.520"></a>
-<span class="sourceLineNo">521</span>      throws IOException;<a name="line.521"></a>
-<span class="sourceLineNo">522</span><a name="line.522"></a>
-<span class="sourceLineNo">523</span>  /**<a name="line.523"></a>
-<span class="sourceLineNo">524</span>   * Puts some data in the table.<a name="line.524"></a>
-<span class="sourceLineNo">525</span>   * @param put<a name="line.525"></a>
-<span class="sourceLineNo">526</span>   * @throws IOException<a name="line.526"></a>
-<span class="sourceLineNo">527</span>   */<a name="line.527"></a>
-<span class="sourceLineNo">528</span>  void put(Put put) throws IOException;<a name="line.528"></a>
+<span class="sourceLineNo">505</span>   */<a name="line.505"></a>
+<span class="sourceLineNo">506</span>  void processRowsWithLocks(RowProcessor&lt;?,?&gt; processor) throws IOException;<a name="line.506"></a>
+<span class="sourceLineNo">507</span><a name="line.507"></a>
+<span class="sourceLineNo">508</span>  /**<a name="line.508"></a>
+<span class="sourceLineNo">509</span>   * Performs atomic multiple reads and writes on a given row.<a name="line.509"></a>
+<span class="sourceLineNo">510</span>   *<a name="line.510"></a>
+<span class="sourceLineNo">511</span>   * @param processor The object defines the reads and writes to a row.<a name="line.511"></a>
+<span class="sourceLineNo">512</span>   * @param nonceGroup Optional nonce group of the operation (client Id)<a name="line.512"></a>
+<span class="sourceLineNo">513</span>   * @param nonce Optional nonce of the operation (unique random id to ensure "more idempotence")<a name="line.513"></a>
+<span class="sourceLineNo">514</span>   */<a name="line.514"></a>
+<span class="sourceLineNo">515</span>  void processRowsWithLocks(RowProcessor&lt;?,?&gt; processor, long nonceGroup, long nonce)<a name="line.515"></a>
+<span class="sourceLineNo">516</span>      throws IOException;<a name="line.516"></a>
+<span class="sourceLineNo">517</span><a name="line.517"></a>
+<span class="sourceLineNo">518</span>  /**<a name="line.518"></a>
+<span class="sourceLineNo">519</span>   * Performs atomic multiple reads and writes on a given row.<a name="line.519"></a>
+<span class="sourceLineNo">520</span>   *<a name="line.520"></a>
+<span class="sourceLineNo">521</span>   * @param processor The object defines the reads and writes to a row.<a name="line.521"></a>
+<span class="sourceLineNo">522</span>   * @param timeout The timeout of the processor.process() execution<a name="line.522"></a>
+<span class="sourceLineNo">523</span>   *                Use a negative number to switch off the time bound<a name="line.523"></a>
+<span class="sourceLineNo">524</span>   * @param nonceGroup Optional nonce group of the operation (client Id)<a name="line.524"></a>
+<span class="sourceLineNo">525</span>   * @param nonce Optional nonce of the operation (unique random id to ensure "more idempotence")<a name="line.525"></a>
+<span class="sourceLineNo">526</span>   */<a name="line.526"></a>
+<span class="sourceLineNo">527</span>  void processRowsWithLocks(RowProcessor&lt;?,?&gt; processor, long timeout, long nonceGroup, long nonce)<a name="line.527"></a>
+<span class="sourceLineNo">528</span>      throws IOException;<a name="line.528"></a>
 <span class="sourceLineNo">529</span><a name="line.529"></a>
 <span class="sourceLineNo">530</span>  /**<a name="line.530"></a>
-<span class="sourceLineNo">531</span>   * Listener class to enable callers of<a name="line.531"></a>
-<span class="sourceLineNo">532</span>   * bulkLoadHFile() to perform any necessary<a name="line.532"></a>
-<span class="sourceLineNo">533</span>   * pre/post processing of a given bulkload call<a name="line.533"></a>
+<span class="sourceLineNo">531</span>   * Puts some data in the table.<a name="line.531"></a>
+<span class="sourceLineNo">532</span>   * @param put<a name="line.532"></a>
+<span class="sourceLineNo">533</span>   * @throws IOException<a name="line.533"></a>
 <span class="sourceLineNo">534</span>   */<a name="line.534"></a>
-<span class="sourceLineNo">535</span>  interface BulkLoadListener {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    /**<a name="line.536"></a>
-<span class="sourceLineNo">537</span>     * Called before an HFile is actually loaded<a name="line.537"></a>
-<span class="sourceLineNo">538</span>     * @param family family being loaded to<a name="line.538"></a>
-<span class="sourceLineNo">539</span>     * @param srcPath path of HFile<a name="line.539"></a>
-<span class="sourceLineNo">540</span>     * @return final path to be used for actual loading<a name="line.540"></a>
-<span class="sourceLineNo">541</span>     * @throws IOException<a name="line.541"></a>
-<span class="sourceLineNo">542</span>     */<a name="line.542"></a>
-<span class="sourceLineNo">543</span>    String prepareBulkLoad(byte[] family, String srcPath, boolean copyFile)<a name="line.543"></a>
-<span class="sourceLineNo">544</span>        throws IOException;<a name="line.544"></a>
-<span class="sourceLineNo">545</span><a name="line.545"></a>
-<span class="sourceLineNo">546</span>    /**<a name="line.546"></a>
-<span class="sourceLineNo">547</span>     * Called after a successful HFile load<a name="line.547"></a>
-<span class="sourceLineNo">548</span>     * @param family family being loaded to<a name="line.548"></a>
-<span class="sourceLineNo">549</span>     * @param srcPath path of HFile<a name="line.549"></a>
-<span class="sourceLineNo">550</span>     * @throws IOException<a name="line.550"></a>
-<span class="sourceLineNo">551</span>     */<a name="line.551"></a>
-<span class="sourceLineNo">552</span>    void doneBulkLoad(byte[] family, String srcPath) throws IOException;<a name="line.552"></a>
-<span class="sourceLineNo">553</span><a name="line.553"></a>
-<span class="sourceLineNo">554</span>    /**<a name="line.554"></a>
-<span class="sourceLineNo">555</span>     * Called after a failed HFile load<a name="line.555"></a>
-<span class="sourceLineNo">556</span>     * @param family family being loaded to<a name="line.556"></a>
-<span class="sourceLineNo">557</span>     * @param srcPath path of HFile<a name="line.557"></a>
-<span class="sourceLineNo">558</span>     * @throws IOException<a name="line.558"></a>
-<span class="sourceLineNo">559</span>     */<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    void failedBulkLoad(byte[] family, String srcPath) throws IOException;<a name="line.560"></a>
-<span class="sourceLineNo">561</span>  }<a name="line.561"></a>
-<span class="sourceLineNo">562</span><a name="line.562"></a>
-<span class="sourceLineNo">563</span>  /**<a name="line.563"></a>
-<span class="sourceLineNo">564</span>   * Attempts to atomically load a group of hfiles.  This is critical for loading<a name="line.564"></a>
-<span class="sourceLineNo">565</span>   * rows with multiple column families atomically.<a name="line.565"></a>
-<span class="sourceLineNo">566</span>   *<a name="line.566"></a>
-<span class="sourceLineNo">567</span>   * @param familyPaths List of Pair&amp;lt;byte[] column family, String hfilePath&amp;gt;<a name="line.567"></a>
-<span class="sourceLineNo">568</span>   * @param bulkLoadListener Internal hooks enabling massaging/preparation of a<a name="line.568"></a>
-<span class="sourceLineNo">569</span>   * file about to be bulk loaded<a name="line.569"></a>
-<span class="sourceLineNo">570</span>   * @param assignSeqId<a name="line.570"></a>
-<span class="sourceLineNo">571</span>   * @return Map from family to List of store file paths if successful, null if failed recoverably<a name="line.571"></a>
-<span class="sourceLineNo">572</span>   * @throws IOException if failed unrecoverably.<a name="line.572"></a>
-<span class="sourceLineNo">573</span>   */<a name="line.573"></a>
-<span class="sourceLineNo">574</span>  Map&lt;byte[], List&lt;Path&gt;&gt; bulkLoadHFiles(Collection&lt;Pair&lt;byte[], String&gt;&gt; familyPaths,<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      boolean assignSeqId, BulkLoadListener bulkLoadListener) throws IOException;<a name="line.575"></a>
-<span class="sourceLineNo">576</span><a name="line.576"></a>
-<span class="sourceLineNo">577</span>  /**<a name="line.577"></a>
-<span class="sourceLineNo">578</span>   * Attempts to atomically load a group of hfiles.  This is critical for loading<a name="line.578"></a>
-<span class="sourceLineNo">579</span>   * rows with multiple column families atomically.<a name="line.579"></a>
-<span class="sourceLineNo">580</span>   *<a name="line.580"></a>
-<span class="sourceLineNo">581</span>   * @param familyPaths List of Pair&amp;lt;byte[] column family, String hfilePath&amp;gt;<a name="line.581"></a>
-<span class="sourceLineNo">582</span>   * @param assignSeqId<a name="line.582"></a>
-<span class="sourceLineNo">583</span>   * @param bulkLoadListener Internal hooks enabling massaging/preparation of a<a name="line.583"></a>
-<span class="sourceLineNo">584</span>   * file about to be bulk loaded<a name="line.584"></a>
-<span class="sourceLineNo">585</span>   * @param copyFile always copy hfiles if true<a name="line.585"></a>
-<span class="sourceLineNo">586</span>   * @return Map from family to List of store file paths if successful, null if failed recoverably<a name="line.586"></a>
-<span class="sourceLineNo">587</span>   * @throws IOException if failed unrecoverably.<a name="line.587"></a>
-<span class="sourceLineNo">588</span>   */<a name="line.588"></a>
-<span class="sourceLineNo">589</span>  Map&lt;byte[], List&lt;Path&gt;&gt; bulkLoadHFiles(Collection&lt;Pair&lt;byte[], String&gt;&gt; familyPaths,<a name="line.589"></a>
-<span class="sourceLineNo">590</span>      boolean assignSeqId, BulkLoadListener bulkLoadListener, boolean copyFile) throws IOException;<a name="line.590"></a>
-<span class="sourceLineNo">591</span><a name="line.591"></a>
-<span class="sourceLineNo">592</span>  ///////////////////////////////////////////////////////////////////////////<a name="line.592"></a>
-<span class="sourceLineNo">593</span>  // Coprocessors<a name="line.593"></a>
-<span class="sourceLineNo">594</span><a name="line.594"></a>
-<span class="sourceLineNo">595</span>  /** @return the coprocessor host */<a name="line.595"></a>
-<span class="sourceLineNo">596</span>  RegionCoprocessorHost getCoprocessorHost();<a name="line.596"></a>
-<span class="sourceLineNo">597</span><a name="line.597"></a>
-<span class="sourceLineNo">598</span>  /**<a name="line.598"></a>
-<span class="sourceLineNo">599</span>   * Executes a single protocol buffer coprocessor endpoint {@link Service} method using<a name="line.599"></a>
-<span class="sourceLineNo">600</span>   * the registered protocol handlers.  {@link Service} implementations must be registered via the<a name="line.600"></a>
-<span class="sourceLineNo">601</span>   * {@link Region#registerService(com.google.protobuf.Service)}<a name="line.601"></a>
-<span class="sourceLineNo">602</span>   * method before they are available.<a name="line.602"></a>
-<span class="sourceLineNo">603</span>   *<a name="line.603"></a>
-<span class="sourceLineNo">604</span>   * @param controller an {@code RpcContoller} implementation to pass to the invoked service<a name="line.604"></a>
-<span class="sourceLineNo">605</span>   * @param call a {@code CoprocessorServiceCall} instance identifying the service, method,<a name="line.605"></a>
-<span class="sourceLineNo">606</span>   *     and parameters for the method invocation<a name="line.606"></a>
-<span class="sourceLineNo">607</span>   * @return a protocol buffer {@code Message} instance containing the method's result<a name="line.607"></a>
-<span class="sourceLineNo">608</span>   * @throws IOException if no registered service handler is found or an error<a name="line.608"></a>
-<span class="sourceLineNo">609</span>   *     occurs during the invocation<a name="line.609"></a>
-<span class="sourceLineNo">610</span>   * @see org.apache.hadoop.hbase.regionserver.Region#registerService(com.google.protobuf.Service)<a name="line.610"></a>
-<span class="sourceLineNo">611</span>   */<a name="line.611"></a>
-<span class="sourceLineNo">612</span>  com.google.protobuf.Message execService(com.google.protobuf.RpcController controller,<a name="line.612"></a>
-<span class="sourceLineNo">613</span>      CoprocessorServiceCall call)<a name="line.613"></a>
-<span class="sourceLineNo">614</span>  throws IOException;<a name="line.614"></a>
-<span class="sourceLineNo">615</span><a name="line.615"></a>
-<span class="sourceLineNo">616</span>  /**<a name="line.616"></a>
-<span class="sourceLineNo">617</span>   * Registers a new protocol buffer {@link Service} subclass as a coprocessor endpoint to<a name="line.617"></a>
-<span class="sourceLineNo">618</span>   * be available for handling Region#execService(com.google.protobuf.RpcController,<a name="line.618"></a>
-<span class="sourceLineNo">619</span>   *    org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceCall) calls.<a name="line.619"></a>
-<span class="sourceLineNo">620</span>   *<a name="line.620"></a>
-<span class="sourceLineNo">621</span>   * &lt;p&gt;<a name="line.621"></a>
-<span class="sourceLineNo">622</span>   * Only a single instance may be registered per region for a given {@link Service} subclass (the<a name="line.622"></a>
-<span class="sourceLineNo">623</span>   * instances are keyed on {@link com.google.protobuf.Descriptors.ServiceDescriptor#getFullName()}.<a name="line.623"></a>
-<span class="sourceLineNo">624</span>   * After the first registration, subsequent calls with the same service name will fail with<a name="line.624"></a>
-<span class="sourceLineNo">625</span>   * a return value of {@code false}.<a name="line.625"></a>
-<span class="sourceLineNo">626</span>   * &lt;/p&gt;<a name="line.626"></a>
-<span class="sourceLineNo">627</span>   * @param instance the {@code Service} subclass instance to expose as a coprocessor endpoint<a name="line.627"></a>
-<span class="sourceLineNo">628</span>   * @return {@code true} if the registration was successful, {@code false}<a name="line.628"></a>
-<span class="sourceLineNo">629</span>   * otherwise<a name="line.629"></a>
-<span class="sourceLineNo">630</span>   */<a name="line.630"></a>
-<span class="sourceLineNo">631</span>  boolean registerService(com.google.protobuf.Service instance);<a name="line.631"></a>
-<span class="sourceLineNo">632</span><a name="line.632"></a>
-<span class="sourceLineNo">633</span>  ///////////////////////////////////////////////////////////////////////////<a name="line.633"></a>
-<span class="sourceLineNo">634</span>  // RowMutation processor support<a name="line.634"></a>
-<span class="sourceLineNo">635</span><a name="line.635"></a>
-<span class="sourceLineNo">636</span>  /**<a name="line.636"></a>
-<span class="sourceLineNo">637</span>   * Check the collection of families for validity.<a name="line.637"></a>
-<span class="sourceLineNo">638</span>   * @param families<a name="line.638"></a>
-<span class="sourceLineNo">639</span>   * @throws NoSuchColumnFamilyException<a name="line.639"></a>
-<span class="sourceLineNo">640</span>   */<a name="line.640"></a>
-<span class="sourceLineNo">641</span>  void checkFamilies(Collection&lt;byte[]&gt; families) throws NoSuchColumnFamilyException;<a name="line.641"></a>
+<span class="sourceLineNo">535</span>  void put(Put put) throws IOException;<a name="line.535"></a>
+<span class="sourceLineNo">536</span><a name="line.536"></a>
+<span class="sourceLineNo">537</span>  /**<a name="line.537"></a>
+<span class="sourceLineNo">538</span>   * Listener class to enable callers of<a name="line.538"></a>
+<span class="sourceLineNo">539</span>   * bulkLoadHFile() to perform any necessary<a name="line.539"></a>
+<span class="sourceLineNo">540</span>   * pre/post processing of a given bulkload call<a name="line.540"></a>
+<span class="sourceLineNo">541</span>   */<a name="line.541"></a>
+<span class="sourceLineNo">542</span>  interface BulkLoadListener {<a name="line.542"></a>
+<span class="sourceLineNo">543</span>    /**<a name="line.543"></a>
+<span class="sourceLineNo">544</span>     * Called before an HFile is actually loaded<a name="line.544"></a>
+<span class="sourceLineNo">545</span>     * @param family family being loaded to<a name="line.545"></a>
+<span class="sourceLineNo">546</span>     * @param srcPath path of HFile<a name="line.546"></a>
+<span class="sourceLineNo">547</span>     * @return final path to be used for actual loading<a name="line.547"></a>
+<span class="sourceLineNo">548</span>     * @throws IOException<a name="line.548"></a>
+<span class="sourceLineNo">549</span>     */<a name="line.549"></a>
+<span class="sourceLineNo">550</span>    String prepareBulkLoad(byte[] family, String srcPath, boolean copyFile)<a name="line.550"></a>
+<span class="sourceLineNo">551</span>        throws IOException;<a name="line.551"></a>
+<span class="sourceLineNo">552</span><a name="line.552"></a>
+<span class="sourceLineNo">553</span>    /**<a name="line.553"></a>
+<span class="sourceLineNo">554</span>     * Called after a successful HFile load<a name="line.554"></a>
+<span class="sourceLineNo">555</span>     * @param family family being loaded to<a name="line.555"></a>
+<span class="sourceLineNo">556</span>     * @param srcPath path of HFile<a name="line.556"></a>
+<span class="sourceLineNo">557</span>     * @throws IOException<a name="line.557"></a>
+<span class="sourceLineNo">558</span>     */<a name="line.558"></a>
+<span class="sourceLineNo">559</span>    void doneBulkLoad(byte[] family, String srcPath) throws IOException;<a name="line.559"></a>
+<span class="sourceLineNo">560</span><a name="line.560"></a>
+<span class="sourceLineNo">561</span>    /**<a name="line.561"></a>
+<span class="sourceLineNo">562</span>     * Called after a failed HFile load<a name="line.562"></a>
+<span class="sourceLineNo">563</span>     * @param family family being loaded to<a name="line.563"></a>
+<span class="sourceLineNo">564</span>     * @param srcPath path of HFile<a name="line.564"></a>
+<span class="sourceLineNo">565</span>     * @throws IOException<a name="line.565"></a>
+<span class="sourceLineNo">566</span>     */<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    void failedBulkLoad(byte[] family, String srcPath) throws IOException;<a name="line.567"></a>
+<span class="sourceLineNo">568</span>  }<a name="line.568"></a>
+<span class="sourceLineNo">569</span><a name="line.569"></a>
+<span class="sourceLineNo">570</span>  /**<a name="line.570"></a>
+<span class="sourceLineNo">571</span>   * Attempts to atomically load a group of hfiles.  This is critical for loading<a name="line.571"></a>
+<span class="sourceLineNo">572</span>   * rows with multiple column families atomically.<a name="line.572"></a>
+<span class="sourceLineNo">573</span>   *<a name="line.573"></a>
+<span class="sourceLineNo">574</span>   * @param familyPaths List of Pair&amp;lt;byte[] column family, String hfilePath&amp;gt;<a name="line.574"></a>
+<span class="sourceLineNo">575</span>   * @param bulkLoadListener Internal hooks enabling massaging/preparation of a<a name="line.575"></a>
+<span class="sourceLineNo">576</span>   * file about to be bulk loaded<a name="line.576"></a>
+<span class="sourceLineNo">577</span>   * @param assignSeqId<a name="line.577"></a>
+<span class="sourceLineNo">578</span>   * @return Map from family to List of store file paths if successful, null if failed recoverably<a name="line.578"></a>
+<span class="sourceLineNo">579</span>   * @throws IOException if failed unrecoverably.<a name="line.579"></a>
+<span class="sourceLineNo">580</span>   */<a name="line.580"></a>
+<span class="sourceLineNo">581</span>  Map&lt;byte[], List&lt;Path&gt;&gt; bulkLoadHFiles(Collection&lt;Pair&lt;byte[], String&gt;&gt; familyPaths,<a name="line.581"></a>
+<span class="sourceLineNo">582</span>      boolean assignSeqId, BulkLoadListener bulkLoadListener) throws IOException;<a name="line.582"></a>
+<span class="sourceLineNo">583</span><a name="line.583"></a>
+<span class="sourceLineNo">584</span>  /**<a name="line.584"></a>
+<span class="sourceLineNo">585</span>   * Attempts to atomically load a group of hfiles.  This is critical for loading<a name="line.585"></a>
+<span class="sourceLineNo">586</span>   * rows with multiple column families atomically.<a name="line.586"></a>
+<span class="sourceLineNo">587</span>   *<a name="line.587"></a>
+<span class="sourceLineNo">588</span>   * @param familyPaths List of Pair&amp;lt;byte[] column family, String hfilePath&amp;gt;<a name="line.588"></a>
+<span class="sourceLineNo">589</span>   * @param assignSeqId<a name="line.589"></a>
+<span class="sourceLineNo">590</span>   * @param bulkLoadListener Internal hooks enabling massaging/preparation of a<a name="line.590"></a>
+<span class="sourceLineNo">591</span>   * file about to be bulk loaded<a name="line.591"></a>
+<span class="sourceLineNo">592</span>   * @param copyFile always copy hfiles if true<a name="line.592"></a>
+<span class="sourceLineNo">593</span>   * @return Map from family to List of store file paths if successful, null if failed recoverably<a name="line.593"></a>
+<span class="sourceLineNo">594</span>   * @throws IOException if failed unrecoverably.<a name="line.594"></a>
+<span class="sourceLineNo">595</span>   */<a name="line.595"></a>
+<span class="sourceLineNo">596</span>  Map&lt;byte[], List&lt;Path&gt;&gt; bulkLoadHFiles(Collection&lt;Pair&lt;byte[], String&gt;&gt; familyPaths,<a name="line.596"></a>
+<span class="sourceLineNo">597</span>      boolean assignSeqId, BulkLoadListener bulkLoadListener, boolean copyFile) throws IOException;<a name="line.597"></a>
+<span class="sourceLineNo">598</span><a name="line.598"></a>
+<span class="sourceLineNo">599</span>  ///////////////////////////////////////////////////////////////////////////<a name="line.599"></a>
+<span class="sourceLineNo">600</span>  // Coprocessors<a name="line.600"></a>
+<span class="sourceLineNo">601</span><a name="line.601"></a>
+<span class="sourceLineNo">602</span>  /** @return the coprocessor host */<a name="line.602"></a>
+<span class="sourceLineNo">603</span>  RegionCoprocessorHost getCoprocessorHost();<a name="line.603"></a>
+<span class="sourceLineNo">604</span><a name="line.604"></a>
+<span class="sourceLineNo">605</span>  /**<a name="line.605"></a>
+<span class="sourceLineNo">606</span>   * Executes a single protocol buffer coprocessor endpoint {@link Service} method using<a name="line.606"></a>
+<span class="sourceLineNo">607</span>   * the registered protocol handlers.  {@link Service} implementations must be registered via the<a name="line.607"></a>
+<span class="sourceLineNo">608</span>   * {@link Region#registerService(com.google.protobuf.Service)}<a name="line.608"></a>
+<span class="sourceLineNo">609</span>   * method before they are available.<a name="line.609"></a>
+<span class="sourceLineNo">610</span>   *<a name="line.610"></a>
+<span class="sourceLineNo">611</span>   * @param controller an {@code RpcContoller} implementation to pass to the invoked service<a name="line.611"></a>
+<span class="sourceLineNo">612</span>   * @param call a {@code CoprocessorServiceCall} instance identifying the service, method,<a name="line.612"></a>
+<span class="sourceLineNo">613</span>   *     and parameters for the method invocation<a name="line.613"></a>
+<span class="sourceLineNo">614</span>   * @return a protocol buffer {@code Message} instance containing the method's result<a name="line.614"></a>
+<span class="sourceLineNo">615</span>   * @throws IOException if no registered service handler is found or an error<a name="line.615"></a>
+<span class="sourceLineNo">616</span>   *     occurs during the invocation<a name="line.616"></a>
+<span class="sourceLineNo">617</span>   * @see org.apache.hadoop.hbase.regionserver.Region#registerService(com.google.protobuf.Service)<a name="line.617"></a>
+<span class="sourceLineNo">618</span>   */<a name="line.618"></a>
+<span class="sourceLineNo">619</span>  com.google.protobuf.Message execService(com.google.protobuf.RpcController controller,<a name="line.619"></a>
+<span class="sourceLineNo">620</span>      CoprocessorServiceCall call)<a name="line.620"></a>
+<span class="sourceLineNo">621</span>  throws IOException;<a name="line.621"></a>
+<span class="sourceLineNo">622</span><a name="line.622"></a>
+<span class="sourceLineNo">623</span>  /**<a name="line.623"></a>
+<span class="sourceLineNo">624</span>   * Registers a new protocol buffer {@link Service} subclass as a coprocessor endpoint to<a name="line.624"></a>
+<span class="sourceLineNo">625</span>   * be available for handling Region#execService(com.google.protobuf.RpcController,<a name="line.625"></a>
+<span class="sourceLineNo">626</span>   *    org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceCall) calls.<a name="line.626"></a>
+<span class="sourceLineNo">627</span>   *<a name="line.627"></a>
+<span class="sourceLineNo">628</span>   * &lt;p&gt;<a name="line.628"></a>
+<span class="sourceLineNo">629</span>   * Only a single instance may be registered per region for a given {@link Service} subclass (the<a name="line.629"></a>
+<span class="sourceLineNo">630</span>   * instances are keyed on {@link com.google.protobuf.Descriptors.ServiceDescriptor#getFullName()}.<a name="line.630"></a>
+<span class="sourceLineNo">631</span>   * After the first registration, subsequent calls with the same service name will fail with<a name="line.631"></a>
+<span class="sourceLineNo">632</span>   * a return value of {@code false}.<a name="line.632"></a>
+<span class="sourceLineNo">633</span>   * &lt;/p&gt;<a name="line.633"></a>
+<span class="sourceLineNo">634</span>   * @param instance the {@code Service} subclass instance to expose as a coprocessor endpoint<a name="line.634"></a>
+<span class="sourceLineNo">635</span>   * @return {@code true} if the registration was successful, {@code false}<a name="line.635"></a>
+<span class="sourceLineNo">636</span>   * otherwise<a name="line.636"></a>
+<span class="sourceLineNo">637</span>   */<a name="line.637"></a>
+<span class="sourceLineNo">638</span>  boolean registerService(com.google.protobuf.Service instance);<a name="line.638"></a>
+<span class="sourceLineNo">639</span><a name="line.639"></a>
+<span class="sourceLineNo">640</span>  ///////////////////////////////////////////////////////////////////////////<a name="line.640"></a>
+<span class="sourceLineNo">641</span>  // RowMutation processor support<a name="line.641"></a>
 <span class="sourceLineNo">642</span><a name="line.642"></a>
 <span class="sourceLineNo">643</span>  /**<a name="line.643"></a>
-<span class="sourceLineNo">644</span>   * Check the collection of families for valid timestamps<a name="line.644"></a>
-<span class="sourceLineNo">645</span>   * @param familyMap<a name="line.645"></a>
-<span class="sourceLineNo">646</span>   * @param now current timestamp<a name="line.646"></a>
-<span class="sourceLineNo">647</span>   * @throws FailedSanityCheckException<a name="line.647"></a>
-<span class="sourceLineNo">648</span>   */<a name="line.648"></a>
-<span class="sourceLineNo">649</span>  void checkTimestamps(Map&lt;byte[], List&lt;Cell&gt;&gt; familyMap, long now)<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      throws FailedSanityCheckException;<a name="line.650"></a>
-<span class="sourceLineNo">651</span><a name="line.651"></a>
-<span class="sourceLineNo">652</span>  /**<a name="line.652"></a>
-<span class="sourceLineNo">653</span>   * Prepare a delete for a row mutation processor<a name="line.653"></a>
-<span class="sourceLineNo">654</span>   * @param delete The passed delete is modified by this method. WARNING!<a name="line.654"></a>
-<span class="sourceLineNo">655</span>   * @throws IOException<a name="line.655"></a>
-<span class="sourceLineNo">656</span>   */<a name="line.656"></a>
-<span class="sourceLineNo">657</span>  void prepareDelete(Delete delete) throws IOException;<a name="line.657"></a>
+<span class="sourceLineNo">644</span>   * Check the collection of families for validity.<a name="line.644"></a>
+<span class="sourceLineNo">645</span>   * @param families<a name="line.645"></a>
+<span class="sourceLineNo">646</span>   * @throws NoSuchColumnFamilyException<a name="line.646"></a>
+<span class="sourceLineNo">647</span>   */<a name="line.647"></a>
+<span class="sourceLineNo">648</span>  void checkFamilies(Collection&lt;byte[]&gt; families) throws NoSuchColumnFamilyException;<a name="line.648"></a>
+<span class="sourceLineNo">649</span><a name="line.649"></a>
+<span class="sourceLineNo">650</span>  /**<a name="line.650"></a>
+<span class="sourceLineNo">651</span>   * Check the collection of families for valid timestamps<a name="line.651"></a>
+<span class="sourceLineNo">652</span>   * @param familyMap<a name="line.652"></a>
+<span class="sourceLineNo">653</span>   * @param now current timestamp<a name="line.653"></a>
+<span class="sourceLineNo">654</span>   * @throws FailedSanityCheckException<a name="line.654"></a>
+<span class="sourceLineNo">655</span>   */<a name="line.655"></a>
+<span class="sourceLineNo">656</span>  void checkTimestamps(Map&lt;byte[], List&lt;Cell&gt;&gt; familyMap, long now)<a name="line.656"></a>
+<span class="sourceLineNo">657</span>      throws FailedSanityCheckException;<a name="line.657"></a>
 <span class="sourceLineNo">658</span><a name="line.658"></a>
 <span class="sourceLineNo">659</span>  /**<a name="line.659"></a>
-<span class="sourceLineNo">660</span>   * Set up correct timestamps in the KVs in Delete object.<a name="line.660"></a>
-<span class="sourceLineNo">661</span>   * &lt;p&gt;Caller should have the row and region locks.<a name="line.661"></a>
-<span class="sourceLineNo">662</span>   * @param mutation<a name="line.662"></a>
-<span class="sourceLineNo">663</span>   * @param familyCellMap<a name="line.663"></a>
-<span class="sourceLineNo">664</span>   * @param now<a name="line.664"></a>
-<span class="sourceLineNo">665</span>   * @throws IOException<a name="line.665"></a>
-<span class="sourceLineNo">666</span>   */<a name="line.666"></a>
-<span class="sourceLineNo">667</span>  void prepareDeleteTimestamps(Mutation mutation, Map&lt;byte[], List&lt;Cell&gt;&gt; familyCellMap,<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      byte[] now) throws IOException;<a name="line.668"></a>
-<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span>  /**<a name="line.670"></a>
-<span class="sourceLineNo">671</span>   * Replace any cell timestamps set to {@link org.apache.hadoop.hbase.HConstants#LATEST_TIMESTAMP}<a name="line.671"></a>
-<span class="sourceLineNo">672</span>   * provided current timestamp.<a name="line.672"></a>
-<span class="sourceLineNo">673</span>   * @param values<a name="line.673"></a>
-<span class="sourceLineNo">674</span>   * @param now<a name="line.674"></a>
-<span class="sourceLineNo">675</span>   */<a name="line.675"></a>
-<span class="sourceLineNo">676</span>  void updateCellTimestamps(final Iterable&lt;List&lt;Cell&gt;&gt; values, final byte[] now)<a name="line.676"></a>
-<span class="sourceLineNo">677</span>      throws IOException;<a name="line.677"></a>
-<span class="sourceLineNo">678</span><a name="line.678"></a>
-<span class="sourceLineNo">679</span>  ///////////////////////////////////////////////////////////////////////////<a name="line.679"></a>
-<span class="sourceLineNo">680</span>  // Flushes, compactions, splits, etc.<a name="line.680"></a>
-<span class="sourceLineNo">681</span>  // Wizards only, please<a name="line.681"></a>
-<span class="sourceLineNo">682</span><a name="line.682"></a>
-<span class="sourceLineNo">683</span>  interface FlushResult {<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    enum Result {<a name="line.684"></a>
-<span class="sourceLineNo">685</span>      FLUSHED_NO_COMPACTION_NEEDED,<a name="line.685"></a>
-<span class="sourceLineNo">686</span>      FLUSHED_COMPACTION_NEEDED,<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      // Special case where a flush didn't run because there's nothing in the memstores. Used when<a name="line.687"></a>
-<span class="sourceLineNo">688</span>      // bulk loading to know when we can still load even if a flush didn't happen.<a name="line.688"></a>
-<span class="sourceLineNo">689</span>      CANNOT_FLUSH_MEMSTORE_EMPTY,<a name="line.689"></a>
-<span class="sourceLineNo">690</span>      CANNOT_FLUSH<a name="line.690"></a>
-<span class="sourceLineNo">691</span>    }<a name="line.691"></a>
-<span class="sourceLineNo">692</span><a name="line.692"></a>
-<span class="sourceLineNo">693</span>    /** @return the detailed result code */<a name="line.693"></a>
-<span class="sourceLineNo">694</span>    Result getResult();<a name="line.694"></a>
-<span class="sourceLineNo">695</span><a name="line.695"></a>
-<span class="sourceLineNo">696</span>    /** @return true if the memstores were flushed, else false */<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    boolean isFlushSucceeded();<a name="line.697"></a>
-<span class="sourceLineNo">698</span><a name="line.698"></a>
-<span class="sourceLineNo">699</span>    /** @return True if the flush requested a compaction, else false */<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    boolean isCompactionNeeded();<a name="line.700"></a>
-<span class="sourceLineNo">701</span>  }<a name="line.701"></a>
+<span class="sourceLineNo">660</span>   * Prepare a delete for a row mutation processor<a name="line.660"></a>
+<span class="sourceLineNo">661</span>   * @param delete The passed delete is modified by this method. WARNING!<a name="line.661"></a>
+<span class="sourceLineNo">662</span>   * @throws IOException<a name="line.662"></a>
+<span class="sourceLineNo">663</span>   */<a name="line.663"></a>
+<span class="sourceLineNo">664</span>  void prepareDelete(Delete delete) throws IOException;<a name="line.664"></a>
+<span class="sourceLineNo">665</span><a name="line.665"></a>
+<span class="sourceLineNo">666</span>  /**<a name="line.666"></a>
+<span class="sourceLineNo">667</span>   * Set up correct timestamps in the KVs in Delete object.<a name="line.667"></a>
+<span class="sourceLineNo">668</span>   * &lt;p&gt;Caller should have the row and region locks.<a name="line.668"></a>
+<span class="sourceLineNo">669</span>   * @param mutation<a name="line.669"></a>
+<span class="sourceLineNo">670</span>   * @param familyCellMap<a name="line.670"></a>
+<span class="sourceLineNo">671</span>   * @param now<a name="line.671"></a>
+<span class="sourceLineNo">672</span>   * @throws IOException<a name="line.672"></a>
+<span class="sourceLineNo">673</span>   */<a name="line.673"></a>
+<span class="sourceLineNo">674</span>  void prepareDeleteTimestamps(Mutation mutation, Map&lt;byte[], List&lt;Cell&gt;&gt; familyCellMap,<a name="line.674"></a>
+<span class="sourceLineNo">675</span>      byte[] now) throws IOException;<a name="line.675"></a>
+<span class="sourceLineNo">676</span><a name="line.676"></a>
+<span class="sourceLineNo">677</span>  /**<a name="line.677"></a>
+<span class="sourceLineNo">678</span>   * Replace any cell timestamps set to {@link org.apache.hadoop.hbase.HConstants#LATEST_TIMESTAMP}<a name="line.678"></a>
+<span class="sourceLineNo">679</span>   * provided current timestamp.<a name="line.679"></a>
+<span class="sourceLineNo">680</span>   * @param values<a name="line.680"></a>
+<span class="sourceLineNo">681</span>   * @param now<a name="line.681"></a>
+<span class="sourceLineNo">682</span>   */<a name="line.682"></a>
+<span class="sourceLineNo">683</span>  void updateCellTimestamps(final Iterable&lt;List&lt;Cell&gt;&gt; values, final byte[] now)<a name="line.683"></a>
+<span class="sourceLineNo">684</span>      throws IOException;<a name="line.684"></a>
+<span class="sourceLineNo">685</span><a name="line.685"></a>
+<span class="sourceLineNo">686</span>  ///////////////////////////////////////////////////////////////////////////<a name="line.686"></a>
+<span class="sourceLineNo">687</span>  // Flushes, compactions, splits, etc.<a name="line.687"></a>
+<span class="sourceLineNo">688</span>  // Wizards only, please<a name="line.688"></a>
+<span class="sourceLineNo">689</span><a name="line.689"></a>
+<span class="sourceLineNo">690</span>  interface FlushResult {<a name="line.690"></a>
+<span class="sourceLineNo">691</span>    enum Result {<a name="line.691"></a>
+<span class="sourceLineNo">692</span>      FLUSHED_NO_COMPACTION_NEEDED,<a name="line.692"></a>
+<span class="sourceLineNo">693</span>      FLUSHED_COMPACTION_NEEDED,<a name="line.693"></a>
+<span class="sourceLineNo">694</span>      // Special case where a flush didn't run because there's nothing in the memstores. Used when<a name="line.694"></a>
+<span class="sourceLineNo">695</span>      // bulk loading to know when we can still load even if a flush didn't happen.<a name="line.695"></a>
+<span class="sourceLineNo">696</span>      CANNOT_FLUSH_MEMSTORE_EMPTY,<a name="line.696"></a>
+<span class="sourceLineNo">697</span>      CANNOT_FLUSH<a name="line.697"></a>
+<span class="sourceLineNo">698</span>    }<a name="line.698"></a>
+<span class="sourceLineNo">699</span><a name="line.699"></a>
+<span class="sourceLineNo">700</span>    /** @return the detailed result code */<a name="line.700"></a>
+<span class="sourceLineNo">701</span>    Result getResult();<a name="line.701"></a>
 <span class="sourceLineNo">702</span><a name="line.702"></a>
-<span class="sourceLineNo">703</span>  /**<a name="line.703"></a>
-<span class="sourceLineNo">704</span>   * Flush the cache.<a name="line.704"></a>
-<span class="sourceLineNo">705</span>   *<a name="line.705"></a>
-<span class="sourceLineNo">706</span>   * &lt;p&gt;When this method is called the cache will be flushed unless:<a name="line.706"></a>
-<span class="sourceLineNo">707</span>   * &lt;ol&gt;<a name="line.707"></a>
-<span class="sourceLineNo">708</span>   *   &lt;li&gt;the cache is empty&lt;/li&gt;<a name="line.708"></a>
-<span class="sourceLineNo">709</span>   *   &lt;li&gt;the region is closed.&lt;/li&gt;<a name="line.709"></a>
-<span class="sourceLineNo">710</span>   *   &lt;li&gt;a flush is already in progress&lt;/li&gt;<a name="line.710"></a>
-<span class="sourceLineNo">711</span>   *   &lt;li&gt;writes are disabled&lt;/li&gt;<a name="line.711"></a>
-<span class="sourceLineNo">712</span>   * &lt;/ol&gt;<a name="line.712"></a>
-<span class="sourceLineNo">713</span>   *<a name="line.713"></a>
-<span class="sourceLineNo">714</span>   * &lt;p&gt;This method may block for some time, so it should not be called from a<a name="line.714"></a>
-<span class="sourceLineNo">715</span>   * time-sensitive thread.<a name="line.715"></a>
-<span class="sourceLineNo">716</span>   * @param force whether we want to force a flush of all stores<a name="line.716"></a>
-<span class="sourceLineNo">717</span>   * @return FlushResult indicating whether the flush was successful or not and if<a name="line.717"></a>
-<span class="sourceLineNo">718</span>   * the region needs compacting<a name="line.718"></a>
-<span class="sourceLineNo">719</span>   *<a name="line.719"></a>
-<span class="sourceLineNo">720</span>   * @throws IOException general io exceptions<a name="line.720"></a>
-<span class="sourceLineNo">721</span>   * because a snapshot was not properly persisted.<a name="line.721"></a>
-<span class="sourceLineNo">722</span>   */<a name="line.722"></a>
-<span class="sourceLineNo">723</span>  FlushResult flush(boolean force) throws IOException;<a name="line.723"></a>
-<span class="sourceLineNo">724</span><a name="line.724"></a>
-<span class="sourceLineNo">725</span>  /**<a name="line.725"></a>
-<span class="sourceLineNo">726</span>   * Synchronously compact all stores in the region.<a name="line.726"></a>
-<span class="sourceLineNo">727</span>   * &lt;p&gt;This operation could block for a long time, so don't call it from a<a name="line.727"></a>
-<span class="sourceLineNo">728</span>   * time-sensitive thread.<a name="line.728"></a>
-<span class="sourceLineNo">729</span>   * &lt;p&gt;Note that no locks are taken to prevent possible conflicts between<a name="line.729"></a>
-<span class="sourceLineNo">730</span>   * compaction and splitting activities. The regionserver does not normally compact<a name="line.730"></a>
-<span class="sourceLineNo">731</span>   * and split in parallel. However by calling this method you may introduce<a name="line.731"></a>
-<span class="sourceLineNo">732</span>   * unexpected and unhandled concurrency. Don't do this unless you know what<a name="line.732"></a>
-<span class="sourceLineNo">733</span>   * you are doing.<a name="line.733"></a>
-<span class="sourceLineNo">734</span>   *<a name="line.734"></a>
-<span class="sourceLineNo">735</span>   * @param majorCompaction True to force a major compaction regardless of thresholds<a name="line.735"></a>
-<span class="sourceLineNo">736</span>   * @throws IOException<a name="line.736"></a>
-<span class="sourceLineNo">737</span>   */<a name="line.737"></a>
-<span class="sourceLineNo">738</span>  void compact(final boolean majorCompaction) throws IOException;<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span>  /**<a name="line.740"></a>
-<span class="sourceLineNo">741</span>   * Trigger major compaction on all stores in the region.<a name="line.741"></a>
-<span class="sourceLineNo">742</span>   * &lt;p&gt;<a name="line.742"></a>
-<span class="sourceLineNo">743</span>   * Compaction will be performed asynchronously to this call by the RegionServer's<a name="line.743"></a>
-<span class="sourceLineNo">744</span>   * CompactSplitThread. See also {@link Store#triggerMajorCompaction()}<a name="line.744"></a>
-<span class="sourceLineNo">745</span>   * @throws IOException<a name="line.745"></a>
-<span class="sourceLineNo">746</span>   */<a name="line.746"></a>
-<span class="sourceLineNo">747</span>  void triggerMajorCompaction() throws IOException;<a name="line.747"></a>
-<span class="sourceLineNo">748</span><a name="line.748"></a>
-<span class="sourceLineNo">749</span>  /**<a name="line.749"></a>
-<span class="sourceLineNo">750</span>   * @return if a given region is in compaction now.<a name="line.750"></a>
-<span class="sourceLineNo">751</span>   */<a name="line.751"></a>
-<span class="sourceLineNo">752</span>  CompactionState getCompactionState();<a name="line.752"></a>
-<span class="sourceLineNo">753</span><a name="line.753"></a>
-<span class="sourceLineNo">754</span>  /** Wait for all current flushes and compactions of the region to complete */<a name="line.754"></a>
-<span class="sourceLineNo">755</span>  void waitForFlushesAndCompactions();<a name="

<TRUNCATED>

[11/33] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/Region.BulkLoadListener.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/Region.BulkLoadListener.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/Region.BulkLoadListener.html
index b361c26..53efdb2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/Region.BulkLoadListener.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/Region.BulkLoadListener.html
@@ -255,7 +255,7 @@
 <span class="sourceLineNo">247</span>   */<a name="line.247"></a>
 <span class="sourceLineNo">248</span>  enum Operation {<a name="line.248"></a>
 <span class="sourceLineNo">249</span>    ANY, GET, PUT, DELETE, SCAN, APPEND, INCREMENT, SPLIT_REGION, MERGE_REGION, BATCH_MUTATE,<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    REPLAY_BATCH_MUTATE, COMPACT_REGION, REPLAY_EVENT<a name="line.250"></a>
+<span class="sourceLineNo">250</span>    REPLAY_BATCH_MUTATE, COMPACT_REGION, REPLAY_EVENT, SNAPSHOT<a name="line.250"></a>
 <span class="sourceLineNo">251</span>  }<a name="line.251"></a>
 <span class="sourceLineNo">252</span><a name="line.252"></a>
 <span class="sourceLineNo">253</span>  /**<a name="line.253"></a>
@@ -285,487 +285,494 @@
 <span class="sourceLineNo">277</span>   */<a name="line.277"></a>
 <span class="sourceLineNo">278</span>  void closeRegionOperation() throws IOException;<a name="line.278"></a>
 <span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span>  // Row write locks<a name="line.280"></a>
-<span class="sourceLineNo">281</span><a name="line.281"></a>
-<span class="sourceLineNo">282</span>  /**<a name="line.282"></a>
-<span class="sourceLineNo">283</span>   * Row lock held by a given thread.<a name="line.283"></a>
-<span class="sourceLineNo">284</span>   * One thread may acquire multiple locks on the same row simultaneously.<a name="line.284"></a>
-<span class="sourceLineNo">285</span>   * The locks must be released by calling release() from the same thread.<a name="line.285"></a>
-<span class="sourceLineNo">286</span>   */<a name="line.286"></a>
-<span class="sourceLineNo">287</span>  public interface RowLock {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    /**<a name="line.288"></a>
-<span class="sourceLineNo">289</span>     * Release the given lock.  If there are no remaining locks held by the current thread<a name="line.289"></a>
-<span class="sourceLineNo">290</span>     * then unlock the row and allow other threads to acquire the lock.<a name="line.290"></a>
-<span class="sourceLineNo">291</span>     * @throws IllegalArgumentException if called by a different thread than the lock owning<a name="line.291"></a>
-<span class="sourceLineNo">292</span>     *     thread<a name="line.292"></a>
-<span class="sourceLineNo">293</span>     */<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    void release();<a name="line.294"></a>
-<span class="sourceLineNo">295</span>  }<a name="line.295"></a>
-<span class="sourceLineNo">296</span><a name="line.296"></a>
-<span class="sourceLineNo">297</span>  /**<a name="line.297"></a>
-<span class="sourceLineNo">298</span>   *<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   * Get a row lock for the specified row. All locks are reentrant.<a name="line.299"></a>
-<span class="sourceLineNo">300</span>   *<a name="line.300"></a>
-<span class="sourceLineNo">301</span>   * Before calling this function make sure that a region operation has already been<a name="line.301"></a>
-<span class="sourceLineNo">302</span>   * started (the calling thread has already acquired the region-close-guard lock).<a name="line.302"></a>
-<span class="sourceLineNo">303</span>   * <a name="line.303"></a>
-<span class="sourceLineNo">304</span>   * NOTE: the boolean passed here has changed. It used to be a boolean that<a name="line.304"></a>
-<span class="sourceLineNo">305</span>   * stated whether or not to wait on the lock. Now it is whether it an exclusive<a name="line.305"></a>
-<span class="sourceLineNo">306</span>   * lock is requested.<a name="line.306"></a>
-<span class="sourceLineNo">307</span>   * <a name="line.307"></a>
-<span class="sourceLineNo">308</span>   * @param row The row actions will be performed against<a name="line.308"></a>
-<span class="sourceLineNo">309</span>   * @param readLock is the lock reader or writer. True indicates that a non-exclusive<a name="line.309"></a>
-<span class="sourceLineNo">310</span>   * lock is requested<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   * @see #startRegionOperation()<a name="line.311"></a>
-<span class="sourceLineNo">312</span>   * @see #startRegionOperation(Operation)<a name="line.312"></a>
-<span class="sourceLineNo">313</span>   */<a name="line.313"></a>
-<span class="sourceLineNo">314</span>  RowLock getRowLock(byte[] row, boolean readLock) throws IOException;<a name="line.314"></a>
-<span class="sourceLineNo">315</span><a name="line.315"></a>
-<span class="sourceLineNo">316</span>  /**<a name="line.316"></a>
-<span class="sourceLineNo">317</span>   * If the given list of row locks is not null, releases all locks.<a name="line.317"></a>
-<span class="sourceLineNo">318</span>   */<a name="line.318"></a>
-<span class="sourceLineNo">319</span>  void releaseRowLocks(List&lt;RowLock&gt; rowLocks);<a name="line.319"></a>
-<span class="sourceLineNo">320</span><a name="line.320"></a>
-<span class="sourceLineNo">321</span>  ///////////////////////////////////////////////////////////////////////////<a name="line.321"></a>
-<span class="sourceLineNo">322</span>  // Region operations<a name="line.322"></a>
-<span class="sourceLineNo">323</span><a name="line.323"></a>
-<span class="sourceLineNo">324</span>  /**<a name="line.324"></a>
-<span class="sourceLineNo">325</span>   * Perform one or more append operations on a row.<a name="line.325"></a>
-<span class="sourceLineNo">326</span>   * @param append<a name="line.326"></a>
-<span class="sourceLineNo">327</span>   * @param nonceGroup<a name="line.327"></a>
-<span class="sourceLineNo">328</span>   * @param nonce<a name="line.328"></a>
-<span class="sourceLineNo">329</span>   * @return result of the operation<a name="line.329"></a>
-<span class="sourceLineNo">330</span>   * @throws IOException<a name="line.330"></a>
-<span class="sourceLineNo">331</span>   */<a name="line.331"></a>
-<span class="sourceLineNo">332</span>  Result append(Append append, long nonceGroup, long nonce) throws IOException;<a name="line.332"></a>
-<span class="sourceLineNo">333</span><a name="line.333"></a>
-<span class="sourceLineNo">334</span>  /**<a name="line.334"></a>
-<span class="sourceLineNo">335</span>   * Perform a batch of mutations.<a name="line.335"></a>
-<span class="sourceLineNo">336</span>   * &lt;p&gt;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>   * Note this supports only Put and Delete mutations and will ignore other types passed.<a name="line.337"></a>
-<span class="sourceLineNo">338</span>   * @param mutations the list of mutations<a name="line.338"></a>
-<span class="sourceLineNo">339</span>   * @param nonceGroup<a name="line.339"></a>
-<span class="sourceLineNo">340</span>   * @param nonce<a name="line.340"></a>
-<span class="sourceLineNo">341</span>   * @return an array of OperationStatus which internally contains the<a name="line.341"></a>
-<span class="sourceLineNo">342</span>   *         OperationStatusCode and the exceptionMessage if any.<a name="line.342"></a>
-<span class="sourceLineNo">343</span>   * @throws IOException<a name="line.343"></a>
-<span class="sourceLineNo">344</span>   */<a name="line.344"></a>
-<span class="sourceLineNo">345</span>  OperationStatus[] batchMutate(Mutation[] mutations, long nonceGroup, long nonce)<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      throws IOException;<a name="line.346"></a>
-<span class="sourceLineNo">347</span><a name="line.347"></a>
-<span class="sourceLineNo">348</span>  /**<a name="line.348"></a>
-<span class="sourceLineNo">349</span>   * Replay a batch of mutations.<a name="line.349"></a>
-<span class="sourceLineNo">350</span>   * @param mutations mutations to replay.<a name="line.350"></a>
-<span class="sourceLineNo">351</span>   * @param replaySeqId<a name="line.351"></a>
-<span class="sourceLineNo">352</span>   * @return an array of OperationStatus which internally contains the<a name="line.352"></a>
-<span class="sourceLineNo">353</span>   *         OperationStatusCode and the exceptionMessage if any.<a name="line.353"></a>
-<span class="sourceLineNo">354</span>   * @throws IOException<a name="line.354"></a>
-<span class="sourceLineNo">355</span>   */<a name="line.355"></a>
-<span class="sourceLineNo">356</span>   OperationStatus[] batchReplay(MutationReplay[] mutations, long replaySeqId) throws IOException;<a name="line.356"></a>
-<span class="sourceLineNo">357</span><a name="line.357"></a>
-<span class="sourceLineNo">358</span>  /**<a name="line.358"></a>
-<span class="sourceLineNo">359</span>   * Atomically checks if a row/family/qualifier value matches the expected value and if it does,<a name="line.359"></a>
-<span class="sourceLineNo">360</span>   * it performs the mutation. If the passed value is null, the lack of column value<a name="line.360"></a>
-<span class="sourceLineNo">361</span>   * (ie: non-existence) is used. See checkAndRowMutate to do many checkAndPuts at a time on a<a name="line.361"></a>
-<span class="sourceLineNo">362</span>   * single row.<a name="line.362"></a>
-<span class="sourceLineNo">363</span>   * @param row to check<a name="line.363"></a>
-<span class="sourceLineNo">364</span>   * @param family column family to check<a name="line.364"></a>
-<span class="sourceLineNo">365</span>   * @param qualifier column qualifier to check<a name="line.365"></a>
-<span class="sourceLineNo">366</span>   * @param compareOp the comparison operator<a name="line.366"></a>
-<span class="sourceLineNo">367</span>   * @param comparator<a name="line.367"></a>
-<span class="sourceLineNo">368</span>   * @param mutation<a name="line.368"></a>
-<span class="sourceLineNo">369</span>   * @param writeToWAL<a name="line.369"></a>
-<span class="sourceLineNo">370</span>   * @return true if mutation was applied, false otherwise<a name="line.370"></a>
-<span class="sourceLineNo">371</span>   * @throws IOException<a name="line.371"></a>
-<span class="sourceLineNo">372</span>   */<a name="line.372"></a>
-<span class="sourceLineNo">373</span>  boolean checkAndMutate(byte [] row, byte [] family, byte [] qualifier, CompareOp compareOp,<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      ByteArrayComparable comparator, Mutation mutation, boolean writeToWAL) throws IOException;<a name="line.374"></a>
-<span class="sourceLineNo">375</span><a name="line.375"></a>
-<span class="sourceLineNo">376</span>  /**<a name="line.376"></a>
-<span class="sourceLineNo">377</span>   * Atomically checks if a row/family/qualifier value matches the expected values and if it does,<a name="line.377"></a>
-<span class="sourceLineNo">378</span>   * it performs the row mutations. If the passed value is null, the lack of column value<a name="line.378"></a>
-<span class="sourceLineNo">379</span>   * (ie: non-existence) is used. Use to do many mutations on a single row. Use checkAndMutate<a name="line.379"></a>
-<span class="sourceLineNo">380</span>   * to do one checkAndMutate at a time.<a name="line.380"></a>
-<span class="sourceLineNo">381</span>   * @param row to check<a name="line.381"></a>
-<span class="sourceLineNo">382</span>   * @param family column family to check<a name="line.382"></a>
-<span class="sourceLineNo">383</span>   * @param qualifier column qualifier to check<a name="line.383"></a>
-<span class="sourceLineNo">384</span>   * @param compareOp the comparison operator<a name="line.384"></a>
-<span class="sourceLineNo">385</span>   * @param comparator<a name="line.385"></a>
-<span class="sourceLineNo">386</span>   * @param mutations<a name="line.386"></a>
-<span class="sourceLineNo">387</span>   * @param writeToWAL<a name="line.387"></a>
-<span class="sourceLineNo">388</span>   * @return true if mutations were applied, false otherwise<a name="line.388"></a>
-<span class="sourceLineNo">389</span>   * @throws IOException<a name="line.389"></a>
-<span class="sourceLineNo">390</span>   */<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  boolean checkAndRowMutate(byte [] row, byte [] family, byte [] qualifier, CompareOp compareOp,<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      ByteArrayComparable comparator, RowMutations mutations, boolean writeToWAL)<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      throws IOException;<a name="line.393"></a>
-<span class="sourceLineNo">394</span><a name="line.394"></a>
-<span class="sourceLineNo">395</span>  /**<a name="line.395"></a>
-<span class="sourceLineNo">396</span>   * Deletes the specified cells/row.<a name="line.396"></a>
-<span class="sourceLineNo">397</span>   * @param delete<a name="line.397"></a>
-<span class="sourceLineNo">398</span>   * @throws IOException<a name="line.398"></a>
-<span class="sourceLineNo">399</span>   */<a name="line.399"></a>
-<span class="sourceLineNo">400</span>  void delete(Delete delete) throws IOException;<a name="line.400"></a>
+<span class="sourceLineNo">280</span>  /**<a name="line.280"></a>
+<span class="sourceLineNo">281</span>   * Closes the region operation lock. This needs to be called in the finally block corresponding<a name="line.281"></a>
+<span class="sourceLineNo">282</span>   * to the try block of {@link #startRegionOperation(Operation)}<a name="line.282"></a>
+<span class="sourceLineNo">283</span>   * @throws IOException<a name="line.283"></a>
+<span class="sourceLineNo">284</span>   */<a name="line.284"></a>
+<span class="sourceLineNo">285</span>  void closeRegionOperation(Operation op) throws IOException;<a name="line.285"></a>
+<span class="sourceLineNo">286</span><a name="line.286"></a>
+<span class="sourceLineNo">287</span>  // Row write locks<a name="line.287"></a>
+<span class="sourceLineNo">288</span><a name="line.288"></a>
+<span class="sourceLineNo">289</span>  /**<a name="line.289"></a>
+<span class="sourceLineNo">290</span>   * Row lock held by a given thread.<a name="line.290"></a>
+<span class="sourceLineNo">291</span>   * One thread may acquire multiple locks on the same row simultaneously.<a name="line.291"></a>
+<span class="sourceLineNo">292</span>   * The locks must be released by calling release() from the same thread.<a name="line.292"></a>
+<span class="sourceLineNo">293</span>   */<a name="line.293"></a>
+<span class="sourceLineNo">294</span>  public interface RowLock {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    /**<a name="line.295"></a>
+<span class="sourceLineNo">296</span>     * Release the given lock.  If there are no remaining locks held by the current thread<a name="line.296"></a>
+<span class="sourceLineNo">297</span>     * then unlock the row and allow other threads to acquire the lock.<a name="line.297"></a>
+<span class="sourceLineNo">298</span>     * @throws IllegalArgumentException if called by a different thread than the lock owning<a name="line.298"></a>
+<span class="sourceLineNo">299</span>     *     thread<a name="line.299"></a>
+<span class="sourceLineNo">300</span>     */<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    void release();<a name="line.301"></a>
+<span class="sourceLineNo">302</span>  }<a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span>  /**<a name="line.304"></a>
+<span class="sourceLineNo">305</span>   *<a name="line.305"></a>
+<span class="sourceLineNo">306</span>   * Get a row lock for the specified row. All locks are reentrant.<a name="line.306"></a>
+<span class="sourceLineNo">307</span>   *<a name="line.307"></a>
+<span class="sourceLineNo">308</span>   * Before calling this function make sure that a region operation has already been<a name="line.308"></a>
+<span class="sourceLineNo">309</span>   * started (the calling thread has already acquired the region-close-guard lock).<a name="line.309"></a>
+<span class="sourceLineNo">310</span>   * <a name="line.310"></a>
+<span class="sourceLineNo">311</span>   * NOTE: the boolean passed here has changed. It used to be a boolean that<a name="line.311"></a>
+<span class="sourceLineNo">312</span>   * stated whether or not to wait on the lock. Now it is whether it an exclusive<a name="line.312"></a>
+<span class="sourceLineNo">313</span>   * lock is requested.<a name="line.313"></a>
+<span class="sourceLineNo">314</span>   * <a name="line.314"></a>
+<span class="sourceLineNo">315</span>   * @param row The row actions will be performed against<a name="line.315"></a>
+<span class="sourceLineNo">316</span>   * @param readLock is the lock reader or writer. True indicates that a non-exclusive<a name="line.316"></a>
+<span class="sourceLineNo">317</span>   * lock is requested<a name="line.317"></a>
+<span class="sourceLineNo">318</span>   * @see #startRegionOperation()<a name="line.318"></a>
+<span class="sourceLineNo">319</span>   * @see #startRegionOperation(Operation)<a name="line.319"></a>
+<span class="sourceLineNo">320</span>   */<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  RowLock getRowLock(byte[] row, boolean readLock) throws IOException;<a name="line.321"></a>
+<span class="sourceLineNo">322</span><a name="line.322"></a>
+<span class="sourceLineNo">323</span>  /**<a name="line.323"></a>
+<span class="sourceLineNo">324</span>   * If the given list of row locks is not null, releases all locks.<a name="line.324"></a>
+<span class="sourceLineNo">325</span>   */<a name="line.325"></a>
+<span class="sourceLineNo">326</span>  void releaseRowLocks(List&lt;RowLock&gt; rowLocks);<a name="line.326"></a>
+<span class="sourceLineNo">327</span><a name="line.327"></a>
+<span class="sourceLineNo">328</span>  ///////////////////////////////////////////////////////////////////////////<a name="line.328"></a>
+<span class="sourceLineNo">329</span>  // Region operations<a name="line.329"></a>
+<span class="sourceLineNo">330</span><a name="line.330"></a>
+<span class="sourceLineNo">331</span>  /**<a name="line.331"></a>
+<span class="sourceLineNo">332</span>   * Perform one or more append operations on a row.<a name="line.332"></a>
+<span class="sourceLineNo">333</span>   * @param append<a name="line.333"></a>
+<span class="sourceLineNo">334</span>   * @param nonceGroup<a name="line.334"></a>
+<span class="sourceLineNo">335</span>   * @param nonce<a name="line.335"></a>
+<span class="sourceLineNo">336</span>   * @return result of the operation<a name="line.336"></a>
+<span class="sourceLineNo">337</span>   * @throws IOException<a name="line.337"></a>
+<span class="sourceLineNo">338</span>   */<a name="line.338"></a>
+<span class="sourceLineNo">339</span>  Result append(Append append, long nonceGroup, long nonce) throws IOException;<a name="line.339"></a>
+<span class="sourceLineNo">340</span><a name="line.340"></a>
+<span class="sourceLineNo">341</span>  /**<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   * Perform a batch of mutations.<a name="line.342"></a>
+<span class="sourceLineNo">343</span>   * &lt;p&gt;<a name="line.343"></a>
+<span class="sourceLineNo">344</span>   * Note this supports only Put and Delete mutations and will ignore other types passed.<a name="line.344"></a>
+<span class="sourceLineNo">345</span>   * @param mutations the list of mutations<a name="line.345"></a>
+<span class="sourceLineNo">346</span>   * @param nonceGroup<a name="line.346"></a>
+<span class="sourceLineNo">347</span>   * @param nonce<a name="line.347"></a>
+<span class="sourceLineNo">348</span>   * @return an array of OperationStatus which internally contains the<a name="line.348"></a>
+<span class="sourceLineNo">349</span>   *         OperationStatusCode and the exceptionMessage if any.<a name="line.349"></a>
+<span class="sourceLineNo">350</span>   * @throws IOException<a name="line.350"></a>
+<span class="sourceLineNo">351</span>   */<a name="line.351"></a>
+<span class="sourceLineNo">352</span>  OperationStatus[] batchMutate(Mutation[] mutations, long nonceGroup, long nonce)<a name="line.352"></a>
+<span class="sourceLineNo">353</span>      throws IOException;<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>  /**<a name="line.355"></a>
+<span class="sourceLineNo">356</span>   * Replay a batch of mutations.<a name="line.356"></a>
+<span class="sourceLineNo">357</span>   * @param mutations mutations to replay.<a name="line.357"></a>
+<span class="sourceLineNo">358</span>   * @param replaySeqId<a name="line.358"></a>
+<span class="sourceLineNo">359</span>   * @return an array of OperationStatus which internally contains the<a name="line.359"></a>
+<span class="sourceLineNo">360</span>   *         OperationStatusCode and the exceptionMessage if any.<a name="line.360"></a>
+<span class="sourceLineNo">361</span>   * @throws IOException<a name="line.361"></a>
+<span class="sourceLineNo">362</span>   */<a name="line.362"></a>
+<span class="sourceLineNo">363</span>   OperationStatus[] batchReplay(MutationReplay[] mutations, long replaySeqId) throws IOException;<a name="line.363"></a>
+<span class="sourceLineNo">364</span><a name="line.364"></a>
+<span class="sourceLineNo">365</span>  /**<a name="line.365"></a>
+<span class="sourceLineNo">366</span>   * Atomically checks if a row/family/qualifier value matches the expected value and if it does,<a name="line.366"></a>
+<span class="sourceLineNo">367</span>   * it performs the mutation. If the passed value is null, the lack of column value<a name="line.367"></a>
+<span class="sourceLineNo">368</span>   * (ie: non-existence) is used. See checkAndRowMutate to do many checkAndPuts at a time on a<a name="line.368"></a>
+<span class="sourceLineNo">369</span>   * single row.<a name="line.369"></a>
+<span class="sourceLineNo">370</span>   * @param row to check<a name="line.370"></a>
+<span class="sourceLineNo">371</span>   * @param family column family to check<a name="line.371"></a>
+<span class="sourceLineNo">372</span>   * @param qualifier column qualifier to check<a name="line.372"></a>
+<span class="sourceLineNo">373</span>   * @param compareOp the comparison operator<a name="line.373"></a>
+<span class="sourceLineNo">374</span>   * @param comparator<a name="line.374"></a>
+<span class="sourceLineNo">375</span>   * @param mutation<a name="line.375"></a>
+<span class="sourceLineNo">376</span>   * @param writeToWAL<a name="line.376"></a>
+<span class="sourceLineNo">377</span>   * @return true if mutation was applied, false otherwise<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   * @throws IOException<a name="line.378"></a>
+<span class="sourceLineNo">379</span>   */<a name="line.379"></a>
+<span class="sourceLineNo">380</span>  boolean checkAndMutate(byte [] row, byte [] family, byte [] qualifier, CompareOp compareOp,<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      ByteArrayComparable comparator, Mutation mutation, boolean writeToWAL) throws IOException;<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span>  /**<a name="line.383"></a>
+<span class="sourceLineNo">384</span>   * Atomically checks if a row/family/qualifier value matches the expected values and if it does,<a name="line.384"></a>
+<span class="sourceLineNo">385</span>   * it performs the row mutations. If the passed value is null, the lack of column value<a name="line.385"></a>
+<span class="sourceLineNo">386</span>   * (ie: non-existence) is used. Use to do many mutations on a single row. Use checkAndMutate<a name="line.386"></a>
+<span class="sourceLineNo">387</span>   * to do one checkAndMutate at a time.<a name="line.387"></a>
+<span class="sourceLineNo">388</span>   * @param row to check<a name="line.388"></a>
+<span class="sourceLineNo">389</span>   * @param family column family to check<a name="line.389"></a>
+<span class="sourceLineNo">390</span>   * @param qualifier column qualifier to check<a name="line.390"></a>
+<span class="sourceLineNo">391</span>   * @param compareOp the comparison operator<a name="line.391"></a>
+<span class="sourceLineNo">392</span>   * @param comparator<a name="line.392"></a>
+<span class="sourceLineNo">393</span>   * @param mutations<a name="line.393"></a>
+<span class="sourceLineNo">394</span>   * @param writeToWAL<a name="line.394"></a>
+<span class="sourceLineNo">395</span>   * @return true if mutations were applied, false otherwise<a name="line.395"></a>
+<span class="sourceLineNo">396</span>   * @throws IOException<a name="line.396"></a>
+<span class="sourceLineNo">397</span>   */<a name="line.397"></a>
+<span class="sourceLineNo">398</span>  boolean checkAndRowMutate(byte [] row, byte [] family, byte [] qualifier, CompareOp compareOp,<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      ByteArrayComparable comparator, RowMutations mutations, boolean writeToWAL)<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      throws IOException;<a name="line.400"></a>
 <span class="sourceLineNo">401</span><a name="line.401"></a>
 <span class="sourceLineNo">402</span>  /**<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   * Do a get based on the get parameter.<a name="line.403"></a>
-<span class="sourceLineNo">404</span>   * @param get query parameters<a name="line.404"></a>
-<span class="sourceLineNo">405</span>   * @return result of the operation<a name="line.405"></a>
+<span class="sourceLineNo">403</span>   * Deletes the specified cells/row.<a name="line.403"></a>
+<span class="sourceLineNo">404</span>   * @param delete<a name="line.404"></a>
+<span class="sourceLineNo">405</span>   * @throws IOException<a name="line.405"></a>
 <span class="sourceLineNo">406</span>   */<a name="line.406"></a>
-<span class="sourceLineNo">407</span>  Result get(Get get) throws IOException;<a name="line.407"></a>
+<span class="sourceLineNo">407</span>  void delete(Delete delete) throws IOException;<a name="line.407"></a>
 <span class="sourceLineNo">408</span><a name="line.408"></a>
 <span class="sourceLineNo">409</span>  /**<a name="line.409"></a>
 <span class="sourceLineNo">410</span>   * Do a get based on the get parameter.<a name="line.410"></a>
 <span class="sourceLineNo">411</span>   * @param get query parameters<a name="line.411"></a>
-<span class="sourceLineNo">412</span>   * @param withCoprocessor invoke coprocessor or not. We don't want to<a name="line.412"></a>
-<span class="sourceLineNo">413</span>   * always invoke cp.<a name="line.413"></a>
-<span class="sourceLineNo">414</span>   * @return list of cells resulting from the operation<a name="line.414"></a>
-<span class="sourceLineNo">415</span>   */<a name="line.415"></a>
-<span class="sourceLineNo">416</span>  List&lt;Cell&gt; get(Get get, boolean withCoprocessor) throws IOException;<a name="line.416"></a>
-<span class="sourceLineNo">417</span><a name="line.417"></a>
-<span class="sourceLineNo">418</span>  /**<a name="line.418"></a>
-<span class="sourceLineNo">419</span>   * Do a get for duplicate non-idempotent operation.<a name="line.419"></a>
-<span class="sourceLineNo">420</span>   * @param get query parameters.<a name="line.420"></a>
-<span class="sourceLineNo">421</span>   * @param withCoprocessor<a name="line.421"></a>
-<span class="sourceLineNo">422</span>   * @param nonceGroup Nonce group.<a name="line.422"></a>
-<span class="sourceLineNo">423</span>   * @param nonce Nonce.<a name="line.423"></a>
-<span class="sourceLineNo">424</span>   * @return list of cells resulting from the operation<a name="line.424"></a>
-<span class="sourceLineNo">425</span>   * @throws IOException<a name="line.425"></a>
-<span class="sourceLineNo">426</span>   */<a name="line.426"></a>
-<span class="sourceLineNo">427</span>  List&lt;Cell&gt; get(Get get, boolean withCoprocessor, long nonceGroup, long nonce) throws IOException;<a name="line.427"></a>
-<span class="sourceLineNo">428</span><a name="line.428"></a>
-<span class="sourceLineNo">429</span>  /**<a name="line.429"></a>
-<span class="sourceLineNo">430</span>   * Return an iterator that scans over the HRegion, returning the indicated<a name="line.430"></a>
-<span class="sourceLineNo">431</span>   * columns and rows specified by the {@link Scan}.<a name="line.431"></a>
-<span class="sourceLineNo">432</span>   * &lt;p&gt;<a name="line.432"></a>
-<span class="sourceLineNo">433</span>   * This Iterator must be closed by the caller.<a name="line.433"></a>
-<span class="sourceLineNo">434</span>   *<a name="line.434"></a>
-<span class="sourceLineNo">435</span>   * @param scan configured {@link Scan}<a name="line.435"></a>
-<span class="sourceLineNo">436</span>   * @return RegionScanner<a name="line.436"></a>
-<span class="sourceLineNo">437</span>   * @throws IOException read exceptions<a name="line.437"></a>
-<span class="sourceLineNo">438</span>   */<a name="line.438"></a>
-<span class="sourceLineNo">439</span>  RegionScanner getScanner(Scan scan) throws IOException;<a name="line.439"></a>
-<span class="sourceLineNo">440</span><a name="line.440"></a>
-<span class="sourceLineNo">441</span>  /**<a name="line.441"></a>
-<span class="sourceLineNo">442</span>   * Return an iterator that scans over the HRegion, returning the indicated columns and rows<a name="line.442"></a>
-<span class="sourceLineNo">443</span>   * specified by the {@link Scan}. The scanner will also include the additional scanners passed<a name="line.443"></a>
-<span class="sourceLineNo">444</span>   * along with the scanners for the specified Scan instance. Should be careful with the usage to<a name="line.444"></a>
-<span class="sourceLineNo">445</span>   * pass additional scanners only within this Region<a name="line.445"></a>
-<span class="sourceLineNo">446</span>   * &lt;p&gt;<a name="line.446"></a>
-<span class="sourceLineNo">447</span>   * This Iterator must be closed by the caller.<a name="line.447"></a>
-<span class="sourceLineNo">448</span>   *<a name="line.448"></a>
-<span class="sourceLineNo">449</span>   * @param scan configured {@link Scan}<a name="line.449"></a>
-<span class="sourceLineNo">450</span>   * @param additionalScanners Any additional scanners to be used<a name="line.450"></a>
-<span class="sourceLineNo">451</span>   * @return RegionScanner<a name="line.451"></a>
-<span class="sourceLineNo">452</span>   * @throws IOException read exceptions<a name="line.452"></a>
-<span class="sourceLineNo">453</span>   */<a name="line.453"></a>
-<span class="sourceLineNo">454</span>  RegionScanner getScanner(Scan scan, List&lt;KeyValueScanner&gt; additionalScanners) throws IOException;<a name="line.454"></a>
-<span class="sourceLineNo">455</span><a name="line.455"></a>
-<span class="sourceLineNo">456</span>  /** The comparator to be used with the region */<a name="line.456"></a>
-<span class="sourceLineNo">457</span>  CellComparator getCellComparator();<a name="line.457"></a>
-<span class="sourceLineNo">458</span><a name="line.458"></a>
-<span class="sourceLineNo">459</span>  /**<a name="line.459"></a>
-<span class="sourceLineNo">460</span>   * Perform one or more increment operations on a row.<a name="line.460"></a>
-<span class="sourceLineNo">461</span>   * @param increment<a name="line.461"></a>
-<span class="sourceLineNo">462</span>   * @param nonceGroup<a name="line.462"></a>
-<span class="sourceLineNo">463</span>   * @param nonce<a name="line.463"></a>
-<span class="sourceLineNo">464</span>   * @return result of the operation<a name="line.464"></a>
-<span class="sourceLineNo">465</span>   * @throws IOException<a name="line.465"></a>
-<span class="sourceLineNo">466</span>   */<a name="line.466"></a>
-<span class="sourceLineNo">467</span>  Result increment(Increment increment, long nonceGroup, long nonce) throws IOException;<a name="line.467"></a>
-<span class="sourceLineNo">468</span><a name="line.468"></a>
-<span class="sourceLineNo">469</span>  /**<a name="line.469"></a>
-<span class="sourceLineNo">470</span>   * Performs multiple mutations atomically on a single row. Currently<a name="line.470"></a>
-<span class="sourceLineNo">471</span>   * {@link Put} and {@link Delete} are supported.<a name="line.471"></a>
-<span class="sourceLineNo">472</span>   *<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   * @param mutations object that specifies the set of mutations to perform atomically<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   * @throws IOException<a name="line.474"></a>
-<span class="sourceLineNo">475</span>   */<a name="line.475"></a>
-<span class="sourceLineNo">476</span>  void mutateRow(RowMutations mutations) throws IOException;<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>  /**<a name="line.478"></a>
-<span class="sourceLineNo">479</span>   * Perform atomic mutations within the region.<a name="line.479"></a>
-<span class="sourceLineNo">480</span>   *<a name="line.480"></a>
-<span class="sourceLineNo">481</span>   * @param mutations The list of mutations to perform.<a name="line.481"></a>
-<span class="sourceLineNo">482</span>   * &lt;code&gt;mutations&lt;/code&gt; can contain operations for multiple rows.<a name="line.482"></a>
-<span class="sourceLineNo">483</span>   * Caller has to ensure that all rows are contained in this region.<a name="line.483"></a>
-<span class="sourceLineNo">484</span>   * @param rowsToLock Rows to lock<a name="line.484"></a>
-<span class="sourceLineNo">485</span>   * @param nonceGroup Optional nonce group of the operation (client Id)<a name="line.485"></a>
-<span class="sourceLineNo">486</span>   * @param nonce Optional nonce of the operation (unique random id to ensure "more idempotence")<a name="line.486"></a>
-<span class="sourceLineNo">487</span>   * If multiple rows are locked care should be taken that<a name="line.487"></a>
-<span class="sourceLineNo">488</span>   * &lt;code&gt;rowsToLock&lt;/code&gt; is sorted in order to avoid deadlocks.<a name="line.488"></a>
-<span class="sourceLineNo">489</span>   * @throws IOException<a name="line.489"></a>
-<span class="sourceLineNo">490</span>   */<a name="line.490"></a>
-<span class="sourceLineNo">491</span>  void mutateRowsWithLocks(Collection&lt;Mutation&gt; mutations, Collection&lt;byte[]&gt; rowsToLock,<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      long nonceGroup, long nonce) throws IOException;<a name="line.492"></a>
-<span class="sourceLineNo">493</span><a name="line.493"></a>
-<span class="sourceLineNo">494</span>  /**<a name="line.494"></a>
-<span class="sourceLineNo">495</span>   * Performs atomic multiple reads and writes on a given row.<a name="line.495"></a>
-<span class="sourceLineNo">496</span>   *<a name="line.496"></a>
-<span class="sourceLineNo">497</span>   * @param processor The object defines the reads and writes to a row.<a name="line.497"></a>
-<span class="sourceLineNo">498</span>   */<a name="line.498"></a>
-<span class="sourceLineNo">499</span>  void processRowsWithLocks(RowProcessor&lt;?,?&gt; processor) throws IOException;<a name="line.499"></a>
+<span class="sourceLineNo">412</span>   * @return result of the operation<a name="line.412"></a>
+<span class="sourceLineNo">413</span>   */<a name="line.413"></a>
+<span class="sourceLineNo">414</span>  Result get(Get get) throws IOException;<a name="line.414"></a>
+<span class="sourceLineNo">415</span><a name="line.415"></a>
+<span class="sourceLineNo">416</span>  /**<a name="line.416"></a>
+<span class="sourceLineNo">417</span>   * Do a get based on the get parameter.<a name="line.417"></a>
+<span class="sourceLineNo">418</span>   * @param get query parameters<a name="line.418"></a>
+<span class="sourceLineNo">419</span>   * @param withCoprocessor invoke coprocessor or not. We don't want to<a name="line.419"></a>
+<span class="sourceLineNo">420</span>   * always invoke cp.<a name="line.420"></a>
+<span class="sourceLineNo">421</span>   * @return list of cells resulting from the operation<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   */<a name="line.422"></a>
+<span class="sourceLineNo">423</span>  List&lt;Cell&gt; get(Get get, boolean withCoprocessor) throws IOException;<a name="line.423"></a>
+<span class="sourceLineNo">424</span><a name="line.424"></a>
+<span class="sourceLineNo">425</span>  /**<a name="line.425"></a>
+<span class="sourceLineNo">426</span>   * Do a get for duplicate non-idempotent operation.<a name="line.426"></a>
+<span class="sourceLineNo">427</span>   * @param get query parameters.<a name="line.427"></a>
+<span class="sourceLineNo">428</span>   * @param withCoprocessor<a name="line.428"></a>
+<span class="sourceLineNo">429</span>   * @param nonceGroup Nonce group.<a name="line.429"></a>
+<span class="sourceLineNo">430</span>   * @param nonce Nonce.<a name="line.430"></a>
+<span class="sourceLineNo">431</span>   * @return list of cells resulting from the operation<a name="line.431"></a>
+<span class="sourceLineNo">432</span>   * @throws IOException<a name="line.432"></a>
+<span class="sourceLineNo">433</span>   */<a name="line.433"></a>
+<span class="sourceLineNo">434</span>  List&lt;Cell&gt; get(Get get, boolean withCoprocessor, long nonceGroup, long nonce) throws IOException;<a name="line.434"></a>
+<span class="sourceLineNo">435</span><a name="line.435"></a>
+<span class="sourceLineNo">436</span>  /**<a name="line.436"></a>
+<span class="sourceLineNo">437</span>   * Return an iterator that scans over the HRegion, returning the indicated<a name="line.437"></a>
+<span class="sourceLineNo">438</span>   * columns and rows specified by the {@link Scan}.<a name="line.438"></a>
+<span class="sourceLineNo">439</span>   * &lt;p&gt;<a name="line.439"></a>
+<span class="sourceLineNo">440</span>   * This Iterator must be closed by the caller.<a name="line.440"></a>
+<span class="sourceLineNo">441</span>   *<a name="line.441"></a>
+<span class="sourceLineNo">442</span>   * @param scan configured {@link Scan}<a name="line.442"></a>
+<span class="sourceLineNo">443</span>   * @return RegionScanner<a name="line.443"></a>
+<span class="sourceLineNo">444</span>   * @throws IOException read exceptions<a name="line.444"></a>
+<span class="sourceLineNo">445</span>   */<a name="line.445"></a>
+<span class="sourceLineNo">446</span>  RegionScanner getScanner(Scan scan) throws IOException;<a name="line.446"></a>
+<span class="sourceLineNo">447</span><a name="line.447"></a>
+<span class="sourceLineNo">448</span>  /**<a name="line.448"></a>
+<span class="sourceLineNo">449</span>   * Return an iterator that scans over the HRegion, returning the indicated columns and rows<a name="line.449"></a>
+<span class="sourceLineNo">450</span>   * specified by the {@link Scan}. The scanner will also include the additional scanners passed<a name="line.450"></a>
+<span class="sourceLineNo">451</span>   * along with the scanners for the specified Scan instance. Should be careful with the usage to<a name="line.451"></a>
+<span class="sourceLineNo">452</span>   * pass additional scanners only within this Region<a name="line.452"></a>
+<span class="sourceLineNo">453</span>   * &lt;p&gt;<a name="line.453"></a>
+<span class="sourceLineNo">454</span>   * This Iterator must be closed by the caller.<a name="line.454"></a>
+<span class="sourceLineNo">455</span>   *<a name="line.455"></a>
+<span class="sourceLineNo">456</span>   * @param scan configured {@link Scan}<a name="line.456"></a>
+<span class="sourceLineNo">457</span>   * @param additionalScanners Any additional scanners to be used<a name="line.457"></a>
+<span class="sourceLineNo">458</span>   * @return RegionScanner<a name="line.458"></a>
+<span class="sourceLineNo">459</span>   * @throws IOException read exceptions<a name="line.459"></a>
+<span class="sourceLineNo">460</span>   */<a name="line.460"></a>
+<span class="sourceLineNo">461</span>  RegionScanner getScanner(Scan scan, List&lt;KeyValueScanner&gt; additionalScanners) throws IOException;<a name="line.461"></a>
+<span class="sourceLineNo">462</span><a name="line.462"></a>
+<span class="sourceLineNo">463</span>  /** The comparator to be used with the region */<a name="line.463"></a>
+<span class="sourceLineNo">464</span>  CellComparator getCellComparator();<a name="line.464"></a>
+<span class="sourceLineNo">465</span><a name="line.465"></a>
+<span class="sourceLineNo">466</span>  /**<a name="line.466"></a>
+<span class="sourceLineNo">467</span>   * Perform one or more increment operations on a row.<a name="line.467"></a>
+<span class="sourceLineNo">468</span>   * @param increment<a name="line.468"></a>
+<span class="sourceLineNo">469</span>   * @param nonceGroup<a name="line.469"></a>
+<span class="sourceLineNo">470</span>   * @param nonce<a name="line.470"></a>
+<span class="sourceLineNo">471</span>   * @return result of the operation<a name="line.471"></a>
+<span class="sourceLineNo">472</span>   * @throws IOException<a name="line.472"></a>
+<span class="sourceLineNo">473</span>   */<a name="line.473"></a>
+<span class="sourceLineNo">474</span>  Result increment(Increment increment, long nonceGroup, long nonce) throws IOException;<a name="line.474"></a>
+<span class="sourceLineNo">475</span><a name="line.475"></a>
+<span class="sourceLineNo">476</span>  /**<a name="line.476"></a>
+<span class="sourceLineNo">477</span>   * Performs multiple mutations atomically on a single row. Currently<a name="line.477"></a>
+<span class="sourceLineNo">478</span>   * {@link Put} and {@link Delete} are supported.<a name="line.478"></a>
+<span class="sourceLineNo">479</span>   *<a name="line.479"></a>
+<span class="sourceLineNo">480</span>   * @param mutations object that specifies the set of mutations to perform atomically<a name="line.480"></a>
+<span class="sourceLineNo">481</span>   * @throws IOException<a name="line.481"></a>
+<span class="sourceLineNo">482</span>   */<a name="line.482"></a>
+<span class="sourceLineNo">483</span>  void mutateRow(RowMutations mutations) throws IOException;<a name="line.483"></a>
+<span class="sourceLineNo">484</span><a name="line.484"></a>
+<span class="sourceLineNo">485</span>  /**<a name="line.485"></a>
+<span class="sourceLineNo">486</span>   * Perform atomic mutations within the region.<a name="line.486"></a>
+<span class="sourceLineNo">487</span>   *<a name="line.487"></a>
+<span class="sourceLineNo">488</span>   * @param mutations The list of mutations to perform.<a name="line.488"></a>
+<span class="sourceLineNo">489</span>   * &lt;code&gt;mutations&lt;/code&gt; can contain operations for multiple rows.<a name="line.489"></a>
+<span class="sourceLineNo">490</span>   * Caller has to ensure that all rows are contained in this region.<a name="line.490"></a>
+<span class="sourceLineNo">491</span>   * @param rowsToLock Rows to lock<a name="line.491"></a>
+<span class="sourceLineNo">492</span>   * @param nonceGroup Optional nonce group of the operation (client Id)<a name="line.492"></a>
+<span class="sourceLineNo">493</span>   * @param nonce Optional nonce of the operation (unique random id to ensure "more idempotence")<a name="line.493"></a>
+<span class="sourceLineNo">494</span>   * If multiple rows are locked care should be taken that<a name="line.494"></a>
+<span class="sourceLineNo">495</span>   * &lt;code&gt;rowsToLock&lt;/code&gt; is sorted in order to avoid deadlocks.<a name="line.495"></a>
+<span class="sourceLineNo">496</span>   * @throws IOException<a name="line.496"></a>
+<span class="sourceLineNo">497</span>   */<a name="line.497"></a>
+<span class="sourceLineNo">498</span>  void mutateRowsWithLocks(Collection&lt;Mutation&gt; mutations, Collection&lt;byte[]&gt; rowsToLock,<a name="line.498"></a>
+<span class="sourceLineNo">499</span>      long nonceGroup, long nonce) throws IOException;<a name="line.499"></a>
 <span class="sourceLineNo">500</span><a name="line.500"></a>
 <span class="sourceLineNo">501</span>  /**<a name="line.501"></a>
 <span class="sourceLineNo">502</span>   * Performs atomic multiple reads and writes on a given row.<a name="line.502"></a>
 <span class="sourceLineNo">503</span>   *<a name="line.503"></a>
 <span class="sourceLineNo">504</span>   * @param processor The object defines the reads and writes to a row.<a name="line.504"></a>
-<span class="sourceLineNo">505</span>   * @param nonceGroup Optional nonce group of the operation (client Id)<a name="line.505"></a>
-<span class="sourceLineNo">506</span>   * @param nonce Optional nonce of the operation (unique random id to ensure "more idempotence")<a name="line.506"></a>
-<span class="sourceLineNo">507</span>   */<a name="line.507"></a>
-<span class="sourceLineNo">508</span>  void processRowsWithLocks(RowProcessor&lt;?,?&gt; processor, long nonceGroup, long nonce)<a name="line.508"></a>
-<span class="sourceLineNo">509</span>      throws IOException;<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span>  /**<a name="line.511"></a>
-<span class="sourceLineNo">512</span>   * Performs atomic multiple reads and writes on a given row.<a name="line.512"></a>
-<span class="sourceLineNo">513</span>   *<a name="line.513"></a>
-<span class="sourceLineNo">514</span>   * @param processor The object defines the reads and writes to a row.<a name="line.514"></a>
-<span class="sourceLineNo">515</span>   * @param timeout The timeout of the processor.process() execution<a name="line.515"></a>
-<span class="sourceLineNo">516</span>   *                Use a negative number to switch off the time bound<a name="line.516"></a>
-<span class="sourceLineNo">517</span>   * @param nonceGroup Optional nonce group of the operation (client Id)<a name="line.517"></a>
-<span class="sourceLineNo">518</span>   * @param nonce Optional nonce of the operation (unique random id to ensure "more idempotence")<a name="line.518"></a>
-<span class="sourceLineNo">519</span>   */<a name="line.519"></a>
-<span class="sourceLineNo">520</span>  void processRowsWithLocks(RowProcessor&lt;?,?&gt; processor, long timeout, long nonceGroup, long nonce)<a name="line.520"></a>
-<span class="sourceLineNo">521</span>      throws IOException;<a name="line.521"></a>
-<span class="sourceLineNo">522</span><a name="line.522"></a>
-<span class="sourceLineNo">523</span>  /**<a name="line.523"></a>
-<span class="sourceLineNo">524</span>   * Puts some data in the table.<a name="line.524"></a>
-<span class="sourceLineNo">525</span>   * @param put<a name="line.525"></a>
-<span class="sourceLineNo">526</span>   * @throws IOException<a name="line.526"></a>
-<span class="sourceLineNo">527</span>   */<a name="line.527"></a>
-<span class="sourceLineNo">528</span>  void put(Put put) throws IOException;<a name="line.528"></a>
+<span class="sourceLineNo">505</span>   */<a name="line.505"></a>
+<span class="sourceLineNo">506</span>  void processRowsWithLocks(RowProcessor&lt;?,?&gt; processor) throws IOException;<a name="line.506"></a>
+<span class="sourceLineNo">507</span><a name="line.507"></a>
+<span class="sourceLineNo">508</span>  /**<a name="line.508"></a>
+<span class="sourceLineNo">509</span>   * Performs atomic multiple reads and writes on a given row.<a name="line.509"></a>
+<span class="sourceLineNo">510</span>   *<a name="line.510"></a>
+<span class="sourceLineNo">511</span>   * @param processor The object defines the reads and writes to a row.<a name="line.511"></a>
+<span class="sourceLineNo">512</span>   * @param nonceGroup Optional nonce group of the operation (client Id)<a name="line.512"></a>
+<span class="sourceLineNo">513</span>   * @param nonce Optional nonce of the operation (unique random id to ensure "more idempotence")<a name="line.513"></a>
+<span class="sourceLineNo">514</span>   */<a name="line.514"></a>
+<span class="sourceLineNo">515</span>  void processRowsWithLocks(RowProcessor&lt;?,?&gt; processor, long nonceGroup, long nonce)<a name="line.515"></a>
+<span class="sourceLineNo">516</span>      throws IOException;<a name="line.516"></a>
+<span class="sourceLineNo">517</span><a name="line.517"></a>
+<span class="sourceLineNo">518</span>  /**<a name="line.518"></a>
+<span class="sourceLineNo">519</span>   * Performs atomic multiple reads and writes on a given row.<a name="line.519"></a>
+<span class="sourceLineNo">520</span>   *<a name="line.520"></a>
+<span class="sourceLineNo">521</span>   * @param processor The object defines the reads and writes to a row.<a name="line.521"></a>
+<span class="sourceLineNo">522</span>   * @param timeout The timeout of the processor.process() execution<a name="line.522"></a>
+<span class="sourceLineNo">523</span>   *                Use a negative number to switch off the time bound<a name="line.523"></a>
+<span class="sourceLineNo">524</span>   * @param nonceGroup Optional nonce group of the operation (client Id)<a name="line.524"></a>
+<span class="sourceLineNo">525</span>   * @param nonce Optional nonce of the operation (unique random id to ensure "more idempotence")<a name="line.525"></a>
+<span class="sourceLineNo">526</span>   */<a name="line.526"></a>
+<span class="sourceLineNo">527</span>  void processRowsWithLocks(RowProcessor&lt;?,?&gt; processor, long timeout, long nonceGroup, long nonce)<a name="line.527"></a>
+<span class="sourceLineNo">528</span>      throws IOException;<a name="line.528"></a>
 <span class="sourceLineNo">529</span><a name="line.529"></a>
 <span class="sourceLineNo">530</span>  /**<a name="line.530"></a>
-<span class="sourceLineNo">531</span>   * Listener class to enable callers of<a name="line.531"></a>
-<span class="sourceLineNo">532</span>   * bulkLoadHFile() to perform any necessary<a name="line.532"></a>
-<span class="sourceLineNo">533</span>   * pre/post processing of a given bulkload call<a name="line.533"></a>
+<span class="sourceLineNo">531</span>   * Puts some data in the table.<a name="line.531"></a>
+<span class="sourceLineNo">532</span>   * @param put<a name="line.532"></a>
+<span class="sourceLineNo">533</span>   * @throws IOException<a name="line.533"></a>
 <span class="sourceLineNo">534</span>   */<a name="line.534"></a>
-<span class="sourceLineNo">535</span>  interface BulkLoadListener {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    /**<a name="line.536"></a>
-<span class="sourceLineNo">537</span>     * Called before an HFile is actually loaded<a name="line.537"></a>
-<span class="sourceLineNo">538</span>     * @param family family being loaded to<a name="line.538"></a>
-<span class="sourceLineNo">539</span>     * @param srcPath path of HFile<a name="line.539"></a>
-<span class="sourceLineNo">540</span>     * @return final path to be used for actual loading<a name="line.540"></a>
-<span class="sourceLineNo">541</span>     * @throws IOException<a name="line.541"></a>
-<span class="sourceLineNo">542</span>     */<a name="line.542"></a>
-<span class="sourceLineNo">543</span>    String prepareBulkLoad(byte[] family, String srcPath, boolean copyFile)<a name="line.543"></a>
-<span class="sourceLineNo">544</span>        throws IOException;<a name="line.544"></a>
-<span class="sourceLineNo">545</span><a name="line.545"></a>
-<span class="sourceLineNo">546</span>    /**<a name="line.546"></a>
-<span class="sourceLineNo">547</span>     * Called after a successful HFile load<a name="line.547"></a>
-<span class="sourceLineNo">548</span>     * @param family family being loaded to<a name="line.548"></a>
-<span class="sourceLineNo">549</span>     * @param srcPath path of HFile<a name="line.549"></a>
-<span class="sourceLineNo">550</span>     * @throws IOException<a name="line.550"></a>
-<span class="sourceLineNo">551</span>     */<a name="line.551"></a>
-<span class="sourceLineNo">552</span>    void doneBulkLoad(byte[] family, String srcPath) throws IOException;<a name="line.552"></a>
-<span class="sourceLineNo">553</span><a name="line.553"></a>
-<span class="sourceLineNo">554</span>    /**<a name="line.554"></a>
-<span class="sourceLineNo">555</span>     * Called after a failed HFile load<a name="line.555"></a>
-<span class="sourceLineNo">556</span>     * @param family family being loaded to<a name="line.556"></a>
-<span class="sourceLineNo">557</span>     * @param srcPath path of HFile<a name="line.557"></a>
-<span class="sourceLineNo">558</span>     * @throws IOException<a name="line.558"></a>
-<span class="sourceLineNo">559</span>     */<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    void failedBulkLoad(byte[] family, String srcPath) throws IOException;<a name="line.560"></a>
-<span class="sourceLineNo">561</span>  }<a name="line.561"></a>
-<span class="sourceLineNo">562</span><a name="line.562"></a>
-<span class="sourceLineNo">563</span>  /**<a name="line.563"></a>
-<span class="sourceLineNo">564</span>   * Attempts to atomically load a group of hfiles.  This is critical for loading<a name="line.564"></a>
-<span class="sourceLineNo">565</span>   * rows with multiple column families atomically.<a name="line.565"></a>
-<span class="sourceLineNo">566</span>   *<a name="line.566"></a>
-<span class="sourceLineNo">567</span>   * @param familyPaths List of Pair&amp;lt;byte[] column family, String hfilePath&amp;gt;<a name="line.567"></a>
-<span class="sourceLineNo">568</span>   * @param bulkLoadListener Internal hooks enabling massaging/preparation of a<a name="line.568"></a>
-<span class="sourceLineNo">569</span>   * file about to be bulk loaded<a name="line.569"></a>
-<span class="sourceLineNo">570</span>   * @param assignSeqId<a name="line.570"></a>
-<span class="sourceLineNo">571</span>   * @return Map from family to List of store file paths if successful, null if failed recoverably<a name="line.571"></a>
-<span class="sourceLineNo">572</span>   * @throws IOException if failed unrecoverably.<a name="line.572"></a>
-<span class="sourceLineNo">573</span>   */<a name="line.573"></a>
-<span class="sourceLineNo">574</span>  Map&lt;byte[], List&lt;Path&gt;&gt; bulkLoadHFiles(Collection&lt;Pair&lt;byte[], String&gt;&gt; familyPaths,<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      boolean assignSeqId, BulkLoadListener bulkLoadListener) throws IOException;<a name="line.575"></a>
-<span class="sourceLineNo">576</span><a name="line.576"></a>
-<span class="sourceLineNo">577</span>  /**<a name="line.577"></a>
-<span class="sourceLineNo">578</span>   * Attempts to atomically load a group of hfiles.  This is critical for loading<a name="line.578"></a>
-<span class="sourceLineNo">579</span>   * rows with multiple column families atomically.<a name="line.579"></a>
-<span class="sourceLineNo">580</span>   *<a name="line.580"></a>
-<span class="sourceLineNo">581</span>   * @param familyPaths List of Pair&amp;lt;byte[] column family, String hfilePath&amp;gt;<a name="line.581"></a>
-<span class="sourceLineNo">582</span>   * @param assignSeqId<a name="line.582"></a>
-<span class="sourceLineNo">583</span>   * @param bulkLoadListener Internal hooks enabling massaging/preparation of a<a name="line.583"></a>
-<span class="sourceLineNo">584</span>   * file about to be bulk loaded<a name="line.584"></a>
-<span class="sourceLineNo">585</span>   * @param copyFile always copy hfiles if true<a name="line.585"></a>
-<span class="sourceLineNo">586</span>   * @return Map from family to List of store file paths if successful, null if failed recoverably<a name="line.586"></a>
-<span class="sourceLineNo">587</span>   * @throws IOException if failed unrecoverably.<a name="line.587"></a>
-<span class="sourceLineNo">588</span>   */<a name="line.588"></a>
-<span class="sourceLineNo">589</span>  Map&lt;byte[], List&lt;Path&gt;&gt; bulkLoadHFiles(Collection&lt;Pair&lt;byte[], String&gt;&gt; familyPaths,<a name="line.589"></a>
-<span class="sourceLineNo">590</span>      boolean assignSeqId, BulkLoadListener bulkLoadListener, boolean copyFile) throws IOException;<a name="line.590"></a>
-<span class="sourceLineNo">591</span><a name="line.591"></a>
-<span class="sourceLineNo">592</span>  ///////////////////////////////////////////////////////////////////////////<a name="line.592"></a>
-<span class="sourceLineNo">593</span>  // Coprocessors<a name="line.593"></a>
-<span class="sourceLineNo">594</span><a name="line.594"></a>
-<span class="sourceLineNo">595</span>  /** @return the coprocessor host */<a name="line.595"></a>
-<span class="sourceLineNo">596</span>  RegionCoprocessorHost getCoprocessorHost();<a name="line.596"></a>
-<span class="sourceLineNo">597</span><a name="line.597"></a>
-<span class="sourceLineNo">598</span>  /**<a name="line.598"></a>
-<span class="sourceLineNo">599</span>   * Executes a single protocol buffer coprocessor endpoint {@link Service} method using<a name="line.599"></a>
-<span class="sourceLineNo">600</span>   * the registered protocol handlers.  {@link Service} implementations must be registered via the<a name="line.600"></a>
-<span class="sourceLineNo">601</span>   * {@link Region#registerService(com.google.protobuf.Service)}<a name="line.601"></a>
-<span class="sourceLineNo">602</span>   * method before they are available.<a name="line.602"></a>
-<span class="sourceLineNo">603</span>   *<a name="line.603"></a>
-<span class="sourceLineNo">604</span>   * @param controller an {@code RpcContoller} implementation to pass to the invoked service<a name="line.604"></a>
-<span class="sourceLineNo">605</span>   * @param call a {@code CoprocessorServiceCall} instance identifying the service, method,<a name="line.605"></a>
-<span class="sourceLineNo">606</span>   *     and parameters for the method invocation<a name="line.606"></a>
-<span class="sourceLineNo">607</span>   * @return a protocol buffer {@code Message} instance containing the method's result<a name="line.607"></a>
-<span class="sourceLineNo">608</span>   * @throws IOException if no registered service handler is found or an error<a name="line.608"></a>
-<span class="sourceLineNo">609</span>   *     occurs during the invocation<a name="line.609"></a>
-<span class="sourceLineNo">610</span>   * @see org.apache.hadoop.hbase.regionserver.Region#registerService(com.google.protobuf.Service)<a name="line.610"></a>
-<span class="sourceLineNo">611</span>   */<a name="line.611"></a>
-<span class="sourceLineNo">612</span>  com.google.protobuf.Message execService(com.google.protobuf.RpcController controller,<a name="line.612"></a>
-<span class="sourceLineNo">613</span>      CoprocessorServiceCall call)<a name="line.613"></a>
-<span class="sourceLineNo">614</span>  throws IOException;<a name="line.614"></a>
-<span class="sourceLineNo">615</span><a name="line.615"></a>
-<span class="sourceLineNo">616</span>  /**<a name="line.616"></a>
-<span class="sourceLineNo">617</span>   * Registers a new protocol buffer {@link Service} subclass as a coprocessor endpoint to<a name="line.617"></a>
-<span class="sourceLineNo">618</span>   * be available for handling Region#execService(com.google.protobuf.RpcController,<a name="line.618"></a>
-<span class="sourceLineNo">619</span>   *    org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceCall) calls.<a name="line.619"></a>
-<span class="sourceLineNo">620</span>   *<a name="line.620"></a>
-<span class="sourceLineNo">621</span>   * &lt;p&gt;<a name="line.621"></a>
-<span class="sourceLineNo">622</span>   * Only a single instance may be registered per region for a given {@link Service} subclass (the<a name="line.622"></a>
-<span class="sourceLineNo">623</span>   * instances are keyed on {@link com.google.protobuf.Descriptors.ServiceDescriptor#getFullName()}.<a name="line.623"></a>
-<span class="sourceLineNo">624</span>   * After the first registration, subsequent calls with the same service name will fail with<a name="line.624"></a>
-<span class="sourceLineNo">625</span>   * a return value of {@code false}.<a name="line.625"></a>
-<span class="sourceLineNo">626</span>   * &lt;/p&gt;<a name="line.626"></a>
-<span class="sourceLineNo">627</span>   * @param instance the {@code Service} subclass instance to expose as a coprocessor endpoint<a name="line.627"></a>
-<span class="sourceLineNo">628</span>   * @return {@code true} if the registration was successful, {@code false}<a name="line.628"></a>
-<span class="sourceLineNo">629</span>   * otherwise<a name="line.629"></a>
-<span class="sourceLineNo">630</span>   */<a name="line.630"></a>
-<span class="sourceLineNo">631</span>  boolean registerService(com.google.protobuf.Service instance);<a name="line.631"></a>
-<span class="sourceLineNo">632</span><a name="line.632"></a>
-<span class="sourceLineNo">633</span>  ///////////////////////////////////////////////////////////////////////////<a name="line.633"></a>
-<span class="sourceLineNo">634</span>  // RowMutation processor support<a name="line.634"></a>
-<span class="sourceLineNo">635</span><a name="line.635"></a>
-<span class="sourceLineNo">636</span>  /**<a name="line.636"></a>
-<span class="sourceLineNo">637</span>   * Check the collection of families for validity.<a name="line.637"></a>
-<span class="sourceLineNo">638</span>   * @param families<a name="line.638"></a>
-<span class="sourceLineNo">639</span>   * @throws NoSuchColumnFamilyException<a name="line.639"></a>
-<span class="sourceLineNo">640</span>   */<a name="line.640"></a>
-<span class="sourceLineNo">641</span>  void checkFamilies(Collection&lt;byte[]&gt; families) throws NoSuchColumnFamilyException;<a name="line.641"></a>
+<span class="sourceLineNo">535</span>  void put(Put put) throws IOException;<a name="line.535"></a>
+<span class="sourceLineNo">536</span><a name="line.536"></a>
+<span class="sourceLineNo">537</span>  /**<a name="line.537"></a>
+<span class="sourceLineNo">538</span>   * Listener class to enable callers of<a name="line.538"></a>
+<span class="sourceLineNo">539</span>   * bulkLoadHFile() to perform any necessary<a name="line.539"></a>
+<span class="sourceLineNo">540</span>   * pre/post processing of a given bulkload call<a name="line.540"></a>
+<span class="sourceLineNo">541</span>   */<a name="line.541"></a>
+<span class="sourceLineNo">542</span>  interface BulkLoadListener {<a name="line.542"></a>
+<span class="sourceLineNo">543</span>    /**<a name="line.543"></a>
+<span class="sourceLineNo">544</span>     * Called before an HFile is actually loaded<a name="line.544"></a>
+<span class="sourceLineNo">545</span>     * @param family family being loaded to<a name="line.545"></a>
+<span class="sourceLineNo">546</span>     * @param srcPath path of HFile<a name="line.546"></a>
+<span class="sourceLineNo">547</span>     * @return final path to be used for actual loading<a name="line.547"></a>
+<span class="sourceLineNo">548</span>     * @throws IOException<a name="line.548"></a>
+<span class="sourceLineNo">549</span>     */<a name="line.549"></a>
+<span class="sourceLineNo">550</span>    String prepareBulkLoad(byte[] family, String srcPath, boolean copyFile)<a name="line.550"></a>
+<span class="sourceLineNo">551</span>        throws IOException;<a name="line.551"></a>
+<span class="sourceLineNo">552</span><a name="line.552"></a>
+<span class="sourceLineNo">553</span>    /**<a name="line.553"></a>
+<span class="sourceLineNo">554</span>     * Called after a successful HFile load<a name="line.554"></a>
+<span class="sourceLineNo">555</span>     * @param family family being loaded to<a name="line.555"></a>
+<span class="sourceLineNo">556</span>     * @param srcPath path of HFile<a name="line.556"></a>
+<span class="sourceLineNo">557</span>     * @throws IOException<a name="line.557"></a>
+<span class="sourceLineNo">558</span>     */<a name="line.558"></a>
+<span class="sourceLineNo">559</span>    void doneBulkLoad(byte[] family, String srcPath) throws IOException;<a name="line.559"></a>
+<span class="sourceLineNo">560</span><a name="line.560"></a>
+<span class="sourceLineNo">561</span>    /**<a name="line.561"></a>
+<span class="sourceLineNo">562</span>     * Called after a failed HFile load<a name="line.562"></a>
+<span class="sourceLineNo">563</span>     * @param family family being loaded to<a name="line.563"></a>
+<span class="sourceLineNo">564</span>     * @param srcPath path of HFile<a name="line.564"></a>
+<span class="sourceLineNo">565</span>     * @throws IOException<a name="line.565"></a>
+<span class="sourceLineNo">566</span>     */<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    void failedBulkLoad(byte[] family, String srcPath) throws IOException;<a name="line.567"></a>
+<span class="sourceLineNo">568</span>  }<a name="line.568"></a>
+<span class="sourceLineNo">569</span><a name="line.569"></a>
+<span class="sourceLineNo">570</span>  /**<a name="line.570"></a>
+<span class="sourceLineNo">571</span>   * Attempts to atomically load a group of hfiles.  This is critical for loading<a name="line.571"></a>
+<span class="sourceLineNo">572</span>   * rows with multiple column families atomically.<a name="line.572"></a>
+<span class="sourceLineNo">573</span>   *<a name="line.573"></a>
+<span class="sourceLineNo">574</span>   * @param familyPaths List of Pair&amp;lt;byte[] column family, String hfilePath&amp;gt;<a name="line.574"></a>
+<span class="sourceLineNo">575</span>   * @param bulkLoadListener Internal hooks enabling massaging/preparation of a<a name="line.575"></a>
+<span class="sourceLineNo">576</span>   * file about to be bulk loaded<a name="line.576"></a>
+<span class="sourceLineNo">577</span>   * @param assignSeqId<a name="line.577"></a>
+<span class="sourceLineNo">578</span>   * @return Map from family to List of store file paths if successful, null if failed recoverably<a name="line.578"></a>
+<span class="sourceLineNo">579</span>   * @throws IOException if failed unrecoverably.<a name="line.579"></a>
+<span class="sourceLineNo">580</span>   */<a name="line.580"></a>
+<span class="sourceLineNo">581</span>  Map&lt;byte[], List&lt;Path&gt;&gt; bulkLoadHFiles(Collection&lt;Pair&lt;byte[], String&gt;&gt; familyPaths,<a name="line.581"></a>
+<span class="sourceLineNo">582</span>      boolean assignSeqId, BulkLoadListener bulkLoadListener) throws IOException;<a name="line.582"></a>
+<span class="sourceLineNo">583</span><a name="line.583"></a>
+<span class="sourceLineNo">584</span>  /**<a name="line.584"></a>
+<span class="sourceLineNo">585</span>   * Attempts to atomically load a group of hfiles.  This is critical for loading<a name="line.585"></a>
+<span class="sourceLineNo">586</span>   * rows with multiple column families atomically.<a name="line.586"></a>
+<span class="sourceLineNo">587</span>   *<a name="line.587"></a>
+<span class="sourceLineNo">588</span>   * @param familyPaths List of Pair&amp;lt;byte[] column family, String hfilePath&amp;gt;<a name="line.588"></a>
+<span class="sourceLineNo">589</span>   * @param assignSeqId<a name="line.589"></a>
+<span class="sourceLineNo">590</span>   * @param bulkLoadListener Internal hooks enabling massaging/preparation of a<a name="line.590"></a>
+<span class="sourceLineNo">591</span>   * file about to be bulk loaded<a name="line.591"></a>
+<span class="sourceLineNo">592</span>   * @param copyFile always copy hfiles if true<a name="line.592"></a>
+<span class="sourceLineNo">593</span>   * @return Map from family to List of store file paths if successful, null if failed recoverably<a name="line.593"></a>
+<span class="sourceLineNo">594</span>   * @throws IOException if failed unrecoverably.<a name="line.594"></a>
+<span class="sourceLineNo">595</span>   */<a name="line.595"></a>
+<span class="sourceLineNo">596</span>  Map&lt;byte[], List&lt;Path&gt;&gt; bulkLoadHFiles(Collection&lt;Pair&lt;byte[], String&gt;&gt; familyPaths,<a name="line.596"></a>
+<span class="sourceLineNo">597</span>      boolean assignSeqId, BulkLoadListener bulkLoadListener, boolean copyFile) throws IOException;<a name="line.597"></a>
+<span class="sourceLineNo">598</span><a name="line.598"></a>
+<span class="sourceLineNo">599</span>  ///////////////////////////////////////////////////////////////////////////<a name="line.599"></a>
+<span class="sourceLineNo">600</span>  // Coprocessors<a name="line.600"></a>
+<span class="sourceLineNo">601</span><a name="line.601"></a>
+<span class="sourceLineNo">602</span>  /** @return the coprocessor host */<a name="line.602"></a>
+<span class="sourceLineNo">603</span>  RegionCoprocessorHost getCoprocessorHost();<a name="line.603"></a>
+<span class="sourceLineNo">604</span><a name="line.604"></a>
+<span class="sourceLineNo">605</span>  /**<a name="line.605"></a>
+<span class="sourceLineNo">606</span>   * Executes a single protocol buffer coprocessor endpoint {@link Service} method using<a name="line.606"></a>
+<span class="sourceLineNo">607</span>   * the registered protocol handlers.  {@link Service} implementations must be registered via the<a name="line.607"></a>
+<span class="sourceLineNo">608</span>   * {@link Region#registerService(com.google.protobuf.Service)}<a name="line.608"></a>
+<span class="sourceLineNo">609</span>   * method before they are available.<a name="line.609"></a>
+<span class="sourceLineNo">610</span>   *<a name="line.610"></a>
+<span class="sourceLineNo">611</span>   * @param controller an {@code RpcContoller} implementation to pass to the invoked service<a name="line.611"></a>
+<span class="sourceLineNo">612</span>   * @param call a {@code CoprocessorServiceCall} instance identifying the service, method,<a name="line.612"></a>
+<span class="sourceLineNo">613</span>   *     and parameters for the method invocation<a name="line.613"></a>
+<span class="sourceLineNo">614</span>   * @return a protocol buffer {@code Message} instance containing the method's result<a name="line.614"></a>
+<span class="sourceLineNo">615</span>   * @throws IOException if no registered service handler is found or an error<a name="line.615"></a>
+<span class="sourceLineNo">616</span>   *     occurs during the invocation<a name="line.616"></a>
+<span class="sourceLineNo">617</span>   * @see org.apache.hadoop.hbase.regionserver.Region#registerService(com.google.protobuf.Service)<a name="line.617"></a>
+<span class="sourceLineNo">618</span>   */<a name="line.618"></a>
+<span class="sourceLineNo">619</span>  com.google.protobuf.Message execService(com.google.protobuf.RpcController controller,<a name="line.619"></a>
+<span class="sourceLineNo">620</span>      CoprocessorServiceCall call)<a name="line.620"></a>
+<span class="sourceLineNo">621</span>  throws IOException;<a name="line.621"></a>
+<span class="sourceLineNo">622</span><a name="line.622"></a>
+<span class="sourceLineNo">623</span>  /**<a name="line.623"></a>
+<span class="sourceLineNo">624</span>   * Registers a new protocol buffer {@link Service} subclass as a coprocessor endpoint to<a name="line.624"></a>
+<span class="sourceLineNo">625</span>   * be available for handling Region#execService(com.google.protobuf.RpcController,<a name="line.625"></a>
+<span class="sourceLineNo">626</span>   *    org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceCall) calls.<a name="line.626"></a>
+<span class="sourceLineNo">627</span>   *<a name="line.627"></a>
+<span class="sourceLineNo">628</span>   * &lt;p&gt;<a name="line.628"></a>
+<span class="sourceLineNo">629</span>   * Only a single instance may be registered per region for a given {@link Service} subclass (the<a name="line.629"></a>
+<span class="sourceLineNo">630</span>   * instances are keyed on {@link com.google.protobuf.Descriptors.ServiceDescriptor#getFullName()}.<a name="line.630"></a>
+<span class="sourceLineNo">631</span>   * After the first registration, subsequent calls with the same service name will fail with<a name="line.631"></a>
+<span class="sourceLineNo">632</span>   * a return value of {@code false}.<a name="line.632"></a>
+<span class="sourceLineNo">633</span>   * &lt;/p&gt;<a name="line.633"></a>
+<span class="sourceLineNo">634</span>   * @param instance the {@code Service} subclass instance to expose as a coprocessor endpoint<a name="line.634"></a>
+<span class="sourceLineNo">635</span>   * @return {@code true} if the registration was successful, {@code false}<a name="line.635"></a>
+<span class="sourceLineNo">636</span>   * otherwise<a name="line.636"></a>
+<span class="sourceLineNo">637</span>   */<a name="line.637"></a>
+<span class="sourceLineNo">638</span>  boolean registerService(com.google.protobuf.Service instance);<a name="line.638"></a>
+<span class="sourceLineNo">639</span><a name="line.639"></a>
+<span class="sourceLineNo">640</span>  ///////////////////////////////////////////////////////////////////////////<a name="line.640"></a>
+<span class="sourceLineNo">641</span>  // RowMutation processor support<a name="line.641"></a>
 <span class="sourceLineNo">642</span><a name="line.642"></a>
 <span class="sourceLineNo">643</span>  /**<a name="line.643"></a>
-<span class="sourceLineNo">644</span>   * Check the collection of families for valid timestamps<a name="line.644"></a>
-<span class="sourceLineNo">645</span>   * @param familyMap<a name="line.645"></a>
-<span class="sourceLineNo">646</span>   * @param now current timestamp<a name="line.646"></a>
-<span class="sourceLineNo">647</span>   * @throws FailedSanityCheckException<a name="line.647"></a>
-<span class="sourceLineNo">648</span>   */<a name="line.648"></a>
-<span class="sourceLineNo">649</span>  void checkTimestamps(Map&lt;byte[], List&lt;Cell&gt;&gt; familyMap, long now)<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      throws FailedSanityCheckException;<a name="line.650"></a>
-<span class="sourceLineNo">651</span><a name="line.651"></a>
-<span class="sourceLineNo">652</span>  /**<a name="line.652"></a>
-<span class="sourceLineNo">653</span>   * Prepare a delete for a row mutation processor<a name="line.653"></a>
-<span class="sourceLineNo">654</span>   * @param delete The passed delete is modified by this method. WARNING!<a name="line.654"></a>
-<span class="sourceLineNo">655</span>   * @throws IOException<a name="line.655"></a>
-<span class="sourceLineNo">656</span>   */<a name="line.656"></a>
-<span class="sourceLineNo">657</span>  void prepareDelete(Delete delete) throws IOException;<a name="line.657"></a>
+<span class="sourceLineNo">644</span>   * Check the collection of families for validity.<a name="line.644"></a>
+<span class="sourceLineNo">645</span>   * @param families<a name="line.645"></a>
+<span class="sourceLineNo">646</span>   * @throws NoSuchColumnFamilyException<a name="line.646"></a>
+<span class="sourceLineNo">647</span>   */<a name="line.647"></a>
+<span class="sourceLineNo">648</span>  void checkFamilies(Collection&lt;byte[]&gt; families) throws NoSuchColumnFamilyException;<a name="line.648"></a>
+<span class="sourceLineNo">649</span><a name="line.649"></a>
+<span class="sourceLineNo">650</span>  /**<a name="line.650"></a>
+<span class="sourceLineNo">651</span>   * Check the collection of families for valid timestamps<a name="line.651"></a>
+<span class="sourceLineNo">652</span>   * @param familyMap<a name="line.652"></a>
+<span class="sourceLineNo">653</span>   * @param now current timestamp<a name="line.653"></a>
+<span class="sourceLineNo">654</span>   * @throws FailedSanityCheckException<a name="line.654"></a>
+<span class="sourceLineNo">655</span>   */<a name="line.655"></a>
+<span class="sourceLineNo">656</span>  void checkTimestamps(Map&lt;byte[], List&lt;Cell&gt;&gt; familyMap, long now)<a name="line.656"></a>
+<span class="sourceLineNo">657</span>      throws FailedSanityCheckException;<a name="line.657"></a>
 <span class="sourceLineNo">658</span><a name="line.658"></a>
 <span class="sourceLineNo">659</span>  /**<a name="line.659"></a>
-<span class="sourceLineNo">660</span>   * Set up correct timestamps in the KVs in Delete object.<a name="line.660"></a>
-<span class="sourceLineNo">661</span>   * &lt;p&gt;Caller should have the row and region locks.<a name="line.661"></a>
-<span class="sourceLineNo">662</span>   * @param mutation<a name="line.662"></a>
-<span class="sourceLineNo">663</span>   * @param familyCellMap<a name="line.663"></a>
-<span class="sourceLineNo">664</span>   * @param now<a name="line.664"></a>
-<span class="sourceLineNo">665</span>   * @throws IOException<a name="line.665"></a>
-<span class="sourceLineNo">666</span>   */<a name="line.666"></a>
-<span class="sourceLineNo">667</span>  void prepareDeleteTimestamps(Mutation mutation, Map&lt;byte[], List&lt;Cell&gt;&gt; familyCellMap,<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      byte[] now) throws IOException;<a name="line.668"></a>
-<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span>  /**<a name="line.670"></a>
-<span class="sourceLineNo">671</span>   * Replace any cell timestamps set to {@link org.apache.hadoop.hbase.HConstants#LATEST_TIMESTAMP}<a name="line.671"></a>
-<span class="sourceLineNo">672</span>   * provided current timestamp.<a name="line.672"></a>
-<span class="sourceLineNo">673</span>   * @param values<a name="line.673"></a>
-<span class="sourceLineNo">674</span>   * @param now<a name="line.674"></a>
-<span class="sourceLineNo">675</span>   */<a name="line.675"></a>
-<span class="sourceLineNo">676</span>  void updateCellTimestamps(final Iterable&lt;List&lt;Cell&gt;&gt; values, final byte[] now)<a name="line.676"></a>
-<span class="sourceLineNo">677</span>      throws IOException;<a name="line.677"></a>
-<span class="sourceLineNo">678</span><a name="line.678"></a>
-<span class="sourceLineNo">679</span>  ///////////////////////////////////////////////////////////////////////////<a name="line.679"></a>
-<span class="sourceLineNo">680</span>  // Flushes, compactions, splits, etc.<a name="line.680"></a>
-<span class="sourceLineNo">681</span>  // Wizards only, please<a name="line.681"></a>
-<span class="sourceLineNo">682</span><a name="line.682"></a>
-<span class="sourceLineNo">683</span>  interface FlushResult {<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    enum Result {<a name="line.684"></a>
-<span class="sourceLineNo">685</span>      FLUSHED_NO_COMPACTION_NEEDED,<a name="line.685"></a>
-<span class="sourceLineNo">686</span>      FLUSHED_COMPACTION_NEEDED,<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      // Special case where a flush didn't run because there's nothing in the memstores. Used when<a name="line.687"></a>
-<span class="sourceLineNo">688</span>      // bulk loading to know when we can still load even if a flush didn't happen.<a name="line.688"></a>
-<span class="sourceLineNo">689</span>      CANNOT_FLUSH_MEMSTORE_EMPTY,<a name="line.689"></a>
-<span class="sourceLineNo">690</span>      CANNOT_FLUSH<a name="line.690"></a>
-<span class="sourceLineNo">691</span>    }<a name="line.691"></a>
-<span class="sourceLineNo">692</span><a name="line.692"></a>
-<span class="sourceLineNo">693</span>    /** @return the detailed result code */<a name="line.693"></a>
-<span class="sourceLineNo">694</span>    Result getResult();<a name="line.694"></a>
-<span class="sourceLineNo">695</span><a name="line.695"></a>
-<span class="sourceLineNo">696</span>    /** @return true if the memstores were flushed, else false */<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    boolean isFlushSucceeded();<a name="line.697"></a>
-<span class="sourceLineNo">698</span><a name="line.698"></a>
-<span class="sourceLineNo">699</span>    /** @return True if the flush requested a compaction, else false */<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    boolean isCompactionNeeded();<a name="line.700"></a>
-<span class="sourceLineNo">701</span>  }<a name="line.701"></a>
+<span class="sourceLineNo">660</span>   * Prepare a delete for a row mutation processor<a name="line.660"></a>
+<span class="sourceLineNo">661</span>   * @param delete The passed delete is modified by this method. WARNING!<a name="line.661"></a>
+<span class="sourceLineNo">662</span>   * @throws IOException<a name="line.662"></a>
+<span class="sourceLineNo">663</span>   */<a name="line.663"></a>
+<span class="sourceLineNo">664</span>  void prepareDelete(Delete delete) throws IOException;<a name="line.664"></a>
+<span class="sourceLineNo">665</span><a name="line.665"></a>
+<span class="sourceLineNo">666</span>  /**<a name="line.666"></a>
+<span class="sourceLineNo">667</span>   * Set up correct timestamps in the KVs in Delete object.<a name="line.667"></a>
+<span class="sourceLineNo">668</span>   * &lt;p&gt;Caller should have the row and region locks.<a name="line.668"></a>
+<span class="sourceLineNo">669</span>   * @param mutation<a name="line.669"></a>
+<span class="sourceLineNo">670</span>   * @param familyCellMap<a name="line.670"></a>
+<span class="sourceLineNo">671</span>   * @param now<a name="line.671"></a>
+<span class="sourceLineNo">672</span>   * @throws IOException<a name="line.672"></a>
+<span class="sourceLineNo">673</span>   */<a name="line.673"></a>
+<span class="sourceLineNo">674</span>  void prepareDeleteTimestamps(Mutation mutation, Map&lt;byte[], List&lt;Cell&gt;&gt; familyCellMap,<a name="line.674"></a>
+<span class="sourceLineNo">675</span>      byte[] now) throws IOException;<a name="line.675"></a>
+<span class="sourceLineNo">676</span><a name="line.676"></a>
+<span class="sourceLineNo">677</span>  /**<a name="line.677"></a>
+<span class="sourceLineNo">678</span>   * Replace any cell timestamps set to {@link org.apache.hadoop.hbase.HConstants#LATEST_TIMESTAMP}<a name="line.678"></a>
+<span class="sourceLineNo">679</span>   * provided current timestamp.<a name="line.679"></a>
+<span class="sourceLineNo">680</span>   * @param values<a name="line.680"></a>
+<span class="sourceLineNo">681</span>   * @param now<a name="line.681"></a>
+<span class="sourceLineNo">682</span>   */<a name="line.682"></a>
+<span class="sourceLineNo">683</span>  void updateCellTimestamps(final Iterable&lt;List&lt;Cell&gt;&gt; values, final byte[] now)<a name="line.683"></a>
+<span class="sourceLineNo">684</span>      throws IOException;<a name="line.684"></a>
+<span class="sourceLineNo">685</span><a name="line.685"></a>
+<span class="sourceLineNo">686</span>  ///////////////////////////////////////////////////////////////////////////<a name="line.686"></a>
+<span class="sourceLineNo">687</span>  // Flushes, compactions, splits, etc.<a name="line.687"></a>
+<span class="sourceLineNo">688</span>  // Wizards only, please<a name="line.688"></a>
+<span class="sourceLineNo">689</span><a name="line.689"></a>
+<span class="sourceLineNo">690</span>  interface FlushResult {<a name="line.690"></a>
+<span class="sourceLineNo">691</span>    enum Result {<a name="line.691"></a>
+<span class="sourceLineNo">692</span>      FLUSHED_NO_COMPACTION_NEEDED,<a name="line.692"></a>
+<span class="sourceLineNo">693</span>      FLUSHED_COMPACTION_NEEDED,<a name="line.693"></a>
+<span class="sourceLineNo">694</span>      // Special case where a flush didn't run because there's nothing in the memstores. Used when<a name="line.694"></a>
+<span class="sourceLineNo">695</span>      // bulk loading to know when we can still load even if a flush didn't happen.<a name="line.695"></a>
+<span class="sourceLineNo">696</span>      CANNOT_FLUSH_MEMSTORE_EMPTY,<a name="line.696"></a>
+<span class="sourceLineNo">697</span>      CANNOT_FLUSH<a name="line.697"></a>
+<span class="sourceLineNo">698</span>    }<a name="line.698"></a>
+<span class="sourceLineNo">699</span><a name="line.699"></a>
+<span class="sourceLineNo">700</span>    /** @return the detailed result code */<a name="line.700"></a>
+<span class="sourceLineNo">701</span>    Result getResult();<a name="line.701"></a>
 <span class="sourceLineNo">702</span><a name="line.702"></a>
-<span class="sourceLineNo">703</span>  /**<a name="line.703"></a>
-<span class="sourceLineNo">704</span>   * Flush the cache.<a name="line.704"></a>
-<span class="sourceLineNo">705</span>   *<a name="line.705"></a>
-<span class="sourceLineNo">706</span>   * &lt;p&gt;When this method is called the cache will be flushed unless:<a name="line.706"></a>
-<span class="sourceLineNo">707</span>   * &lt;ol&gt;<a name="line.707"></a>
-<span class="sourceLineNo">708</span>   *   &lt;li&gt;the cache is empty&lt;/li&gt;<a name="line.708"></a>
-<span class="sourceLineNo">709</span>   *   &lt;li&gt;the region is closed.&lt;/li&gt;<a name="line.709"></a>
-<span class="sourceLineNo">710</span>   *   &lt;li&gt;a flush is already in progress&lt;/li&gt;<a name="line.710"></a>
-<span class="sourceLineNo">711</span>   *   &lt;li&gt;writes are disabled&lt;/li&gt;<a name="line.711"></a>
-<span class="sourceLineNo">712</span>   * &lt;/ol&gt;<a name="line.712"></a>
-<span class="sourceLineNo">713</span>   *<a name="line.713"></a>
-<span class="sourceLineNo">714</span>   * &lt;p&gt;This method may block for some time, so it should not be called from a<a name="line.714"></a>
-<span class="sourceLineNo">715</span>   * time-sensitive thread.<a name="line.715"></a>
-<span class="sourceLineNo">716</span>   * @param force whether we want to force a flush of all stores<a name="line.716"></a>
-<span class="sourceLineNo">717</span>   * @return FlushResult indicating whether the flush was successful or not and if<a name="line.717"></a>
-<span class="sourceLineNo">718</span>   * the region needs compacting<a name="line.718"></a>
-<span class="sourceLineNo">719</span>   *<a name="line.719"></a>
-<span class="sourceLineNo">720</span>   * @throws IOException general io exceptions<a name="line.720"></a>
-<span class="sourceLineNo">721</span>   * because a snapshot was not properly persisted.<a name="line.721"></a>
-<span class="sourceLineNo">722</span>   */<a name="line.722"></a>
-<span class="sourceLineNo">723</span>  FlushResult flush(boolean force) throws IOException;<a name="line.723"></a>
-<span class="sourceLineNo">724</span><a name="line.724"></a>
-<span class="sourceLineNo">725</span>  /**<a name="line.725"></a>
-<span class="sourceLineNo">726</span>   * Synchronously compact all stores in the region.<a name="line.726"></a>
-<span class="sourceLineNo">727</span>   * &lt;p&gt;This operation could block for a long time, so don't call it from a<a name="line.727"></a>
-<span class="sourceLineNo">728</span>   * time-sensitive thread.<a name="line.728"></a>
-<span class="sourceLineNo">729</span>   * &lt;p&gt;Note that no locks are taken to prevent possible conflicts between<a name="line.729"></a>
-<span class="sourceLineNo">730</span>   * compaction and splitting activities. The regionserver does not normally compact<a name="line.730"></a>
-<span class="sourceLineNo">731</span>   * and split in parallel. However by calling this method you may introduce<a name="line.731"></a>
-<span class="sourceLineNo">732</span>   * unexpected and unhandled concurrency. Don't do this unless you know what<a name="line.732"></a>
-<span class="sourceLineNo">733</span>   * you are doing.<a name="line.733"></a>
-<span class="sourceLineNo">734</span>   *<a name="line.734"></a>
-<span class="sourceLineNo">735</span>   * @param majorCompaction True to force a major compaction regardless of thresholds<a name="line.735"></a>
-<span class="sourceLineNo">736</span>   * @throws IOException<a name="line.736"></a>
-<span class="sourceLineNo">737</span>   */<a name="line.737"></a>
-<span class="sourceLineNo">738</span>  void compact(final boolean majorCompaction) throws IOException;<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span>  /**<a name="line.740"></a>
-<span class="sourceLineNo">741</span>   * Trigger major compaction on all stores in the region.<a name="line.741"></a>
-<span class="sourceLineNo">742</span>   * &lt;p&gt;<a name="line.742"></a>
-<span class="sourceLineNo">743</span>   * Compaction will be performed asynchronously to this call by the RegionServer's<a name="line.743"></a>
-<span class="sourceLineNo">744</span>   * CompactSplitThread. See also {@link Store#triggerMajorCompaction()}<a name="line.744"></a>
-<span class="sourceLineNo">745</span>   * @throws IOException<a name="line.745"></a>
-<span class="sourceLineNo">746</span>   */<a name="line.746"></a>
-<span class="sourceLineNo">747</span>  void triggerMajorCompaction() throws IOException;<a name="line.747"></a>
-<span class="sourceLineNo">748</span><a name="line.748"></a>
-<span class="sourceLineNo">749</span>  /**<a name="line.749"></a>
-<span class="sourceLineNo">750</span>   * @return if a given region is in compaction now.<a name="line.750"></a>
-<span class="sourceLineNo">751</span>   */<a name="line.751"></a>
-<span class="sourceLineNo">752</span>  CompactionState getCompactionState();<a name="line.752"></a>
-<span class="sourceLineNo">753</span><a name="line.753"></a>
-<span class="sourceLineNo">754</span>  /** Wait for all current flushes and compactions of the region to complete */<a name="line.754"></a>


<TRUNCATED>

[09/33] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/Region.FlushResult.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/Region.FlushResult.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/Region.FlushResult.html
index b361c26..53efdb2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/Region.FlushResult.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/Region.FlushResult.html
@@ -255,7 +255,7 @@
 <span class="sourceLineNo">247</span>   */<a name="line.247"></a>
 <span class="sourceLineNo">248</span>  enum Operation {<a name="line.248"></a>
 <span class="sourceLineNo">249</span>    ANY, GET, PUT, DELETE, SCAN, APPEND, INCREMENT, SPLIT_REGION, MERGE_REGION, BATCH_MUTATE,<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    REPLAY_BATCH_MUTATE, COMPACT_REGION, REPLAY_EVENT<a name="line.250"></a>
+<span class="sourceLineNo">250</span>    REPLAY_BATCH_MUTATE, COMPACT_REGION, REPLAY_EVENT, SNAPSHOT<a name="line.250"></a>
 <span class="sourceLineNo">251</span>  }<a name="line.251"></a>
 <span class="sourceLineNo">252</span><a name="line.252"></a>
 <span class="sourceLineNo">253</span>  /**<a name="line.253"></a>
@@ -285,487 +285,494 @@
 <span class="sourceLineNo">277</span>   */<a name="line.277"></a>
 <span class="sourceLineNo">278</span>  void closeRegionOperation() throws IOException;<a name="line.278"></a>
 <span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span>  // Row write locks<a name="line.280"></a>
-<span class="sourceLineNo">281</span><a name="line.281"></a>
-<span class="sourceLineNo">282</span>  /**<a name="line.282"></a>
-<span class="sourceLineNo">283</span>   * Row lock held by a given thread.<a name="line.283"></a>
-<span class="sourceLineNo">284</span>   * One thread may acquire multiple locks on the same row simultaneously.<a name="line.284"></a>
-<span class="sourceLineNo">285</span>   * The locks must be released by calling release() from the same thread.<a name="line.285"></a>
-<span class="sourceLineNo">286</span>   */<a name="line.286"></a>
-<span class="sourceLineNo">287</span>  public interface RowLock {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    /**<a name="line.288"></a>
-<span class="sourceLineNo">289</span>     * Release the given lock.  If there are no remaining locks held by the current thread<a name="line.289"></a>
-<span class="sourceLineNo">290</span>     * then unlock the row and allow other threads to acquire the lock.<a name="line.290"></a>
-<span class="sourceLineNo">291</span>     * @throws IllegalArgumentException if called by a different thread than the lock owning<a name="line.291"></a>
-<span class="sourceLineNo">292</span>     *     thread<a name="line.292"></a>
-<span class="sourceLineNo">293</span>     */<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    void release();<a name="line.294"></a>
-<span class="sourceLineNo">295</span>  }<a name="line.295"></a>
-<span class="sourceLineNo">296</span><a name="line.296"></a>
-<span class="sourceLineNo">297</span>  /**<a name="line.297"></a>
-<span class="sourceLineNo">298</span>   *<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   * Get a row lock for the specified row. All locks are reentrant.<a name="line.299"></a>
-<span class="sourceLineNo">300</span>   *<a name="line.300"></a>
-<span class="sourceLineNo">301</span>   * Before calling this function make sure that a region operation has already been<a name="line.301"></a>
-<span class="sourceLineNo">302</span>   * started (the calling thread has already acquired the region-close-guard lock).<a name="line.302"></a>
-<span class="sourceLineNo">303</span>   * <a name="line.303"></a>
-<span class="sourceLineNo">304</span>   * NOTE: the boolean passed here has changed. It used to be a boolean that<a name="line.304"></a>
-<span class="sourceLineNo">305</span>   * stated whether or not to wait on the lock. Now it is whether it an exclusive<a name="line.305"></a>
-<span class="sourceLineNo">306</span>   * lock is requested.<a name="line.306"></a>
-<span class="sourceLineNo">307</span>   * <a name="line.307"></a>
-<span class="sourceLineNo">308</span>   * @param row The row actions will be performed against<a name="line.308"></a>
-<span class="sourceLineNo">309</span>   * @param readLock is the lock reader or writer. True indicates that a non-exclusive<a name="line.309"></a>
-<span class="sourceLineNo">310</span>   * lock is requested<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   * @see #startRegionOperation()<a name="line.311"></a>
-<span class="sourceLineNo">312</span>   * @see #startRegionOperation(Operation)<a name="line.312"></a>
-<span class="sourceLineNo">313</span>   */<a name="line.313"></a>
-<span class="sourceLineNo">314</span>  RowLock getRowLock(byte[] row, boolean readLock) throws IOException;<a name="line.314"></a>
-<span class="sourceLineNo">315</span><a name="line.315"></a>
-<span class="sourceLineNo">316</span>  /**<a name="line.316"></a>
-<span class="sourceLineNo">317</span>   * If the given list of row locks is not null, releases all locks.<a name="line.317"></a>
-<span class="sourceLineNo">318</span>   */<a name="line.318"></a>
-<span class="sourceLineNo">319</span>  void releaseRowLocks(List&lt;RowLock&gt; rowLocks);<a name="line.319"></a>
-<span class="sourceLineNo">320</span><a name="line.320"></a>
-<span class="sourceLineNo">321</span>  ///////////////////////////////////////////////////////////////////////////<a name="line.321"></a>
-<span class="sourceLineNo">322</span>  // Region operations<a name="line.322"></a>
-<span class="sourceLineNo">323</span><a name="line.323"></a>
-<span class="sourceLineNo">324</span>  /**<a name="line.324"></a>
-<span class="sourceLineNo">325</span>   * Perform one or more append operations on a row.<a name="line.325"></a>
-<span class="sourceLineNo">326</span>   * @param append<a name="line.326"></a>
-<span class="sourceLineNo">327</span>   * @param nonceGroup<a name="line.327"></a>
-<span class="sourceLineNo">328</span>   * @param nonce<a name="line.328"></a>
-<span class="sourceLineNo">329</span>   * @return result of the operation<a name="line.329"></a>
-<span class="sourceLineNo">330</span>   * @throws IOException<a name="line.330"></a>
-<span class="sourceLineNo">331</span>   */<a name="line.331"></a>
-<span class="sourceLineNo">332</span>  Result append(Append append, long nonceGroup, long nonce) throws IOException;<a name="line.332"></a>
-<span class="sourceLineNo">333</span><a name="line.333"></a>
-<span class="sourceLineNo">334</span>  /**<a name="line.334"></a>
-<span class="sourceLineNo">335</span>   * Perform a batch of mutations.<a name="line.335"></a>
-<span class="sourceLineNo">336</span>   * &lt;p&gt;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>   * Note this supports only Put and Delete mutations and will ignore other types passed.<a name="line.337"></a>
-<span class="sourceLineNo">338</span>   * @param mutations the list of mutations<a name="line.338"></a>
-<span class="sourceLineNo">339</span>   * @param nonceGroup<a name="line.339"></a>
-<span class="sourceLineNo">340</span>   * @param nonce<a name="line.340"></a>
-<span class="sourceLineNo">341</span>   * @return an array of OperationStatus which internally contains the<a name="line.341"></a>
-<span class="sourceLineNo">342</span>   *         OperationStatusCode and the exceptionMessage if any.<a name="line.342"></a>
-<span class="sourceLineNo">343</span>   * @throws IOException<a name="line.343"></a>
-<span class="sourceLineNo">344</span>   */<a name="line.344"></a>
-<span class="sourceLineNo">345</span>  OperationStatus[] batchMutate(Mutation[] mutations, long nonceGroup, long nonce)<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      throws IOException;<a name="line.346"></a>
-<span class="sourceLineNo">347</span><a name="line.347"></a>
-<span class="sourceLineNo">348</span>  /**<a name="line.348"></a>
-<span class="sourceLineNo">349</span>   * Replay a batch of mutations.<a name="line.349"></a>
-<span class="sourceLineNo">350</span>   * @param mutations mutations to replay.<a name="line.350"></a>
-<span class="sourceLineNo">351</span>   * @param replaySeqId<a name="line.351"></a>
-<span class="sourceLineNo">352</span>   * @return an array of OperationStatus which internally contains the<a name="line.352"></a>
-<span class="sourceLineNo">353</span>   *         OperationStatusCode and the exceptionMessage if any.<a name="line.353"></a>
-<span class="sourceLineNo">354</span>   * @throws IOException<a name="line.354"></a>
-<span class="sourceLineNo">355</span>   */<a name="line.355"></a>
-<span class="sourceLineNo">356</span>   OperationStatus[] batchReplay(MutationReplay[] mutations, long replaySeqId) throws IOException;<a name="line.356"></a>
-<span class="sourceLineNo">357</span><a name="line.357"></a>
-<span class="sourceLineNo">358</span>  /**<a name="line.358"></a>
-<span class="sourceLineNo">359</span>   * Atomically checks if a row/family/qualifier value matches the expected value and if it does,<a name="line.359"></a>
-<span class="sourceLineNo">360</span>   * it performs the mutation. If the passed value is null, the lack of column value<a name="line.360"></a>
-<span class="sourceLineNo">361</span>   * (ie: non-existence) is used. See checkAndRowMutate to do many checkAndPuts at a time on a<a name="line.361"></a>
-<span class="sourceLineNo">362</span>   * single row.<a name="line.362"></a>
-<span class="sourceLineNo">363</span>   * @param row to check<a name="line.363"></a>
-<span class="sourceLineNo">364</span>   * @param family column family to check<a name="line.364"></a>
-<span class="sourceLineNo">365</span>   * @param qualifier column qualifier to check<a name="line.365"></a>
-<span class="sourceLineNo">366</span>   * @param compareOp the comparison operator<a name="line.366"></a>
-<span class="sourceLineNo">367</span>   * @param comparator<a name="line.367"></a>
-<span class="sourceLineNo">368</span>   * @param mutation<a name="line.368"></a>
-<span class="sourceLineNo">369</span>   * @param writeToWAL<a name="line.369"></a>
-<span class="sourceLineNo">370</span>   * @return true if mutation was applied, false otherwise<a name="line.370"></a>
-<span class="sourceLineNo">371</span>   * @throws IOException<a name="line.371"></a>
-<span class="sourceLineNo">372</span>   */<a name="line.372"></a>
-<span class="sourceLineNo">373</span>  boolean checkAndMutate(byte [] row, byte [] family, byte [] qualifier, CompareOp compareOp,<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      ByteArrayComparable comparator, Mutation mutation, boolean writeToWAL) throws IOException;<a name="line.374"></a>
-<span class="sourceLineNo">375</span><a name="line.375"></a>
-<span class="sourceLineNo">376</span>  /**<a name="line.376"></a>
-<span class="sourceLineNo">377</span>   * Atomically checks if a row/family/qualifier value matches the expected values and if it does,<a name="line.377"></a>
-<span class="sourceLineNo">378</span>   * it performs the row mutations. If the passed value is null, the lack of column value<a name="line.378"></a>
-<span class="sourceLineNo">379</span>   * (ie: non-existence) is used. Use to do many mutations on a single row. Use checkAndMutate<a name="line.379"></a>
-<span class="sourceLineNo">380</span>   * to do one checkAndMutate at a time.<a name="line.380"></a>
-<span class="sourceLineNo">381</span>   * @param row to check<a name="line.381"></a>
-<span class="sourceLineNo">382</span>   * @param family column family to check<a name="line.382"></a>
-<span class="sourceLineNo">383</span>   * @param qualifier column qualifier to check<a name="line.383"></a>
-<span class="sourceLineNo">384</span>   * @param compareOp the comparison operator<a name="line.384"></a>
-<span class="sourceLineNo">385</span>   * @param comparator<a name="line.385"></a>
-<span class="sourceLineNo">386</span>   * @param mutations<a name="line.386"></a>
-<span class="sourceLineNo">387</span>   * @param writeToWAL<a name="line.387"></a>
-<span class="sourceLineNo">388</span>   * @return true if mutations were applied, false otherwise<a name="line.388"></a>
-<span class="sourceLineNo">389</span>   * @throws IOException<a name="line.389"></a>
-<span class="sourceLineNo">390</span>   */<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  boolean checkAndRowMutate(byte [] row, byte [] family, byte [] qualifier, CompareOp compareOp,<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      ByteArrayComparable comparator, RowMutations mutations, boolean writeToWAL)<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      throws IOException;<a name="line.393"></a>
-<span class="sourceLineNo">394</span><a name="line.394"></a>
-<span class="sourceLineNo">395</span>  /**<a name="line.395"></a>
-<span class="sourceLineNo">396</span>   * Deletes the specified cells/row.<a name="line.396"></a>
-<span class="sourceLineNo">397</span>   * @param delete<a name="line.397"></a>
-<span class="sourceLineNo">398</span>   * @throws IOException<a name="line.398"></a>
-<span class="sourceLineNo">399</span>   */<a name="line.399"></a>
-<span class="sourceLineNo">400</span>  void delete(Delete delete) throws IOException;<a name="line.400"></a>
+<span class="sourceLineNo">280</span>  /**<a name="line.280"></a>
+<span class="sourceLineNo">281</span>   * Closes the region operation lock. This needs to be called in the finally block corresponding<a name="line.281"></a>
+<span class="sourceLineNo">282</span>   * to the try block of {@link #startRegionOperation(Operation)}<a name="line.282"></a>
+<span class="sourceLineNo">283</span>   * @throws IOException<a name="line.283"></a>
+<span class="sourceLineNo">284</span>   */<a name="line.284"></a>
+<span class="sourceLineNo">285</span>  void closeRegionOperation(Operation op) throws IOException;<a name="line.285"></a>
+<span class="sourceLineNo">286</span><a name="line.286"></a>
+<span class="sourceLineNo">287</span>  // Row write locks<a name="line.287"></a>
+<span class="sourceLineNo">288</span><a name="line.288"></a>
+<span class="sourceLineNo">289</span>  /**<a name="line.289"></a>
+<span class="sourceLineNo">290</span>   * Row lock held by a given thread.<a name="line.290"></a>
+<span class="sourceLineNo">291</span>   * One thread may acquire multiple locks on the same row simultaneously.<a name="line.291"></a>
+<span class="sourceLineNo">292</span>   * The locks must be released by calling release() from the same thread.<a name="line.292"></a>
+<span class="sourceLineNo">293</span>   */<a name="line.293"></a>
+<span class="sourceLineNo">294</span>  public interface RowLock {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    /**<a name="line.295"></a>
+<span class="sourceLineNo">296</span>     * Release the given lock.  If there are no remaining locks held by the current thread<a name="line.296"></a>
+<span class="sourceLineNo">297</span>     * then unlock the row and allow other threads to acquire the lock.<a name="line.297"></a>
+<span class="sourceLineNo">298</span>     * @throws IllegalArgumentException if called by a different thread than the lock owning<a name="line.298"></a>
+<span class="sourceLineNo">299</span>     *     thread<a name="line.299"></a>
+<span class="sourceLineNo">300</span>     */<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    void release();<a name="line.301"></a>
+<span class="sourceLineNo">302</span>  }<a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span>  /**<a name="line.304"></a>
+<span class="sourceLineNo">305</span>   *<a name="line.305"></a>
+<span class="sourceLineNo">306</span>   * Get a row lock for the specified row. All locks are reentrant.<a name="line.306"></a>
+<span class="sourceLineNo">307</span>   *<a name="line.307"></a>
+<span class="sourceLineNo">308</span>   * Before calling this function make sure that a region operation has already been<a name="line.308"></a>
+<span class="sourceLineNo">309</span>   * started (the calling thread has already acquired the region-close-guard lock).<a name="line.309"></a>
+<span class="sourceLineNo">310</span>   * <a name="line.310"></a>
+<span class="sourceLineNo">311</span>   * NOTE: the boolean passed here has changed. It used to be a boolean that<a name="line.311"></a>
+<span class="sourceLineNo">312</span>   * stated whether or not to wait on the lock. Now it is whether it an exclusive<a name="line.312"></a>
+<span class="sourceLineNo">313</span>   * lock is requested.<a name="line.313"></a>
+<span class="sourceLineNo">314</span>   * <a name="line.314"></a>
+<span class="sourceLineNo">315</span>   * @param row The row actions will be performed against<a name="line.315"></a>
+<span class="sourceLineNo">316</span>   * @param readLock is the lock reader or writer. True indicates that a non-exclusive<a name="line.316"></a>
+<span class="sourceLineNo">317</span>   * lock is requested<a name="line.317"></a>
+<span class="sourceLineNo">318</span>   * @see #startRegionOperation()<a name="line.318"></a>
+<span class="sourceLineNo">319</span>   * @see #startRegionOperation(Operation)<a name="line.319"></a>
+<span class="sourceLineNo">320</span>   */<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  RowLock getRowLock(byte[] row, boolean readLock) throws IOException;<a name="line.321"></a>
+<span class="sourceLineNo">322</span><a name="line.322"></a>
+<span class="sourceLineNo">323</span>  /**<a name="line.323"></a>
+<span class="sourceLineNo">324</span>   * If the given list of row locks is not null, releases all locks.<a name="line.324"></a>
+<span class="sourceLineNo">325</span>   */<a name="line.325"></a>
+<span class="sourceLineNo">326</span>  void releaseRowLocks(List&lt;RowLock&gt; rowLocks);<a name="line.326"></a>
+<span class="sourceLineNo">327</span><a name="line.327"></a>
+<span class="sourceLineNo">328</span>  ///////////////////////////////////////////////////////////////////////////<a name="line.328"></a>
+<span class="sourceLineNo">329</span>  // Region operations<a name="line.329"></a>
+<span class="sourceLineNo">330</span><a name="line.330"></a>
+<span class="sourceLineNo">331</span>  /**<a name="line.331"></a>
+<span class="sourceLineNo">332</span>   * Perform one or more append operations on a row.<a name="line.332"></a>
+<span class="sourceLineNo">333</span>   * @param append<a name="line.333"></a>
+<span class="sourceLineNo">334</span>   * @param nonceGroup<a name="line.334"></a>
+<span class="sourceLineNo">335</span>   * @param nonce<a name="line.335"></a>
+<span class="sourceLineNo">336</span>   * @return result of the operation<a name="line.336"></a>
+<span class="sourceLineNo">337</span>   * @throws IOException<a name="line.337"></a>
+<span class="sourceLineNo">338</span>   */<a name="line.338"></a>
+<span class="sourceLineNo">339</span>  Result append(Append append, long nonceGroup, long nonce) throws IOException;<a name="line.339"></a>
+<span class="sourceLineNo">340</span><a name="line.340"></a>
+<span class="sourceLineNo">341</span>  /**<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   * Perform a batch of mutations.<a name="line.342"></a>
+<span class="sourceLineNo">343</span>   * &lt;p&gt;<a name="line.343"></a>
+<span class="sourceLineNo">344</span>   * Note this supports only Put and Delete mutations and will ignore other types passed.<a name="line.344"></a>
+<span class="sourceLineNo">345</span>   * @param mutations the list of mutations<a name="line.345"></a>
+<span class="sourceLineNo">346</span>   * @param nonceGroup<a name="line.346"></a>
+<span class="sourceLineNo">347</span>   * @param nonce<a name="line.347"></a>
+<span class="sourceLineNo">348</span>   * @return an array of OperationStatus which internally contains the<a name="line.348"></a>
+<span class="sourceLineNo">349</span>   *         OperationStatusCode and the exceptionMessage if any.<a name="line.349"></a>
+<span class="sourceLineNo">350</span>   * @throws IOException<a name="line.350"></a>
+<span class="sourceLineNo">351</span>   */<a name="line.351"></a>
+<span class="sourceLineNo">352</span>  OperationStatus[] batchMutate(Mutation[] mutations, long nonceGroup, long nonce)<a name="line.352"></a>
+<span class="sourceLineNo">353</span>      throws IOException;<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>  /**<a name="line.355"></a>
+<span class="sourceLineNo">356</span>   * Replay a batch of mutations.<a name="line.356"></a>
+<span class="sourceLineNo">357</span>   * @param mutations mutations to replay.<a name="line.357"></a>
+<span class="sourceLineNo">358</span>   * @param replaySeqId<a name="line.358"></a>
+<span class="sourceLineNo">359</span>   * @return an array of OperationStatus which internally contains the<a name="line.359"></a>
+<span class="sourceLineNo">360</span>   *         OperationStatusCode and the exceptionMessage if any.<a name="line.360"></a>
+<span class="sourceLineNo">361</span>   * @throws IOException<a name="line.361"></a>
+<span class="sourceLineNo">362</span>   */<a name="line.362"></a>
+<span class="sourceLineNo">363</span>   OperationStatus[] batchReplay(MutationReplay[] mutations, long replaySeqId) throws IOException;<a name="line.363"></a>
+<span class="sourceLineNo">364</span><a name="line.364"></a>
+<span class="sourceLineNo">365</span>  /**<a name="line.365"></a>
+<span class="sourceLineNo">366</span>   * Atomically checks if a row/family/qualifier value matches the expected value and if it does,<a name="line.366"></a>
+<span class="sourceLineNo">367</span>   * it performs the mutation. If the passed value is null, the lack of column value<a name="line.367"></a>
+<span class="sourceLineNo">368</span>   * (ie: non-existence) is used. See checkAndRowMutate to do many checkAndPuts at a time on a<a name="line.368"></a>
+<span class="sourceLineNo">369</span>   * single row.<a name="line.369"></a>
+<span class="sourceLineNo">370</span>   * @param row to check<a name="line.370"></a>
+<span class="sourceLineNo">371</span>   * @param family column family to check<a name="line.371"></a>
+<span class="sourceLineNo">372</span>   * @param qualifier column qualifier to check<a name="line.372"></a>
+<span class="sourceLineNo">373</span>   * @param compareOp the comparison operator<a name="line.373"></a>
+<span class="sourceLineNo">374</span>   * @param comparator<a name="line.374"></a>
+<span class="sourceLineNo">375</span>   * @param mutation<a name="line.375"></a>
+<span class="sourceLineNo">376</span>   * @param writeToWAL<a name="line.376"></a>
+<span class="sourceLineNo">377</span>   * @return true if mutation was applied, false otherwise<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   * @throws IOException<a name="line.378"></a>
+<span class="sourceLineNo">379</span>   */<a name="line.379"></a>
+<span class="sourceLineNo">380</span>  boolean checkAndMutate(byte [] row, byte [] family, byte [] qualifier, CompareOp compareOp,<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      ByteArrayComparable comparator, Mutation mutation, boolean writeToWAL) throws IOException;<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span>  /**<a name="line.383"></a>
+<span class="sourceLineNo">384</span>   * Atomically checks if a row/family/qualifier value matches the expected values and if it does,<a name="line.384"></a>
+<span class="sourceLineNo">385</span>   * it performs the row mutations. If the passed value is null, the lack of column value<a name="line.385"></a>
+<span class="sourceLineNo">386</span>   * (ie: non-existence) is used. Use to do many mutations on a single row. Use checkAndMutate<a name="line.386"></a>
+<span class="sourceLineNo">387</span>   * to do one checkAndMutate at a time.<a name="line.387"></a>
+<span class="sourceLineNo">388</span>   * @param row to check<a name="line.388"></a>
+<span class="sourceLineNo">389</span>   * @param family column family to check<a name="line.389"></a>
+<span class="sourceLineNo">390</span>   * @param qualifier column qualifier to check<a name="line.390"></a>
+<span class="sourceLineNo">391</span>   * @param compareOp the comparison operator<a name="line.391"></a>
+<span class="sourceLineNo">392</span>   * @param comparator<a name="line.392"></a>
+<span class="sourceLineNo">393</span>   * @param mutations<a name="line.393"></a>
+<span class="sourceLineNo">394</span>   * @param writeToWAL<a name="line.394"></a>
+<span class="sourceLineNo">395</span>   * @return true if mutations were applied, false otherwise<a name="line.395"></a>
+<span class="sourceLineNo">396</span>   * @throws IOException<a name="line.396"></a>
+<span class="sourceLineNo">397</span>   */<a name="line.397"></a>
+<span class="sourceLineNo">398</span>  boolean checkAndRowMutate(byte [] row, byte [] family, byte [] qualifier, CompareOp compareOp,<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      ByteArrayComparable comparator, RowMutations mutations, boolean writeToWAL)<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      throws IOException;<a name="line.400"></a>
 <span class="sourceLineNo">401</span><a name="line.401"></a>
 <span class="sourceLineNo">402</span>  /**<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   * Do a get based on the get parameter.<a name="line.403"></a>
-<span class="sourceLineNo">404</span>   * @param get query parameters<a name="line.404"></a>
-<span class="sourceLineNo">405</span>   * @return result of the operation<a name="line.405"></a>
+<span class="sourceLineNo">403</span>   * Deletes the specified cells/row.<a name="line.403"></a>
+<span class="sourceLineNo">404</span>   * @param delete<a name="line.404"></a>
+<span class="sourceLineNo">405</span>   * @throws IOException<a name="line.405"></a>
 <span class="sourceLineNo">406</span>   */<a name="line.406"></a>
-<span class="sourceLineNo">407</span>  Result get(Get get) throws IOException;<a name="line.407"></a>
+<span class="sourceLineNo">407</span>  void delete(Delete delete) throws IOException;<a name="line.407"></a>
 <span class="sourceLineNo">408</span><a name="line.408"></a>
 <span class="sourceLineNo">409</span>  /**<a name="line.409"></a>
 <span class="sourceLineNo">410</span>   * Do a get based on the get parameter.<a name="line.410"></a>
 <span class="sourceLineNo">411</span>   * @param get query parameters<a name="line.411"></a>
-<span class="sourceLineNo">412</span>   * @param withCoprocessor invoke coprocessor or not. We don't want to<a name="line.412"></a>
-<span class="sourceLineNo">413</span>   * always invoke cp.<a name="line.413"></a>
-<span class="sourceLineNo">414</span>   * @return list of cells resulting from the operation<a name="line.414"></a>
-<span class="sourceLineNo">415</span>   */<a name="line.415"></a>
-<span class="sourceLineNo">416</span>  List&lt;Cell&gt; get(Get get, boolean withCoprocessor) throws IOException;<a name="line.416"></a>
-<span class="sourceLineNo">417</span><a name="line.417"></a>
-<span class="sourceLineNo">418</span>  /**<a name="line.418"></a>
-<span class="sourceLineNo">419</span>   * Do a get for duplicate non-idempotent operation.<a name="line.419"></a>
-<span class="sourceLineNo">420</span>   * @param get query parameters.<a name="line.420"></a>
-<span class="sourceLineNo">421</span>   * @param withCoprocessor<a name="line.421"></a>
-<span class="sourceLineNo">422</span>   * @param nonceGroup Nonce group.<a name="line.422"></a>
-<span class="sourceLineNo">423</span>   * @param nonce Nonce.<a name="line.423"></a>
-<span class="sourceLineNo">424</span>   * @return list of cells resulting from the operation<a name="line.424"></a>
-<span class="sourceLineNo">425</span>   * @throws IOException<a name="line.425"></a>
-<span class="sourceLineNo">426</span>   */<a name="line.426"></a>
-<span class="sourceLineNo">427</span>  List&lt;Cell&gt; get(Get get, boolean withCoprocessor, long nonceGroup, long nonce) throws IOException;<a name="line.427"></a>
-<span class="sourceLineNo">428</span><a name="line.428"></a>
-<span class="sourceLineNo">429</span>  /**<a name="line.429"></a>
-<span class="sourceLineNo">430</span>   * Return an iterator that scans over the HRegion, returning the indicated<a name="line.430"></a>
-<span class="sourceLineNo">431</span>   * columns and rows specified by the {@link Scan}.<a name="line.431"></a>
-<span class="sourceLineNo">432</span>   * &lt;p&gt;<a name="line.432"></a>
-<span class="sourceLineNo">433</span>   * This Iterator must be closed by the caller.<a name="line.433"></a>
-<span class="sourceLineNo">434</span>   *<a name="line.434"></a>
-<span class="sourceLineNo">435</span>   * @param scan configured {@link Scan}<a name="line.435"></a>
-<span class="sourceLineNo">436</span>   * @return RegionScanner<a name="line.436"></a>
-<span class="sourceLineNo">437</span>   * @throws IOException read exceptions<a name="line.437"></a>
-<span class="sourceLineNo">438</span>   */<a name="line.438"></a>
-<span class="sourceLineNo">439</span>  RegionScanner getScanner(Scan scan) throws IOException;<a name="line.439"></a>
-<span class="sourceLineNo">440</span><a name="line.440"></a>
-<span class="sourceLineNo">441</span>  /**<a name="line.441"></a>
-<span class="sourceLineNo">442</span>   * Return an iterator that scans over the HRegion, returning the indicated columns and rows<a name="line.442"></a>
-<span class="sourceLineNo">443</span>   * specified by the {@link Scan}. The scanner will also include the additional scanners passed<a name="line.443"></a>
-<span class="sourceLineNo">444</span>   * along with the scanners for the specified Scan instance. Should be careful with the usage to<a name="line.444"></a>
-<span class="sourceLineNo">445</span>   * pass additional scanners only within this Region<a name="line.445"></a>
-<span class="sourceLineNo">446</span>   * &lt;p&gt;<a name="line.446"></a>
-<span class="sourceLineNo">447</span>   * This Iterator must be closed by the caller.<a name="line.447"></a>
-<span class="sourceLineNo">448</span>   *<a name="line.448"></a>
-<span class="sourceLineNo">449</span>   * @param scan configured {@link Scan}<a name="line.449"></a>
-<span class="sourceLineNo">450</span>   * @param additionalScanners Any additional scanners to be used<a name="line.450"></a>
-<span class="sourceLineNo">451</span>   * @return RegionScanner<a name="line.451"></a>
-<span class="sourceLineNo">452</span>   * @throws IOException read exceptions<a name="line.452"></a>
-<span class="sourceLineNo">453</span>   */<a name="line.453"></a>
-<span class="sourceLineNo">454</span>  RegionScanner getScanner(Scan scan, List&lt;KeyValueScanner&gt; additionalScanners) throws IOException;<a name="line.454"></a>
-<span class="sourceLineNo">455</span><a name="line.455"></a>
-<span class="sourceLineNo">456</span>  /** The comparator to be used with the region */<a name="line.456"></a>
-<span class="sourceLineNo">457</span>  CellComparator getCellComparator();<a name="line.457"></a>
-<span class="sourceLineNo">458</span><a name="line.458"></a>
-<span class="sourceLineNo">459</span>  /**<a name="line.459"></a>
-<span class="sourceLineNo">460</span>   * Perform one or more increment operations on a row.<a name="line.460"></a>
-<span class="sourceLineNo">461</span>   * @param increment<a name="line.461"></a>
-<span class="sourceLineNo">462</span>   * @param nonceGroup<a name="line.462"></a>
-<span class="sourceLineNo">463</span>   * @param nonce<a name="line.463"></a>
-<span class="sourceLineNo">464</span>   * @return result of the operation<a name="line.464"></a>
-<span class="sourceLineNo">465</span>   * @throws IOException<a name="line.465"></a>
-<span class="sourceLineNo">466</span>   */<a name="line.466"></a>
-<span class="sourceLineNo">467</span>  Result increment(Increment increment, long nonceGroup, long nonce) throws IOException;<a name="line.467"></a>
-<span class="sourceLineNo">468</span><a name="line.468"></a>
-<span class="sourceLineNo">469</span>  /**<a name="line.469"></a>
-<span class="sourceLineNo">470</span>   * Performs multiple mutations atomically on a single row. Currently<a name="line.470"></a>
-<span class="sourceLineNo">471</span>   * {@link Put} and {@link Delete} are supported.<a name="line.471"></a>
-<span class="sourceLineNo">472</span>   *<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   * @param mutations object that specifies the set of mutations to perform atomically<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   * @throws IOException<a name="line.474"></a>
-<span class="sourceLineNo">475</span>   */<a name="line.475"></a>
-<span class="sourceLineNo">476</span>  void mutateRow(RowMutations mutations) throws IOException;<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>  /**<a name="line.478"></a>
-<span class="sourceLineNo">479</span>   * Perform atomic mutations within the region.<a name="line.479"></a>
-<span class="sourceLineNo">480</span>   *<a name="line.480"></a>
-<span class="sourceLineNo">481</span>   * @param mutations The list of mutations to perform.<a name="line.481"></a>
-<span class="sourceLineNo">482</span>   * &lt;code&gt;mutations&lt;/code&gt; can contain operations for multiple rows.<a name="line.482"></a>
-<span class="sourceLineNo">483</span>   * Caller has to ensure that all rows are contained in this region.<a name="line.483"></a>
-<span class="sourceLineNo">484</span>   * @param rowsToLock Rows to lock<a name="line.484"></a>
-<span class="sourceLineNo">485</span>   * @param nonceGroup Optional nonce group of the operation (client Id)<a name="line.485"></a>
-<span class="sourceLineNo">486</span>   * @param nonce Optional nonce of the operation (unique random id to ensure "more idempotence")<a name="line.486"></a>
-<span class="sourceLineNo">487</span>   * If multiple rows are locked care should be taken that<a name="line.487"></a>
-<span class="sourceLineNo">488</span>   * &lt;code&gt;rowsToLock&lt;/code&gt; is sorted in order to avoid deadlocks.<a name="line.488"></a>
-<span class="sourceLineNo">489</span>   * @throws IOException<a name="line.489"></a>
-<span class="sourceLineNo">490</span>   */<a name="line.490"></a>
-<span class="sourceLineNo">491</span>  void mutateRowsWithLocks(Collection&lt;Mutation&gt; mutations, Collection&lt;byte[]&gt; rowsToLock,<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      long nonceGroup, long nonce) throws IOException;<a name="line.492"></a>
-<span class="sourceLineNo">493</span><a name="line.493"></a>
-<span class="sourceLineNo">494</span>  /**<a name="line.494"></a>
-<span class="sourceLineNo">495</span>   * Performs atomic multiple reads and writes on a given row.<a name="line.495"></a>
-<span class="sourceLineNo">496</span>   *<a name="line.496"></a>
-<span class="sourceLineNo">497</span>   * @param processor The object defines the reads and writes to a row.<a name="line.497"></a>
-<span class="sourceLineNo">498</span>   */<a name="line.498"></a>
-<span class="sourceLineNo">499</span>  void processRowsWithLocks(RowProcessor&lt;?,?&gt; processor) throws IOException;<a name="line.499"></a>
+<span class="sourceLineNo">412</span>   * @return result of the operation<a name="line.412"></a>
+<span class="sourceLineNo">413</span>   */<a name="line.413"></a>
+<span class="sourceLineNo">414</span>  Result get(Get get) throws IOException;<a name="line.414"></a>
+<span class="sourceLineNo">415</span><a name="line.415"></a>
+<span class="sourceLineNo">416</span>  /**<a name="line.416"></a>
+<span class="sourceLineNo">417</span>   * Do a get based on the get parameter.<a name="line.417"></a>
+<span class="sourceLineNo">418</span>   * @param get query parameters<a name="line.418"></a>
+<span class="sourceLineNo">419</span>   * @param withCoprocessor invoke coprocessor or not. We don't want to<a name="line.419"></a>
+<span class="sourceLineNo">420</span>   * always invoke cp.<a name="line.420"></a>
+<span class="sourceLineNo">421</span>   * @return list of cells resulting from the operation<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   */<a name="line.422"></a>
+<span class="sourceLineNo">423</span>  List&lt;Cell&gt; get(Get get, boolean withCoprocessor) throws IOException;<a name="line.423"></a>
+<span class="sourceLineNo">424</span><a name="line.424"></a>
+<span class="sourceLineNo">425</span>  /**<a name="line.425"></a>
+<span class="sourceLineNo">426</span>   * Do a get for duplicate non-idempotent operation.<a name="line.426"></a>
+<span class="sourceLineNo">427</span>   * @param get query parameters.<a name="line.427"></a>
+<span class="sourceLineNo">428</span>   * @param withCoprocessor<a name="line.428"></a>
+<span class="sourceLineNo">429</span>   * @param nonceGroup Nonce group.<a name="line.429"></a>
+<span class="sourceLineNo">430</span>   * @param nonce Nonce.<a name="line.430"></a>
+<span class="sourceLineNo">431</span>   * @return list of cells resulting from the operation<a name="line.431"></a>
+<span class="sourceLineNo">432</span>   * @throws IOException<a name="line.432"></a>
+<span class="sourceLineNo">433</span>   */<a name="line.433"></a>
+<span class="sourceLineNo">434</span>  List&lt;Cell&gt; get(Get get, boolean withCoprocessor, long nonceGroup, long nonce) throws IOException;<a name="line.434"></a>
+<span class="sourceLineNo">435</span><a name="line.435"></a>
+<span class="sourceLineNo">436</span>  /**<a name="line.436"></a>
+<span class="sourceLineNo">437</span>   * Return an iterator that scans over the HRegion, returning the indicated<a name="line.437"></a>
+<span class="sourceLineNo">438</span>   * columns and rows specified by the {@link Scan}.<a name="line.438"></a>
+<span class="sourceLineNo">439</span>   * &lt;p&gt;<a name="line.439"></a>
+<span class="sourceLineNo">440</span>   * This Iterator must be closed by the caller.<a name="line.440"></a>
+<span class="sourceLineNo">441</span>   *<a name="line.441"></a>
+<span class="sourceLineNo">442</span>   * @param scan configured {@link Scan}<a name="line.442"></a>
+<span class="sourceLineNo">443</span>   * @return RegionScanner<a name="line.443"></a>
+<span class="sourceLineNo">444</span>   * @throws IOException read exceptions<a name="line.444"></a>
+<span class="sourceLineNo">445</span>   */<a name="line.445"></a>
+<span class="sourceLineNo">446</span>  RegionScanner getScanner(Scan scan) throws IOException;<a name="line.446"></a>
+<span class="sourceLineNo">447</span><a name="line.447"></a>
+<span class="sourceLineNo">448</span>  /**<a name="line.448"></a>
+<span class="sourceLineNo">449</span>   * Return an iterator that scans over the HRegion, returning the indicated columns and rows<a name="line.449"></a>
+<span class="sourceLineNo">450</span>   * specified by the {@link Scan}. The scanner will also include the additional scanners passed<a name="line.450"></a>
+<span class="sourceLineNo">451</span>   * along with the scanners for the specified Scan instance. Should be careful with the usage to<a name="line.451"></a>
+<span class="sourceLineNo">452</span>   * pass additional scanners only within this Region<a name="line.452"></a>
+<span class="sourceLineNo">453</span>   * &lt;p&gt;<a name="line.453"></a>
+<span class="sourceLineNo">454</span>   * This Iterator must be closed by the caller.<a name="line.454"></a>
+<span class="sourceLineNo">455</span>   *<a name="line.455"></a>
+<span class="sourceLineNo">456</span>   * @param scan configured {@link Scan}<a name="line.456"></a>
+<span class="sourceLineNo">457</span>   * @param additionalScanners Any additional scanners to be used<a name="line.457"></a>
+<span class="sourceLineNo">458</span>   * @return RegionScanner<a name="line.458"></a>
+<span class="sourceLineNo">459</span>   * @throws IOException read exceptions<a name="line.459"></a>
+<span class="sourceLineNo">460</span>   */<a name="line.460"></a>
+<span class="sourceLineNo">461</span>  RegionScanner getScanner(Scan scan, List&lt;KeyValueScanner&gt; additionalScanners) throws IOException;<a name="line.461"></a>
+<span class="sourceLineNo">462</span><a name="line.462"></a>
+<span class="sourceLineNo">463</span>  /** The comparator to be used with the region */<a name="line.463"></a>
+<span class="sourceLineNo">464</span>  CellComparator getCellComparator();<a name="line.464"></a>
+<span class="sourceLineNo">465</span><a name="line.465"></a>
+<span class="sourceLineNo">466</span>  /**<a name="line.466"></a>
+<span class="sourceLineNo">467</span>   * Perform one or more increment operations on a row.<a name="line.467"></a>
+<span class="sourceLineNo">468</span>   * @param increment<a name="line.468"></a>
+<span class="sourceLineNo">469</span>   * @param nonceGroup<a name="line.469"></a>
+<span class="sourceLineNo">470</span>   * @param nonce<a name="line.470"></a>
+<span class="sourceLineNo">471</span>   * @return result of the operation<a name="line.471"></a>
+<span class="sourceLineNo">472</span>   * @throws IOException<a name="line.472"></a>
+<span class="sourceLineNo">473</span>   */<a name="line.473"></a>
+<span class="sourceLineNo">474</span>  Result increment(Increment increment, long nonceGroup, long nonce) throws IOException;<a name="line.474"></a>
+<span class="sourceLineNo">475</span><a name="line.475"></a>
+<span class="sourceLineNo">476</span>  /**<a name="line.476"></a>
+<span class="sourceLineNo">477</span>   * Performs multiple mutations atomically on a single row. Currently<a name="line.477"></a>
+<span class="sourceLineNo">478</span>   * {@link Put} and {@link Delete} are supported.<a name="line.478"></a>
+<span class="sourceLineNo">479</span>   *<a name="line.479"></a>
+<span class="sourceLineNo">480</span>   * @param mutations object that specifies the set of mutations to perform atomically<a name="line.480"></a>
+<span class="sourceLineNo">481</span>   * @throws IOException<a name="line.481"></a>
+<span class="sourceLineNo">482</span>   */<a name="line.482"></a>
+<span class="sourceLineNo">483</span>  void mutateRow(RowMutations mutations) throws IOException;<a name="line.483"></a>
+<span class="sourceLineNo">484</span><a name="line.484"></a>
+<span class="sourceLineNo">485</span>  /**<a name="line.485"></a>
+<span class="sourceLineNo">486</span>   * Perform atomic mutations within the region.<a name="line.486"></a>
+<span class="sourceLineNo">487</span>   *<a name="line.487"></a>
+<span class="sourceLineNo">488</span>   * @param mutations The list of mutations to perform.<a name="line.488"></a>
+<span class="sourceLineNo">489</span>   * &lt;code&gt;mutations&lt;/code&gt; can contain operations for multiple rows.<a name="line.489"></a>
+<span class="sourceLineNo">490</span>   * Caller has to ensure that all rows are contained in this region.<a name="line.490"></a>
+<span class="sourceLineNo">491</span>   * @param rowsToLock Rows to lock<a name="line.491"></a>
+<span class="sourceLineNo">492</span>   * @param nonceGroup Optional nonce group of the operation (client Id)<a name="line.492"></a>
+<span class="sourceLineNo">493</span>   * @param nonce Optional nonce of the operation (unique random id to ensure "more idempotence")<a name="line.493"></a>
+<span class="sourceLineNo">494</span>   * If multiple rows are locked care should be taken that<a name="line.494"></a>
+<span class="sourceLineNo">495</span>   * &lt;code&gt;rowsToLock&lt;/code&gt; is sorted in order to avoid deadlocks.<a name="line.495"></a>
+<span class="sourceLineNo">496</span>   * @throws IOException<a name="line.496"></a>
+<span class="sourceLineNo">497</span>   */<a name="line.497"></a>
+<span class="sourceLineNo">498</span>  void mutateRowsWithLocks(Collection&lt;Mutation&gt; mutations, Collection&lt;byte[]&gt; rowsToLock,<a name="line.498"></a>
+<span class="sourceLineNo">499</span>      long nonceGroup, long nonce) throws IOException;<a name="line.499"></a>
 <span class="sourceLineNo">500</span><a name="line.500"></a>
 <span class="sourceLineNo">501</span>  /**<a name="line.501"></a>
 <span class="sourceLineNo">502</span>   * Performs atomic multiple reads and writes on a given row.<a name="line.502"></a>
 <span class="sourceLineNo">503</span>   *<a name="line.503"></a>
 <span class="sourceLineNo">504</span>   * @param processor The object defines the reads and writes to a row.<a name="line.504"></a>
-<span class="sourceLineNo">505</span>   * @param nonceGroup Optional nonce group of the operation (client Id)<a name="line.505"></a>
-<span class="sourceLineNo">506</span>   * @param nonce Optional nonce of the operation (unique random id to ensure "more idempotence")<a name="line.506"></a>
-<span class="sourceLineNo">507</span>   */<a name="line.507"></a>
-<span class="sourceLineNo">508</span>  void processRowsWithLocks(RowProcessor&lt;?,?&gt; processor, long nonceGroup, long nonce)<a name="line.508"></a>
-<span class="sourceLineNo">509</span>      throws IOException;<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span>  /**<a name="line.511"></a>
-<span class="sourceLineNo">512</span>   * Performs atomic multiple reads and writes on a given row.<a name="line.512"></a>
-<span class="sourceLineNo">513</span>   *<a name="line.513"></a>
-<span class="sourceLineNo">514</span>   * @param processor The object defines the reads and writes to a row.<a name="line.514"></a>
-<span class="sourceLineNo">515</span>   * @param timeout The timeout of the processor.process() execution<a name="line.515"></a>
-<span class="sourceLineNo">516</span>   *                Use a negative number to switch off the time bound<a name="line.516"></a>
-<span class="sourceLineNo">517</span>   * @param nonceGroup Optional nonce group of the operation (client Id)<a name="line.517"></a>
-<span class="sourceLineNo">518</span>   * @param nonce Optional nonce of the operation (unique random id to ensure "more idempotence")<a name="line.518"></a>
-<span class="sourceLineNo">519</span>   */<a name="line.519"></a>
-<span class="sourceLineNo">520</span>  void processRowsWithLocks(RowProcessor&lt;?,?&gt; processor, long timeout, long nonceGroup, long nonce)<a name="line.520"></a>
-<span class="sourceLineNo">521</span>      throws IOException;<a name="line.521"></a>
-<span class="sourceLineNo">522</span><a name="line.522"></a>
-<span class="sourceLineNo">523</span>  /**<a name="line.523"></a>
-<span class="sourceLineNo">524</span>   * Puts some data in the table.<a name="line.524"></a>
-<span class="sourceLineNo">525</span>   * @param put<a name="line.525"></a>
-<span class="sourceLineNo">526</span>   * @throws IOException<a name="line.526"></a>
-<span class="sourceLineNo">527</span>   */<a name="line.527"></a>
-<span class="sourceLineNo">528</span>  void put(Put put) throws IOException;<a name="line.528"></a>
+<span class="sourceLineNo">505</span>   */<a name="line.505"></a>
+<span class="sourceLineNo">506</span>  void processRowsWithLocks(RowProcessor&lt;?,?&gt; processor) throws IOException;<a name="line.506"></a>
+<span class="sourceLineNo">507</span><a name="line.507"></a>
+<span class="sourceLineNo">508</span>  /**<a name="line.508"></a>
+<span class="sourceLineNo">509</span>   * Performs atomic multiple reads and writes on a given row.<a name="line.509"></a>
+<span class="sourceLineNo">510</span>   *<a name="line.510"></a>
+<span class="sourceLineNo">511</span>   * @param processor The object defines the reads and writes to a row.<a name="line.511"></a>
+<span class="sourceLineNo">512</span>   * @param nonceGroup Optional nonce group of the operation (client Id)<a name="line.512"></a>
+<span class="sourceLineNo">513</span>   * @param nonce Optional nonce of the operation (unique random id to ensure "more idempotence")<a name="line.513"></a>
+<span class="sourceLineNo">514</span>   */<a name="line.514"></a>
+<span class="sourceLineNo">515</span>  void processRowsWithLocks(RowProcessor&lt;?,?&gt; processor, long nonceGroup, long nonce)<a name="line.515"></a>
+<span class="sourceLineNo">516</span>      throws IOException;<a name="line.516"></a>
+<span class="sourceLineNo">517</span><a name="line.517"></a>
+<span class="sourceLineNo">518</span>  /**<a name="line.518"></a>
+<span class="sourceLineNo">519</span>   * Performs atomic multiple reads and writes on a given row.<a name="line.519"></a>
+<span class="sourceLineNo">520</span>   *<a name="line.520"></a>
+<span class="sourceLineNo">521</span>   * @param processor The object defines the reads and writes to a row.<a name="line.521"></a>
+<span class="sourceLineNo">522</span>   * @param timeout The timeout of the processor.process() execution<a name="line.522"></a>
+<span class="sourceLineNo">523</span>   *                Use a negative number to switch off the time bound<a name="line.523"></a>
+<span class="sourceLineNo">524</span>   * @param nonceGroup Optional nonce group of the operation (client Id)<a name="line.524"></a>
+<span class="sourceLineNo">525</span>   * @param nonce Optional nonce of the operation (unique random id to ensure "more idempotence")<a name="line.525"></a>
+<span class="sourceLineNo">526</span>   */<a name="line.526"></a>
+<span class="sourceLineNo">527</span>  void processRowsWithLocks(RowProcessor&lt;?,?&gt; processor, long timeout, long nonceGroup, long nonce)<a name="line.527"></a>
+<span class="sourceLineNo">528</span>      throws IOException;<a name="line.528"></a>
 <span class="sourceLineNo">529</span><a name="line.529"></a>
 <span class="sourceLineNo">530</span>  /**<a name="line.530"></a>
-<span class="sourceLineNo">531</span>   * Listener class to enable callers of<a name="line.531"></a>
-<span class="sourceLineNo">532</span>   * bulkLoadHFile() to perform any necessary<a name="line.532"></a>
-<span class="sourceLineNo">533</span>   * pre/post processing of a given bulkload call<a name="line.533"></a>
+<span class="sourceLineNo">531</span>   * Puts some data in the table.<a name="line.531"></a>
+<span class="sourceLineNo">532</span>   * @param put<a name="line.532"></a>
+<span class="sourceLineNo">533</span>   * @throws IOException<a name="line.533"></a>
 <span class="sourceLineNo">534</span>   */<a name="line.534"></a>
-<span class="sourceLineNo">535</span>  interface BulkLoadListener {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    /**<a name="line.536"></a>
-<span class="sourceLineNo">537</span>     * Called before an HFile is actually loaded<a name="line.537"></a>
-<span class="sourceLineNo">538</span>     * @param family family being loaded to<a name="line.538"></a>
-<span class="sourceLineNo">539</span>     * @param srcPath path of HFile<a name="line.539"></a>
-<span class="sourceLineNo">540</span>     * @return final path to be used for actual loading<a name="line.540"></a>
-<span class="sourceLineNo">541</span>     * @throws IOException<a name="line.541"></a>
-<span class="sourceLineNo">542</span>     */<a name="line.542"></a>
-<span class="sourceLineNo">543</span>    String prepareBulkLoad(byte[] family, String srcPath, boolean copyFile)<a name="line.543"></a>
-<span class="sourceLineNo">544</span>        throws IOException;<a name="line.544"></a>
-<span class="sourceLineNo">545</span><a name="line.545"></a>
-<span class="sourceLineNo">546</span>    /**<a name="line.546"></a>
-<span class="sourceLineNo">547</span>     * Called after a successful HFile load<a name="line.547"></a>
-<span class="sourceLineNo">548</span>     * @param family family being loaded to<a name="line.548"></a>
-<span class="sourceLineNo">549</span>     * @param srcPath path of HFile<a name="line.549"></a>
-<span class="sourceLineNo">550</span>     * @throws IOException<a name="line.550"></a>
-<span class="sourceLineNo">551</span>     */<a name="line.551"></a>
-<span class="sourceLineNo">552</span>    void doneBulkLoad(byte[] family, String srcPath) throws IOException;<a name="line.552"></a>
-<span class="sourceLineNo">553</span><a name="line.553"></a>
-<span class="sourceLineNo">554</span>    /**<a name="line.554"></a>
-<span class="sourceLineNo">555</span>     * Called after a failed HFile load<a name="line.555"></a>
-<span class="sourceLineNo">556</span>     * @param family family being loaded to<a name="line.556"></a>
-<span class="sourceLineNo">557</span>     * @param srcPath path of HFile<a name="line.557"></a>
-<span class="sourceLineNo">558</span>     * @throws IOException<a name="line.558"></a>
-<span class="sourceLineNo">559</span>     */<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    void failedBulkLoad(byte[] family, String srcPath) throws IOException;<a name="line.560"></a>
-<span class="sourceLineNo">561</span>  }<a name="line.561"></a>
-<span class="sourceLineNo">562</span><a name="line.562"></a>
-<span class="sourceLineNo">563</span>  /**<a name="line.563"></a>
-<span class="sourceLineNo">564</span>   * Attempts to atomically load a group of hfiles.  This is critical for loading<a name="line.564"></a>
-<span class="sourceLineNo">565</span>   * rows with multiple column families atomically.<a name="line.565"></a>
-<span class="sourceLineNo">566</span>   *<a name="line.566"></a>
-<span class="sourceLineNo">567</span>   * @param familyPaths List of Pair&amp;lt;byte[] column family, String hfilePath&amp;gt;<a name="line.567"></a>
-<span class="sourceLineNo">568</span>   * @param bulkLoadListener Internal hooks enabling massaging/preparation of a<a name="line.568"></a>
-<span class="sourceLineNo">569</span>   * file about to be bulk loaded<a name="line.569"></a>
-<span class="sourceLineNo">570</span>   * @param assignSeqId<a name="line.570"></a>
-<span class="sourceLineNo">571</span>   * @return Map from family to List of store file paths if successful, null if failed recoverably<a name="line.571"></a>
-<span class="sourceLineNo">572</span>   * @throws IOException if failed unrecoverably.<a name="line.572"></a>
-<span class="sourceLineNo">573</span>   */<a name="line.573"></a>
-<span class="sourceLineNo">574</span>  Map&lt;byte[], List&lt;Path&gt;&gt; bulkLoadHFiles(Collection&lt;Pair&lt;byte[], String&gt;&gt; familyPaths,<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      boolean assignSeqId, BulkLoadListener bulkLoadListener) throws IOException;<a name="line.575"></a>
-<span class="sourceLineNo">576</span><a name="line.576"></a>
-<span class="sourceLineNo">577</span>  /**<a name="line.577"></a>
-<span class="sourceLineNo">578</span>   * Attempts to atomically load a group of hfiles.  This is critical for loading<a name="line.578"></a>
-<span class="sourceLineNo">579</span>   * rows with multiple column families atomically.<a name="line.579"></a>
-<span class="sourceLineNo">580</span>   *<a name="line.580"></a>
-<span class="sourceLineNo">581</span>   * @param familyPaths List of Pair&amp;lt;byte[] column family, String hfilePath&amp;gt;<a name="line.581"></a>
-<span class="sourceLineNo">582</span>   * @param assignSeqId<a name="line.582"></a>
-<span class="sourceLineNo">583</span>   * @param bulkLoadListener Internal hooks enabling massaging/preparation of a<a name="line.583"></a>
-<span class="sourceLineNo">584</span>   * file about to be bulk loaded<a name="line.584"></a>
-<span class="sourceLineNo">585</span>   * @param copyFile always copy hfiles if true<a name="line.585"></a>
-<span class="sourceLineNo">586</span>   * @return Map from family to List of store file paths if successful, null if failed recoverably<a name="line.586"></a>
-<span class="sourceLineNo">587</span>   * @throws IOException if failed unrecoverably.<a name="line.587"></a>
-<span class="sourceLineNo">588</span>   */<a name="line.588"></a>
-<span class="sourceLineNo">589</span>  Map&lt;byte[], List&lt;Path&gt;&gt; bulkLoadHFiles(Collection&lt;Pair&lt;byte[], String&gt;&gt; familyPaths,<a name="line.589"></a>
-<span class="sourceLineNo">590</span>      boolean assignSeqId, BulkLoadListener bulkLoadListener, boolean copyFile) throws IOException;<a name="line.590"></a>
-<span class="sourceLineNo">591</span><a name="line.591"></a>
-<span class="sourceLineNo">592</span>  ///////////////////////////////////////////////////////////////////////////<a name="line.592"></a>
-<span class="sourceLineNo">593</span>  // Coprocessors<a name="line.593"></a>
-<span class="sourceLineNo">594</span><a name="line.594"></a>
-<span class="sourceLineNo">595</span>  /** @return the coprocessor host */<a name="line.595"></a>
-<span class="sourceLineNo">596</span>  RegionCoprocessorHost getCoprocessorHost();<a name="line.596"></a>
-<span class="sourceLineNo">597</span><a name="line.597"></a>
-<span class="sourceLineNo">598</span>  /**<a name="line.598"></a>
-<span class="sourceLineNo">599</span>   * Executes a single protocol buffer coprocessor endpoint {@link Service} method using<a name="line.599"></a>
-<span class="sourceLineNo">600</span>   * the registered protocol handlers.  {@link Service} implementations must be registered via the<a name="line.600"></a>
-<span class="sourceLineNo">601</span>   * {@link Region#registerService(com.google.protobuf.Service)}<a name="line.601"></a>
-<span class="sourceLineNo">602</span>   * method before they are available.<a name="line.602"></a>
-<span class="sourceLineNo">603</span>   *<a name="line.603"></a>
-<span class="sourceLineNo">604</span>   * @param controller an {@code RpcContoller} implementation to pass to the invoked service<a name="line.604"></a>
-<span class="sourceLineNo">605</span>   * @param call a {@code CoprocessorServiceCall} instance identifying the service, method,<a name="line.605"></a>
-<span class="sourceLineNo">606</span>   *     and parameters for the method invocation<a name="line.606"></a>
-<span class="sourceLineNo">607</span>   * @return a protocol buffer {@code Message} instance containing the method's result<a name="line.607"></a>
-<span class="sourceLineNo">608</span>   * @throws IOException if no registered service handler is found or an error<a name="line.608"></a>
-<span class="sourceLineNo">609</span>   *     occurs during the invocation<a name="line.609"></a>
-<span class="sourceLineNo">610</span>   * @see org.apache.hadoop.hbase.regionserver.Region#registerService(com.google.protobuf.Service)<a name="line.610"></a>
-<span class="sourceLineNo">611</span>   */<a name="line.611"></a>
-<span class="sourceLineNo">612</span>  com.google.protobuf.Message execService(com.google.protobuf.RpcController controller,<a name="line.612"></a>
-<span class="sourceLineNo">613</span>      CoprocessorServiceCall call)<a name="line.613"></a>
-<span class="sourceLineNo">614</span>  throws IOException;<a name="line.614"></a>
-<span class="sourceLineNo">615</span><a name="line.615"></a>
-<span class="sourceLineNo">616</span>  /**<a name="line.616"></a>
-<span class="sourceLineNo">617</span>   * Registers a new protocol buffer {@link Service} subclass as a coprocessor endpoint to<a name="line.617"></a>
-<span class="sourceLineNo">618</span>   * be available for handling Region#execService(com.google.protobuf.RpcController,<a name="line.618"></a>
-<span class="sourceLineNo">619</span>   *    org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceCall) calls.<a name="line.619"></a>
-<span class="sourceLineNo">620</span>   *<a name="line.620"></a>
-<span class="sourceLineNo">621</span>   * &lt;p&gt;<a name="line.621"></a>
-<span class="sourceLineNo">622</span>   * Only a single instance may be registered per region for a given {@link Service} subclass (the<a name="line.622"></a>
-<span class="sourceLineNo">623</span>   * instances are keyed on {@link com.google.protobuf.Descriptors.ServiceDescriptor#getFullName()}.<a name="line.623"></a>
-<span class="sourceLineNo">624</span>   * After the first registration, subsequent calls with the same service name will fail with<a name="line.624"></a>
-<span class="sourceLineNo">625</span>   * a return value of {@code false}.<a name="line.625"></a>
-<span class="sourceLineNo">626</span>   * &lt;/p&gt;<a name="line.626"></a>
-<span class="sourceLineNo">627</span>   * @param instance the {@code Service} subclass instance to expose as a coprocessor endpoint<a name="line.627"></a>
-<span class="sourceLineNo">628</span>   * @return {@code true} if the registration was successful, {@code false}<a name="line.628"></a>
-<span class="sourceLineNo">629</span>   * otherwise<a name="line.629"></a>
-<span class="sourceLineNo">630</span>   */<a name="line.630"></a>
-<span class="sourceLineNo">631</span>  boolean registerService(com.google.protobuf.Service instance);<a name="line.631"></a>
-<span class="sourceLineNo">632</span><a name="line.632"></a>
-<span class="sourceLineNo">633</span>  ///////////////////////////////////////////////////////////////////////////<a name="line.633"></a>
-<span class="sourceLineNo">634</span>  // RowMutation processor support<a name="line.634"></a>
-<span class="sourceLineNo">635</span><a name="line.635"></a>
-<span class="sourceLineNo">636</span>  /**<a name="line.636"></a>
-<span class="sourceLineNo">637</span>   * Check the collection of families for validity.<a name="line.637"></a>
-<span class="sourceLineNo">638</span>   * @param families<a name="line.638"></a>
-<span class="sourceLineNo">639</span>   * @throws NoSuchColumnFamilyException<a name="line.639"></a>
-<span class="sourceLineNo">640</span>   */<a name="line.640"></a>
-<span class="sourceLineNo">641</span>  void checkFamilies(Collection&lt;byte[]&gt; families) throws NoSuchColumnFamilyException;<a name="line.641"></a>
+<span class="sourceLineNo">535</span>  void put(Put put) throws IOException;<a name="line.535"></a>
+<span class="sourceLineNo">536</span><a name="line.536"></a>
+<span class="sourceLineNo">537</span>  /**<a name="line.537"></a>
+<span class="sourceLineNo">538</span>   * Listener class to enable callers of<a name="line.538"></a>
+<span class="sourceLineNo">539</span>   * bulkLoadHFile() to perform any necessary<a name="line.539"></a>
+<span class="sourceLineNo">540</span>   * pre/post processing of a given bulkload call<a name="line.540"></a>
+<span class="sourceLineNo">541</span>   */<a name="line.541"></a>
+<span class="sourceLineNo">542</span>  interface BulkLoadListener {<a name="line.542"></a>
+<span class="sourceLineNo">543</span>    /**<a name="line.543"></a>
+<span class="sourceLineNo">544</span>     * Called before an HFile is actually loaded<a name="line.544"></a>
+<span class="sourceLineNo">545</span>     * @param family family being loaded to<a name="line.545"></a>
+<span class="sourceLineNo">546</span>     * @param srcPath path of HFile<a name="line.546"></a>
+<span class="sourceLineNo">547</span>     * @return final path to be used for actual loading<a name="line.547"></a>
+<span class="sourceLineNo">548</span>     * @throws IOException<a name="line.548"></a>
+<span class="sourceLineNo">549</span>     */<a name="line.549"></a>
+<span class="sourceLineNo">550</span>    String prepareBulkLoad(byte[] family, String srcPath, boolean copyFile)<a name="line.550"></a>
+<span class="sourceLineNo">551</span>        throws IOException;<a name="line.551"></a>
+<span class="sourceLineNo">552</span><a name="line.552"></a>
+<span class="sourceLineNo">553</span>    /**<a name="line.553"></a>
+<span class="sourceLineNo">554</span>     * Called after a successful HFile load<a name="line.554"></a>
+<span class="sourceLineNo">555</span>     * @param family family being loaded to<a name="line.555"></a>
+<span class="sourceLineNo">556</span>     * @param srcPath path of HFile<a name="line.556"></a>
+<span class="sourceLineNo">557</span>     * @throws IOException<a name="line.557"></a>
+<span class="sourceLineNo">558</span>     */<a name="line.558"></a>
+<span class="sourceLineNo">559</span>    void doneBulkLoad(byte[] family, String srcPath) throws IOException;<a name="line.559"></a>
+<span class="sourceLineNo">560</span><a name="line.560"></a>
+<span class="sourceLineNo">561</span>    /**<a name="line.561"></a>
+<span class="sourceLineNo">562</span>     * Called after a failed HFile load<a name="line.562"></a>
+<span class="sourceLineNo">563</span>     * @param family family being loaded to<a name="line.563"></a>
+<span class="sourceLineNo">564</span>     * @param srcPath path of HFile<a name="line.564"></a>
+<span class="sourceLineNo">565</span>     * @throws IOException<a name="line.565"></a>
+<span class="sourceLineNo">566</span>     */<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    void failedBulkLoad(byte[] family, String srcPath) throws IOException;<a name="line.567"></a>
+<span class="sourceLineNo">568</span>  }<a name="line.568"></a>
+<span class="sourceLineNo">569</span><a name="line.569"></a>
+<span class="sourceLineNo">570</span>  /**<a name="line.570"></a>
+<span class="sourceLineNo">571</span>   * Attempts to atomically load a group of hfiles.  This is critical for loading<a name="line.571"></a>
+<span class="sourceLineNo">572</span>   * rows with multiple column families atomically.<a name="line.572"></a>
+<span class="sourceLineNo">573</span>   *<a name="line.573"></a>
+<span class="sourceLineNo">574</span>   * @param familyPaths List of Pair&amp;lt;byte[] column family, String hfilePath&amp;gt;<a name="line.574"></a>
+<span class="sourceLineNo">575</span>   * @param bulkLoadListener Internal hooks enabling massaging/preparation of a<a name="line.575"></a>
+<span class="sourceLineNo">576</span>   * file about to be bulk loaded<a name="line.576"></a>
+<span class="sourceLineNo">577</span>   * @param assignSeqId<a name="line.577"></a>
+<span class="sourceLineNo">578</span>   * @return Map from family to List of store file paths if successful, null if failed recoverably<a name="line.578"></a>
+<span class="sourceLineNo">579</span>   * @throws IOException if failed unrecoverably.<a name="line.579"></a>
+<span class="sourceLineNo">580</span>   */<a name="line.580"></a>
+<span class="sourceLineNo">581</span>  Map&lt;byte[], List&lt;Path&gt;&gt; bulkLoadHFiles(Collection&lt;Pair&lt;byte[], String&gt;&gt; familyPaths,<a name="line.581"></a>
+<span class="sourceLineNo">582</span>      boolean assignSeqId, BulkLoadListener bulkLoadListener) throws IOException;<a name="line.582"></a>
+<span class="sourceLineNo">583</span><a name="line.583"></a>
+<span class="sourceLineNo">584</span>  /**<a name="line.584"></a>
+<span class="sourceLineNo">585</span>   * Attempts to atomically load a group of hfiles.  This is critical for loading<a name="line.585"></a>
+<span class="sourceLineNo">586</span>   * rows with multiple column families atomically.<a name="line.586"></a>
+<span class="sourceLineNo">587</span>   *<a name="line.587"></a>
+<span class="sourceLineNo">588</span>   * @param familyPaths List of Pair&amp;lt;byte[] column family, String hfilePath&amp;gt;<a name="line.588"></a>
+<span class="sourceLineNo">589</span>   * @param assignSeqId<a name="line.589"></a>
+<span class="sourceLineNo">590</span>   * @param bulkLoadListener Internal hooks enabling massaging/preparation of a<a name="line.590"></a>
+<span class="sourceLineNo">591</span>   * file about to be bulk loaded<a name="line.591"></a>
+<span class="sourceLineNo">592</span>   * @param copyFile always copy hfiles if true<a name="line.592"></a>
+<span class="sourceLineNo">593</span>   * @return Map from family to List of store file paths if successful, null if failed recoverably<a name="line.593"></a>
+<span class="sourceLineNo">594</span>   * @throws IOException if failed unrecoverably.<a name="line.594"></a>
+<span class="sourceLineNo">595</span>   */<a name="line.595"></a>
+<span class="sourceLineNo">596</span>  Map&lt;byte[], List&lt;Path&gt;&gt; bulkLoadHFiles(Collection&lt;Pair&lt;byte[], String&gt;&gt; familyPaths,<a name="line.596"></a>
+<span class="sourceLineNo">597</span>      boolean assignSeqId, BulkLoadListener bulkLoadListener, boolean copyFile) throws IOException;<a name="line.597"></a>
+<span class="sourceLineNo">598</span><a name="line.598"></a>
+<span class="sourceLineNo">599</span>  ///////////////////////////////////////////////////////////////////////////<a name="line.599"></a>
+<span class="sourceLineNo">600</span>  // Coprocessors<a name="line.600"></a>
+<span class="sourceLineNo">601</span><a name="line.601"></a>
+<span class="sourceLineNo">602</span>  /** @return the coprocessor host */<a name="line.602"></a>
+<span class="sourceLineNo">603</span>  RegionCoprocessorHost getCoprocessorHost();<a name="line.603"></a>
+<span class="sourceLineNo">604</span><a name="line.604"></a>
+<span class="sourceLineNo">605</span>  /**<a name="line.605"></a>
+<span class="sourceLineNo">606</span>   * Executes a single protocol buffer coprocessor endpoint {@link Service} method using<a name="line.606"></a>
+<span class="sourceLineNo">607</span>   * the registered protocol handlers.  {@link Service} implementations must be registered via the<a name="line.607"></a>
+<span class="sourceLineNo">608</span>   * {@link Region#registerService(com.google.protobuf.Service)}<a name="line.608"></a>
+<span class="sourceLineNo">609</span>   * method before they are available.<a name="line.609"></a>
+<span class="sourceLineNo">610</span>   *<a name="line.610"></a>
+<span class="sourceLineNo">611</span>   * @param controller an {@code RpcContoller} implementation to pass to the invoked service<a name="line.611"></a>
+<span class="sourceLineNo">612</span>   * @param call a {@code CoprocessorServiceCall} instance identifying the service, method,<a name="line.612"></a>
+<span class="sourceLineNo">613</span>   *     and parameters for the method invocation<a name="line.613"></a>
+<span class="sourceLineNo">614</span>   * @return a protocol buffer {@code Message} instance containing the method's result<a name="line.614"></a>
+<span class="sourceLineNo">615</span>   * @throws IOException if no registered service handler is found or an error<a name="line.615"></a>
+<span class="sourceLineNo">616</span>   *     occurs during the invocation<a name="line.616"></a>
+<span class="sourceLineNo">617</span>   * @see org.apache.hadoop.hbase.regionserver.Region#registerService(com.google.protobuf.Service)<a name="line.617"></a>
+<span class="sourceLineNo">618</span>   */<a name="line.618"></a>
+<span class="sourceLineNo">619</span>  com.google.protobuf.Message execService(com.google.protobuf.RpcController controller,<a name="line.619"></a>
+<span class="sourceLineNo">620</span>      CoprocessorServiceCall call)<a name="line.620"></a>
+<span class="sourceLineNo">621</span>  throws IOException;<a name="line.621"></a>
+<span class="sourceLineNo">622</span><a name="line.622"></a>
+<span class="sourceLineNo">623</span>  /**<a name="line.623"></a>
+<span class="sourceLineNo">624</span>   * Registers a new protocol buffer {@link Service} subclass as a coprocessor endpoint to<a name="line.624"></a>
+<span class="sourceLineNo">625</span>   * be available for handling Region#execService(com.google.protobuf.RpcController,<a name="line.625"></a>
+<span class="sourceLineNo">626</span>   *    org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceCall) calls.<a name="line.626"></a>
+<span class="sourceLineNo">627</span>   *<a name="line.627"></a>
+<span class="sourceLineNo">628</span>   * &lt;p&gt;<a name="line.628"></a>
+<span class="sourceLineNo">629</span>   * Only a single instance may be registered per region for a given {@link Service} subclass (the<a name="line.629"></a>
+<span class="sourceLineNo">630</span>   * instances are keyed on {@link com.google.protobuf.Descriptors.ServiceDescriptor#getFullName()}.<a name="line.630"></a>
+<span class="sourceLineNo">631</span>   * After the first registration, subsequent calls with the same service name will fail with<a name="line.631"></a>
+<span class="sourceLineNo">632</span>   * a return value of {@code false}.<a name="line.632"></a>
+<span class="sourceLineNo">633</span>   * &lt;/p&gt;<a name="line.633"></a>
+<span class="sourceLineNo">634</span>   * @param instance the {@code Service} subclass instance to expose as a coprocessor endpoint<a name="line.634"></a>
+<span class="sourceLineNo">635</span>   * @return {@code true} if the registration was successful, {@code false}<a name="line.635"></a>
+<span class="sourceLineNo">636</span>   * otherwise<a name="line.636"></a>
+<span class="sourceLineNo">637</span>   */<a name="line.637"></a>
+<span class="sourceLineNo">638</span>  boolean registerService(com.google.protobuf.Service instance);<a name="line.638"></a>
+<span class="sourceLineNo">639</span><a name="line.639"></a>
+<span class="sourceLineNo">640</span>  ///////////////////////////////////////////////////////////////////////////<a name="line.640"></a>
+<span class="sourceLineNo">641</span>  // RowMutation processor support<a name="line.641"></a>
 <span class="sourceLineNo">642</span><a name="line.642"></a>
 <span class="sourceLineNo">643</span>  /**<a name="line.643"></a>
-<span class="sourceLineNo">644</span>   * Check the collection of families for valid timestamps<a name="line.644"></a>
-<span class="sourceLineNo">645</span>   * @param familyMap<a name="line.645"></a>
-<span class="sourceLineNo">646</span>   * @param now current timestamp<a name="line.646"></a>
-<span class="sourceLineNo">647</span>   * @throws FailedSanityCheckException<a name="line.647"></a>
-<span class="sourceLineNo">648</span>   */<a name="line.648"></a>
-<span class="sourceLineNo">649</span>  void checkTimestamps(Map&lt;byte[], List&lt;Cell&gt;&gt; familyMap, long now)<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      throws FailedSanityCheckException;<a name="line.650"></a>
-<span class="sourceLineNo">651</span><a name="line.651"></a>
-<span class="sourceLineNo">652</span>  /**<a name="line.652"></a>
-<span class="sourceLineNo">653</span>   * Prepare a delete for a row mutation processor<a name="line.653"></a>
-<span class="sourceLineNo">654</span>   * @param delete The passed delete is modified by this method. WARNING!<a name="line.654"></a>
-<span class="sourceLineNo">655</span>   * @throws IOException<a name="line.655"></a>
-<span class="sourceLineNo">656</span>   */<a name="line.656"></a>
-<span class="sourceLineNo">657</span>  void prepareDelete(Delete delete) throws IOException;<a name="line.657"></a>
+<span class="sourceLineNo">644</span>   * Check the collection of families for validity.<a name="line.644"></a>
+<span class="sourceLineNo">645</span>   * @param families<a name="line.645"></a>
+<span class="sourceLineNo">646</span>   * @throws NoSuchColumnFamilyException<a name="line.646"></a>
+<span class="sourceLineNo">647</span>   */<a name="line.647"></a>
+<span class="sourceLineNo">648</span>  void checkFamilies(Collection&lt;byte[]&gt; families) throws NoSuchColumnFamilyException;<a name="line.648"></a>
+<span class="sourceLineNo">649</span><a name="line.649"></a>
+<span class="sourceLineNo">650</span>  /**<a name="line.650"></a>
+<span class="sourceLineNo">651</span>   * Check the collection of families for valid timestamps<a name="line.651"></a>
+<span class="sourceLineNo">652</span>   * @param familyMap<a name="line.652"></a>
+<span class="sourceLineNo">653</span>   * @param now current timestamp<a name="line.653"></a>
+<span class="sourceLineNo">654</span>   * @throws FailedSanityCheckException<a name="line.654"></a>
+<span class="sourceLineNo">655</span>   */<a name="line.655"></a>
+<span class="sourceLineNo">656</span>  void checkTimestamps(Map&lt;byte[], List&lt;Cell&gt;&gt; familyMap, long now)<a name="line.656"></a>
+<span class="sourceLineNo">657</span>      throws FailedSanityCheckException;<a name="line.657"></a>
 <span class="sourceLineNo">658</span><a name="line.658"></a>
 <span class="sourceLineNo">659</span>  /**<a name="line.659"></a>
-<span class="sourceLineNo">660</span>   * Set up correct timestamps in the KVs in Delete object.<a name="line.660"></a>
-<span class="sourceLineNo">661</span>   * &lt;p&gt;Caller should have the row and region locks.<a name="line.661"></a>
-<span class="sourceLineNo">662</span>   * @param mutation<a name="line.662"></a>
-<span class="sourceLineNo">663</span>   * @param familyCellMap<a name="line.663"></a>
-<span class="sourceLineNo">664</span>   * @param now<a name="line.664"></a>
-<span class="sourceLineNo">665</span>   * @throws IOException<a name="line.665"></a>
-<span class="sourceLineNo">666</span>   */<a name="line.666"></a>
-<span class="sourceLineNo">667</span>  void prepareDeleteTimestamps(Mutation mutation, Map&lt;byte[], List&lt;Cell&gt;&gt; familyCellMap,<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      byte[] now) throws IOException;<a name="line.668"></a>
-<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span>  /**<a name="line.670"></a>
-<span class="sourceLineNo">671</span>   * Replace any cell timestamps set to {@link org.apache.hadoop.hbase.HConstants#LATEST_TIMESTAMP}<a name="line.671"></a>
-<span class="sourceLineNo">672</span>   * provided current timestamp.<a name="line.672"></a>
-<span class="sourceLineNo">673</span>   * @param values<a name="line.673"></a>
-<span class="sourceLineNo">674</span>   * @param now<a name="line.674"></a>
-<span class="sourceLineNo">675</span>   */<a name="line.675"></a>
-<span class="sourceLineNo">676</span>  void updateCellTimestamps(final Iterable&lt;List&lt;Cell&gt;&gt; values, final byte[] now)<a name="line.676"></a>
-<span class="sourceLineNo">677</span>      throws IOException;<a name="line.677"></a>
-<span class="sourceLineNo">678</span><a name="line.678"></a>
-<span class="sourceLineNo">679</span>  ///////////////////////////////////////////////////////////////////////////<a name="line.679"></a>
-<span class="sourceLineNo">680</span>  // Flushes, compactions, splits, etc.<a name="line.680"></a>
-<span class="sourceLineNo">681</span>  // Wizards only, please<a name="line.681"></a>
-<span class="sourceLineNo">682</span><a name="line.682"></a>
-<span class="sourceLineNo">683</span>  interface FlushResult {<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    enum Result {<a name="line.684"></a>
-<span class="sourceLineNo">685</span>      FLUSHED_NO_COMPACTION_NEEDED,<a name="line.685"></a>
-<span class="sourceLineNo">686</span>      FLUSHED_COMPACTION_NEEDED,<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      // Special case where a flush didn't run because there's nothing in the memstores. Used when<a name="line.687"></a>
-<span class="sourceLineNo">688</span>      // bulk loading to know when we can still load even if a flush didn't happen.<a name="line.688"></a>
-<span class="sourceLineNo">689</span>      CANNOT_FLUSH_MEMSTORE_EMPTY,<a name="line.689"></a>
-<span class="sourceLineNo">690</span>      CANNOT_FLUSH<a name="line.690"></a>
-<span class="sourceLineNo">691</span>    }<a name="line.691"></a>
-<span class="sourceLineNo">692</span><a name="line.692"></a>
-<span class="sourceLineNo">693</span>    /** @return the detailed result code */<a name="line.693"></a>
-<span class="sourceLineNo">694</span>    Result getResult();<a name="line.694"></a>
-<span class="sourceLineNo">695</span><a name="line.695"></a>
-<span class="sourceLineNo">696</span>    /** @return true if the memstores were flushed, else false */<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    boolean isFlushSucceeded();<a name="line.697"></a>
-<span class="sourceLineNo">698</span><a name="line.698"></a>
-<span class="sourceLineNo">699</span>    /** @return True if the flush requested a compaction, else false */<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    boolean isCompactionNeeded();<a name="line.700"></a>
-<span class="sourceLineNo">701</span>  }<a name="line.701"></a>
+<span class="sourceLineNo">660</span>   * Prepare a delete for a row mutation processor<a name="line.660"></a>
+<span class="sourceLineNo">661</span>   * @param delete The passed delete is modified by this method. WARNING!<a name="line.661"></a>
+<span class="sourceLineNo">662</span>   * @throws IOException<a name="line.662"></a>
+<span class="sourceLineNo">663</span>   */<a name="line.663"></a>
+<span class="sourceLineNo">664</span>  void prepareDelete(Delete delete) throws IOException;<a name="line.664"></a>
+<span class="sourceLineNo">665</span><a name="line.665"></a>
+<span class="sourceLineNo">666</span>  /**<a name="line.666"></a>
+<span class="sourceLineNo">667</span>   * Set up correct timestamps in the KVs in Delete object.<a name="line.667"></a>
+<span class="sourceLineNo">668</span>   * &lt;p&gt;Caller should have the row and region locks.<a name="line.668"></a>
+<span class="sourceLineNo">669</span>   * @param mutation<a name="line.669"></a>
+<span class="sourceLineNo">670</span>   * @param familyCellMap<a name="line.670"></a>
+<span class="sourceLineNo">671</span>   * @param now<a name="line.671"></a>
+<span class="sourceLineNo">672</span>   * @throws IOException<a name="line.672"></a>
+<span class="sourceLineNo">673</span>   */<a name="line.673"></a>
+<span class="sourceLineNo">674</span>  void prepareDeleteTimestamps(Mutation mutation, Map&lt;byte[], List&lt;Cell&gt;&gt; familyCellMap,<a name="line.674"></a>
+<span class="sourceLineNo">675</span>      byte[] now) throws IOException;<a name="line.675"></a>
+<span class="sourceLineNo">676</span><a name="line.676"></a>
+<span class="sourceLineNo">677</span>  /**<a name="line.677"></a>
+<span class="sourceLineNo">678</span>   * Replace any cell timestamps set to {@link org.apache.hadoop.hbase.HConstants#LATEST_TIMESTAMP}<a name="line.678"></a>
+<span class="sourceLineNo">679</span>   * provided current timestamp.<a name="line.679"></a>
+<span class="sourceLineNo">680</span>   * @param values<a name="line.680"></a>
+<span class="sourceLineNo">681</span>   * @param now<a name="line.681"></a>
+<span class="sourceLineNo">682</span>   */<a name="line.682"></a>
+<span class="sourceLineNo">683</span>  void updateCellTimestamps(final Iterable&lt;List&lt;Cell&gt;&gt; values, final byte[] now)<a name="line.683"></a>
+<span class="sourceLineNo">684</span>      throws IOException;<a name="line.684"></a>
+<span class="sourceLineNo">685</span><a name="line.685"></a>
+<span class="sourceLineNo">686</span>  ///////////////////////////////////////////////////////////////////////////<a name="line.686"></a>
+<span class="sourceLineNo">687</span>  // Flushes, compactions, splits, etc.<a name="line.687"></a>
+<span class="sourceLineNo">688</span>  // Wizards only, please<a name="line.688"></a>
+<span class="sourceLineNo">689</span><a name="line.689"></a>
+<span class="sourceLineNo">690</span>  interface FlushResult {<a name="line.690"></a>
+<span class="sourceLineNo">691</span>    enum Result {<a name="line.691"></a>
+<span class="sourceLineNo">692</span>      FLUSHED_NO_COMPACTION_NEEDED,<a name="line.692"></a>
+<span class="sourceLineNo">693</span>      FLUSHED_COMPACTION_NEEDED,<a name="line.693"></a>
+<span class="sourceLineNo">694</span>      // Special case where a flush didn't run because there's nothing in the memstores. Used when<a name="line.694"></a>
+<span class="sourceLineNo">695</span>      // bulk loading to know when we can still load even if a flush didn't happen.<a name="line.695"></a>
+<span class="sourceLineNo">696</span>      CANNOT_FLUSH_MEMSTORE_EMPTY,<a name="line.696"></a>
+<span class="sourceLineNo">697</span>      CANNOT_FLUSH<a name="line.697"></a>
+<span class="sourceLineNo">698</span>    }<a name="line.698"></a>
+<span class="sourceLineNo">699</span><a name="line.699"></a>
+<span class="sourceLineNo">700</span>    /** @return the detailed result code */<a name="line.700"></a>
+<span class="sourceLineNo">701</span>    Result getResult();<a name="line.701"></a>
 <span class="sourceLineNo">702</span><a name="line.702"></a>
-<span class="sourceLineNo">703</span>  /**<a name="line.703"></a>
-<span class="sourceLineNo">704</span>   * Flush the cache.<a name="line.704"></a>
-<span class="sourceLineNo">705</span>   *<a name="line.705"></a>
-<span class="sourceLineNo">706</span>   * &lt;p&gt;When this method is called the cache will be flushed unless:<a name="line.706"></a>
-<span class="sourceLineNo">707</span>   * &lt;ol&gt;<a name="line.707"></a>
-<span class="sourceLineNo">708</span>   *   &lt;li&gt;the cache is empty&lt;/li&gt;<a name="line.708"></a>
-<span class="sourceLineNo">709</span>   *   &lt;li&gt;the region is closed.&lt;/li&gt;<a name="line.709"></a>
-<span class="sourceLineNo">710</span>   *   &lt;li&gt;a flush is already in progress&lt;/li&gt;<a name="line.710"></a>
-<span class="sourceLineNo">711</span>   *   &lt;li&gt;writes are disabled&lt;/li&gt;<a name="line.711"></a>
-<span class="sourceLineNo">712</span>   * &lt;/ol&gt;<a name="line.712"></a>
-<span class="sourceLineNo">713</span>   *<a name="line.713"></a>
-<span class="sourceLineNo">714</span>   * &lt;p&gt;This method may block for some time, so it should not be called from a<a name="line.714"></a>
-<span class="sourceLineNo">715</span>   * time-sensitive thread.<a name="line.715"></a>
-<span class="sourceLineNo">716</span>   * @param force whether we want to force a flush of all stores<a name="line.716"></a>
-<span class="sourceLineNo">717</span>   * @return FlushResult indicating whether the flush was successful or not and if<a name="line.717"></a>
-<span class="sourceLineNo">718</span>   * the region needs compacting<a name="line.718"></a>
-<span class="sourceLineNo">719</span>   *<a name="line.719"></a>
-<span class="sourceLineNo">720</span>   * @throws IOException general io exceptions<a name="line.720"></a>
-<span class="sourceLineNo">721</span>   * because a snapshot was not properly persisted.<a name="line.721"></a>
-<span class="sourceLineNo">722</span>   */<a name="line.722"></a>
-<span class="sourceLineNo">723</span>  FlushResult flush(boolean force) throws IOException;<a name="line.723"></a>
-<span class="sourceLineNo">724</span><a name="line.724"></a>
-<span class="sourceLineNo">725</span>  /**<a name="line.725"></a>
-<span class="sourceLineNo">726</span>   * Synchronously compact all stores in the region.<a name="line.726"></a>
-<span class="sourceLineNo">727</span>   * &lt;p&gt;This operation could block for a long time, so don't call it from a<a name="line.727"></a>
-<span class="sourceLineNo">728</span>   * time-sensitive thread.<a name="line.728"></a>
-<span class="sourceLineNo">729</span>   * &lt;p&gt;Note that no locks are taken to prevent possible conflicts between<a name="line.729"></a>
-<span class="sourceLineNo">730</span>   * compaction and splitting activities. The regionserver does not normally compact<a name="line.730"></a>
-<span class="sourceLineNo">731</span>   * and split in parallel. However by calling this method you may introduce<a name="line.731"></a>
-<span class="sourceLineNo">732</span>   * unexpected and unhandled concurrency. Don't do this unless you know what<a name="line.732"></a>
-<span class="sourceLineNo">733</span>   * you are doing.<a name="line.733"></a>
-<span class="sourceLineNo">734</span>   *<a name="line.734"></a>
-<span class="sourceLineNo">735</span>   * @param majorCompaction True to force a major compaction regardless of thresholds<a name="line.735"></a>
-<span class="sourceLineNo">736</span>   * @throws IOException<a name="line.736"></a>
-<span class="sourceLineNo">737</span>   */<a name="line.737"></a>
-<span class="sourceLineNo">738</span>  void compact(final boolean majorCompaction) throws IOException;<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span>  /**<a name="line.740"></a>
-<span class="sourceLineNo">741</span>   * Trigger major compaction on all stores in the region.<a name="line.741"></a>
-<span class="sourceLineNo">742</span>   * &lt;p&gt;<a name="line.742"></a>
-<span class="sourceLineNo">743</span>   * Compaction will be performed asynchronously to this call by the RegionServer's<a name="line.743"></a>
-<span class="sourceLineNo">744</span>   * CompactSplitThread. See also {@link Store#triggerMajorCompaction()}<a name="line.744"></a>
-<span class="sourceLineNo">745</span>   * @throws IOException<a name="line.745"></a>
-<span class="sourceLineNo">746</span>   */<a name="line.746"></a>
-<span class="sourceLineNo">747</span>  void triggerMajorCompaction() throws IOException;<a name="line.747"></a>
-<span class="sourceLineNo">748</span><a name="line.748"></a>
-<span class="sourceLineNo">749</span>  /**<a name="line.749"></a>
-<span class="sourceLineNo">750</span>   * @return if a given region is in compaction now.<a name="line.750"></a>
-<span class="sourceLineNo">751</span>   */<a name="line.751"></a>
-<span class="sourceLineNo">752</span>  CompactionState getCompactionState();<a name="line.752"></a>
-<span class="sourceLineNo">753</span><a name="line.753"></a>
-<span class="sourceLineNo">754</span>  /** Wait for all current flushes and compactions of the region to complete */<a name="line.754"></a>
-<span class="sourceLineN

<TRUNCATED>

[33/33] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.


Project: http://git-wip-us.apache.org/repos/asf/hbase-site/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase-site/commit/99c53df1
Tree: http://git-wip-us.apache.org/repos/asf/hbase-site/tree/99c53df1
Diff: http://git-wip-us.apache.org/repos/asf/hbase-site/diff/99c53df1

Branch: refs/heads/asf-site
Commit: 99c53df15ba7ced7ee19f0f63ebfa0451fc71351
Parents: e24cce1
Author: jenkins <bu...@apache.org>
Authored: Thu Aug 10 22:29:36 2017 +0000
Committer: jenkins <bu...@apache.org>
Committed: Thu Aug 10 22:29:36 2017 +0000

----------------------------------------------------------------------
 apache_hbase_reference_guide.pdf                | 11603 +++++++++--------
 book.html                                       |    59 +-
 checkstyle-aggregate.html                       |  6200 +++++----
 checkstyle.rss                                  |     8 +-
 devapidocs/allclasses-frame.html                |     1 +
 devapidocs/allclasses-noframe.html              |     1 +
 devapidocs/constant-values.html                 |     6 +-
 devapidocs/index-all.html                       |    28 +-
 .../hadoop/hbase/backup/package-tree.html       |     4 +-
 .../hadoop/hbase/class-use/HRegionInfo.html     |    11 +
 .../hbase/classification/package-tree.html      |     6 +-
 .../hadoop/hbase/client/package-tree.html       |    22 +-
 .../class-use/ForeignExceptionDispatcher.html   |    19 +
 .../hadoop/hbase/executor/package-tree.html     |     2 +-
 .../hadoop/hbase/filter/package-tree.html       |     8 +-
 .../hadoop/hbase/io/hfile/package-tree.html     |     6 +-
 .../apache/hadoop/hbase/ipc/package-tree.html   |     2 +-
 .../hadoop/hbase/mapreduce/package-tree.html    |     2 +-
 .../hbase/master/balancer/package-tree.html     |     2 +-
 .../hadoop/hbase/master/package-tree.html       |     6 +-
 .../hbase/master/procedure/package-tree.html    |     2 +-
 .../org/apache/hadoop/hbase/package-tree.html   |    10 +-
 .../hadoop/hbase/procedure2/package-tree.html   |     4 +-
 .../hadoop/hbase/quotas/package-tree.html       |     8 +-
 .../hadoop/hbase/regionserver/HMobStore.html    |     2 +-
 .../hadoop/hbase/regionserver/HRegion.html      |    61 +-
 .../hadoop/hbase/regionserver/HStore.html       |   106 +-
 .../regionserver/Region.BulkLoadListener.html   |     8 +-
 .../regionserver/Region.FlushResult.Result.html |    10 +-
 .../hbase/regionserver/Region.FlushResult.html  |     8 +-
 .../hbase/regionserver/Region.Operation.html    |    14 +-
 .../hbase/regionserver/Region.RowLock.html      |     4 +-
 .../hadoop/hbase/regionserver/Region.html       |   228 +-
 .../hbase/regionserver/class-use/HRegion.html   |     5 +
 .../class-use/Region.Operation.html             |    22 +-
 .../hbase/regionserver/class-use/Region.html    |     7 +-
 .../hadoop/hbase/regionserver/package-tree.html |    18 +-
 .../regionserver/querymatcher/package-tree.html |     4 +-
 ...SnapshotSubprocedure.RegionSnapshotTask.html |    61 +-
 .../snapshot/FlushSnapshotSubprocedure.html     |    28 +-
 .../regionserver/snapshot/package-frame.html    |     1 +
 .../regionserver/snapshot/package-summary.html  |     6 +
 .../replication/regionserver/package-tree.html  |     2 +-
 .../hadoop/hbase/rest/model/package-tree.html   |     2 +-
 .../hbase/security/access/package-tree.html     |     2 +-
 .../hadoop/hbase/security/package-tree.html     |     2 +-
 .../SnapshotManifest.RegionVisitor.html         |    12 +-
 .../hadoop/hbase/snapshot/SnapshotManifest.html |   178 +-
 .../SnapshotManifest.RegionVisitor.html         |    16 +
 .../hadoop/hbase/thrift/package-tree.html       |     2 +-
 .../apache/hadoop/hbase/util/package-tree.html  |    10 +-
 .../org/apache/hadoop/hbase/Version.html        |     6 +-
 .../regionserver/HRegion.BatchOperation.html    |   649 +-
 .../regionserver/HRegion.FlushResultImpl.html   |   649 +-
 .../regionserver/HRegion.MutationBatch.html     |   649 +-
 .../HRegion.ObservedExceptionsInBatch.html      |   649 +-
 .../HRegion.PrepareFlushResult.html             |   649 +-
 .../regionserver/HRegion.RegionScannerImpl.html |   649 +-
 .../hbase/regionserver/HRegion.ReplayBatch.html |   649 +-
 .../regionserver/HRegion.RowLockContext.html    |   649 +-
 .../hbase/regionserver/HRegion.RowLockImpl.html |   649 +-
 .../hbase/regionserver/HRegion.WriteState.html  |   649 +-
 .../hadoop/hbase/regionserver/HRegion.html      |   649 +-
 .../regionserver/HStore.StoreFlusherImpl.html   |   258 +-
 .../hadoop/hbase/regionserver/HStore.html       |   258 +-
 .../regionserver/Region.BulkLoadListener.html   |   929 +-
 .../regionserver/Region.FlushResult.Result.html |   929 +-
 .../hbase/regionserver/Region.FlushResult.html  |   929 +-
 .../hbase/regionserver/Region.Operation.html    |   929 +-
 .../hbase/regionserver/Region.RowLock.html      |   929 +-
 .../hadoop/hbase/regionserver/Region.html       |   929 +-
 ...SnapshotSubprocedure.RegionSnapshotTask.html |   343 +-
 .../snapshot/FlushSnapshotSubprocedure.html     |   343 +-
 .../SnapshotManifest.RegionVisitor.html         |  1020 +-
 .../hadoop/hbase/snapshot/SnapshotManifest.html |  1020 +-
 .../hbase-archetype-builder/license.html        |   204 +-
 license.html                                    |   204 +-
 testdevapidocs/allclasses-frame.html            |     1 +
 testdevapidocs/allclasses-noframe.html          |     1 +
 testdevapidocs/index-all.html                   |    30 +
 ...cing.BlockCompactionsInCompletionHStore.html |     2 +-
 .../hbase/class-use/HBaseTestingUtility.html    |    12 +-
 .../hadoop/hbase/io/hfile/package-tree.html     |     2 +-
 .../org/apache/hadoop/hbase/package-tree.html   |     8 +-
 .../hbase/regionserver/TestStore.MyStore.html   |     2 +-
 .../hadoop/hbase/regionserver/package-tree.html |     4 +-
 .../snapshot/TestMobSecureExportSnapshot.html   |     4 +-
 .../hbase/snapshot/TestRegionSnapshotTask.html  |   470 +
 .../TestRestoreFlushSnapshotFromClient.html     |     4 +-
 .../class-use/TestRegionSnapshotTask.html       |   125 +
 .../hadoop/hbase/snapshot/package-frame.html    |     1 +
 .../hadoop/hbase/snapshot/package-summary.html  |    18 +-
 .../hadoop/hbase/snapshot/package-tree.html     |     1 +
 .../apache/hadoop/hbase/wal/package-tree.html   |     2 +-
 testdevapidocs/overview-tree.html               |     1 +
 .../hadoop/hbase/master/TestMasterFailover.html |     2 +-
 .../hbase/snapshot/TestRegionSnapshotTask.html  |   276 +
 97 files changed, 19020 insertions(+), 17154 deletions(-)
----------------------------------------------------------------------



[17/33] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatch.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatch.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatch.html
index f6a717e..a701ece 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatch.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatch.html
@@ -7930,329 +7930,342 @@
 <span class="sourceLineNo">7922</span>      case DELETE:<a name="line.7922"></a>
 <span class="sourceLineNo">7923</span>      case BATCH_MUTATE:<a name="line.7923"></a>
 <span class="sourceLineNo">7924</span>      case COMPACT_REGION:<a name="line.7924"></a>
-<span class="sourceLineNo">7925</span>        // when a region is in recovering state, no read, split or merge is allowed<a name="line.7925"></a>
-<span class="sourceLineNo">7926</span>        if (isRecovering() &amp;&amp; (this.disallowWritesInRecovering ||<a name="line.7926"></a>
-<span class="sourceLineNo">7927</span>              (op != Operation.PUT &amp;&amp; op != Operation.DELETE &amp;&amp; op != Operation.BATCH_MUTATE))) {<a name="line.7927"></a>
-<span class="sourceLineNo">7928</span>          throw new RegionInRecoveryException(getRegionInfo().getRegionNameAsString() +<a name="line.7928"></a>
-<span class="sourceLineNo">7929</span>            " is recovering; cannot take reads");<a name="line.7929"></a>
-<span class="sourceLineNo">7930</span>        }<a name="line.7930"></a>
-<span class="sourceLineNo">7931</span>        break;<a name="line.7931"></a>
-<span class="sourceLineNo">7932</span>      default:<a name="line.7932"></a>
-<span class="sourceLineNo">7933</span>        break;<a name="line.7933"></a>
-<span class="sourceLineNo">7934</span>    }<a name="line.7934"></a>
-<span class="sourceLineNo">7935</span>    if (op == Operation.MERGE_REGION || op == Operation.SPLIT_REGION<a name="line.7935"></a>
-<span class="sourceLineNo">7936</span>        || op == Operation.COMPACT_REGION) {<a name="line.7936"></a>
-<span class="sourceLineNo">7937</span>      // split, merge or compact region doesn't need to check the closing/closed state or lock the<a name="line.7937"></a>
-<span class="sourceLineNo">7938</span>      // region<a name="line.7938"></a>
-<span class="sourceLineNo">7939</span>      return;<a name="line.7939"></a>
-<span class="sourceLineNo">7940</span>    }<a name="line.7940"></a>
-<span class="sourceLineNo">7941</span>    if (this.closing.get()) {<a name="line.7941"></a>
-<span class="sourceLineNo">7942</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.7942"></a>
-<span class="sourceLineNo">7943</span>    }<a name="line.7943"></a>
-<span class="sourceLineNo">7944</span>    lock(lock.readLock());<a name="line.7944"></a>
-<span class="sourceLineNo">7945</span>    if (this.closed.get()) {<a name="line.7945"></a>
-<span class="sourceLineNo">7946</span>      lock.readLock().unlock();<a name="line.7946"></a>
-<span class="sourceLineNo">7947</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.7947"></a>
-<span class="sourceLineNo">7948</span>    }<a name="line.7948"></a>
-<span class="sourceLineNo">7949</span>    try {<a name="line.7949"></a>
-<span class="sourceLineNo">7950</span>      if (coprocessorHost != null) {<a name="line.7950"></a>
-<span class="sourceLineNo">7951</span>        coprocessorHost.postStartRegionOperation(op);<a name="line.7951"></a>
-<span class="sourceLineNo">7952</span>      }<a name="line.7952"></a>
-<span class="sourceLineNo">7953</span>    } catch (Exception e) {<a name="line.7953"></a>
-<span class="sourceLineNo">7954</span>      lock.readLock().unlock();<a name="line.7954"></a>
-<span class="sourceLineNo">7955</span>      throw new IOException(e);<a name="line.7955"></a>
-<span class="sourceLineNo">7956</span>    }<a name="line.7956"></a>
-<span class="sourceLineNo">7957</span>  }<a name="line.7957"></a>
-<span class="sourceLineNo">7958</span><a name="line.7958"></a>
-<span class="sourceLineNo">7959</span>  @Override<a name="line.7959"></a>
-<span class="sourceLineNo">7960</span>  public void closeRegionOperation() throws IOException {<a name="line.7960"></a>
-<span class="sourceLineNo">7961</span>    closeRegionOperation(Operation.ANY);<a name="line.7961"></a>
-<span class="sourceLineNo">7962</span>  }<a name="line.7962"></a>
-<span class="sourceLineNo">7963</span><a name="line.7963"></a>
-<span class="sourceLineNo">7964</span>  /**<a name="line.7964"></a>
-<span class="sourceLineNo">7965</span>   * Closes the lock. This needs to be called in the finally block corresponding<a name="line.7965"></a>
-<span class="sourceLineNo">7966</span>   * to the try block of {@link #startRegionOperation(Operation)}<a name="line.7966"></a>
-<span class="sourceLineNo">7967</span>   * @throws IOException<a name="line.7967"></a>
-<span class="sourceLineNo">7968</span>   */<a name="line.7968"></a>
-<span class="sourceLineNo">7969</span>  public void closeRegionOperation(Operation operation) throws IOException {<a name="line.7969"></a>
-<span class="sourceLineNo">7970</span>    lock.readLock().unlock();<a name="line.7970"></a>
-<span class="sourceLineNo">7971</span>    if (coprocessorHost != null) {<a name="line.7971"></a>
-<span class="sourceLineNo">7972</span>      coprocessorHost.postCloseRegionOperation(operation);<a name="line.7972"></a>
-<span class="sourceLineNo">7973</span>    }<a name="line.7973"></a>
-<span class="sourceLineNo">7974</span>  }<a name="line.7974"></a>
-<span class="sourceLineNo">7975</span><a name="line.7975"></a>
-<span class="sourceLineNo">7976</span>  /**<a name="line.7976"></a>
-<span class="sourceLineNo">7977</span>   * This method needs to be called before any public call that reads or<a name="line.7977"></a>
-<span class="sourceLineNo">7978</span>   * modifies stores in bulk. It has to be called just before a try.<a name="line.7978"></a>
-<span class="sourceLineNo">7979</span>   * #closeBulkRegionOperation needs to be called in the try's finally block<a name="line.7979"></a>
-<span class="sourceLineNo">7980</span>   * Acquires a writelock and checks if the region is closing or closed.<a name="line.7980"></a>
-<span class="sourceLineNo">7981</span>   * @throws NotServingRegionException when the region is closing or closed<a name="line.7981"></a>
-<span class="sourceLineNo">7982</span>   * @throws RegionTooBusyException if failed to get the lock in time<a name="line.7982"></a>
-<span class="sourceLineNo">7983</span>   * @throws InterruptedIOException if interrupted while waiting for a lock<a name="line.7983"></a>
-<span class="sourceLineNo">7984</span>   */<a name="line.7984"></a>
-<span class="sourceLineNo">7985</span>  private void startBulkRegionOperation(boolean writeLockNeeded)<a name="line.7985"></a>
-<span class="sourceLineNo">7986</span>      throws NotServingRegionException, RegionTooBusyException, InterruptedIOException {<a name="line.7986"></a>
-<span class="sourceLineNo">7987</span>    if (this.closing.get()) {<a name="line.7987"></a>
-<span class="sourceLineNo">7988</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.7988"></a>
-<span class="sourceLineNo">7989</span>    }<a name="line.7989"></a>
-<span class="sourceLineNo">7990</span>    if (writeLockNeeded) lock(lock.writeLock());<a name="line.7990"></a>
-<span class="sourceLineNo">7991</span>    else lock(lock.readLock());<a name="line.7991"></a>
-<span class="sourceLineNo">7992</span>    if (this.closed.get()) {<a name="line.7992"></a>
-<span class="sourceLineNo">7993</span>      if (writeLockNeeded) lock.writeLock().unlock();<a name="line.7993"></a>
-<span class="sourceLineNo">7994</span>      else lock.readLock().unlock();<a name="line.7994"></a>
-<span class="sourceLineNo">7995</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.7995"></a>
-<span class="sourceLineNo">7996</span>    }<a name="line.7996"></a>
-<span class="sourceLineNo">7997</span>  }<a name="line.7997"></a>
-<span class="sourceLineNo">7998</span><a name="line.7998"></a>
-<span class="sourceLineNo">7999</span>  /**<a name="line.7999"></a>
-<span class="sourceLineNo">8000</span>   * Closes the lock. This needs to be called in the finally block corresponding<a name="line.8000"></a>
-<span class="sourceLineNo">8001</span>   * to the try block of #startRegionOperation<a name="line.8001"></a>
-<span class="sourceLineNo">8002</span>   */<a name="line.8002"></a>
-<span class="sourceLineNo">8003</span>  private void closeBulkRegionOperation(){<a name="line.8003"></a>
-<span class="sourceLineNo">8004</span>    if (lock.writeLock().isHeldByCurrentThread()) lock.writeLock().unlock();<a name="line.8004"></a>
-<span class="sourceLineNo">8005</span>    else lock.readLock().unlock();<a name="line.8005"></a>
-<span class="sourceLineNo">8006</span>  }<a name="line.8006"></a>
-<span class="sourceLineNo">8007</span><a name="line.8007"></a>
-<span class="sourceLineNo">8008</span>  /**<a name="line.8008"></a>
-<span class="sourceLineNo">8009</span>   * Update LongAdders for number of puts without wal and the size of possible data loss.<a name="line.8009"></a>
-<span class="sourceLineNo">8010</span>   * These information are exposed by the region server metrics.<a name="line.8010"></a>
-<span class="sourceLineNo">8011</span>   */<a name="line.8011"></a>
-<span class="sourceLineNo">8012</span>  private void recordMutationWithoutWal(final Map&lt;byte [], List&lt;Cell&gt;&gt; familyMap) {<a name="line.8012"></a>
-<span class="sourceLineNo">8013</span>    numMutationsWithoutWAL.increment();<a name="line.8013"></a>
-<span class="sourceLineNo">8014</span>    if (numMutationsWithoutWAL.sum() &lt;= 1) {<a name="line.8014"></a>
-<span class="sourceLineNo">8015</span>      LOG.info("writing data to region " + this +<a name="line.8015"></a>
-<span class="sourceLineNo">8016</span>               " with WAL disabled. Data may be lost in the event of a crash.");<a name="line.8016"></a>
-<span class="sourceLineNo">8017</span>    }<a name="line.8017"></a>
-<span class="sourceLineNo">8018</span><a name="line.8018"></a>
-<span class="sourceLineNo">8019</span>    long mutationSize = 0;<a name="line.8019"></a>
-<span class="sourceLineNo">8020</span>    for (List&lt;Cell&gt; cells: familyMap.values()) {<a name="line.8020"></a>
-<span class="sourceLineNo">8021</span>      assert cells instanceof RandomAccess;<a name="line.8021"></a>
-<span class="sourceLineNo">8022</span>      int listSize = cells.size();<a name="line.8022"></a>
-<span class="sourceLineNo">8023</span>      for (int i=0; i &lt; listSize; i++) {<a name="line.8023"></a>
-<span class="sourceLineNo">8024</span>        Cell cell = cells.get(i);<a name="line.8024"></a>
-<span class="sourceLineNo">8025</span>        mutationSize += KeyValueUtil.length(cell);<a name="line.8025"></a>
-<span class="sourceLineNo">8026</span>      }<a name="line.8026"></a>
-<span class="sourceLineNo">8027</span>    }<a name="line.8027"></a>
-<span class="sourceLineNo">8028</span><a name="line.8028"></a>
-<span class="sourceLineNo">8029</span>    dataInMemoryWithoutWAL.add(mutationSize);<a name="line.8029"></a>
-<span class="sourceLineNo">8030</span>  }<a name="line.8030"></a>
+<span class="sourceLineNo">7925</span>      case SNAPSHOT:<a name="line.7925"></a>
+<span class="sourceLineNo">7926</span>        // when a region is in recovering state, no read, split, merge or snapshot is allowed<a name="line.7926"></a>
+<span class="sourceLineNo">7927</span>        if (isRecovering() &amp;&amp; (this.disallowWritesInRecovering ||<a name="line.7927"></a>
+<span class="sourceLineNo">7928</span>              (op != Operation.PUT &amp;&amp; op != Operation.DELETE &amp;&amp; op != Operation.BATCH_MUTATE))) {<a name="line.7928"></a>
+<span class="sourceLineNo">7929</span>          throw new RegionInRecoveryException(getRegionInfo().getRegionNameAsString() +<a name="line.7929"></a>
+<span class="sourceLineNo">7930</span>            " is recovering; cannot take reads");<a name="line.7930"></a>
+<span class="sourceLineNo">7931</span>        }<a name="line.7931"></a>
+<span class="sourceLineNo">7932</span>        break;<a name="line.7932"></a>
+<span class="sourceLineNo">7933</span>      default:<a name="line.7933"></a>
+<span class="sourceLineNo">7934</span>        break;<a name="line.7934"></a>
+<span class="sourceLineNo">7935</span>    }<a name="line.7935"></a>
+<span class="sourceLineNo">7936</span>    if (op == Operation.MERGE_REGION || op == Operation.SPLIT_REGION<a name="line.7936"></a>
+<span class="sourceLineNo">7937</span>        || op == Operation.COMPACT_REGION) {<a name="line.7937"></a>
+<span class="sourceLineNo">7938</span>      // split, merge or compact region doesn't need to check the closing/closed state or lock the<a name="line.7938"></a>
+<span class="sourceLineNo">7939</span>      // region<a name="line.7939"></a>
+<span class="sourceLineNo">7940</span>      return;<a name="line.7940"></a>
+<span class="sourceLineNo">7941</span>    }<a name="line.7941"></a>
+<span class="sourceLineNo">7942</span>    if (this.closing.get()) {<a name="line.7942"></a>
+<span class="sourceLineNo">7943</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.7943"></a>
+<span class="sourceLineNo">7944</span>    }<a name="line.7944"></a>
+<span class="sourceLineNo">7945</span>    lock(lock.readLock());<a name="line.7945"></a>
+<span class="sourceLineNo">7946</span>    if (this.closed.get()) {<a name="line.7946"></a>
+<span class="sourceLineNo">7947</span>      lock.readLock().unlock();<a name="line.7947"></a>
+<span class="sourceLineNo">7948</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.7948"></a>
+<span class="sourceLineNo">7949</span>    }<a name="line.7949"></a>
+<span class="sourceLineNo">7950</span>    // The unit for snapshot is a region. So, all stores for this region must be<a name="line.7950"></a>
+<span class="sourceLineNo">7951</span>    // prepared for snapshot operation before proceeding.<a name="line.7951"></a>
+<span class="sourceLineNo">7952</span>    if (op == Operation.SNAPSHOT) {<a name="line.7952"></a>
+<span class="sourceLineNo">7953</span>      for (Store store : stores.values()) {<a name="line.7953"></a>
+<span class="sourceLineNo">7954</span>        if (store instanceof HStore) {<a name="line.7954"></a>
+<span class="sourceLineNo">7955</span>          ((HStore)store).preSnapshotOperation();<a name="line.7955"></a>
+<span class="sourceLineNo">7956</span>        }<a name="line.7956"></a>
+<span class="sourceLineNo">7957</span>      }<a name="line.7957"></a>
+<span class="sourceLineNo">7958</span>    }<a name="line.7958"></a>
+<span class="sourceLineNo">7959</span>    try {<a name="line.7959"></a>
+<span class="sourceLineNo">7960</span>      if (coprocessorHost != null) {<a name="line.7960"></a>
+<span class="sourceLineNo">7961</span>        coprocessorHost.postStartRegionOperation(op);<a name="line.7961"></a>
+<span class="sourceLineNo">7962</span>      }<a name="line.7962"></a>
+<span class="sourceLineNo">7963</span>    } catch (Exception e) {<a name="line.7963"></a>
+<span class="sourceLineNo">7964</span>      lock.readLock().unlock();<a name="line.7964"></a>
+<span class="sourceLineNo">7965</span>      throw new IOException(e);<a name="line.7965"></a>
+<span class="sourceLineNo">7966</span>    }<a name="line.7966"></a>
+<span class="sourceLineNo">7967</span>  }<a name="line.7967"></a>
+<span class="sourceLineNo">7968</span><a name="line.7968"></a>
+<span class="sourceLineNo">7969</span>  @Override<a name="line.7969"></a>
+<span class="sourceLineNo">7970</span>  public void closeRegionOperation() throws IOException {<a name="line.7970"></a>
+<span class="sourceLineNo">7971</span>    closeRegionOperation(Operation.ANY);<a name="line.7971"></a>
+<span class="sourceLineNo">7972</span>  }<a name="line.7972"></a>
+<span class="sourceLineNo">7973</span><a name="line.7973"></a>
+<span class="sourceLineNo">7974</span>  @Override<a name="line.7974"></a>
+<span class="sourceLineNo">7975</span>  public void closeRegionOperation(Operation operation) throws IOException {<a name="line.7975"></a>
+<span class="sourceLineNo">7976</span>    if (operation == Operation.SNAPSHOT) {<a name="line.7976"></a>
+<span class="sourceLineNo">7977</span>      for (Store store: stores.values()) {<a name="line.7977"></a>
+<span class="sourceLineNo">7978</span>        if (store instanceof HStore) {<a name="line.7978"></a>
+<span class="sourceLineNo">7979</span>          ((HStore)store).postSnapshotOperation();<a name="line.7979"></a>
+<span class="sourceLineNo">7980</span>        }<a name="line.7980"></a>
+<span class="sourceLineNo">7981</span>      }<a name="line.7981"></a>
+<span class="sourceLineNo">7982</span>    }<a name="line.7982"></a>
+<span class="sourceLineNo">7983</span>    lock.readLock().unlock();<a name="line.7983"></a>
+<span class="sourceLineNo">7984</span>    if (coprocessorHost != null) {<a name="line.7984"></a>
+<span class="sourceLineNo">7985</span>      coprocessorHost.postCloseRegionOperation(operation);<a name="line.7985"></a>
+<span class="sourceLineNo">7986</span>    }<a name="line.7986"></a>
+<span class="sourceLineNo">7987</span>  }<a name="line.7987"></a>
+<span class="sourceLineNo">7988</span><a name="line.7988"></a>
+<span class="sourceLineNo">7989</span>  /**<a name="line.7989"></a>
+<span class="sourceLineNo">7990</span>   * This method needs to be called before any public call that reads or<a name="line.7990"></a>
+<span class="sourceLineNo">7991</span>   * modifies stores in bulk. It has to be called just before a try.<a name="line.7991"></a>
+<span class="sourceLineNo">7992</span>   * #closeBulkRegionOperation needs to be called in the try's finally block<a name="line.7992"></a>
+<span class="sourceLineNo">7993</span>   * Acquires a writelock and checks if the region is closing or closed.<a name="line.7993"></a>
+<span class="sourceLineNo">7994</span>   * @throws NotServingRegionException when the region is closing or closed<a name="line.7994"></a>
+<span class="sourceLineNo">7995</span>   * @throws RegionTooBusyException if failed to get the lock in time<a name="line.7995"></a>
+<span class="sourceLineNo">7996</span>   * @throws InterruptedIOException if interrupted while waiting for a lock<a name="line.7996"></a>
+<span class="sourceLineNo">7997</span>   */<a name="line.7997"></a>
+<span class="sourceLineNo">7998</span>  private void startBulkRegionOperation(boolean writeLockNeeded)<a name="line.7998"></a>
+<span class="sourceLineNo">7999</span>      throws NotServingRegionException, RegionTooBusyException, InterruptedIOException {<a name="line.7999"></a>
+<span class="sourceLineNo">8000</span>    if (this.closing.get()) {<a name="line.8000"></a>
+<span class="sourceLineNo">8001</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.8001"></a>
+<span class="sourceLineNo">8002</span>    }<a name="line.8002"></a>
+<span class="sourceLineNo">8003</span>    if (writeLockNeeded) lock(lock.writeLock());<a name="line.8003"></a>
+<span class="sourceLineNo">8004</span>    else lock(lock.readLock());<a name="line.8004"></a>
+<span class="sourceLineNo">8005</span>    if (this.closed.get()) {<a name="line.8005"></a>
+<span class="sourceLineNo">8006</span>      if (writeLockNeeded) lock.writeLock().unlock();<a name="line.8006"></a>
+<span class="sourceLineNo">8007</span>      else lock.readLock().unlock();<a name="line.8007"></a>
+<span class="sourceLineNo">8008</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.8008"></a>
+<span class="sourceLineNo">8009</span>    }<a name="line.8009"></a>
+<span class="sourceLineNo">8010</span>  }<a name="line.8010"></a>
+<span class="sourceLineNo">8011</span><a name="line.8011"></a>
+<span class="sourceLineNo">8012</span>  /**<a name="line.8012"></a>
+<span class="sourceLineNo">8013</span>   * Closes the lock. This needs to be called in the finally block corresponding<a name="line.8013"></a>
+<span class="sourceLineNo">8014</span>   * to the try block of #startRegionOperation<a name="line.8014"></a>
+<span class="sourceLineNo">8015</span>   */<a name="line.8015"></a>
+<span class="sourceLineNo">8016</span>  private void closeBulkRegionOperation(){<a name="line.8016"></a>
+<span class="sourceLineNo">8017</span>    if (lock.writeLock().isHeldByCurrentThread()) lock.writeLock().unlock();<a name="line.8017"></a>
+<span class="sourceLineNo">8018</span>    else lock.readLock().unlock();<a name="line.8018"></a>
+<span class="sourceLineNo">8019</span>  }<a name="line.8019"></a>
+<span class="sourceLineNo">8020</span><a name="line.8020"></a>
+<span class="sourceLineNo">8021</span>  /**<a name="line.8021"></a>
+<span class="sourceLineNo">8022</span>   * Update LongAdders for number of puts without wal and the size of possible data loss.<a name="line.8022"></a>
+<span class="sourceLineNo">8023</span>   * These information are exposed by the region server metrics.<a name="line.8023"></a>
+<span class="sourceLineNo">8024</span>   */<a name="line.8024"></a>
+<span class="sourceLineNo">8025</span>  private void recordMutationWithoutWal(final Map&lt;byte [], List&lt;Cell&gt;&gt; familyMap) {<a name="line.8025"></a>
+<span class="sourceLineNo">8026</span>    numMutationsWithoutWAL.increment();<a name="line.8026"></a>
+<span class="sourceLineNo">8027</span>    if (numMutationsWithoutWAL.sum() &lt;= 1) {<a name="line.8027"></a>
+<span class="sourceLineNo">8028</span>      LOG.info("writing data to region " + this +<a name="line.8028"></a>
+<span class="sourceLineNo">8029</span>               " with WAL disabled. Data may be lost in the event of a crash.");<a name="line.8029"></a>
+<span class="sourceLineNo">8030</span>    }<a name="line.8030"></a>
 <span class="sourceLineNo">8031</span><a name="line.8031"></a>
-<span class="sourceLineNo">8032</span>  private void lock(final Lock lock)<a name="line.8032"></a>
-<span class="sourceLineNo">8033</span>      throws RegionTooBusyException, InterruptedIOException {<a name="line.8033"></a>
-<span class="sourceLineNo">8034</span>    lock(lock, 1);<a name="line.8034"></a>
-<span class="sourceLineNo">8035</span>  }<a name="line.8035"></a>
-<span class="sourceLineNo">8036</span><a name="line.8036"></a>
-<span class="sourceLineNo">8037</span>  /**<a name="line.8037"></a>
-<span class="sourceLineNo">8038</span>   * Try to acquire a lock.  Throw RegionTooBusyException<a name="line.8038"></a>
-<span class="sourceLineNo">8039</span>   * if failed to get the lock in time. Throw InterruptedIOException<a name="line.8039"></a>
-<span class="sourceLineNo">8040</span>   * if interrupted while waiting for the lock.<a name="line.8040"></a>
-<span class="sourceLineNo">8041</span>   */<a name="line.8041"></a>
-<span class="sourceLineNo">8042</span>  private void lock(final Lock lock, final int multiplier)<a name="line.8042"></a>
-<span class="sourceLineNo">8043</span>      throws RegionTooBusyException, InterruptedIOException {<a name="line.8043"></a>
-<span class="sourceLineNo">8044</span>    try {<a name="line.8044"></a>
-<span class="sourceLineNo">8045</span>      final long waitTime = Math.min(maxBusyWaitDuration,<a name="line.8045"></a>
-<span class="sourceLineNo">8046</span>          busyWaitDuration * Math.min(multiplier, maxBusyWaitMultiplier));<a name="line.8046"></a>
-<span class="sourceLineNo">8047</span>      if (!lock.tryLock(waitTime, TimeUnit.MILLISECONDS)) {<a name="line.8047"></a>
-<span class="sourceLineNo">8048</span>        throw new RegionTooBusyException(<a name="line.8048"></a>
-<span class="sourceLineNo">8049</span>            "failed to get a lock in " + waitTime + " ms. " +<a name="line.8049"></a>
-<span class="sourceLineNo">8050</span>                "regionName=" + (this.getRegionInfo() == null ? "unknown" :<a name="line.8050"></a>
-<span class="sourceLineNo">8051</span>                this.getRegionInfo().getRegionNameAsString()) +<a name="line.8051"></a>
-<span class="sourceLineNo">8052</span>                ", server=" + (this.getRegionServerServices() == null ? "unknown" :<a name="line.8052"></a>
-<span class="sourceLineNo">8053</span>                this.getRegionServerServices().getServerName()));<a name="line.8053"></a>
-<span class="sourceLineNo">8054</span>      }<a name="line.8054"></a>
-<span class="sourceLineNo">8055</span>    } catch (InterruptedException ie) {<a name="line.8055"></a>
-<span class="sourceLineNo">8056</span>      LOG.info("Interrupted while waiting for a lock");<a name="line.8056"></a>
-<span class="sourceLineNo">8057</span>      InterruptedIOException iie = new InterruptedIOException();<a name="line.8057"></a>
-<span class="sourceLineNo">8058</span>      iie.initCause(ie);<a name="line.8058"></a>
-<span class="sourceLineNo">8059</span>      throw iie;<a name="line.8059"></a>
-<span class="sourceLineNo">8060</span>    }<a name="line.8060"></a>
-<span class="sourceLineNo">8061</span>  }<a name="line.8061"></a>
-<span class="sourceLineNo">8062</span><a name="line.8062"></a>
-<span class="sourceLineNo">8063</span>  /**<a name="line.8063"></a>
-<span class="sourceLineNo">8064</span>   * Calls sync with the given transaction ID<a name="line.8064"></a>
-<span class="sourceLineNo">8065</span>   * @param txid should sync up to which transaction<a name="line.8065"></a>
-<span class="sourceLineNo">8066</span>   * @throws IOException If anything goes wrong with DFS<a name="line.8066"></a>
-<span class="sourceLineNo">8067</span>   */<a name="line.8067"></a>
-<span class="sourceLineNo">8068</span>  private void sync(long txid, Durability durability) throws IOException {<a name="line.8068"></a>
-<span class="sourceLineNo">8069</span>    if (this.getRegionInfo().isMetaRegion()) {<a name="line.8069"></a>
-<span class="sourceLineNo">8070</span>      this.wal.sync(txid);<a name="line.8070"></a>
-<span class="sourceLineNo">8071</span>    } else {<a name="line.8071"></a>
-<span class="sourceLineNo">8072</span>      switch(durability) {<a name="line.8072"></a>
-<span class="sourceLineNo">8073</span>      case USE_DEFAULT:<a name="line.8073"></a>
-<span class="sourceLineNo">8074</span>        // do what table defaults to<a name="line.8074"></a>
-<span class="sourceLineNo">8075</span>        if (shouldSyncWAL()) {<a name="line.8075"></a>
-<span class="sourceLineNo">8076</span>          this.wal.sync(txid);<a name="line.8076"></a>
-<span class="sourceLineNo">8077</span>        }<a name="line.8077"></a>
-<span class="sourceLineNo">8078</span>        break;<a name="line.8078"></a>
-<span class="sourceLineNo">8079</span>      case SKIP_WAL:<a name="line.8079"></a>
-<span class="sourceLineNo">8080</span>        // nothing do to<a name="line.8080"></a>
-<span class="sourceLineNo">8081</span>        break;<a name="line.8081"></a>
-<span class="sourceLineNo">8082</span>      case ASYNC_WAL:<a name="line.8082"></a>
-<span class="sourceLineNo">8083</span>        // nothing do to<a name="line.8083"></a>
-<span class="sourceLineNo">8084</span>        break;<a name="line.8084"></a>
-<span class="sourceLineNo">8085</span>      case SYNC_WAL:<a name="line.8085"></a>
-<span class="sourceLineNo">8086</span>      case FSYNC_WAL:<a name="line.8086"></a>
-<span class="sourceLineNo">8087</span>        // sync the WAL edit (SYNC and FSYNC treated the same for now)<a name="line.8087"></a>
-<span class="sourceLineNo">8088</span>        this.wal.sync(txid);<a name="line.8088"></a>
-<span class="sourceLineNo">8089</span>        break;<a name="line.8089"></a>
-<span class="sourceLineNo">8090</span>      default:<a name="line.8090"></a>
-<span class="sourceLineNo">8091</span>        throw new RuntimeException("Unknown durability " + durability);<a name="line.8091"></a>
-<span class="sourceLineNo">8092</span>      }<a name="line.8092"></a>
-<span class="sourceLineNo">8093</span>    }<a name="line.8093"></a>
-<span class="sourceLineNo">8094</span>  }<a name="line.8094"></a>
-<span class="sourceLineNo">8095</span><a name="line.8095"></a>
-<span class="sourceLineNo">8096</span>  /**<a name="line.8096"></a>
-<span class="sourceLineNo">8097</span>   * Check whether we should sync the wal from the table's durability settings<a name="line.8097"></a>
-<span class="sourceLineNo">8098</span>   */<a name="line.8098"></a>
-<span class="sourceLineNo">8099</span>  private boolean shouldSyncWAL() {<a name="line.8099"></a>
-<span class="sourceLineNo">8100</span>    return durability.ordinal() &gt;  Durability.ASYNC_WAL.ordinal();<a name="line.8100"></a>
-<span class="sourceLineNo">8101</span>  }<a name="line.8101"></a>
-<span class="sourceLineNo">8102</span><a name="line.8102"></a>
-<span class="sourceLineNo">8103</span>  /**<a name="line.8103"></a>
-<span class="sourceLineNo">8104</span>   * A mocked list implementation - discards all updates.<a name="line.8104"></a>
-<span class="sourceLineNo">8105</span>   */<a name="line.8105"></a>
-<span class="sourceLineNo">8106</span>  private static final List&lt;Cell&gt; MOCKED_LIST = new AbstractList&lt;Cell&gt;() {<a name="line.8106"></a>
-<span class="sourceLineNo">8107</span><a name="line.8107"></a>
-<span class="sourceLineNo">8108</span>    @Override<a name="line.8108"></a>
-<span class="sourceLineNo">8109</span>    public void add(int index, Cell element) {<a name="line.8109"></a>
-<span class="sourceLineNo">8110</span>      // do nothing<a name="line.8110"></a>
-<span class="sourceLineNo">8111</span>    }<a name="line.8111"></a>
-<span class="sourceLineNo">8112</span><a name="line.8112"></a>
-<span class="sourceLineNo">8113</span>    @Override<a name="line.8113"></a>
-<span class="sourceLineNo">8114</span>    public boolean addAll(int index, Collection&lt;? extends Cell&gt; c) {<a name="line.8114"></a>
-<span class="sourceLineNo">8115</span>      return false; // this list is never changed as a result of an update<a name="line.8115"></a>
-<span class="sourceLineNo">8116</span>    }<a name="line.8116"></a>
-<span class="sourceLineNo">8117</span><a name="line.8117"></a>
-<span class="sourceLineNo">8118</span>    @Override<a name="line.8118"></a>
-<span class="sourceLineNo">8119</span>    public KeyValue get(int index) {<a name="line.8119"></a>
-<span class="sourceLineNo">8120</span>      throw new UnsupportedOperationException();<a name="line.8120"></a>
-<span class="sourceLineNo">8121</span>    }<a name="line.8121"></a>
-<span class="sourceLineNo">8122</span><a name="line.8122"></a>
-<span class="sourceLineNo">8123</span>    @Override<a name="line.8123"></a>
-<span class="sourceLineNo">8124</span>    public int size() {<a name="line.8124"></a>
-<span class="sourceLineNo">8125</span>      return 0;<a name="line.8125"></a>
-<span class="sourceLineNo">8126</span>    }<a name="line.8126"></a>
-<span class="sourceLineNo">8127</span>  };<a name="line.8127"></a>
-<span class="sourceLineNo">8128</span><a name="line.8128"></a>
-<span class="sourceLineNo">8129</span>  @Override<a name="line.8129"></a>
-<span class="sourceLineNo">8130</span>  public long getOpenSeqNum() {<a name="line.8130"></a>
-<span class="sourceLineNo">8131</span>    return this.openSeqNum;<a name="line.8131"></a>
-<span class="sourceLineNo">8132</span>  }<a name="line.8132"></a>
-<span class="sourceLineNo">8133</span><a name="line.8133"></a>
-<span class="sourceLineNo">8134</span>  @Override<a name="line.8134"></a>
-<span class="sourceLineNo">8135</span>  public Map&lt;byte[], Long&gt; getMaxStoreSeqId() {<a name="line.8135"></a>
-<span class="sourceLineNo">8136</span>    return this.maxSeqIdInStores;<a name="line.8136"></a>
-<span class="sourceLineNo">8137</span>  }<a name="line.8137"></a>
-<span class="sourceLineNo">8138</span><a name="line.8138"></a>
-<span class="sourceLineNo">8139</span>  @Override<a name="line.8139"></a>
-<span class="sourceLineNo">8140</span>  public long getOldestSeqIdOfStore(byte[] familyName) {<a name="line.8140"></a>
-<span class="sourceLineNo">8141</span>    return wal.getEarliestMemstoreSeqNum(getRegionInfo().getEncodedNameAsBytes(), familyName);<a name="line.8141"></a>
-<span class="sourceLineNo">8142</span>  }<a name="line.8142"></a>
-<span class="sourceLineNo">8143</span><a name="line.8143"></a>
-<span class="sourceLineNo">8144</span>  @Override<a name="line.8144"></a>
-<span class="sourceLineNo">8145</span>  public CompactionState getCompactionState() {<a name="line.8145"></a>
-<span class="sourceLineNo">8146</span>    boolean hasMajor = majorInProgress.get() &gt; 0, hasMinor = minorInProgress.get() &gt; 0;<a name="line.8146"></a>
-<span class="sourceLineNo">8147</span>    return (hasMajor ? (hasMinor ? CompactionState.MAJOR_AND_MINOR : CompactionState.MAJOR)<a name="line.8147"></a>
-<span class="sourceLineNo">8148</span>        : (hasMinor ? CompactionState.MINOR : CompactionState.NONE));<a name="line.8148"></a>
-<span class="sourceLineNo">8149</span>  }<a name="line.8149"></a>
-<span class="sourceLineNo">8150</span><a name="line.8150"></a>
-<span class="sourceLineNo">8151</span>  public void reportCompactionRequestStart(boolean isMajor){<a name="line.8151"></a>
-<span class="sourceLineNo">8152</span>    (isMajor ? majorInProgress : minorInProgress).incrementAndGet();<a name="line.8152"></a>
-<span class="sourceLineNo">8153</span>  }<a name="line.8153"></a>
-<span class="sourceLineNo">8154</span><a name="line.8154"></a>
-<span class="sourceLineNo">8155</span>  public void reportCompactionRequestEnd(boolean isMajor, int numFiles, long filesSizeCompacted) {<a name="line.8155"></a>
-<span class="sourceLineNo">8156</span>    int newValue = (isMajor ? majorInProgress : minorInProgress).decrementAndGet();<a name="line.8156"></a>
-<span class="sourceLineNo">8157</span><a name="line.8157"></a>
-<span class="sourceLineNo">8158</span>    // metrics<a name="line.8158"></a>
-<span class="sourceLineNo">8159</span>    compactionsFinished.incrementAndGet();<a name="line.8159"></a>
-<span class="sourceLineNo">8160</span>    compactionNumFilesCompacted.addAndGet(numFiles);<a name="line.8160"></a>
-<span class="sourceLineNo">8161</span>    compactionNumBytesCompacted.addAndGet(filesSizeCompacted);<a name="line.8161"></a>
-<span class="sourceLineNo">8162</span><a name="line.8162"></a>
-<span class="sourceLineNo">8163</span>    assert newValue &gt;= 0;<a name="line.8163"></a>
-<span class="sourceLineNo">8164</span>  }<a name="line.8164"></a>
-<span class="sourceLineNo">8165</span><a name="line.8165"></a>
-<span class="sourceLineNo">8166</span>  public void reportCompactionRequestFailure() {<a name="line.8166"></a>
-<span class="sourceLineNo">8167</span>    compactionsFailed.incrementAndGet();<a name="line.8167"></a>
-<span class="sourceLineNo">8168</span>  }<a name="line.8168"></a>
-<span class="sourceLineNo">8169</span><a name="line.8169"></a>
-<span class="sourceLineNo">8170</span>  public void incrementCompactionsQueuedCount() {<a name="line.8170"></a>
-<span class="sourceLineNo">8171</span>    compactionsQueued.incrementAndGet();<a name="line.8171"></a>
-<span class="sourceLineNo">8172</span>  }<a name="line.8172"></a>
-<span class="sourceLineNo">8173</span><a name="line.8173"></a>
-<span class="sourceLineNo">8174</span>  public void decrementCompactionsQueuedCount() {<a name="line.8174"></a>
-<span class="sourceLineNo">8175</span>    compactionsQueued.decrementAndGet();<a name="line.8175"></a>
-<span class="sourceLineNo">8176</span>  }<a name="line.8176"></a>
-<span class="sourceLineNo">8177</span><a name="line.8177"></a>
-<span class="sourceLineNo">8178</span>  public void incrementFlushesQueuedCount() {<a name="line.8178"></a>
-<span class="sourceLineNo">8179</span>    flushesQueued.incrementAndGet();<a name="line.8179"></a>
-<span class="sourceLineNo">8180</span>  }<a name="line.8180"></a>
-<span class="sourceLineNo">8181</span><a name="line.8181"></a>
-<span class="sourceLineNo">8182</span>  @VisibleForTesting<a name="line.8182"></a>
-<span class="sourceLineNo">8183</span>  public long getReadPoint() {<a name="line.8183"></a>
-<span class="sourceLineNo">8184</span>    return getReadPoint(IsolationLevel.READ_COMMITTED);<a name="line.8184"></a>
+<span class="sourceLineNo">8032</span>    long mutationSize = 0;<a name="line.8032"></a>
+<span class="sourceLineNo">8033</span>    for (List&lt;Cell&gt; cells: familyMap.values()) {<a name="line.8033"></a>
+<span class="sourceLineNo">8034</span>      assert cells instanceof RandomAccess;<a name="line.8034"></a>
+<span class="sourceLineNo">8035</span>      int listSize = cells.size();<a name="line.8035"></a>
+<span class="sourceLineNo">8036</span>      for (int i=0; i &lt; listSize; i++) {<a name="line.8036"></a>
+<span class="sourceLineNo">8037</span>        Cell cell = cells.get(i);<a name="line.8037"></a>
+<span class="sourceLineNo">8038</span>        mutationSize += KeyValueUtil.length(cell);<a name="line.8038"></a>
+<span class="sourceLineNo">8039</span>      }<a name="line.8039"></a>
+<span class="sourceLineNo">8040</span>    }<a name="line.8040"></a>
+<span class="sourceLineNo">8041</span><a name="line.8041"></a>
+<span class="sourceLineNo">8042</span>    dataInMemoryWithoutWAL.add(mutationSize);<a name="line.8042"></a>
+<span class="sourceLineNo">8043</span>  }<a name="line.8043"></a>
+<span class="sourceLineNo">8044</span><a name="line.8044"></a>
+<span class="sourceLineNo">8045</span>  private void lock(final Lock lock)<a name="line.8045"></a>
+<span class="sourceLineNo">8046</span>      throws RegionTooBusyException, InterruptedIOException {<a name="line.8046"></a>
+<span class="sourceLineNo">8047</span>    lock(lock, 1);<a name="line.8047"></a>
+<span class="sourceLineNo">8048</span>  }<a name="line.8048"></a>
+<span class="sourceLineNo">8049</span><a name="line.8049"></a>
+<span class="sourceLineNo">8050</span>  /**<a name="line.8050"></a>
+<span class="sourceLineNo">8051</span>   * Try to acquire a lock.  Throw RegionTooBusyException<a name="line.8051"></a>
+<span class="sourceLineNo">8052</span>   * if failed to get the lock in time. Throw InterruptedIOException<a name="line.8052"></a>
+<span class="sourceLineNo">8053</span>   * if interrupted while waiting for the lock.<a name="line.8053"></a>
+<span class="sourceLineNo">8054</span>   */<a name="line.8054"></a>
+<span class="sourceLineNo">8055</span>  private void lock(final Lock lock, final int multiplier)<a name="line.8055"></a>
+<span class="sourceLineNo">8056</span>      throws RegionTooBusyException, InterruptedIOException {<a name="line.8056"></a>
+<span class="sourceLineNo">8057</span>    try {<a name="line.8057"></a>
+<span class="sourceLineNo">8058</span>      final long waitTime = Math.min(maxBusyWaitDuration,<a name="line.8058"></a>
+<span class="sourceLineNo">8059</span>          busyWaitDuration * Math.min(multiplier, maxBusyWaitMultiplier));<a name="line.8059"></a>
+<span class="sourceLineNo">8060</span>      if (!lock.tryLock(waitTime, TimeUnit.MILLISECONDS)) {<a name="line.8060"></a>
+<span class="sourceLineNo">8061</span>        throw new RegionTooBusyException(<a name="line.8061"></a>
+<span class="sourceLineNo">8062</span>            "failed to get a lock in " + waitTime + " ms. " +<a name="line.8062"></a>
+<span class="sourceLineNo">8063</span>                "regionName=" + (this.getRegionInfo() == null ? "unknown" :<a name="line.8063"></a>
+<span class="sourceLineNo">8064</span>                this.getRegionInfo().getRegionNameAsString()) +<a name="line.8064"></a>
+<span class="sourceLineNo">8065</span>                ", server=" + (this.getRegionServerServices() == null ? "unknown" :<a name="line.8065"></a>
+<span class="sourceLineNo">8066</span>                this.getRegionServerServices().getServerName()));<a name="line.8066"></a>
+<span class="sourceLineNo">8067</span>      }<a name="line.8067"></a>
+<span class="sourceLineNo">8068</span>    } catch (InterruptedException ie) {<a name="line.8068"></a>
+<span class="sourceLineNo">8069</span>      LOG.info("Interrupted while waiting for a lock");<a name="line.8069"></a>
+<span class="sourceLineNo">8070</span>      InterruptedIOException iie = new InterruptedIOException();<a name="line.8070"></a>
+<span class="sourceLineNo">8071</span>      iie.initCause(ie);<a name="line.8071"></a>
+<span class="sourceLineNo">8072</span>      throw iie;<a name="line.8072"></a>
+<span class="sourceLineNo">8073</span>    }<a name="line.8073"></a>
+<span class="sourceLineNo">8074</span>  }<a name="line.8074"></a>
+<span class="sourceLineNo">8075</span><a name="line.8075"></a>
+<span class="sourceLineNo">8076</span>  /**<a name="line.8076"></a>
+<span class="sourceLineNo">8077</span>   * Calls sync with the given transaction ID<a name="line.8077"></a>
+<span class="sourceLineNo">8078</span>   * @param txid should sync up to which transaction<a name="line.8078"></a>
+<span class="sourceLineNo">8079</span>   * @throws IOException If anything goes wrong with DFS<a name="line.8079"></a>
+<span class="sourceLineNo">8080</span>   */<a name="line.8080"></a>
+<span class="sourceLineNo">8081</span>  private void sync(long txid, Durability durability) throws IOException {<a name="line.8081"></a>
+<span class="sourceLineNo">8082</span>    if (this.getRegionInfo().isMetaRegion()) {<a name="line.8082"></a>
+<span class="sourceLineNo">8083</span>      this.wal.sync(txid);<a name="line.8083"></a>
+<span class="sourceLineNo">8084</span>    } else {<a name="line.8084"></a>
+<span class="sourceLineNo">8085</span>      switch(durability) {<a name="line.8085"></a>
+<span class="sourceLineNo">8086</span>      case USE_DEFAULT:<a name="line.8086"></a>
+<span class="sourceLineNo">8087</span>        // do what table defaults to<a name="line.8087"></a>
+<span class="sourceLineNo">8088</span>        if (shouldSyncWAL()) {<a name="line.8088"></a>
+<span class="sourceLineNo">8089</span>          this.wal.sync(txid);<a name="line.8089"></a>
+<span class="sourceLineNo">8090</span>        }<a name="line.8090"></a>
+<span class="sourceLineNo">8091</span>        break;<a name="line.8091"></a>
+<span class="sourceLineNo">8092</span>      case SKIP_WAL:<a name="line.8092"></a>
+<span class="sourceLineNo">8093</span>        // nothing do to<a name="line.8093"></a>
+<span class="sourceLineNo">8094</span>        break;<a name="line.8094"></a>
+<span class="sourceLineNo">8095</span>      case ASYNC_WAL:<a name="line.8095"></a>
+<span class="sourceLineNo">8096</span>        // nothing do to<a name="line.8096"></a>
+<span class="sourceLineNo">8097</span>        break;<a name="line.8097"></a>
+<span class="sourceLineNo">8098</span>      case SYNC_WAL:<a name="line.8098"></a>
+<span class="sourceLineNo">8099</span>      case FSYNC_WAL:<a name="line.8099"></a>
+<span class="sourceLineNo">8100</span>        // sync the WAL edit (SYNC and FSYNC treated the same for now)<a name="line.8100"></a>
+<span class="sourceLineNo">8101</span>        this.wal.sync(txid);<a name="line.8101"></a>
+<span class="sourceLineNo">8102</span>        break;<a name="line.8102"></a>
+<span class="sourceLineNo">8103</span>      default:<a name="line.8103"></a>
+<span class="sourceLineNo">8104</span>        throw new RuntimeException("Unknown durability " + durability);<a name="line.8104"></a>
+<span class="sourceLineNo">8105</span>      }<a name="line.8105"></a>
+<span class="sourceLineNo">8106</span>    }<a name="line.8106"></a>
+<span class="sourceLineNo">8107</span>  }<a name="line.8107"></a>
+<span class="sourceLineNo">8108</span><a name="line.8108"></a>
+<span class="sourceLineNo">8109</span>  /**<a name="line.8109"></a>
+<span class="sourceLineNo">8110</span>   * Check whether we should sync the wal from the table's durability settings<a name="line.8110"></a>
+<span class="sourceLineNo">8111</span>   */<a name="line.8111"></a>
+<span class="sourceLineNo">8112</span>  private boolean shouldSyncWAL() {<a name="line.8112"></a>
+<span class="sourceLineNo">8113</span>    return durability.ordinal() &gt;  Durability.ASYNC_WAL.ordinal();<a name="line.8113"></a>
+<span class="sourceLineNo">8114</span>  }<a name="line.8114"></a>
+<span class="sourceLineNo">8115</span><a name="line.8115"></a>
+<span class="sourceLineNo">8116</span>  /**<a name="line.8116"></a>
+<span class="sourceLineNo">8117</span>   * A mocked list implementation - discards all updates.<a name="line.8117"></a>
+<span class="sourceLineNo">8118</span>   */<a name="line.8118"></a>
+<span class="sourceLineNo">8119</span>  private static final List&lt;Cell&gt; MOCKED_LIST = new AbstractList&lt;Cell&gt;() {<a name="line.8119"></a>
+<span class="sourceLineNo">8120</span><a name="line.8120"></a>
+<span class="sourceLineNo">8121</span>    @Override<a name="line.8121"></a>
+<span class="sourceLineNo">8122</span>    public void add(int index, Cell element) {<a name="line.8122"></a>
+<span class="sourceLineNo">8123</span>      // do nothing<a name="line.8123"></a>
+<span class="sourceLineNo">8124</span>    }<a name="line.8124"></a>
+<span class="sourceLineNo">8125</span><a name="line.8125"></a>
+<span class="sourceLineNo">8126</span>    @Override<a name="line.8126"></a>
+<span class="sourceLineNo">8127</span>    public boolean addAll(int index, Collection&lt;? extends Cell&gt; c) {<a name="line.8127"></a>
+<span class="sourceLineNo">8128</span>      return false; // this list is never changed as a result of an update<a name="line.8128"></a>
+<span class="sourceLineNo">8129</span>    }<a name="line.8129"></a>
+<span class="sourceLineNo">8130</span><a name="line.8130"></a>
+<span class="sourceLineNo">8131</span>    @Override<a name="line.8131"></a>
+<span class="sourceLineNo">8132</span>    public KeyValue get(int index) {<a name="line.8132"></a>
+<span class="sourceLineNo">8133</span>      throw new UnsupportedOperationException();<a name="line.8133"></a>
+<span class="sourceLineNo">8134</span>    }<a name="line.8134"></a>
+<span class="sourceLineNo">8135</span><a name="line.8135"></a>
+<span class="sourceLineNo">8136</span>    @Override<a name="line.8136"></a>
+<span class="sourceLineNo">8137</span>    public int size() {<a name="line.8137"></a>
+<span class="sourceLineNo">8138</span>      return 0;<a name="line.8138"></a>
+<span class="sourceLineNo">8139</span>    }<a name="line.8139"></a>
+<span class="sourceLineNo">8140</span>  };<a name="line.8140"></a>
+<span class="sourceLineNo">8141</span><a name="line.8141"></a>
+<span class="sourceLineNo">8142</span>  @Override<a name="line.8142"></a>
+<span class="sourceLineNo">8143</span>  public long getOpenSeqNum() {<a name="line.8143"></a>
+<span class="sourceLineNo">8144</span>    return this.openSeqNum;<a name="line.8144"></a>
+<span class="sourceLineNo">8145</span>  }<a name="line.8145"></a>
+<span class="sourceLineNo">8146</span><a name="line.8146"></a>
+<span class="sourceLineNo">8147</span>  @Override<a name="line.8147"></a>
+<span class="sourceLineNo">8148</span>  public Map&lt;byte[], Long&gt; getMaxStoreSeqId() {<a name="line.8148"></a>
+<span class="sourceLineNo">8149</span>    return this.maxSeqIdInStores;<a name="line.8149"></a>
+<span class="sourceLineNo">8150</span>  }<a name="line.8150"></a>
+<span class="sourceLineNo">8151</span><a name="line.8151"></a>
+<span class="sourceLineNo">8152</span>  @Override<a name="line.8152"></a>
+<span class="sourceLineNo">8153</span>  public long getOldestSeqIdOfStore(byte[] familyName) {<a name="line.8153"></a>
+<span class="sourceLineNo">8154</span>    return wal.getEarliestMemstoreSeqNum(getRegionInfo().getEncodedNameAsBytes(), familyName);<a name="line.8154"></a>
+<span class="sourceLineNo">8155</span>  }<a name="line.8155"></a>
+<span class="sourceLineNo">8156</span><a name="line.8156"></a>
+<span class="sourceLineNo">8157</span>  @Override<a name="line.8157"></a>
+<span class="sourceLineNo">8158</span>  public CompactionState getCompactionState() {<a name="line.8158"></a>
+<span class="sourceLineNo">8159</span>    boolean hasMajor = majorInProgress.get() &gt; 0, hasMinor = minorInProgress.get() &gt; 0;<a name="line.8159"></a>
+<span class="sourceLineNo">8160</span>    return (hasMajor ? (hasMinor ? CompactionState.MAJOR_AND_MINOR : CompactionState.MAJOR)<a name="line.8160"></a>
+<span class="sourceLineNo">8161</span>        : (hasMinor ? CompactionState.MINOR : CompactionState.NONE));<a name="line.8161"></a>
+<span class="sourceLineNo">8162</span>  }<a name="line.8162"></a>
+<span class="sourceLineNo">8163</span><a name="line.8163"></a>
+<span class="sourceLineNo">8164</span>  public void reportCompactionRequestStart(boolean isMajor){<a name="line.8164"></a>
+<span class="sourceLineNo">8165</span>    (isMajor ? majorInProgress : minorInProgress).incrementAndGet();<a name="line.8165"></a>
+<span class="sourceLineNo">8166</span>  }<a name="line.8166"></a>
+<span class="sourceLineNo">8167</span><a name="line.8167"></a>
+<span class="sourceLineNo">8168</span>  public void reportCompactionRequestEnd(boolean isMajor, int numFiles, long filesSizeCompacted) {<a name="line.8168"></a>
+<span class="sourceLineNo">8169</span>    int newValue = (isMajor ? majorInProgress : minorInProgress).decrementAndGet();<a name="line.8169"></a>
+<span class="sourceLineNo">8170</span><a name="line.8170"></a>
+<span class="sourceLineNo">8171</span>    // metrics<a name="line.8171"></a>
+<span class="sourceLineNo">8172</span>    compactionsFinished.incrementAndGet();<a name="line.8172"></a>
+<span class="sourceLineNo">8173</span>    compactionNumFilesCompacted.addAndGet(numFiles);<a name="line.8173"></a>
+<span class="sourceLineNo">8174</span>    compactionNumBytesCompacted.addAndGet(filesSizeCompacted);<a name="line.8174"></a>
+<span class="sourceLineNo">8175</span><a name="line.8175"></a>
+<span class="sourceLineNo">8176</span>    assert newValue &gt;= 0;<a name="line.8176"></a>
+<span class="sourceLineNo">8177</span>  }<a name="line.8177"></a>
+<span class="sourceLineNo">8178</span><a name="line.8178"></a>
+<span class="sourceLineNo">8179</span>  public void reportCompactionRequestFailure() {<a name="line.8179"></a>
+<span class="sourceLineNo">8180</span>    compactionsFailed.incrementAndGet();<a name="line.8180"></a>
+<span class="sourceLineNo">8181</span>  }<a name="line.8181"></a>
+<span class="sourceLineNo">8182</span><a name="line.8182"></a>
+<span class="sourceLineNo">8183</span>  public void incrementCompactionsQueuedCount() {<a name="line.8183"></a>
+<span class="sourceLineNo">8184</span>    compactionsQueued.incrementAndGet();<a name="line.8184"></a>
 <span class="sourceLineNo">8185</span>  }<a name="line.8185"></a>
 <span class="sourceLineNo">8186</span><a name="line.8186"></a>
-<span class="sourceLineNo">8187</span>  /**<a name="line.8187"></a>
-<span class="sourceLineNo">8188</span>   * {@inheritDoc}<a name="line.8188"></a>
-<span class="sourceLineNo">8189</span>   */<a name="line.8189"></a>
-<span class="sourceLineNo">8190</span>  @Override<a name="line.8190"></a>
-<span class="sourceLineNo">8191</span>  public void onConfigurationChange(Configuration conf) {<a name="line.8191"></a>
-<span class="sourceLineNo">8192</span>    // Do nothing for now.<a name="line.8192"></a>
+<span class="sourceLineNo">8187</span>  public void decrementCompactionsQueuedCount() {<a name="line.8187"></a>
+<span class="sourceLineNo">8188</span>    compactionsQueued.decrementAndGet();<a name="line.8188"></a>
+<span class="sourceLineNo">8189</span>  }<a name="line.8189"></a>
+<span class="sourceLineNo">8190</span><a name="line.8190"></a>
+<span class="sourceLineNo">8191</span>  public void incrementFlushesQueuedCount() {<a name="line.8191"></a>
+<span class="sourceLineNo">8192</span>    flushesQueued.incrementAndGet();<a name="line.8192"></a>
 <span class="sourceLineNo">8193</span>  }<a name="line.8193"></a>
 <span class="sourceLineNo">8194</span><a name="line.8194"></a>
-<span class="sourceLineNo">8195</span>  /**<a name="line.8195"></a>
-<span class="sourceLineNo">8196</span>   * {@inheritDoc}<a name="line.8196"></a>
-<span class="sourceLineNo">8197</span>   */<a name="line.8197"></a>
-<span class="sourceLineNo">8198</span>  @Override<a name="line.8198"></a>
-<span class="sourceLineNo">8199</span>  public void registerChildren(ConfigurationManager manager) {<a name="line.8199"></a>
-<span class="sourceLineNo">8200</span>    configurationManager = Optional.of(manager);<a name="line.8200"></a>
-<span class="sourceLineNo">8201</span>    for (Store s : this.stores.values()) {<a name="line.8201"></a>
-<span class="sourceLineNo">8202</span>      configurationManager.get().registerObserver(s);<a name="line.8202"></a>
-<span class="sourceLineNo">8203</span>    }<a name="line.8203"></a>
-<span class="sourceLineNo">8204</span>  }<a name="line.8204"></a>
-<span class="sourceLineNo">8205</span><a name="line.8205"></a>
-<span class="sourceLineNo">8206</span>  /**<a name="line.8206"></a>
-<span class="sourceLineNo">8207</span>   * {@inheritDoc}<a name="line.8207"></a>
-<span class="sourceLineNo">8208</span>   */<a name="line.8208"></a>
-<span class="sourceLineNo">8209</span>  @Override<a name="line.8209"></a>
-<span class="sourceLineNo">8210</span>  public void deregisterChildren(ConfigurationManager manager) {<a name="line.8210"></a>
-<span class="sourceLineNo">8211</span>    for (Store s : this.stores.values()) {<a name="line.8211"></a>
-<span class="sourceLineNo">8212</span>      configurationManager.get().deregisterObserver(s);<a name="line.8212"></a>
-<span class="sourceLineNo">8213</span>    }<a name="line.8213"></a>
-<span class="sourceLineNo">8214</span>  }<a name="line.8214"></a>
-<span class="sourceLineNo">8215</span><a name="line.8215"></a>
-<span class="sourceLineNo">8216</span>  @Override<a name="line.8216"></a>
-<span class="sourceLineNo">8217</span>  public CellComparator getCellComparator() {<a name="line.8217"></a>
-<span class="sourceLineNo">8218</span>    return this.getRegionInfo().isMetaRegion() ? CellComparator.META_COMPARATOR<a name="line.8218"></a>
-<span class="sourceLineNo">8219</span>        : CellComparator.COMPARATOR;<a name="line.8219"></a>
-<span class="sourceLineNo">8220</span>  }<a name="line.8220"></a>
-<span class="sourceLineNo">8221</span><a name="line.8221"></a>
-<span class="sourceLineNo">8222</span>  public long getMemstoreFlushSize() {<a name="line.8222"></a>
-<span class="sourceLineNo">8223</span>    return this.memstoreFlushSize;<a name="line.8223"></a>
-<span class="sourceLineNo">8224</span>  }<a name="line.8224"></a>
-<span class="sourceLineNo">8225</span><a name="line.8225"></a>
-<span class="sourceLineNo">8226</span>  //// method for debugging tests<a name="line.8226"></a>
-<span class="sourceLineNo">8227</span>  void throwException(String title, String regionName) {<a name="line.8227"></a>
-<span class="sourceLineNo">8228</span>    StringBuffer buf = new StringBuffer();<a name="line.8228"></a>
-<span class="sourceLineNo">8229</span>    buf.append(title + ", ");<a name="line.8229"></a>
-<span class="sourceLineNo">8230</span>    buf.append(getRegionInfo().toString());<a name="line.8230"></a>
-<span class="sourceLineNo">8231</span>    buf.append(getRegionInfo().isMetaRegion() ? " meta region " : " ");<a name="line.8231"></a>
-<span class="sourceLineNo">8232</span>    buf.append(getRegionInfo().isMetaTable() ? " meta table " : " ");<a name="line.8232"></a>
-<span class="sourceLineNo">8233</span>    buf.append("stores: ");<a name="line.8233"></a>
-<span class="sourceLineNo">8234</span>    for (Store s : getStores()) {<a name="line.8234"></a>
-<span class="sourceLineNo">8235</span>      buf.append(s.getColumnFamilyDescriptor().getNameAsString());<a name="line.8235"></a>
-<span class="sourceLineNo">8236</span>      buf.append(" size: ");<a name="line.8236"></a>
-<span class="sourceLineNo">8237</span>      buf.append(s.getSizeOfMemStore().getDataSize());<a name="line.8237"></a>
-<span class="sourceLineNo">8238</span>      buf.append(" ");<a name="line.8238"></a>
-<span class="sourceLineNo">8239</span>    }<a name="line.8239"></a>
-<span class="sourceLineNo">8240</span>    buf.append("end-of-stores");<a name="line.8240"></a>
-<span class="sourceLineNo">8241</span>    buf.append(", memstore size ");<a name="line.8241"></a>
-<span class="sourceLineNo">8242</span>    buf.append(getMemstoreSize());<a name="line.8242"></a>
-<span class="sourceLineNo">8243</span>    if (getRegionInfo().getRegionNameAsString().startsWith(regionName)) {<a name="line.8243"></a>
-<span class="sourceLineNo">8244</span>      throw new RuntimeException(buf.toString());<a name="line.8244"></a>
-<span class="sourceLineNo">8245</span>    }<a name="line.8245"></a>
-<span class="sourceLineNo">8246</span>  }<a name="line.8246"></a>
-<span class="sourceLineNo">8247</span>}<a name="line.8247"></a>
+<span class="sourceLineNo">8195</span>  @VisibleForTesting<a name="line.8195"></a>
+<span class="sourceLineNo">8196</span>  public long getReadPoint() {<a name="line.8196"></a>
+<span class="sourceLineNo">8197</span>    return getReadPoint(IsolationLevel.READ_COMMITTED);<a name="line.8197"></a>
+<span class="sourceLineNo">8198</span>  }<a name="line.8198"></a>
+<span class="sourceLineNo">8199</span><a name="line.8199"></a>
+<span class="sourceLineNo">8200</span>  /**<a name="line.8200"></a>
+<span class="sourceLineNo">8201</span>   * {@inheritDoc}<a name="line.8201"></a>
+<span class="sourceLineNo">8202</span>   */<a name="line.8202"></a>
+<span class="sourceLineNo">8203</span>  @Override<a name="line.8203"></a>
+<span class="sourceLineNo">8204</span>  public void onConfigurationChange(Configuration conf) {<a name="line.8204"></a>
+<span class="sourceLineNo">8205</span>    // Do nothing for now.<a name="line.8205"></a>
+<span class="sourceLineNo">8206</span>  }<a name="line.8206"></a>
+<span class="sourceLineNo">8207</span><a name="line.8207"></a>
+<span class="sourceLineNo">8208</span>  /**<a name="line.8208"></a>
+<span class="sourceLineNo">8209</span>   * {@inheritDoc}<a name="line.8209"></a>
+<span class="sourceLineNo">8210</span>   */<a name="line.8210"></a>
+<span class="sourceLineNo">8211</span>  @Override<a name="line.8211"></a>
+<span class="sourceLineNo">8212</span>  public void registerChildren(ConfigurationManager manager) {<a name="line.8212"></a>
+<span class="sourceLineNo">8213</span>    configurationManager = Optional.of(manager);<a name="line.8213"></a>
+<span class="sourceLineNo">8214</span>    for (Store s : this.stores.values()) {<a name="line.8214"></a>
+<span class="sourceLineNo">8215</span>      configurationManager.get().registerObserver(s);<a name="line.8215"></a>
+<span class="sourceLineNo">8216</span>    }<a name="line.8216"></a>
+<span class="sourceLineNo">8217</span>  }<a name="line.8217"></a>
+<span class="sourceLineNo">8218</span><a name="line.8218"></a>
+<span class="sourceLineNo">8219</span>  /**<a name="line.8219"></a>
+<span class="sourceLineNo">8220</span>   * {@inheritDoc}<a name="line.8220"></a>
+<span class="sourceLineNo">8221</span>   */<a name="line.8221"></a>
+<span class="sourceLineNo">8222</span>  @Override<a name="line.8222"></a>
+<span class="sourceLineNo">8223</span>  public void deregisterChildren(ConfigurationManager manager) {<a name="line.8223"></a>
+<span class="sourceLineNo">8224</span>    for (Store s : this.stores.values()) {<a name="line.8224"></a>
+<span class="sourceLineNo">8225</span>      configurationManager.get().deregisterObserver(s);<a name="line.8225"></a>
+<span class="sourceLineNo">8226</span>    }<a name="line.8226"></a>
+<span class="sourceLineNo">8227</span>  }<a name="line.8227"></a>
+<span class="sourceLineNo">8228</span><a name="line.8228"></a>
+<span class="sourceLineNo">8229</span>  @Override<a name="line.8229"></a>
+<span class="sourceLineNo">8230</span>  public CellComparator getCellComparator() {<a name="line.8230"></a>
+<span class="sourceLineNo">8231</span>    return this.getRegionInfo().isMetaRegion() ? CellComparator.META_COMPARATOR<a name="line.8231"></a>
+<span class="sourceLineNo">8232</span>        : CellComparator.COMPARATOR;<a name="line.8232"></a>
+<span class="sourceLineNo">8233</span>  }<a name="line.8233"></a>
+<span class="sourceLineNo">8234</span><a name="line.8234"></a>
+<span class="sourceLineNo">8235</span>  public long getMemstoreFlushSize() {<a name="line.8235"></a>
+<span class="sourceLineNo">8236</span>    return this.memstoreFlushSize;<a name="line.8236"></a>
+<span class="sourceLineNo">8237</span>  }<a name="line.8237"></a>
+<span class="sourceLineNo">8238</span><a name="line.8238"></a>
+<span class="sourceLineNo">8239</span>  //// method for debugging tests<a name="line.8239"></a>
+<span class="sourceLineNo">8240</span>  void throwException(String title, String regionName) {<a name="line.8240"></a>
+<span class="sourceLineNo">8241</span>    StringBuffer buf = new StringBuffer();<a name="line.8241"></a>
+<span class="sourceLineNo">8242</span>    buf.append(title + ", ");<a name="line.8242"></a>
+<span class="sourceLineNo">8243</span>    buf.append(getRegionInfo().toString());<a name="line.8243"></a>
+<span class="sourceLineNo">8244</span>    buf.append(getRegionInfo().isMetaRegion() ? " meta region " : " ");<a name="line.8244"></a>
+<span class="sourceLineNo">8245</span>    buf.append(getRegionInfo().isMetaTable() ? " meta table " : " ");<a name="line.8245"></a>
+<span class="sourceLineNo">8246</span>    buf.append("stores: ");<a name="line.8246"></a>
+<span class="sourceLineNo">8247</span>    for (Store s : getStores()) {<a name="line.8247"></a>
+<span class="sourceLineNo">8248</span>      buf.append(s.getColumnFamilyDescriptor().getNameAsString());<a name="line.8248"></a>
+<span class="sourceLineNo">8249</span>      buf.append(" size: ");<a name="line.8249"></a>
+<span class="sourceLineNo">8250</span>      buf.append(s.getSizeOfMemStore().getDataSize());<a name="line.8250"></a>
+<span class="sourceLineNo">8251</span>      buf.append(" ");<a name="line.8251"></a>
+<span class="sourceLineNo">8252</span>    }<a name="line.8252"></a>
+<span class="sourceLineNo">8253</span>    buf.append("end-of-stores");<a name="line.8253"></a>
+<span class="sourceLineNo">8254</span>    buf.append(", memstore size ");<a name="line.8254"></a>
+<span class="sourceLineNo">8255</span>    buf.append(getMemstoreSize());<a name="line.8255"></a>
+<span class="sourceLineNo">8256</span>    if (getRegionInfo().getRegionNameAsString().startsWith(regionName)) {<a name="line.8256"></a>
+<span class="sourceLineNo">8257</span>      throw new RuntimeException(buf.toString());<a name="line.8257"></a>
+<span class="sourceLineNo">8258</span>    }<a name="line.8258"></a>
+<span class="sourceLineNo">8259</span>  }<a name="line.8259"></a>
+<span class="sourceLineNo">8260</span>}<a name="line.8260"></a>
 
 
 


[23/33] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html
index f6a717e..a701ece 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html
@@ -7930,329 +7930,342 @@
 <span class="sourceLineNo">7922</span>      case DELETE:<a name="line.7922"></a>
 <span class="sourceLineNo">7923</span>      case BATCH_MUTATE:<a name="line.7923"></a>
 <span class="sourceLineNo">7924</span>      case COMPACT_REGION:<a name="line.7924"></a>
-<span class="sourceLineNo">7925</span>        // when a region is in recovering state, no read, split or merge is allowed<a name="line.7925"></a>
-<span class="sourceLineNo">7926</span>        if (isRecovering() &amp;&amp; (this.disallowWritesInRecovering ||<a name="line.7926"></a>
-<span class="sourceLineNo">7927</span>              (op != Operation.PUT &amp;&amp; op != Operation.DELETE &amp;&amp; op != Operation.BATCH_MUTATE))) {<a name="line.7927"></a>
-<span class="sourceLineNo">7928</span>          throw new RegionInRecoveryException(getRegionInfo().getRegionNameAsString() +<a name="line.7928"></a>
-<span class="sourceLineNo">7929</span>            " is recovering; cannot take reads");<a name="line.7929"></a>
-<span class="sourceLineNo">7930</span>        }<a name="line.7930"></a>
-<span class="sourceLineNo">7931</span>        break;<a name="line.7931"></a>
-<span class="sourceLineNo">7932</span>      default:<a name="line.7932"></a>
-<span class="sourceLineNo">7933</span>        break;<a name="line.7933"></a>
-<span class="sourceLineNo">7934</span>    }<a name="line.7934"></a>
-<span class="sourceLineNo">7935</span>    if (op == Operation.MERGE_REGION || op == Operation.SPLIT_REGION<a name="line.7935"></a>
-<span class="sourceLineNo">7936</span>        || op == Operation.COMPACT_REGION) {<a name="line.7936"></a>
-<span class="sourceLineNo">7937</span>      // split, merge or compact region doesn't need to check the closing/closed state or lock the<a name="line.7937"></a>
-<span class="sourceLineNo">7938</span>      // region<a name="line.7938"></a>
-<span class="sourceLineNo">7939</span>      return;<a name="line.7939"></a>
-<span class="sourceLineNo">7940</span>    }<a name="line.7940"></a>
-<span class="sourceLineNo">7941</span>    if (this.closing.get()) {<a name="line.7941"></a>
-<span class="sourceLineNo">7942</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.7942"></a>
-<span class="sourceLineNo">7943</span>    }<a name="line.7943"></a>
-<span class="sourceLineNo">7944</span>    lock(lock.readLock());<a name="line.7944"></a>
-<span class="sourceLineNo">7945</span>    if (this.closed.get()) {<a name="line.7945"></a>
-<span class="sourceLineNo">7946</span>      lock.readLock().unlock();<a name="line.7946"></a>
-<span class="sourceLineNo">7947</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.7947"></a>
-<span class="sourceLineNo">7948</span>    }<a name="line.7948"></a>
-<span class="sourceLineNo">7949</span>    try {<a name="line.7949"></a>
-<span class="sourceLineNo">7950</span>      if (coprocessorHost != null) {<a name="line.7950"></a>
-<span class="sourceLineNo">7951</span>        coprocessorHost.postStartRegionOperation(op);<a name="line.7951"></a>
-<span class="sourceLineNo">7952</span>      }<a name="line.7952"></a>
-<span class="sourceLineNo">7953</span>    } catch (Exception e) {<a name="line.7953"></a>
-<span class="sourceLineNo">7954</span>      lock.readLock().unlock();<a name="line.7954"></a>
-<span class="sourceLineNo">7955</span>      throw new IOException(e);<a name="line.7955"></a>
-<span class="sourceLineNo">7956</span>    }<a name="line.7956"></a>
-<span class="sourceLineNo">7957</span>  }<a name="line.7957"></a>
-<span class="sourceLineNo">7958</span><a name="line.7958"></a>
-<span class="sourceLineNo">7959</span>  @Override<a name="line.7959"></a>
-<span class="sourceLineNo">7960</span>  public void closeRegionOperation() throws IOException {<a name="line.7960"></a>
-<span class="sourceLineNo">7961</span>    closeRegionOperation(Operation.ANY);<a name="line.7961"></a>
-<span class="sourceLineNo">7962</span>  }<a name="line.7962"></a>
-<span class="sourceLineNo">7963</span><a name="line.7963"></a>
-<span class="sourceLineNo">7964</span>  /**<a name="line.7964"></a>
-<span class="sourceLineNo">7965</span>   * Closes the lock. This needs to be called in the finally block corresponding<a name="line.7965"></a>
-<span class="sourceLineNo">7966</span>   * to the try block of {@link #startRegionOperation(Operation)}<a name="line.7966"></a>
-<span class="sourceLineNo">7967</span>   * @throws IOException<a name="line.7967"></a>
-<span class="sourceLineNo">7968</span>   */<a name="line.7968"></a>
-<span class="sourceLineNo">7969</span>  public void closeRegionOperation(Operation operation) throws IOException {<a name="line.7969"></a>
-<span class="sourceLineNo">7970</span>    lock.readLock().unlock();<a name="line.7970"></a>
-<span class="sourceLineNo">7971</span>    if (coprocessorHost != null) {<a name="line.7971"></a>
-<span class="sourceLineNo">7972</span>      coprocessorHost.postCloseRegionOperation(operation);<a name="line.7972"></a>
-<span class="sourceLineNo">7973</span>    }<a name="line.7973"></a>
-<span class="sourceLineNo">7974</span>  }<a name="line.7974"></a>
-<span class="sourceLineNo">7975</span><a name="line.7975"></a>
-<span class="sourceLineNo">7976</span>  /**<a name="line.7976"></a>
-<span class="sourceLineNo">7977</span>   * This method needs to be called before any public call that reads or<a name="line.7977"></a>
-<span class="sourceLineNo">7978</span>   * modifies stores in bulk. It has to be called just before a try.<a name="line.7978"></a>
-<span class="sourceLineNo">7979</span>   * #closeBulkRegionOperation needs to be called in the try's finally block<a name="line.7979"></a>
-<span class="sourceLineNo">7980</span>   * Acquires a writelock and checks if the region is closing or closed.<a name="line.7980"></a>
-<span class="sourceLineNo">7981</span>   * @throws NotServingRegionException when the region is closing or closed<a name="line.7981"></a>
-<span class="sourceLineNo">7982</span>   * @throws RegionTooBusyException if failed to get the lock in time<a name="line.7982"></a>
-<span class="sourceLineNo">7983</span>   * @throws InterruptedIOException if interrupted while waiting for a lock<a name="line.7983"></a>
-<span class="sourceLineNo">7984</span>   */<a name="line.7984"></a>
-<span class="sourceLineNo">7985</span>  private void startBulkRegionOperation(boolean writeLockNeeded)<a name="line.7985"></a>
-<span class="sourceLineNo">7986</span>      throws NotServingRegionException, RegionTooBusyException, InterruptedIOException {<a name="line.7986"></a>
-<span class="sourceLineNo">7987</span>    if (this.closing.get()) {<a name="line.7987"></a>
-<span class="sourceLineNo">7988</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.7988"></a>
-<span class="sourceLineNo">7989</span>    }<a name="line.7989"></a>
-<span class="sourceLineNo">7990</span>    if (writeLockNeeded) lock(lock.writeLock());<a name="line.7990"></a>
-<span class="sourceLineNo">7991</span>    else lock(lock.readLock());<a name="line.7991"></a>
-<span class="sourceLineNo">7992</span>    if (this.closed.get()) {<a name="line.7992"></a>
-<span class="sourceLineNo">7993</span>      if (writeLockNeeded) lock.writeLock().unlock();<a name="line.7993"></a>
-<span class="sourceLineNo">7994</span>      else lock.readLock().unlock();<a name="line.7994"></a>
-<span class="sourceLineNo">7995</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.7995"></a>
-<span class="sourceLineNo">7996</span>    }<a name="line.7996"></a>
-<span class="sourceLineNo">7997</span>  }<a name="line.7997"></a>
-<span class="sourceLineNo">7998</span><a name="line.7998"></a>
-<span class="sourceLineNo">7999</span>  /**<a name="line.7999"></a>
-<span class="sourceLineNo">8000</span>   * Closes the lock. This needs to be called in the finally block corresponding<a name="line.8000"></a>
-<span class="sourceLineNo">8001</span>   * to the try block of #startRegionOperation<a name="line.8001"></a>
-<span class="sourceLineNo">8002</span>   */<a name="line.8002"></a>
-<span class="sourceLineNo">8003</span>  private void closeBulkRegionOperation(){<a name="line.8003"></a>
-<span class="sourceLineNo">8004</span>    if (lock.writeLock().isHeldByCurrentThread()) lock.writeLock().unlock();<a name="line.8004"></a>
-<span class="sourceLineNo">8005</span>    else lock.readLock().unlock();<a name="line.8005"></a>
-<span class="sourceLineNo">8006</span>  }<a name="line.8006"></a>
-<span class="sourceLineNo">8007</span><a name="line.8007"></a>
-<span class="sourceLineNo">8008</span>  /**<a name="line.8008"></a>
-<span class="sourceLineNo">8009</span>   * Update LongAdders for number of puts without wal and the size of possible data loss.<a name="line.8009"></a>
-<span class="sourceLineNo">8010</span>   * These information are exposed by the region server metrics.<a name="line.8010"></a>
-<span class="sourceLineNo">8011</span>   */<a name="line.8011"></a>
-<span class="sourceLineNo">8012</span>  private void recordMutationWithoutWal(final Map&lt;byte [], List&lt;Cell&gt;&gt; familyMap) {<a name="line.8012"></a>
-<span class="sourceLineNo">8013</span>    numMutationsWithoutWAL.increment();<a name="line.8013"></a>
-<span class="sourceLineNo">8014</span>    if (numMutationsWithoutWAL.sum() &lt;= 1) {<a name="line.8014"></a>
-<span class="sourceLineNo">8015</span>      LOG.info("writing data to region " + this +<a name="line.8015"></a>
-<span class="sourceLineNo">8016</span>               " with WAL disabled. Data may be lost in the event of a crash.");<a name="line.8016"></a>
-<span class="sourceLineNo">8017</span>    }<a name="line.8017"></a>
-<span class="sourceLineNo">8018</span><a name="line.8018"></a>
-<span class="sourceLineNo">8019</span>    long mutationSize = 0;<a name="line.8019"></a>
-<span class="sourceLineNo">8020</span>    for (List&lt;Cell&gt; cells: familyMap.values()) {<a name="line.8020"></a>
-<span class="sourceLineNo">8021</span>      assert cells instanceof RandomAccess;<a name="line.8021"></a>
-<span class="sourceLineNo">8022</span>      int listSize = cells.size();<a name="line.8022"></a>
-<span class="sourceLineNo">8023</span>      for (int i=0; i &lt; listSize; i++) {<a name="line.8023"></a>
-<span class="sourceLineNo">8024</span>        Cell cell = cells.get(i);<a name="line.8024"></a>
-<span class="sourceLineNo">8025</span>        mutationSize += KeyValueUtil.length(cell);<a name="line.8025"></a>
-<span class="sourceLineNo">8026</span>      }<a name="line.8026"></a>
-<span class="sourceLineNo">8027</span>    }<a name="line.8027"></a>
-<span class="sourceLineNo">8028</span><a name="line.8028"></a>
-<span class="sourceLineNo">8029</span>    dataInMemoryWithoutWAL.add(mutationSize);<a name="line.8029"></a>
-<span class="sourceLineNo">8030</span>  }<a name="line.8030"></a>
+<span class="sourceLineNo">7925</span>      case SNAPSHOT:<a name="line.7925"></a>
+<span class="sourceLineNo">7926</span>        // when a region is in recovering state, no read, split, merge or snapshot is allowed<a name="line.7926"></a>
+<span class="sourceLineNo">7927</span>        if (isRecovering() &amp;&amp; (this.disallowWritesInRecovering ||<a name="line.7927"></a>
+<span class="sourceLineNo">7928</span>              (op != Operation.PUT &amp;&amp; op != Operation.DELETE &amp;&amp; op != Operation.BATCH_MUTATE))) {<a name="line.7928"></a>
+<span class="sourceLineNo">7929</span>          throw new RegionInRecoveryException(getRegionInfo().getRegionNameAsString() +<a name="line.7929"></a>
+<span class="sourceLineNo">7930</span>            " is recovering; cannot take reads");<a name="line.7930"></a>
+<span class="sourceLineNo">7931</span>        }<a name="line.7931"></a>
+<span class="sourceLineNo">7932</span>        break;<a name="line.7932"></a>
+<span class="sourceLineNo">7933</span>      default:<a name="line.7933"></a>
+<span class="sourceLineNo">7934</span>        break;<a name="line.7934"></a>
+<span class="sourceLineNo">7935</span>    }<a name="line.7935"></a>
+<span class="sourceLineNo">7936</span>    if (op == Operation.MERGE_REGION || op == Operation.SPLIT_REGION<a name="line.7936"></a>
+<span class="sourceLineNo">7937</span>        || op == Operation.COMPACT_REGION) {<a name="line.7937"></a>
+<span class="sourceLineNo">7938</span>      // split, merge or compact region doesn't need to check the closing/closed state or lock the<a name="line.7938"></a>
+<span class="sourceLineNo">7939</span>      // region<a name="line.7939"></a>
+<span class="sourceLineNo">7940</span>      return;<a name="line.7940"></a>
+<span class="sourceLineNo">7941</span>    }<a name="line.7941"></a>
+<span class="sourceLineNo">7942</span>    if (this.closing.get()) {<a name="line.7942"></a>
+<span class="sourceLineNo">7943</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.7943"></a>
+<span class="sourceLineNo">7944</span>    }<a name="line.7944"></a>
+<span class="sourceLineNo">7945</span>    lock(lock.readLock());<a name="line.7945"></a>
+<span class="sourceLineNo">7946</span>    if (this.closed.get()) {<a name="line.7946"></a>
+<span class="sourceLineNo">7947</span>      lock.readLock().unlock();<a name="line.7947"></a>
+<span class="sourceLineNo">7948</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.7948"></a>
+<span class="sourceLineNo">7949</span>    }<a name="line.7949"></a>
+<span class="sourceLineNo">7950</span>    // The unit for snapshot is a region. So, all stores for this region must be<a name="line.7950"></a>
+<span class="sourceLineNo">7951</span>    // prepared for snapshot operation before proceeding.<a name="line.7951"></a>
+<span class="sourceLineNo">7952</span>    if (op == Operation.SNAPSHOT) {<a name="line.7952"></a>
+<span class="sourceLineNo">7953</span>      for (Store store : stores.values()) {<a name="line.7953"></a>
+<span class="sourceLineNo">7954</span>        if (store instanceof HStore) {<a name="line.7954"></a>
+<span class="sourceLineNo">7955</span>          ((HStore)store).preSnapshotOperation();<a name="line.7955"></a>
+<span class="sourceLineNo">7956</span>        }<a name="line.7956"></a>
+<span class="sourceLineNo">7957</span>      }<a name="line.7957"></a>
+<span class="sourceLineNo">7958</span>    }<a name="line.7958"></a>
+<span class="sourceLineNo">7959</span>    try {<a name="line.7959"></a>
+<span class="sourceLineNo">7960</span>      if (coprocessorHost != null) {<a name="line.7960"></a>
+<span class="sourceLineNo">7961</span>        coprocessorHost.postStartRegionOperation(op);<a name="line.7961"></a>
+<span class="sourceLineNo">7962</span>      }<a name="line.7962"></a>
+<span class="sourceLineNo">7963</span>    } catch (Exception e) {<a name="line.7963"></a>
+<span class="sourceLineNo">7964</span>      lock.readLock().unlock();<a name="line.7964"></a>
+<span class="sourceLineNo">7965</span>      throw new IOException(e);<a name="line.7965"></a>
+<span class="sourceLineNo">7966</span>    }<a name="line.7966"></a>
+<span class="sourceLineNo">7967</span>  }<a name="line.7967"></a>
+<span class="sourceLineNo">7968</span><a name="line.7968"></a>
+<span class="sourceLineNo">7969</span>  @Override<a name="line.7969"></a>
+<span class="sourceLineNo">7970</span>  public void closeRegionOperation() throws IOException {<a name="line.7970"></a>
+<span class="sourceLineNo">7971</span>    closeRegionOperation(Operation.ANY);<a name="line.7971"></a>
+<span class="sourceLineNo">7972</span>  }<a name="line.7972"></a>
+<span class="sourceLineNo">7973</span><a name="line.7973"></a>
+<span class="sourceLineNo">7974</span>  @Override<a name="line.7974"></a>
+<span class="sourceLineNo">7975</span>  public void closeRegionOperation(Operation operation) throws IOException {<a name="line.7975"></a>
+<span class="sourceLineNo">7976</span>    if (operation == Operation.SNAPSHOT) {<a name="line.7976"></a>
+<span class="sourceLineNo">7977</span>      for (Store store: stores.values()) {<a name="line.7977"></a>
+<span class="sourceLineNo">7978</span>        if (store instanceof HStore) {<a name="line.7978"></a>
+<span class="sourceLineNo">7979</span>          ((HStore)store).postSnapshotOperation();<a name="line.7979"></a>
+<span class="sourceLineNo">7980</span>        }<a name="line.7980"></a>
+<span class="sourceLineNo">7981</span>      }<a name="line.7981"></a>
+<span class="sourceLineNo">7982</span>    }<a name="line.7982"></a>
+<span class="sourceLineNo">7983</span>    lock.readLock().unlock();<a name="line.7983"></a>
+<span class="sourceLineNo">7984</span>    if (coprocessorHost != null) {<a name="line.7984"></a>
+<span class="sourceLineNo">7985</span>      coprocessorHost.postCloseRegionOperation(operation);<a name="line.7985"></a>
+<span class="sourceLineNo">7986</span>    }<a name="line.7986"></a>
+<span class="sourceLineNo">7987</span>  }<a name="line.7987"></a>
+<span class="sourceLineNo">7988</span><a name="line.7988"></a>
+<span class="sourceLineNo">7989</span>  /**<a name="line.7989"></a>
+<span class="sourceLineNo">7990</span>   * This method needs to be called before any public call that reads or<a name="line.7990"></a>
+<span class="sourceLineNo">7991</span>   * modifies stores in bulk. It has to be called just before a try.<a name="line.7991"></a>
+<span class="sourceLineNo">7992</span>   * #closeBulkRegionOperation needs to be called in the try's finally block<a name="line.7992"></a>
+<span class="sourceLineNo">7993</span>   * Acquires a writelock and checks if the region is closing or closed.<a name="line.7993"></a>
+<span class="sourceLineNo">7994</span>   * @throws NotServingRegionException when the region is closing or closed<a name="line.7994"></a>
+<span class="sourceLineNo">7995</span>   * @throws RegionTooBusyException if failed to get the lock in time<a name="line.7995"></a>
+<span class="sourceLineNo">7996</span>   * @throws InterruptedIOException if interrupted while waiting for a lock<a name="line.7996"></a>
+<span class="sourceLineNo">7997</span>   */<a name="line.7997"></a>
+<span class="sourceLineNo">7998</span>  private void startBulkRegionOperation(boolean writeLockNeeded)<a name="line.7998"></a>
+<span class="sourceLineNo">7999</span>      throws NotServingRegionException, RegionTooBusyException, InterruptedIOException {<a name="line.7999"></a>
+<span class="sourceLineNo">8000</span>    if (this.closing.get()) {<a name="line.8000"></a>
+<span class="sourceLineNo">8001</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.8001"></a>
+<span class="sourceLineNo">8002</span>    }<a name="line.8002"></a>
+<span class="sourceLineNo">8003</span>    if (writeLockNeeded) lock(lock.writeLock());<a name="line.8003"></a>
+<span class="sourceLineNo">8004</span>    else lock(lock.readLock());<a name="line.8004"></a>
+<span class="sourceLineNo">8005</span>    if (this.closed.get()) {<a name="line.8005"></a>
+<span class="sourceLineNo">8006</span>      if (writeLockNeeded) lock.writeLock().unlock();<a name="line.8006"></a>
+<span class="sourceLineNo">8007</span>      else lock.readLock().unlock();<a name="line.8007"></a>
+<span class="sourceLineNo">8008</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.8008"></a>
+<span class="sourceLineNo">8009</span>    }<a name="line.8009"></a>
+<span class="sourceLineNo">8010</span>  }<a name="line.8010"></a>
+<span class="sourceLineNo">8011</span><a name="line.8011"></a>
+<span class="sourceLineNo">8012</span>  /**<a name="line.8012"></a>
+<span class="sourceLineNo">8013</span>   * Closes the lock. This needs to be called in the finally block corresponding<a name="line.8013"></a>
+<span class="sourceLineNo">8014</span>   * to the try block of #startRegionOperation<a name="line.8014"></a>
+<span class="sourceLineNo">8015</span>   */<a name="line.8015"></a>
+<span class="sourceLineNo">8016</span>  private void closeBulkRegionOperation(){<a name="line.8016"></a>
+<span class="sourceLineNo">8017</span>    if (lock.writeLock().isHeldByCurrentThread()) lock.writeLock().unlock();<a name="line.8017"></a>
+<span class="sourceLineNo">8018</span>    else lock.readLock().unlock();<a name="line.8018"></a>
+<span class="sourceLineNo">8019</span>  }<a name="line.8019"></a>
+<span class="sourceLineNo">8020</span><a name="line.8020"></a>
+<span class="sourceLineNo">8021</span>  /**<a name="line.8021"></a>
+<span class="sourceLineNo">8022</span>   * Update LongAdders for number of puts without wal and the size of possible data loss.<a name="line.8022"></a>
+<span class="sourceLineNo">8023</span>   * These information are exposed by the region server metrics.<a name="line.8023"></a>
+<span class="sourceLineNo">8024</span>   */<a name="line.8024"></a>
+<span class="sourceLineNo">8025</span>  private void recordMutationWithoutWal(final Map&lt;byte [], List&lt;Cell&gt;&gt; familyMap) {<a name="line.8025"></a>
+<span class="sourceLineNo">8026</span>    numMutationsWithoutWAL.increment();<a name="line.8026"></a>
+<span class="sourceLineNo">8027</span>    if (numMutationsWithoutWAL.sum() &lt;= 1) {<a name="line.8027"></a>
+<span class="sourceLineNo">8028</span>      LOG.info("writing data to region " + this +<a name="line.8028"></a>
+<span class="sourceLineNo">8029</span>               " with WAL disabled. Data may be lost in the event of a crash.");<a name="line.8029"></a>
+<span class="sourceLineNo">8030</span>    }<a name="line.8030"></a>
 <span class="sourceLineNo">8031</span><a name="line.8031"></a>
-<span class="sourceLineNo">8032</span>  private void lock(final Lock lock)<a name="line.8032"></a>
-<span class="sourceLineNo">8033</span>      throws RegionTooBusyException, InterruptedIOException {<a name="line.8033"></a>
-<span class="sourceLineNo">8034</span>    lock(lock, 1);<a name="line.8034"></a>
-<span class="sourceLineNo">8035</span>  }<a name="line.8035"></a>
-<span class="sourceLineNo">8036</span><a name="line.8036"></a>
-<span class="sourceLineNo">8037</span>  /**<a name="line.8037"></a>
-<span class="sourceLineNo">8038</span>   * Try to acquire a lock.  Throw RegionTooBusyException<a name="line.8038"></a>
-<span class="sourceLineNo">8039</span>   * if failed to get the lock in time. Throw InterruptedIOException<a name="line.8039"></a>
-<span class="sourceLineNo">8040</span>   * if interrupted while waiting for the lock.<a name="line.8040"></a>
-<span class="sourceLineNo">8041</span>   */<a name="line.8041"></a>
-<span class="sourceLineNo">8042</span>  private void lock(final Lock lock, final int multiplier)<a name="line.8042"></a>
-<span class="sourceLineNo">8043</span>      throws RegionTooBusyException, InterruptedIOException {<a name="line.8043"></a>
-<span class="sourceLineNo">8044</span>    try {<a name="line.8044"></a>
-<span class="sourceLineNo">8045</span>      final long waitTime = Math.min(maxBusyWaitDuration,<a name="line.8045"></a>
-<span class="sourceLineNo">8046</span>          busyWaitDuration * Math.min(multiplier, maxBusyWaitMultiplier));<a name="line.8046"></a>
-<span class="sourceLineNo">8047</span>      if (!lock.tryLock(waitTime, TimeUnit.MILLISECONDS)) {<a name="line.8047"></a>
-<span class="sourceLineNo">8048</span>        throw new RegionTooBusyException(<a name="line.8048"></a>
-<span class="sourceLineNo">8049</span>            "failed to get a lock in " + waitTime + " ms. " +<a name="line.8049"></a>
-<span class="sourceLineNo">8050</span>                "regionName=" + (this.getRegionInfo() == null ? "unknown" :<a name="line.8050"></a>
-<span class="sourceLineNo">8051</span>                this.getRegionInfo().getRegionNameAsString()) +<a name="line.8051"></a>
-<span class="sourceLineNo">8052</span>                ", server=" + (this.getRegionServerServices() == null ? "unknown" :<a name="line.8052"></a>
-<span class="sourceLineNo">8053</span>                this.getRegionServerServices().getServerName()));<a name="line.8053"></a>
-<span class="sourceLineNo">8054</span>      }<a name="line.8054"></a>
-<span class="sourceLineNo">8055</span>    } catch (InterruptedException ie) {<a name="line.8055"></a>
-<span class="sourceLineNo">8056</span>      LOG.info("Interrupted while waiting for a lock");<a name="line.8056"></a>
-<span class="sourceLineNo">8057</span>      InterruptedIOException iie = new InterruptedIOException();<a name="line.8057"></a>
-<span class="sourceLineNo">8058</span>      iie.initCause(ie);<a name="line.8058"></a>
-<span class="sourceLineNo">8059</span>      throw iie;<a name="line.8059"></a>
-<span class="sourceLineNo">8060</span>    }<a name="line.8060"></a>
-<span class="sourceLineNo">8061</span>  }<a name="line.8061"></a>
-<span class="sourceLineNo">8062</span><a name="line.8062"></a>
-<span class="sourceLineNo">8063</span>  /**<a name="line.8063"></a>
-<span class="sourceLineNo">8064</span>   * Calls sync with the given transaction ID<a name="line.8064"></a>
-<span class="sourceLineNo">8065</span>   * @param txid should sync up to which transaction<a name="line.8065"></a>
-<span class="sourceLineNo">8066</span>   * @throws IOException If anything goes wrong with DFS<a name="line.8066"></a>
-<span class="sourceLineNo">8067</span>   */<a name="line.8067"></a>
-<span class="sourceLineNo">8068</span>  private void sync(long txid, Durability durability) throws IOException {<a name="line.8068"></a>
-<span class="sourceLineNo">8069</span>    if (this.getRegionInfo().isMetaRegion()) {<a name="line.8069"></a>
-<span class="sourceLineNo">8070</span>      this.wal.sync(txid);<a name="line.8070"></a>
-<span class="sourceLineNo">8071</span>    } else {<a name="line.8071"></a>
-<span class="sourceLineNo">8072</span>      switch(durability) {<a name="line.8072"></a>
-<span class="sourceLineNo">8073</span>      case USE_DEFAULT:<a name="line.8073"></a>
-<span class="sourceLineNo">8074</span>        // do what table defaults to<a name="line.8074"></a>
-<span class="sourceLineNo">8075</span>        if (shouldSyncWAL()) {<a name="line.8075"></a>
-<span class="sourceLineNo">8076</span>          this.wal.sync(txid);<a name="line.8076"></a>
-<span class="sourceLineNo">8077</span>        }<a name="line.8077"></a>
-<span class="sourceLineNo">8078</span>        break;<a name="line.8078"></a>
-<span class="sourceLineNo">8079</span>      case SKIP_WAL:<a name="line.8079"></a>
-<span class="sourceLineNo">8080</span>        // nothing do to<a name="line.8080"></a>
-<span class="sourceLineNo">8081</span>        break;<a name="line.8081"></a>
-<span class="sourceLineNo">8082</span>      case ASYNC_WAL:<a name="line.8082"></a>
-<span class="sourceLineNo">8083</span>        // nothing do to<a name="line.8083"></a>
-<span class="sourceLineNo">8084</span>        break;<a name="line.8084"></a>
-<span class="sourceLineNo">8085</span>      case SYNC_WAL:<a name="line.8085"></a>
-<span class="sourceLineNo">8086</span>      case FSYNC_WAL:<a name="line.8086"></a>
-<span class="sourceLineNo">8087</span>        // sync the WAL edit (SYNC and FSYNC treated the same for now)<a name="line.8087"></a>
-<span class="sourceLineNo">8088</span>        this.wal.sync(txid);<a name="line.8088"></a>
-<span class="sourceLineNo">8089</span>        break;<a name="line.8089"></a>
-<span class="sourceLineNo">8090</span>      default:<a name="line.8090"></a>
-<span class="sourceLineNo">8091</span>        throw new RuntimeException("Unknown durability " + durability);<a name="line.8091"></a>
-<span class="sourceLineNo">8092</span>      }<a name="line.8092"></a>
-<span class="sourceLineNo">8093</span>    }<a name="line.8093"></a>
-<span class="sourceLineNo">8094</span>  }<a name="line.8094"></a>
-<span class="sourceLineNo">8095</span><a name="line.8095"></a>
-<span class="sourceLineNo">8096</span>  /**<a name="line.8096"></a>
-<span class="sourceLineNo">8097</span>   * Check whether we should sync the wal from the table's durability settings<a name="line.8097"></a>
-<span class="sourceLineNo">8098</span>   */<a name="line.8098"></a>
-<span class="sourceLineNo">8099</span>  private boolean shouldSyncWAL() {<a name="line.8099"></a>
-<span class="sourceLineNo">8100</span>    return durability.ordinal() &gt;  Durability.ASYNC_WAL.ordinal();<a name="line.8100"></a>
-<span class="sourceLineNo">8101</span>  }<a name="line.8101"></a>
-<span class="sourceLineNo">8102</span><a name="line.8102"></a>
-<span class="sourceLineNo">8103</span>  /**<a name="line.8103"></a>
-<span class="sourceLineNo">8104</span>   * A mocked list implementation - discards all updates.<a name="line.8104"></a>
-<span class="sourceLineNo">8105</span>   */<a name="line.8105"></a>
-<span class="sourceLineNo">8106</span>  private static final List&lt;Cell&gt; MOCKED_LIST = new AbstractList&lt;Cell&gt;() {<a name="line.8106"></a>
-<span class="sourceLineNo">8107</span><a name="line.8107"></a>
-<span class="sourceLineNo">8108</span>    @Override<a name="line.8108"></a>
-<span class="sourceLineNo">8109</span>    public void add(int index, Cell element) {<a name="line.8109"></a>
-<span class="sourceLineNo">8110</span>      // do nothing<a name="line.8110"></a>
-<span class="sourceLineNo">8111</span>    }<a name="line.8111"></a>
-<span class="sourceLineNo">8112</span><a name="line.8112"></a>
-<span class="sourceLineNo">8113</span>    @Override<a name="line.8113"></a>
-<span class="sourceLineNo">8114</span>    public boolean addAll(int index, Collection&lt;? extends Cell&gt; c) {<a name="line.8114"></a>
-<span class="sourceLineNo">8115</span>      return false; // this list is never changed as a result of an update<a name="line.8115"></a>
-<span class="sourceLineNo">8116</span>    }<a name="line.8116"></a>
-<span class="sourceLineNo">8117</span><a name="line.8117"></a>
-<span class="sourceLineNo">8118</span>    @Override<a name="line.8118"></a>
-<span class="sourceLineNo">8119</span>    public KeyValue get(int index) {<a name="line.8119"></a>
-<span class="sourceLineNo">8120</span>      throw new UnsupportedOperationException();<a name="line.8120"></a>
-<span class="sourceLineNo">8121</span>    }<a name="line.8121"></a>
-<span class="sourceLineNo">8122</span><a name="line.8122"></a>
-<span class="sourceLineNo">8123</span>    @Override<a name="line.8123"></a>
-<span class="sourceLineNo">8124</span>    public int size() {<a name="line.8124"></a>
-<span class="sourceLineNo">8125</span>      return 0;<a name="line.8125"></a>
-<span class="sourceLineNo">8126</span>    }<a name="line.8126"></a>
-<span class="sourceLineNo">8127</span>  };<a name="line.8127"></a>
-<span class="sourceLineNo">8128</span><a name="line.8128"></a>
-<span class="sourceLineNo">8129</span>  @Override<a name="line.8129"></a>
-<span class="sourceLineNo">8130</span>  public long getOpenSeqNum() {<a name="line.8130"></a>
-<span class="sourceLineNo">8131</span>    return this.openSeqNum;<a name="line.8131"></a>
-<span class="sourceLineNo">8132</span>  }<a name="line.8132"></a>
-<span class="sourceLineNo">8133</span><a name="line.8133"></a>
-<span class="sourceLineNo">8134</span>  @Override<a name="line.8134"></a>
-<span class="sourceLineNo">8135</span>  public Map&lt;byte[], Long&gt; getMaxStoreSeqId() {<a name="line.8135"></a>
-<span class="sourceLineNo">8136</span>    return this.maxSeqIdInStores;<a name="line.8136"></a>
-<span class="sourceLineNo">8137</span>  }<a name="line.8137"></a>
-<span class="sourceLineNo">8138</span><a name="line.8138"></a>
-<span class="sourceLineNo">8139</span>  @Override<a name="line.8139"></a>
-<span class="sourceLineNo">8140</span>  public long getOldestSeqIdOfStore(byte[] familyName) {<a name="line.8140"></a>
-<span class="sourceLineNo">8141</span>    return wal.getEarliestMemstoreSeqNum(getRegionInfo().getEncodedNameAsBytes(), familyName);<a name="line.8141"></a>
-<span class="sourceLineNo">8142</span>  }<a name="line.8142"></a>
-<span class="sourceLineNo">8143</span><a name="line.8143"></a>
-<span class="sourceLineNo">8144</span>  @Override<a name="line.8144"></a>
-<span class="sourceLineNo">8145</span>  public CompactionState getCompactionState() {<a name="line.8145"></a>
-<span class="sourceLineNo">8146</span>    boolean hasMajor = majorInProgress.get() &gt; 0, hasMinor = minorInProgress.get() &gt; 0;<a name="line.8146"></a>
-<span class="sourceLineNo">8147</span>    return (hasMajor ? (hasMinor ? CompactionState.MAJOR_AND_MINOR : CompactionState.MAJOR)<a name="line.8147"></a>
-<span class="sourceLineNo">8148</span>        : (hasMinor ? CompactionState.MINOR : CompactionState.NONE));<a name="line.8148"></a>
-<span class="sourceLineNo">8149</span>  }<a name="line.8149"></a>
-<span class="sourceLineNo">8150</span><a name="line.8150"></a>
-<span class="sourceLineNo">8151</span>  public void reportCompactionRequestStart(boolean isMajor){<a name="line.8151"></a>
-<span class="sourceLineNo">8152</span>    (isMajor ? majorInProgress : minorInProgress).incrementAndGet();<a name="line.8152"></a>
-<span class="sourceLineNo">8153</span>  }<a name="line.8153"></a>
-<span class="sourceLineNo">8154</span><a name="line.8154"></a>
-<span class="sourceLineNo">8155</span>  public void reportCompactionRequestEnd(boolean isMajor, int numFiles, long filesSizeCompacted) {<a name="line.8155"></a>
-<span class="sourceLineNo">8156</span>    int newValue = (isMajor ? majorInProgress : minorInProgress).decrementAndGet();<a name="line.8156"></a>
-<span class="sourceLineNo">8157</span><a name="line.8157"></a>
-<span class="sourceLineNo">8158</span>    // metrics<a name="line.8158"></a>
-<span class="sourceLineNo">8159</span>    compactionsFinished.incrementAndGet();<a name="line.8159"></a>
-<span class="sourceLineNo">8160</span>    compactionNumFilesCompacted.addAndGet(numFiles);<a name="line.8160"></a>
-<span class="sourceLineNo">8161</span>    compactionNumBytesCompacted.addAndGet(filesSizeCompacted);<a name="line.8161"></a>
-<span class="sourceLineNo">8162</span><a name="line.8162"></a>
-<span class="sourceLineNo">8163</span>    assert newValue &gt;= 0;<a name="line.8163"></a>
-<span class="sourceLineNo">8164</span>  }<a name="line.8164"></a>
-<span class="sourceLineNo">8165</span><a name="line.8165"></a>
-<span class="sourceLineNo">8166</span>  public void reportCompactionRequestFailure() {<a name="line.8166"></a>
-<span class="sourceLineNo">8167</span>    compactionsFailed.incrementAndGet();<a name="line.8167"></a>
-<span class="sourceLineNo">8168</span>  }<a name="line.8168"></a>
-<span class="sourceLineNo">8169</span><a name="line.8169"></a>
-<span class="sourceLineNo">8170</span>  public void incrementCompactionsQueuedCount() {<a name="line.8170"></a>
-<span class="sourceLineNo">8171</span>    compactionsQueued.incrementAndGet();<a name="line.8171"></a>
-<span class="sourceLineNo">8172</span>  }<a name="line.8172"></a>
-<span class="sourceLineNo">8173</span><a name="line.8173"></a>
-<span class="sourceLineNo">8174</span>  public void decrementCompactionsQueuedCount() {<a name="line.8174"></a>
-<span class="sourceLineNo">8175</span>    compactionsQueued.decrementAndGet();<a name="line.8175"></a>
-<span class="sourceLineNo">8176</span>  }<a name="line.8176"></a>
-<span class="sourceLineNo">8177</span><a name="line.8177"></a>
-<span class="sourceLineNo">8178</span>  public void incrementFlushesQueuedCount() {<a name="line.8178"></a>
-<span class="sourceLineNo">8179</span>    flushesQueued.incrementAndGet();<a name="line.8179"></a>
-<span class="sourceLineNo">8180</span>  }<a name="line.8180"></a>
-<span class="sourceLineNo">8181</span><a name="line.8181"></a>
-<span class="sourceLineNo">8182</span>  @VisibleForTesting<a name="line.8182"></a>
-<span class="sourceLineNo">8183</span>  public long getReadPoint() {<a name="line.8183"></a>
-<span class="sourceLineNo">8184</span>    return getReadPoint(IsolationLevel.READ_COMMITTED);<a name="line.8184"></a>
+<span class="sourceLineNo">8032</span>    long mutationSize = 0;<a name="line.8032"></a>
+<span class="sourceLineNo">8033</span>    for (List&lt;Cell&gt; cells: familyMap.values()) {<a name="line.8033"></a>
+<span class="sourceLineNo">8034</span>      assert cells instanceof RandomAccess;<a name="line.8034"></a>
+<span class="sourceLineNo">8035</span>      int listSize = cells.size();<a name="line.8035"></a>
+<span class="sourceLineNo">8036</span>      for (int i=0; i &lt; listSize; i++) {<a name="line.8036"></a>
+<span class="sourceLineNo">8037</span>        Cell cell = cells.get(i);<a name="line.8037"></a>
+<span class="sourceLineNo">8038</span>        mutationSize += KeyValueUtil.length(cell);<a name="line.8038"></a>
+<span class="sourceLineNo">8039</span>      }<a name="line.8039"></a>
+<span class="sourceLineNo">8040</span>    }<a name="line.8040"></a>
+<span class="sourceLineNo">8041</span><a name="line.8041"></a>
+<span class="sourceLineNo">8042</span>    dataInMemoryWithoutWAL.add(mutationSize);<a name="line.8042"></a>
+<span class="sourceLineNo">8043</span>  }<a name="line.8043"></a>
+<span class="sourceLineNo">8044</span><a name="line.8044"></a>
+<span class="sourceLineNo">8045</span>  private void lock(final Lock lock)<a name="line.8045"></a>
+<span class="sourceLineNo">8046</span>      throws RegionTooBusyException, InterruptedIOException {<a name="line.8046"></a>
+<span class="sourceLineNo">8047</span>    lock(lock, 1);<a name="line.8047"></a>
+<span class="sourceLineNo">8048</span>  }<a name="line.8048"></a>
+<span class="sourceLineNo">8049</span><a name="line.8049"></a>
+<span class="sourceLineNo">8050</span>  /**<a name="line.8050"></a>
+<span class="sourceLineNo">8051</span>   * Try to acquire a lock.  Throw RegionTooBusyException<a name="line.8051"></a>
+<span class="sourceLineNo">8052</span>   * if failed to get the lock in time. Throw InterruptedIOException<a name="line.8052"></a>
+<span class="sourceLineNo">8053</span>   * if interrupted while waiting for the lock.<a name="line.8053"></a>
+<span class="sourceLineNo">8054</span>   */<a name="line.8054"></a>
+<span class="sourceLineNo">8055</span>  private void lock(final Lock lock, final int multiplier)<a name="line.8055"></a>
+<span class="sourceLineNo">8056</span>      throws RegionTooBusyException, InterruptedIOException {<a name="line.8056"></a>
+<span class="sourceLineNo">8057</span>    try {<a name="line.8057"></a>
+<span class="sourceLineNo">8058</span>      final long waitTime = Math.min(maxBusyWaitDuration,<a name="line.8058"></a>
+<span class="sourceLineNo">8059</span>          busyWaitDuration * Math.min(multiplier, maxBusyWaitMultiplier));<a name="line.8059"></a>
+<span class="sourceLineNo">8060</span>      if (!lock.tryLock(waitTime, TimeUnit.MILLISECONDS)) {<a name="line.8060"></a>
+<span class="sourceLineNo">8061</span>        throw new RegionTooBusyException(<a name="line.8061"></a>
+<span class="sourceLineNo">8062</span>            "failed to get a lock in " + waitTime + " ms. " +<a name="line.8062"></a>
+<span class="sourceLineNo">8063</span>                "regionName=" + (this.getRegionInfo() == null ? "unknown" :<a name="line.8063"></a>
+<span class="sourceLineNo">8064</span>                this.getRegionInfo().getRegionNameAsString()) +<a name="line.8064"></a>
+<span class="sourceLineNo">8065</span>                ", server=" + (this.getRegionServerServices() == null ? "unknown" :<a name="line.8065"></a>
+<span class="sourceLineNo">8066</span>                this.getRegionServerServices().getServerName()));<a name="line.8066"></a>
+<span class="sourceLineNo">8067</span>      }<a name="line.8067"></a>
+<span class="sourceLineNo">8068</span>    } catch (InterruptedException ie) {<a name="line.8068"></a>
+<span class="sourceLineNo">8069</span>      LOG.info("Interrupted while waiting for a lock");<a name="line.8069"></a>
+<span class="sourceLineNo">8070</span>      InterruptedIOException iie = new InterruptedIOException();<a name="line.8070"></a>
+<span class="sourceLineNo">8071</span>      iie.initCause(ie);<a name="line.8071"></a>
+<span class="sourceLineNo">8072</span>      throw iie;<a name="line.8072"></a>
+<span class="sourceLineNo">8073</span>    }<a name="line.8073"></a>
+<span class="sourceLineNo">8074</span>  }<a name="line.8074"></a>
+<span class="sourceLineNo">8075</span><a name="line.8075"></a>
+<span class="sourceLineNo">8076</span>  /**<a name="line.8076"></a>
+<span class="sourceLineNo">8077</span>   * Calls sync with the given transaction ID<a name="line.8077"></a>
+<span class="sourceLineNo">8078</span>   * @param txid should sync up to which transaction<a name="line.8078"></a>
+<span class="sourceLineNo">8079</span>   * @throws IOException If anything goes wrong with DFS<a name="line.8079"></a>
+<span class="sourceLineNo">8080</span>   */<a name="line.8080"></a>
+<span class="sourceLineNo">8081</span>  private void sync(long txid, Durability durability) throws IOException {<a name="line.8081"></a>
+<span class="sourceLineNo">8082</span>    if (this.getRegionInfo().isMetaRegion()) {<a name="line.8082"></a>
+<span class="sourceLineNo">8083</span>      this.wal.sync(txid);<a name="line.8083"></a>
+<span class="sourceLineNo">8084</span>    } else {<a name="line.8084"></a>
+<span class="sourceLineNo">8085</span>      switch(durability) {<a name="line.8085"></a>
+<span class="sourceLineNo">8086</span>      case USE_DEFAULT:<a name="line.8086"></a>
+<span class="sourceLineNo">8087</span>        // do what table defaults to<a name="line.8087"></a>
+<span class="sourceLineNo">8088</span>        if (shouldSyncWAL()) {<a name="line.8088"></a>
+<span class="sourceLineNo">8089</span>          this.wal.sync(txid);<a name="line.8089"></a>
+<span class="sourceLineNo">8090</span>        }<a name="line.8090"></a>
+<span class="sourceLineNo">8091</span>        break;<a name="line.8091"></a>
+<span class="sourceLineNo">8092</span>      case SKIP_WAL:<a name="line.8092"></a>
+<span class="sourceLineNo">8093</span>        // nothing do to<a name="line.8093"></a>
+<span class="sourceLineNo">8094</span>        break;<a name="line.8094"></a>
+<span class="sourceLineNo">8095</span>      case ASYNC_WAL:<a name="line.8095"></a>
+<span class="sourceLineNo">8096</span>        // nothing do to<a name="line.8096"></a>
+<span class="sourceLineNo">8097</span>        break;<a name="line.8097"></a>
+<span class="sourceLineNo">8098</span>      case SYNC_WAL:<a name="line.8098"></a>
+<span class="sourceLineNo">8099</span>      case FSYNC_WAL:<a name="line.8099"></a>
+<span class="sourceLineNo">8100</span>        // sync the WAL edit (SYNC and FSYNC treated the same for now)<a name="line.8100"></a>
+<span class="sourceLineNo">8101</span>        this.wal.sync(txid);<a name="line.8101"></a>
+<span class="sourceLineNo">8102</span>        break;<a name="line.8102"></a>
+<span class="sourceLineNo">8103</span>      default:<a name="line.8103"></a>
+<span class="sourceLineNo">8104</span>        throw new RuntimeException("Unknown durability " + durability);<a name="line.8104"></a>
+<span class="sourceLineNo">8105</span>      }<a name="line.8105"></a>
+<span class="sourceLineNo">8106</span>    }<a name="line.8106"></a>
+<span class="sourceLineNo">8107</span>  }<a name="line.8107"></a>
+<span class="sourceLineNo">8108</span><a name="line.8108"></a>
+<span class="sourceLineNo">8109</span>  /**<a name="line.8109"></a>
+<span class="sourceLineNo">8110</span>   * Check whether we should sync the wal from the table's durability settings<a name="line.8110"></a>
+<span class="sourceLineNo">8111</span>   */<a name="line.8111"></a>
+<span class="sourceLineNo">8112</span>  private boolean shouldSyncWAL() {<a name="line.8112"></a>
+<span class="sourceLineNo">8113</span>    return durability.ordinal() &gt;  Durability.ASYNC_WAL.ordinal();<a name="line.8113"></a>
+<span class="sourceLineNo">8114</span>  }<a name="line.8114"></a>
+<span class="sourceLineNo">8115</span><a name="line.8115"></a>
+<span class="sourceLineNo">8116</span>  /**<a name="line.8116"></a>
+<span class="sourceLineNo">8117</span>   * A mocked list implementation - discards all updates.<a name="line.8117"></a>
+<span class="sourceLineNo">8118</span>   */<a name="line.8118"></a>
+<span class="sourceLineNo">8119</span>  private static final List&lt;Cell&gt; MOCKED_LIST = new AbstractList&lt;Cell&gt;() {<a name="line.8119"></a>
+<span class="sourceLineNo">8120</span><a name="line.8120"></a>
+<span class="sourceLineNo">8121</span>    @Override<a name="line.8121"></a>
+<span class="sourceLineNo">8122</span>    public void add(int index, Cell element) {<a name="line.8122"></a>
+<span class="sourceLineNo">8123</span>      // do nothing<a name="line.8123"></a>
+<span class="sourceLineNo">8124</span>    }<a name="line.8124"></a>
+<span class="sourceLineNo">8125</span><a name="line.8125"></a>
+<span class="sourceLineNo">8126</span>    @Override<a name="line.8126"></a>
+<span class="sourceLineNo">8127</span>    public boolean addAll(int index, Collection&lt;? extends Cell&gt; c) {<a name="line.8127"></a>
+<span class="sourceLineNo">8128</span>      return false; // this list is never changed as a result of an update<a name="line.8128"></a>
+<span class="sourceLineNo">8129</span>    }<a name="line.8129"></a>
+<span class="sourceLineNo">8130</span><a name="line.8130"></a>
+<span class="sourceLineNo">8131</span>    @Override<a name="line.8131"></a>
+<span class="sourceLineNo">8132</span>    public KeyValue get(int index) {<a name="line.8132"></a>
+<span class="sourceLineNo">8133</span>      throw new UnsupportedOperationException();<a name="line.8133"></a>
+<span class="sourceLineNo">8134</span>    }<a name="line.8134"></a>
+<span class="sourceLineNo">8135</span><a name="line.8135"></a>
+<span class="sourceLineNo">8136</span>    @Override<a name="line.8136"></a>
+<span class="sourceLineNo">8137</span>    public int size() {<a name="line.8137"></a>
+<span class="sourceLineNo">8138</span>      return 0;<a name="line.8138"></a>
+<span class="sourceLineNo">8139</span>    }<a name="line.8139"></a>
+<span class="sourceLineNo">8140</span>  };<a name="line.8140"></a>
+<span class="sourceLineNo">8141</span><a name="line.8141"></a>
+<span class="sourceLineNo">8142</span>  @Override<a name="line.8142"></a>
+<span class="sourceLineNo">8143</span>  public long getOpenSeqNum() {<a name="line.8143"></a>
+<span class="sourceLineNo">8144</span>    return this.openSeqNum;<a name="line.8144"></a>
+<span class="sourceLineNo">8145</span>  }<a name="line.8145"></a>
+<span class="sourceLineNo">8146</span><a name="line.8146"></a>
+<span class="sourceLineNo">8147</span>  @Override<a name="line.8147"></a>
+<span class="sourceLineNo">8148</span>  public Map&lt;byte[], Long&gt; getMaxStoreSeqId() {<a name="line.8148"></a>
+<span class="sourceLineNo">8149</span>    return this.maxSeqIdInStores;<a name="line.8149"></a>
+<span class="sourceLineNo">8150</span>  }<a name="line.8150"></a>
+<span class="sourceLineNo">8151</span><a name="line.8151"></a>
+<span class="sourceLineNo">8152</span>  @Override<a name="line.8152"></a>
+<span class="sourceLineNo">8153</span>  public long getOldestSeqIdOfStore(byte[] familyName) {<a name="line.8153"></a>
+<span class="sourceLineNo">8154</span>    return wal.getEarliestMemstoreSeqNum(getRegionInfo().getEncodedNameAsBytes(), familyName);<a name="line.8154"></a>
+<span class="sourceLineNo">8155</span>  }<a name="line.8155"></a>
+<span class="sourceLineNo">8156</span><a name="line.8156"></a>
+<span class="sourceLineNo">8157</span>  @Override<a name="line.8157"></a>
+<span class="sourceLineNo">8158</span>  public CompactionState getCompactionState() {<a name="line.8158"></a>
+<span class="sourceLineNo">8159</span>    boolean hasMajor = majorInProgress.get() &gt; 0, hasMinor = minorInProgress.get() &gt; 0;<a name="line.8159"></a>
+<span class="sourceLineNo">8160</span>    return (hasMajor ? (hasMinor ? CompactionState.MAJOR_AND_MINOR : CompactionState.MAJOR)<a name="line.8160"></a>
+<span class="sourceLineNo">8161</span>        : (hasMinor ? CompactionState.MINOR : CompactionState.NONE));<a name="line.8161"></a>
+<span class="sourceLineNo">8162</span>  }<a name="line.8162"></a>
+<span class="sourceLineNo">8163</span><a name="line.8163"></a>
+<span class="sourceLineNo">8164</span>  public void reportCompactionRequestStart(boolean isMajor){<a name="line.8164"></a>
+<span class="sourceLineNo">8165</span>    (isMajor ? majorInProgress : minorInProgress).incrementAndGet();<a name="line.8165"></a>
+<span class="sourceLineNo">8166</span>  }<a name="line.8166"></a>
+<span class="sourceLineNo">8167</span><a name="line.8167"></a>
+<span class="sourceLineNo">8168</span>  public void reportCompactionRequestEnd(boolean isMajor, int numFiles, long filesSizeCompacted) {<a name="line.8168"></a>
+<span class="sourceLineNo">8169</span>    int newValue = (isMajor ? majorInProgress : minorInProgress).decrementAndGet();<a name="line.8169"></a>
+<span class="sourceLineNo">8170</span><a name="line.8170"></a>
+<span class="sourceLineNo">8171</span>    // metrics<a name="line.8171"></a>
+<span class="sourceLineNo">8172</span>    compactionsFinished.incrementAndGet();<a name="line.8172"></a>
+<span class="sourceLineNo">8173</span>    compactionNumFilesCompacted.addAndGet(numFiles);<a name="line.8173"></a>
+<span class="sourceLineNo">8174</span>    compactionNumBytesCompacted.addAndGet(filesSizeCompacted);<a name="line.8174"></a>
+<span class="sourceLineNo">8175</span><a name="line.8175"></a>
+<span class="sourceLineNo">8176</span>    assert newValue &gt;= 0;<a name="line.8176"></a>
+<span class="sourceLineNo">8177</span>  }<a name="line.8177"></a>
+<span class="sourceLineNo">8178</span><a name="line.8178"></a>
+<span class="sourceLineNo">8179</span>  public void reportCompactionRequestFailure() {<a name="line.8179"></a>
+<span class="sourceLineNo">8180</span>    compactionsFailed.incrementAndGet();<a name="line.8180"></a>
+<span class="sourceLineNo">8181</span>  }<a name="line.8181"></a>
+<span class="sourceLineNo">8182</span><a name="line.8182"></a>
+<span class="sourceLineNo">8183</span>  public void incrementCompactionsQueuedCount() {<a name="line.8183"></a>
+<span class="sourceLineNo">8184</span>    compactionsQueued.incrementAndGet();<a name="line.8184"></a>
 <span class="sourceLineNo">8185</span>  }<a name="line.8185"></a>
 <span class="sourceLineNo">8186</span><a name="line.8186"></a>
-<span class="sourceLineNo">8187</span>  /**<a name="line.8187"></a>
-<span class="sourceLineNo">8188</span>   * {@inheritDoc}<a name="line.8188"></a>
-<span class="sourceLineNo">8189</span>   */<a name="line.8189"></a>
-<span class="sourceLineNo">8190</span>  @Override<a name="line.8190"></a>
-<span class="sourceLineNo">8191</span>  public void onConfigurationChange(Configuration conf) {<a name="line.8191"></a>
-<span class="sourceLineNo">8192</span>    // Do nothing for now.<a name="line.8192"></a>
+<span class="sourceLineNo">8187</span>  public void decrementCompactionsQueuedCount() {<a name="line.8187"></a>
+<span class="sourceLineNo">8188</span>    compactionsQueued.decrementAndGet();<a name="line.8188"></a>
+<span class="sourceLineNo">8189</span>  }<a name="line.8189"></a>
+<span class="sourceLineNo">8190</span><a name="line.8190"></a>
+<span class="sourceLineNo">8191</span>  public void incrementFlushesQueuedCount() {<a name="line.8191"></a>
+<span class="sourceLineNo">8192</span>    flushesQueued.incrementAndGet();<a name="line.8192"></a>
 <span class="sourceLineNo">8193</span>  }<a name="line.8193"></a>
 <span class="sourceLineNo">8194</span><a name="line.8194"></a>
-<span class="sourceLineNo">8195</span>  /**<a name="line.8195"></a>
-<span class="sourceLineNo">8196</span>   * {@inheritDoc}<a name="line.8196"></a>
-<span class="sourceLineNo">8197</span>   */<a name="line.8197"></a>
-<span class="sourceLineNo">8198</span>  @Override<a name="line.8198"></a>
-<span class="sourceLineNo">8199</span>  public void registerChildren(ConfigurationManager manager) {<a name="line.8199"></a>
-<span class="sourceLineNo">8200</span>    configurationManager = Optional.of(manager);<a name="line.8200"></a>
-<span class="sourceLineNo">8201</span>    for (Store s : this.stores.values()) {<a name="line.8201"></a>
-<span class="sourceLineNo">8202</span>      configurationManager.get().registerObserver(s);<a name="line.8202"></a>
-<span class="sourceLineNo">8203</span>    }<a name="line.8203"></a>
-<span class="sourceLineNo">8204</span>  }<a name="line.8204"></a>
-<span class="sourceLineNo">8205</span><a name="line.8205"></a>
-<span class="sourceLineNo">8206</span>  /**<a name="line.8206"></a>
-<span class="sourceLineNo">8207</span>   * {@inheritDoc}<a name="line.8207"></a>
-<span class="sourceLineNo">8208</span>   */<a name="line.8208"></a>
-<span class="sourceLineNo">8209</span>  @Override<a name="line.8209"></a>
-<span class="sourceLineNo">8210</span>  public void deregisterChildren(ConfigurationManager manager) {<a name="line.8210"></a>
-<span class="sourceLineNo">8211</span>    for (Store s : this.stores.values()) {<a name="line.8211"></a>
-<span class="sourceLineNo">8212</span>      configurationManager.get().deregisterObserver(s);<a name="line.8212"></a>
-<span class="sourceLineNo">8213</span>    }<a name="line.8213"></a>
-<span class="sourceLineNo">8214</span>  }<a name="line.8214"></a>
-<span class="sourceLineNo">8215</span><a name="line.8215"></a>
-<span class="sourceLineNo">8216</span>  @Override<a name="line.8216"></a>
-<span class="sourceLineNo">8217</span>  public CellComparator getCellComparator() {<a name="line.8217"></a>
-<span class="sourceLineNo">8218</span>    return this.getRegionInfo().isMetaRegion() ? CellComparator.META_COMPARATOR<a name="line.8218"></a>
-<span class="sourceLineNo">8219</span>        : CellComparator.COMPARATOR;<a name="line.8219"></a>
-<span class="sourceLineNo">8220</span>  }<a name="line.8220"></a>
-<span class="sourceLineNo">8221</span><a name="line.8221"></a>
-<span class="sourceLineNo">8222</span>  public long getMemstoreFlushSize() {<a name="line.8222"></a>
-<span class="sourceLineNo">8223</span>    return this.memstoreFlushSize;<a name="line.8223"></a>
-<span class="sourceLineNo">8224</span>  }<a name="line.8224"></a>
-<span class="sourceLineNo">8225</span><a name="line.8225"></a>
-<span class="sourceLineNo">8226</span>  //// method for debugging tests<a name="line.8226"></a>
-<span class="sourceLineNo">8227</span>  void throwException(String title, String regionName) {<a name="line.8227"></a>
-<span class="sourceLineNo">8228</span>    StringBuffer buf = new StringBuffer();<a name="line.8228"></a>
-<span class="sourceLineNo">8229</span>    buf.append(title + ", ");<a name="line.8229"></a>
-<span class="sourceLineNo">8230</span>    buf.append(getRegionInfo().toString());<a name="line.8230"></a>
-<span class="sourceLineNo">8231</span>    buf.append(getRegionInfo().isMetaRegion() ? " meta region " : " ");<a name="line.8231"></a>
-<span class="sourceLineNo">8232</span>    buf.append(getRegionInfo().isMetaTable() ? " meta table " : " ");<a name="line.8232"></a>
-<span class="sourceLineNo">8233</span>    buf.append("stores: ");<a name="line.8233"></a>
-<span class="sourceLineNo">8234</span>    for (Store s : getStores()) {<a name="line.8234"></a>
-<span class="sourceLineNo">8235</span>      buf.append(s.getColumnFamilyDescriptor().getNameAsString());<a name="line.8235"></a>
-<span class="sourceLineNo">8236</span>      buf.append(" size: ");<a name="line.8236"></a>
-<span class="sourceLineNo">8237</span>      buf.append(s.getSizeOfMemStore().getDataSize());<a name="line.8237"></a>
-<span class="sourceLineNo">8238</span>      buf.append(" ");<a name="line.8238"></a>
-<span class="sourceLineNo">8239</span>    }<a name="line.8239"></a>
-<span class="sourceLineNo">8240</span>    buf.append("end-of-stores");<a name="line.8240"></a>
-<span class="sourceLineNo">8241</span>    buf.append(", memstore size ");<a name="line.8241"></a>
-<span class="sourceLineNo">8242</span>    buf.append(getMemstoreSize());<a name="line.8242"></a>
-<span class="sourceLineNo">8243</span>    if (getRegionInfo().getRegionNameAsString().startsWith(regionName)) {<a name="line.8243"></a>
-<span class="sourceLineNo">8244</span>      throw new RuntimeException(buf.toString());<a name="line.8244"></a>
-<span class="sourceLineNo">8245</span>    }<a name="line.8245"></a>
-<span class="sourceLineNo">8246</span>  }<a name="line.8246"></a>
-<span class="sourceLineNo">8247</span>}<a name="line.8247"></a>
+<span class="sourceLineNo">8195</span>  @VisibleForTesting<a name="line.8195"></a>
+<span class="sourceLineNo">8196</span>  public long getReadPoint() {<a name="line.8196"></a>
+<span class="sourceLineNo">8197</span>    return getReadPoint(IsolationLevel.READ_COMMITTED);<a name="line.8197"></a>
+<span class="sourceLineNo">8198</span>  }<a name="line.8198"></a>
+<span class="sourceLineNo">8199</span><a name="line.8199"></a>
+<span class="sourceLineNo">8200</span>  /**<a name="line.8200"></a>
+<span class="sourceLineNo">8201</span>   * {@inheritDoc}<a name="line.8201"></a>
+<span class="sourceLineNo">8202</span>   */<a name="line.8202"></a>
+<span class="sourceLineNo">8203</span>  @Override<a name="line.8203"></a>
+<span class="sourceLineNo">8204</span>  public void onConfigurationChange(Configuration conf) {<a name="line.8204"></a>
+<span class="sourceLineNo">8205</span>    // Do nothing for now.<a name="line.8205"></a>
+<span class="sourceLineNo">8206</span>  }<a name="line.8206"></a>
+<span class="sourceLineNo">8207</span><a name="line.8207"></a>
+<span class="sourceLineNo">8208</span>  /**<a name="line.8208"></a>
+<span class="sourceLineNo">8209</span>   * {@inheritDoc}<a name="line.8209"></a>
+<span class="sourceLineNo">8210</span>   */<a name="line.8210"></a>
+<span class="sourceLineNo">8211</span>  @Override<a name="line.8211"></a>
+<span class="sourceLineNo">8212</span>  public void registerChildren(ConfigurationManager manager) {<a name="line.8212"></a>
+<span class="sourceLineNo">8213</span>    configurationManager = Optional.of(manager);<a name="line.8213"></a>
+<span class="sourceLineNo">8214</span>    for (Store s : this.stores.values()) {<a name="line.8214"></a>
+<span class="sourceLineNo">8215</span>      configurationManager.get().registerObserver(s);<a name="line.8215"></a>
+<span class="sourceLineNo">8216</span>    }<a name="line.8216"></a>
+<span class="sourceLineNo">8217</span>  }<a name="line.8217"></a>
+<span class="sourceLineNo">8218</span><a name="line.8218"></a>
+<span class="sourceLineNo">8219</span>  /**<a name="line.8219"></a>
+<span class="sourceLineNo">8220</span>   * {@inheritDoc}<a name="line.8220"></a>
+<span class="sourceLineNo">8221</span>   */<a name="line.8221"></a>
+<span class="sourceLineNo">8222</span>  @Override<a name="line.8222"></a>
+<span class="sourceLineNo">8223</span>  public void deregisterChildren(ConfigurationManager manager) {<a name="line.8223"></a>
+<span class="sourceLineNo">8224</span>    for (Store s : this.stores.values()) {<a name="line.8224"></a>
+<span class="sourceLineNo">8225</span>      configurationManager.get().deregisterObserver(s);<a name="line.8225"></a>
+<span class="sourceLineNo">8226</span>    }<a name="line.8226"></a>
+<span class="sourceLineNo">8227</span>  }<a name="line.8227"></a>
+<span class="sourceLineNo">8228</span><a name="line.8228"></a>
+<span class="sourceLineNo">8229</span>  @Override<a name="line.8229"></a>
+<span class="sourceLineNo">8230</span>  public CellComparator getCellComparator() {<a name="line.8230"></a>
+<span class="sourceLineNo">8231</span>    return this.getRegionInfo().isMetaRegion() ? CellComparator.META_COMPARATOR<a name="line.8231"></a>
+<span class="sourceLineNo">8232</span>        : CellComparator.COMPARATOR;<a name="line.8232"></a>
+<span class="sourceLineNo">8233</span>  }<a name="line.8233"></a>
+<span class="sourceLineNo">8234</span><a name="line.8234"></a>
+<span class="sourceLineNo">8235</span>  public long getMemstoreFlushSize() {<a name="line.8235"></a>
+<span class="sourceLineNo">8236</span>    return this.memstoreFlushSize;<a name="line.8236"></a>
+<span class="sourceLineNo">8237</span>  }<a name="line.8237"></a>
+<span class="sourceLineNo">8238</span><a name="line.8238"></a>
+<span class="sourceLineNo">8239</span>  //// method for debugging tests<a name="line.8239"></a>
+<span class="sourceLineNo">8240</span>  void throwException(String title, String regionName) {<a name="line.8240"></a>
+<span class="sourceLineNo">8241</span>    StringBuffer buf = new StringBuffer();<a name="line.8241"></a>
+<span class="sourceLineNo">8242</span>    buf.append(title + ", ");<a name="line.8242"></a>
+<span class="sourceLineNo">8243</span>    buf.append(getRegionInfo().toString());<a name="line.8243"></a>
+<span class="sourceLineNo">8244</span>    buf.append(getRegionInfo().isMetaRegion() ? " meta region " : " ");<a name="line.8244"></a>
+<span class="sourceLineNo">8245</span>    buf.append(getRegionInfo().isMetaTable() ? " meta table " : " ");<a name="line.8245"></a>
+<span class="sourceLineNo">8246</span>    buf.append("stores: ");<a name="line.8246"></a>
+<span class="sourceLineNo">8247</span>    for (Store s : getStores()) {<a name="line.8247"></a>
+<span class="sourceLineNo">8248</span>      buf.append(s.getColumnFamilyDescriptor().getNameAsString());<a name="line.8248"></a>
+<span class="sourceLineNo">8249</span>      buf.append(" size: ");<a name="line.8249"></a>
+<span class="sourceLineNo">8250</span>      buf.append(s.getSizeOfMemStore().getDataSize());<a name="line.8250"></a>
+<span class="sourceLineNo">8251</span>      buf.append(" ");<a name="line.8251"></a>
+<span class="sourceLineNo">8252</span>    }<a name="line.8252"></a>
+<span class="sourceLineNo">8253</span>    buf.append("end-of-stores");<a name="line.8253"></a>
+<span class="sourceLineNo">8254</span>    buf.append(", memstore size ");<a name="line.8254"></a>
+<span class="sourceLineNo">8255</span>    buf.append(getMemstoreSize());<a name="line.8255"></a>
+<span class="sourceLineNo">8256</span>    if (getRegionInfo().getRegionNameAsString().startsWith(regionName)) {<a name="line.8256"></a>
+<span class="sourceLineNo">8257</span>      throw new RuntimeException(buf.toString());<a name="line.8257"></a>
+<span class="sourceLineNo">8258</span>    }<a name="line.8258"></a>
+<span class="sourceLineNo">8259</span>  }<a name="line.8259"></a>
+<span class="sourceLineNo">8260</span>}<a name="line.8260"></a>
 
 
 


[24/33] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html b/devapidocs/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html
index ff611c7..93dd455 100644
--- a/devapidocs/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html
+++ b/devapidocs/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":9,"i8":9,"i9":10,"i10":10,"i11":10,"i12":10,"i13":9,"i14":10,"i15":10,"i16":9,"i17":10,"i18":10,"i19":10,"i20":9,"i21":10,"i22":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":9,"i11":9,"i12":10,"i13":10,"i14":10,"i15":10,"i16":9,"i17":10,"i18":10,"i19":9,"i20":10,"i21":10,"i22":10,"i23":9,"i24":10,"i25":10};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -110,7 +110,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-public final class <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.69">SnapshotManifest</a>
+public final class <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.70">SnapshotManifest</a>
 extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">Utility class to help read/write the Snapshot Manifest.
 
@@ -241,6 +241,11 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#addMobRegion-org.apache.hadoop.hbase.HRegionInfo-">addMobRegion</a></span>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;regionInfo)</code>&nbsp;</td>
 </tr>
 <tr id="i1" class="rowColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#addMobRegion-org.apache.hadoop.hbase.HRegionInfo-org.apache.hadoop.hbase.snapshot.SnapshotManifest.RegionVisitor-">addMobRegion</a></span>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;regionInfo,
+            <a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html" title="interface in org.apache.hadoop.hbase.snapshot">SnapshotManifest.RegionVisitor</a>&nbsp;visitor)</code>&nbsp;</td>
+</tr>
+<tr id="i2" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#addReferenceFiles-org.apache.hadoop.hbase.snapshot.SnapshotManifest.RegionVisitor-java.lang.Object-java.lang.Object-java.util.Collection-boolean-">addReferenceFiles</a></span>(<a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html" title="interface in org.apache.hadoop.hbase.snapshot">SnapshotManifest.RegionVisitor</a>&nbsp;visitor,
                  <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;regionData,
@@ -248,34 +253,45 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
                  <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileInfo</a>&gt;&nbsp;storeFiles,
                  boolean&nbsp;isMob)</code>&nbsp;</td>
 </tr>
-<tr id="i2" class="altColor">
+<tr id="i3" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#addRegion-org.apache.hadoop.hbase.regionserver.HRegion-">addRegion</a></span>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)</code>
 <div class="block">Creates a 'manifest' for the specified region, by reading directly from the HRegion object.</div>
 </td>
 </tr>
-<tr id="i3" class="rowColor">
+<tr id="i4" class="altColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#addRegion-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.snapshot.SnapshotManifest.RegionVisitor-">addRegion</a></span>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
+         <a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html" title="interface in org.apache.hadoop.hbase.snapshot">SnapshotManifest.RegionVisitor</a>&nbsp;visitor)</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/hbase/snapshot/SnapshotManifest.html#addRegion-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.HRegionInfo-">addRegion</a></span>(org.apache.hadoop.fs.Path&nbsp;tableDir,
          <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;regionInfo)</code>
 <div class="block">Creates a 'manifest' for the specified region, by reading directly from the disk.</div>
 </td>
 </tr>
-<tr id="i4" class="altColor">
+<tr id="i6" class="altColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#addRegion-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.HRegionInfo-org.apache.hadoop.hbase.snapshot.SnapshotManifest.RegionVisitor-">addRegion</a></span>(org.apache.hadoop.fs.Path&nbsp;tableDir,
+         <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;regionInfo,
+         <a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html" title="interface in org.apache.hadoop.hbase.snapshot">SnapshotManifest.RegionVisitor</a>&nbsp;visitor)</code>&nbsp;</td>
+</tr>
+<tr id="i7" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#addTableDescriptor-org.apache.hadoop.hbase.HTableDescriptor-">addTableDescriptor</a></span>(<a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;htd)</code>
 <div class="block">Add the table descriptor to the snapshot manifest</div>
 </td>
 </tr>
-<tr id="i5" class="rowColor">
+<tr id="i8" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#consolidate--">consolidate</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i6" class="altColor">
+<tr id="i9" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#convertToV2SingleManifest--">convertToV2SingleManifest</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i7" class="rowColor">
+<tr id="i10" class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.html" title="class in org.apache.hadoop.hbase.snapshot">SnapshotManifest</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#create-org.apache.hadoop.conf.Configuration-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription-org.apache.hadoop.hbase.errorhandling.ForeignExceptionSnare-">create</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
       org.apache.hadoop.fs.FileSystem&nbsp;fs,
@@ -285,70 +301,70 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <div class="block">Return a SnapshotManifest instance, used for writing a snapshot.</div>
 </td>
 </tr>
-<tr id="i8" class="altColor">
+<tr id="i11" class="rowColor">
 <td class="colFirst"><code>static <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ThreadPoolExecutor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#createExecutor-org.apache.hadoop.conf.Configuration-java.lang.String-">createExecutor</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
               <a href="http://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)</code>&nbsp;</td>
 </tr>
-<tr id="i9" class="rowColor">
+<tr id="i12" class="altColor">
 <td class="colFirst"><code>private <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ThreadPoolExecutor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#createExecutor-java.lang.String-">createExecutor</a></span>(<a href="http://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)</code>&nbsp;</td>
 </tr>
-<tr id="i10" class="altColor">
+<tr id="i13" class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html" title="interface in org.apache.hadoop.hbase.snapshot">SnapshotManifest.RegionVisitor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#createRegionVisitor-org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription-">createRegionVisitor</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription&nbsp;desc)</code>&nbsp;</td>
 </tr>
-<tr id="i11" class="rowColor">
+<tr id="i14" class="altColor">
 <td class="colFirst"><code><a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#getRegionManifests--">getRegionManifests</a></span>()</code>
 <div class="block">Get all the Region Manifest from the snapshot</div>
 </td>
 </tr>
-<tr id="i12" class="altColor">
+<tr id="i15" class="rowColor">
 <td class="colFirst"><code><a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#getRegionManifestsMap--">getRegionManifestsMap</a></span>()</code>
 <div class="block">Get all the Region Manifest from the snapshot.</div>
 </td>
 </tr>
-<tr id="i13" class="rowColor">
+<tr id="i16" class="altColor">
 <td class="colFirst"><code>(package private) static <a href="http://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/hbase/snapshot/SnapshotManifest.html#getRegionNameFromManifest-org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest-">getRegionNameFromManifest</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest&nbsp;manifest)</code>
 <div class="block">Extract the region encoded name from the region manifest</div>
 </td>
 </tr>
-<tr id="i14" class="altColor">
+<tr id="i17" class="rowColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#getSnapshotDescription--">getSnapshotDescription</a></span>()</code>
 <div class="block">Get the SnapshotDescription</div>
 </td>
 </tr>
-<tr id="i15" class="rowColor">
+<tr id="i18" class="altColor">
 <td class="colFirst"><code>org.apache.hadoop.fs.Path</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#getSnapshotDir--">getSnapshotDir</a></span>()</code>
 <div class="block">Get the current snapshot working dir</div>
 </td>
 </tr>
-<tr id="i16" class="altColor">
+<tr id="i19" class="rowColor">
 <td class="colFirst"><code>private static int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#getSnapshotFormat-org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription-">getSnapshotFormat</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription&nbsp;desc)</code>&nbsp;</td>
 </tr>
-<tr id="i17" class="rowColor">
+<tr id="i20" class="altColor">
 <td class="colFirst"><code>private <a href="http://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="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileInfo</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#getStoreFiles-org.apache.hadoop.fs.Path-">getStoreFiles</a></span>(org.apache.hadoop.fs.Path&nbsp;storeDir)</code>&nbsp;</td>
 </tr>
-<tr id="i18" class="altColor">
+<tr id="i21" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#getTableDescriptor--">getTableDescriptor</a></span>()</code>
 <div class="block">Get the table descriptor from the Snapshot</div>
 </td>
 </tr>
-<tr id="i19" class="rowColor">
+<tr id="i22" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#load--">load</a></span>()</code>
 <div class="block">Load the information in the SnapshotManifest.</div>
 </td>
 </tr>
-<tr id="i20" class="altColor">
+<tr id="i23" class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.html" title="class in org.apache.hadoop.hbase.snapshot">SnapshotManifest</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#open-org.apache.hadoop.conf.Configuration-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription-">open</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
     org.apache.hadoop.fs.FileSystem&nbsp;fs,
@@ -357,11 +373,11 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <div class="block">Return a SnapshotManifest instance with the information already loaded in-memory.</div>
 </td>
 </tr>
-<tr id="i21" class="rowColor">
+<tr id="i24" class="altColor">
 <td class="colFirst"><code>private org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDataManifest</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#readDataManifest--">readDataManifest</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i22" class="altColor">
+<tr id="i25" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#writeDataManifest-org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDataManifest-">writeDataManifest</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDataManifest&nbsp;manifest)</code>&nbsp;</td>
 </tr>
@@ -393,7 +409,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.70">LOG</a></pre>
+<pre>private static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.71">LOG</a></pre>
 </li>
 </ul>
 <a name="SNAPSHOT_MANIFEST_SIZE_LIMIT_CONF_KEY">
@@ -402,7 +418,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>SNAPSHOT_MANIFEST_SIZE_LIMIT_CONF_KEY</h4>
-<pre>public static final&nbsp;<a href="http://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="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.72">SNAPSHOT_MANIFEST_SIZE_LIMIT_CONF_KEY</a></pre>
+<pre>public static final&nbsp;<a href="http://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="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.73">SNAPSHOT_MANIFEST_SIZE_LIMIT_CONF_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.snapshot.SnapshotManifest.SNAPSHOT_MANIFEST_SIZE_LIMIT_CONF_KEY">Constant Field Values</a></dd>
@@ -415,7 +431,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>DATA_MANIFEST_NAME</h4>
-<pre>public static final&nbsp;<a href="http://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="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.74">DATA_MANIFEST_NAME</a></pre>
+<pre>public static final&nbsp;<a href="http://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="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.75">DATA_MANIFEST_NAME</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.snapshot.SnapshotManifest.DATA_MANIFEST_NAME">Constant Field Values</a></dd>
@@ -428,7 +444,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>regionManifests</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.76">regionManifests</a></pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.77">regionManifests</a></pre>
 </li>
 </ul>
 <a name="desc">
@@ -437,7 +453,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>desc</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.77">desc</a></pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.78">desc</a></pre>
 </li>
 </ul>
 <a name="htd">
@@ -446,7 +462,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>htd</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.78">htd</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.79">htd</a></pre>
 </li>
 </ul>
 <a name="monitor">
@@ -455,7 +471,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>monitor</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/errorhandling/ForeignExceptionSnare.html" title="interface in org.apache.hadoop.hbase.errorhandling">ForeignExceptionSnare</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.80">monitor</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/errorhandling/ForeignExceptionSnare.html" title="interface in org.apache.hadoop.hbase.errorhandling">ForeignExceptionSnare</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.81">monitor</a></pre>
 </li>
 </ul>
 <a name="conf">
@@ -464,7 +480,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>conf</h4>
-<pre>private final&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.81">conf</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.82">conf</a></pre>
 </li>
 </ul>
 <a name="workingDir">
@@ -473,7 +489,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>workingDir</h4>
-<pre>private final&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.82">workingDir</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.83">workingDir</a></pre>
 </li>
 </ul>
 <a name="fs">
@@ -482,7 +498,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <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/snapshot/SnapshotManifest.html#line.83">fs</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.84">fs</a></pre>
 </li>
 </ul>
 <a name="manifestSizeLimit">
@@ -491,7 +507,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>manifestSizeLimit</h4>
-<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.84">manifestSizeLimit</a></pre>
+<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.85">manifestSizeLimit</a></pre>
 </li>
 </ul>
 </li>
@@ -508,7 +524,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>SnapshotManifest</h4>
-<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.86">SnapshotManifest</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.87">SnapshotManifest</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                          org.apache.hadoop.fs.FileSystem&nbsp;fs,
                          org.apache.hadoop.fs.Path&nbsp;workingDir,
                          org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription&nbsp;desc,
@@ -529,7 +545,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>create</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.html" title="class in org.apache.hadoop.hbase.snapshot">SnapshotManifest</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.111">create</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.html" title="class in org.apache.hadoop.hbase.snapshot">SnapshotManifest</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.112">create</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                       org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                       org.apache.hadoop.fs.Path&nbsp;workingDir,
                                       org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription&nbsp;desc,
@@ -553,7 +569,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>open</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.html" title="class in org.apache.hadoop.hbase.snapshot">SnapshotManifest</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.126">open</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.html" title="class in org.apache.hadoop.hbase.snapshot">SnapshotManifest</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.128">open</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                     org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                     org.apache.hadoop.fs.Path&nbsp;workingDir,
                                     org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription&nbsp;desc)
@@ -577,7 +593,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>addTableDescriptor</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.137">addTableDescriptor</a>(<a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;htd)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.139">addTableDescriptor</a>(<a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;htd)
                         throws <a href="http://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">Add the table descriptor to the snapshot manifest</div>
 <dl>
@@ -592,7 +608,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>createRegionVisitor</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html" title="interface in org.apache.hadoop.hbase.snapshot">SnapshotManifest.RegionVisitor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.152">createRegionVisitor</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription&nbsp;desc)
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html" title="interface in org.apache.hadoop.hbase.snapshot">SnapshotManifest.RegionVisitor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.154">createRegionVisitor</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription&nbsp;desc)
                                                     throws <a href="http://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>
@@ -606,7 +622,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>addMobRegion</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.164">addMobRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;regionInfo)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.166">addMobRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;regionInfo)
                   throws <a href="http://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>
@@ -614,13 +630,28 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 </dl>
 </li>
 </ul>
+<a name="addMobRegion-org.apache.hadoop.hbase.HRegionInfo-org.apache.hadoop.hbase.snapshot.SnapshotManifest.RegionVisitor-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>addMobRegion</h4>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.175">addMobRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;regionInfo,
+                            <a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html" title="interface in org.apache.hadoop.hbase.snapshot">SnapshotManifest.RegionVisitor</a>&nbsp;visitor)
+                     throws <a href="http://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="http://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="addRegion-org.apache.hadoop.hbase.regionserver.HRegion-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>addRegion</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.205">addRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.213">addRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)
                throws <a href="http://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">Creates a 'manifest' for the specified region, by reading directly from the HRegion object.
  This is used by the "online snapshot" when the table is enabled.</div>
@@ -630,13 +661,28 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 </dl>
 </li>
 </ul>
+<a name="addRegion-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.snapshot.SnapshotManifest.RegionVisitor-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>addRegion</h4>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.222">addRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
+                         <a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html" title="interface in org.apache.hadoop.hbase.snapshot">SnapshotManifest.RegionVisitor</a>&nbsp;visitor)
+                  throws <a href="http://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="http://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="addRegion-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.HRegionInfo-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>addRegion</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.245">addRegion</a>(org.apache.hadoop.fs.Path&nbsp;tableDir,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.260">addRegion</a>(org.apache.hadoop.fs.Path&nbsp;tableDir,
                       <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;regionInfo)
                throws <a href="http://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">Creates a 'manifest' for the specified region, by reading directly from the disk.
@@ -647,13 +693,29 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 </dl>
 </li>
 </ul>
+<a name="addRegion-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.HRegionInfo-org.apache.hadoop.hbase.snapshot.SnapshotManifest.RegionVisitor-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>addRegion</h4>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.269">addRegion</a>(org.apache.hadoop.fs.Path&nbsp;tableDir,
+                         <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;regionInfo,
+                         <a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html" title="interface in org.apache.hadoop.hbase.snapshot">SnapshotManifest.RegionVisitor</a>&nbsp;visitor)
+                  throws <a href="http://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="http://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="getStoreFiles-org.apache.hadoop.fs.Path-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>getStoreFiles</h4>
-<pre>private&nbsp;<a href="http://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="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.303">getStoreFiles</a>(org.apache.hadoop.fs.Path&nbsp;storeDir)
+<pre>private&nbsp;<a href="http://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="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.325">getStoreFiles</a>(org.apache.hadoop.fs.Path&nbsp;storeDir)
                                    throws <a href="http://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>
@@ -667,7 +729,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>addReferenceFiles</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.314">addReferenceFiles</a>(<a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html" title="interface in org.apache.hadoop.hbase.snapshot">SnapshotManifest.RegionVisitor</a>&nbsp;visitor,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.336">addReferenceFiles</a>(<a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html" title="interface in org.apache.hadoop.hbase.snapshot">SnapshotManifest.RegionVisitor</a>&nbsp;visitor,
                                <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;regionData,
                                <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;familyData,
                                <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileInfo</a>&gt;&nbsp;storeFiles,
@@ -685,7 +747,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>load</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.342">load</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.364">load</a>()
            throws <a href="http://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">Load the information in the SnapshotManifest. Called by SnapshotManifest.open()
 
@@ -704,7 +766,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getSnapshotDir</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.396">getSnapshotDir</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.418">getSnapshotDir</a>()</pre>
 <div class="block">Get the current snapshot working dir</div>
 </li>
 </ul>
@@ -714,7 +776,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getSnapshotDescription</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.403">getSnapshotDescription</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.425">getSnapshotDescription</a>()</pre>
 <div class="block">Get the SnapshotDescription</div>
 </li>
 </ul>
@@ -724,7 +786,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableDescriptor</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.410">getTableDescriptor</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.432">getTableDescriptor</a>()</pre>
 <div class="block">Get the table descriptor from the Snapshot</div>
 </li>
 </ul>
@@ -734,7 +796,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionManifests</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.417">getRegionManifests</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.439">getRegionManifests</a>()</pre>
 <div class="block">Get all the Region Manifest from the snapshot</div>
 </li>
 </ul>
@@ -744,7 +806,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionManifestsMap</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.425">getRegionManifestsMap</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.447">getRegionManifestsMap</a>()</pre>
 <div class="block">Get all the Region Manifest from the snapshot.
  This is an helper to get a map with the region encoded name</div>
 </li>
@@ -755,7 +817,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>consolidate</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.436">consolidate</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.458">consolidate</a>()
                  throws <a href="http://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>
@@ -769,7 +831,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>convertToV2SingleManifest</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.453">convertToV2SingleManifest</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.475">convertToV2SingleManifest</a>()
                                 throws <a href="http://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>
@@ -783,7 +845,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>writeDataManifest</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.503">writeDataManifest</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDataManifest&nbsp;manifest)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.525">writeDataManifest</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDataManifest&nbsp;manifest)
                         throws <a href="http://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>
@@ -797,7 +859,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>readDataManifest</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDataManifest&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.516">readDataManifest</a>()
+<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDataManifest&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.538">readDataManifest</a>()
                                                                                                         throws <a href="http://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>
@@ -811,7 +873,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>createExecutor</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ThreadPoolExecutor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.532">createExecutor</a>(<a href="http://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)</pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ThreadPoolExecutor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.554">createExecutor</a>(<a href="http://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)</pre>
 </li>
 </ul>
 <a name="createExecutor-org.apache.hadoop.conf.Configuration-java.lang.String-">
@@ -820,7 +882,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>createExecutor</h4>
-<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ThreadPoolExecutor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.536">createExecutor</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ThreadPoolExecutor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.558">createExecutor</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                                 <a href="http://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)</pre>
 </li>
 </ul>
@@ -830,7 +892,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionNameFromManifest</h4>
-<pre>static&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.545">getRegionNameFromManifest</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest&nbsp;manifest)</pre>
+<pre>static&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.567">getRegionNameFromManifest</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest&nbsp;manifest)</pre>
 <div class="block">Extract the region encoded name from the region manifest</div>
 </li>
 </ul>
@@ -840,7 +902,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getSnapshotFormat</h4>
-<pre>private static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.556">getSnapshotFormat</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription&nbsp;desc)</pre>
+<pre>private static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.578">getSnapshotFormat</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription&nbsp;desc)</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/org/apache/hadoop/hbase/snapshot/class-use/SnapshotManifest.RegionVisitor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/snapshot/class-use/SnapshotManifest.RegionVisitor.html b/devapidocs/org/apache/hadoop/hbase/snapshot/class-use/SnapshotManifest.RegionVisitor.html
index 66acf5a..e303a5d 100644
--- a/devapidocs/org/apache/hadoop/hbase/snapshot/class-use/SnapshotManifest.RegionVisitor.html
+++ b/devapidocs/org/apache/hadoop/hbase/snapshot/class-use/SnapshotManifest.RegionVisitor.html
@@ -133,6 +133,11 @@
 </tr>
 <tbody>
 <tr class="altColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><span class="typeNameLabel">SnapshotManifest.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#addMobRegion-org.apache.hadoop.hbase.HRegionInfo-org.apache.hadoop.hbase.snapshot.SnapshotManifest.RegionVisitor-">addMobRegion</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;regionInfo,
+            <a href="../../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html" title="interface in org.apache.hadoop.hbase.snapshot">SnapshotManifest.RegionVisitor</a>&nbsp;visitor)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="typeNameLabel">SnapshotManifest.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#addReferenceFiles-org.apache.hadoop.hbase.snapshot.SnapshotManifest.RegionVisitor-java.lang.Object-java.lang.Object-java.util.Collection-boolean-">addReferenceFiles</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html" title="interface in org.apache.hadoop.hbase.snapshot">SnapshotManifest.RegionVisitor</a>&nbsp;visitor,
                  <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;regionData,
@@ -140,6 +145,17 @@
                  <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileInfo</a>&gt;&nbsp;storeFiles,
                  boolean&nbsp;isMob)</code>&nbsp;</td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><span class="typeNameLabel">SnapshotManifest.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#addRegion-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.snapshot.SnapshotManifest.RegionVisitor-">addRegion</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
+         <a href="../../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html" title="interface in org.apache.hadoop.hbase.snapshot">SnapshotManifest.RegionVisitor</a>&nbsp;visitor)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><span class="typeNameLabel">SnapshotManifest.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#addRegion-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.HRegionInfo-org.apache.hadoop.hbase.snapshot.SnapshotManifest.RegionVisitor-">addRegion</a></span>(org.apache.hadoop.fs.Path&nbsp;tableDir,
+         <a href="../../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;regionInfo,
+         <a href="../../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html" title="interface in org.apache.hadoop.hbase.snapshot">SnapshotManifest.RegionVisitor</a>&nbsp;visitor)</code>&nbsp;</td>
+</tr>
 </tbody>
 </table>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
index cd08056..570c4fa 100644
--- a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
@@ -198,9 +198,9 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ThriftMetrics.ThriftServerType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ThriftMetrics.ThriftServerType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ThriftServerRunner.ImplType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ThriftServerRunner.ImplType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/MetricsThriftServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">MetricsThriftServerSourceFactoryImpl.FactoryStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ThriftMetrics.ThriftServerType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ThriftMetrics.ThriftServerType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
index 09599e9..f5b4052 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
@@ -522,14 +522,14 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/IdReadWriteLock.ReferenceType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">IdReadWriteLock.ReferenceType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">HBaseFsck.ErrorReporter.ERROR_CODE</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.PureJavaComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.PureJavaComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">ChecksumType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PoolMap.PoolType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PoolMap.PoolType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Order.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Order</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/IdReadWriteLock.ReferenceType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">IdReadWriteLock.ReferenceType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.UnsafeComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.UnsafeComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PoolMap.PoolType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PoolMap.PoolType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">ChecksumType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.PureJavaComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.PureJavaComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PrettyPrinter.Unit.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PrettyPrinter.Unit</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">HBaseFsck.ErrorReporter.ERROR_CODE</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
index ff52dab..7e38ea3 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
@@ -16,11 +16,11 @@
 <span class="sourceLineNo">008</span>@InterfaceAudience.Private<a name="line.8"></a>
 <span class="sourceLineNo">009</span>public class Version {<a name="line.9"></a>
 <span class="sourceLineNo">010</span>  public static final String version = "3.0.0-SNAPSHOT";<a name="line.10"></a>
-<span class="sourceLineNo">011</span>  public static final String revision = "624652373e6fb11a7aee0ce8bcfb7a394ed89dcb";<a name="line.11"></a>
+<span class="sourceLineNo">011</span>  public static final String revision = "6114824b53c1299d2d79572800fb1e1cbc96cb66";<a name="line.11"></a>
 <span class="sourceLineNo">012</span>  public static final String user = "jenkins";<a name="line.12"></a>
-<span class="sourceLineNo">013</span>  public static final String date = "Thu Aug 10 14:40:12 UTC 2017";<a name="line.13"></a>
+<span class="sourceLineNo">013</span>  public static final String date = "Thu Aug 10 22:04:05 UTC 2017";<a name="line.13"></a>
 <span class="sourceLineNo">014</span>  public static final String url = "git://asf920.gq1.ygridcore.net/home/jenkins/jenkins-slave/workspace/hbase_generate_website/hbase";<a name="line.14"></a>
-<span class="sourceLineNo">015</span>  public static final String srcChecksum = "e53f3223b937b85695ec877f367c9fc2";<a name="line.15"></a>
+<span class="sourceLineNo">015</span>  public static final String srcChecksum = "9e3fa0f1ca1a122ae35a8e67fc4f67ef";<a name="line.15"></a>
 <span class="sourceLineNo">016</span>}<a name="line.16"></a>
 
 


[32/33] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/apache_hbase_reference_guide.pdf
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index 2ba9414..2d6b225 100644
--- a/apache_hbase_reference_guide.pdf
+++ b/apache_hbase_reference_guide.pdf
@@ -5,16 +5,16 @@
 /Author (Apache HBase Team)
 /Creator (Asciidoctor PDF 1.5.0.alpha.15, based on Prawn 2.2.2)
 /Producer (Apache HBase Team)
-/ModDate (D:20170810144502+00'00')
-/CreationDate (D:20170810144502+00'00')
+/ModDate (D:20170810220854+00'00')
+/CreationDate (D:20170810220854+00'00')
 >>
 endobj
 2 0 obj
 << /Type /Catalog
 /Pages 3 0 R
 /Names 26 0 R
-/Outlines 4309 0 R
-/PageLabels 4517 0 R
+/Outlines 4310 0 R
+/PageLabels 4518 0 R
 /PageMode /UseOutlines
 /OpenAction [7 0 R /FitH 842.89]
 /ViewerPreferences << /DisplayDocTitle true
@@ -24,7 +24,7 @@ endobj
 3 0 obj
 << /Type /Pages
 /Count 662
-/Kids [7 0 R 12 0 R 14 0 R 16 0 R 18 0 R 20 0 R 22 0 R 24 0 R 44 0 R 47 0 R 50 0 R 54 0 R 63 0 R 66 0 R 69 0 R 71 0 R 76 0 R 80 0 R 83 0 R 89 0 R 91 0 R 94 0 R 96 0 R 103 0 R 109 0 R 114 0 R 116 0 R 130 0 R 133 0 R 142 0 R 150 0 R 160 0 R 169 0 R 180 0 R 184 0 R 186 0 R 190 0 R 201 0 R 208 0 R 217 0 R 225 0 R 231 0 R 239 0 R 248 0 R 261 0 R 270 0 R 277 0 R 286 0 R 295 0 R 302 0 R 309 0 R 317 0 R 323 0 R 331 0 R 338 0 R 347 0 R 356 0 R 367 0 R 378 0 R 386 0 R 393 0 R 401 0 R 408 0 R 416 0 R 425 0 R 434 0 R 441 0 R 449 0 R 462 0 R 469 0 R 477 0 R 484 0 R 493 0 R 501 0 R 508 0 R 513 0 R 518 0 R 523 0 R 539 0 R 549 0 R 554 0 R 568 0 R 574 0 R 579 0 R 581 0 R 583 0 R 588 0 R 596 0 R 602 0 R 607 0 R 613 0 R 624 0 R 637 0 R 656 0 R 671 0 R 682 0 R 684 0 R 686 0 R 694 0 R 706 0 R 715 0 R 725 0 R 731 0 R 734 0 R 738 0 R 743 0 R 746 0 R 749 0 R 751 0 R 754 0 R 758 0 R 760 0 R 765 0 R 769 0 R 774 0 R 779 0 R 782 0 R 788 0 R 790 0 R 794 0 R 803 0 R 805 0 R 808 0 R 811 0 R 814 0 R 817 0 R 831 0 
 R 838 0 R 847 0 R 858 0 R 864 0 R 876 0 R 880 0 R 883 0 R 887 0 R 890 0 R 895 0 R 904 0 R 912 0 R 916 0 R 920 0 R 925 0 R 929 0 R 931 0 R 946 0 R 957 0 R 963 0 R 969 0 R 972 0 R 980 0 R 988 0 R 992 0 R 998 0 R 1003 0 R 1005 0 R 1007 0 R 1009 0 R 1020 0 R 1028 0 R 1032 0 R 1039 0 R 1047 0 R 1055 0 R 1059 0 R 1065 0 R 1070 0 R 1078 0 R 1083 0 R 1088 0 R 1090 0 R 1096 0 R 1102 0 R 1104 0 R 1111 0 R 1121 0 R 1125 0 R 1127 0 R 1131 0 R 1134 0 R 1139 0 R 1142 0 R 1154 0 R 1158 0 R 1164 0 R 1171 0 R 1176 0 R 1180 0 R 1184 0 R 1186 0 R 1189 0 R 1192 0 R 1195 0 R 1199 0 R 1203 0 R 1207 0 R 1212 0 R 1216 0 R 1219 0 R 1221 0 R 1233 0 R 1236 0 R 1244 0 R 1253 0 R 1259 0 R 1263 0 R 1265 0 R 1275 0 R 1278 0 R 1284 0 R 1292 0 R 1295 0 R 1302 0 R 1311 0 R 1313 0 R 1315 0 R 1325 0 R 1327 0 R 1329 0 R 1332 0 R 1334 0 R 1336 0 R 1338 0 R 1340 0 R 1343 0 R 1347 0 R 1352 0 R 1354 0 R 1356 0 R 1358 0 R 1363 0 R 1370 0 R 1375 0 R 1378 0 R 1380 0 R 1383 0 R 1387 0 R 1389 0 R 1392 0 R 1394 0 R 1396 0 R 1399
  0 R 1404 0 R 1409 0 R 1417 0 R 1422 0 R 1436 0 R 1448 0 R 1451 0 R 1455 0 R 1469 0 R 1478 0 R 1492 0 R 1498 0 R 1506 0 R 1520 0 R 1534 0 R 1546 0 R 1551 0 R 1558 0 R 1569 0 R 1575 0 R 1581 0 R 1589 0 R 1592 0 R 1601 0 R 1608 0 R 1612 0 R 1625 0 R 1627 0 R 1633 0 R 1639 0 R 1642 0 R 1650 0 R 1659 0 R 1663 0 R 1665 0 R 1667 0 R 1680 0 R 1686 0 R 1694 0 R 1701 0 R 1715 0 R 1720 0 R 1729 0 R 1737 0 R 1743 0 R 1750 0 R 1754 0 R 1757 0 R 1759 0 R 1765 0 R 1771 0 R 1777 0 R 1781 0 R 1789 0 R 1794 0 R 1800 0 R 1805 0 R 1807 0 R 1816 0 R 1823 0 R 1829 0 R 1834 0 R 1838 0 R 1841 0 R 1846 0 R 1851 0 R 1858 0 R 1860 0 R 1862 0 R 1865 0 R 1873 0 R 1876 0 R 1883 0 R 1893 0 R 1896 0 R 1901 0 R 1903 0 R 1908 0 R 1911 0 R 1913 0 R 1918 0 R 1928 0 R 1930 0 R 1932 0 R 1934 0 R 1936 0 R 1939 0 R 1941 0 R 1943 0 R 1946 0 R 1948 0 R 1950 0 R 1954 0 R 1958 0 R 1967 0 R 1969 0 R 1971 0 R 1977 0 R 1979 0 R 1984 0 R 1986 0 R 1988 0 R 1995 0 R 2000 0 R 2004 0 R 2008 0 R 2012 0 R 2014 0 R 2016 0 R 2020 0 R 20
 23 0 R 2025 0 R 2027 0 R 2031 0 R 2033 0 R 2036 0 R 2038 0 R 2040 0 R 2042 0 R 2049 0 R 2052 0 R 2057 0 R 2059 0 R 2061 0 R 2063 0 R 2065 0 R 2073 0 R 2084 0 R 2098 0 R 2109 0 R 2113 0 R 2118 0 R 2122 0 R 2125 0 R 2130 0 R 2136 0 R 2138 0 R 2142 0 R 2144 0 R 2146 0 R 2148 0 R 2152 0 R 2154 0 R 2167 0 R 2170 0 R 2178 0 R 2184 0 R 2196 0 R 2210 0 R 2224 0 R 2241 0 R 2245 0 R 2247 0 R 2251 0 R 2269 0 R 2275 0 R 2287 0 R 2291 0 R 2295 0 R 2304 0 R 2316 0 R 2322 0 R 2332 0 R 2345 0 R 2364 0 R 2373 0 R 2376 0 R 2385 0 R 2403 0 R 2410 0 R 2413 0 R 2418 0 R 2422 0 R 2425 0 R 2434 0 R 2443 0 R 2446 0 R 2448 0 R 2452 0 R 2467 0 R 2475 0 R 2480 0 R 2484 0 R 2488 0 R 2490 0 R 2492 0 R 2494 0 R 2499 0 R 2512 0 R 2522 0 R 2531 0 R 2540 0 R 2546 0 R 2557 0 R 2564 0 R 2570 0 R 2572 0 R 2582 0 R 2590 0 R 2600 0 R 2604 0 R 2615 0 R 2619 0 R 2629 0 R 2637 0 R 2645 0 R 2651 0 R 2655 0 R 2659 0 R 2663 0 R 2665 0 R 2671 0 R 2675 0 R 2679 0 R 2685 0 R 2691 0 R 2694 0 R 2700 0 R 2704 0 R 2713 0 R 2718 0 R 
 2723 0 R 2732 0 R 2738 0 R 2746 0 R 2750 0 R 2754 0 R 2760 0 R 2764 0 R 2768 0 R 2778 0 R 2783 0 R 2785 0 R 2792 0 R 2797 0 R 2804 0 R 2811 0 R 2819 0 R 2824 0 R 2834 0 R 2839 0 R 2843 0 R 2851 0 R 2857 0 R 2861 0 R 2863 0 R 2874 0 R 2879 0 R 2882 0 R 2884 0 R 2886 0 R 2896 0 R 2903 0 R 2907 0 R 2910 0 R 2916 0 R 2919 0 R 2923 0 R 2926 0 R 2932 0 R 2937 0 R 2943 0 R 2947 0 R 2950 0 R 2953 0 R 2955 0 R 2959 0 R 2969 0 R 2971 0 R 2975 0 R 2978 0 R 2983 0 R 2986 0 R 2990 0 R 2992 0 R 3005 0 R 3010 0 R 3015 0 R 3022 0 R 3030 0 R 3032 0 R 3040 0 R 3058 0 R 3070 0 R 3076 0 R 3092 0 R 3095 0 R 3100 0 R 3102 0 R 3109 0 R 3112 0 R 3128 0 R 3131 0 R 3136 0 R 3142 0 R 3151 0 R 3156 0 R 3167 0 R 3178 0 R 3185 0 R 3193 0 R 3198 0 R 3201 0 R 3206 0 R 3208 0 R 3214 0 R 3218 0 R 3226 0 R 3232 0 R 3237 0 R 3246 0 R 3254 0 R 3261 0 R 3273 0 R 3277 0 R 3284 0 R 3290 0 R 3293 0 R 3295 0 R 3301 0 R 3308 0 R 3310 0 R 3317 0 R 3319 0 R 3327 0 R 3334 0 R 3340 0 R 3348 0 R 3358 0 R 3365 0 R 3375 0 R 3382 0 
 R 3396 0 R 3403 0 R 3405 0 R 3410 0 R 3426 0 R 3432 0 R 3436 0 R 3439 0 R 3444 0 R 3446 0 R 3450 0 R 3452 0 R 3456 0 R 3459 0 R 3462 0 R 3470 0 R 3472 0 R 3476 0 R 3479 0 R 3488 0 R 3494 0 R 3498 0 R 3501 0 R 3503 0 R 3508 0 R 3513 0 R 3518 0 R 3521 0 R 3534 0 R 3539 0 R 3543 0 R 3547 0 R 3555 0 R 3559 0 R 3566 0 R 3571 0 R 3573 0 R 3579 0 R 3581 0 R 3586 0 R 3590 0 R 3595 0 R 3599 0 R 3611 0 R 3627 0 R 3642 0 R 3647 0 R 3650 0 R 3653 0 R 3659 0 R 3664 0 R 3666 0 R 3668 0 R 3670 0 R 3672 0 R 3674 0 R 3684 0 R 3688 0 R 3693 0 R 3698 0 R 3700 0 R 3707 0 R 3717 0 R 3724 0 R 3727 0 R 3729 0 R 3732 0 R 3739 0 R 3746 0 R 3756 0 R 3760 0 R 3763 0 R 3767 0 R 3770 0 R 3775 0 R 3778 0 R 3794 0 R 3798 0 R 3826 0 R 3830 0 R 3838 0 R 3849 0 R 3858 0 R 3860 0 R 3863 0 R 3866 0 R 3881 0 R 3886 0 R 3893 0 R]
+/Kids [7 0 R 12 0 R 14 0 R 16 0 R 18 0 R 20 0 R 22 0 R 24 0 R 44 0 R 47 0 R 50 0 R 54 0 R 63 0 R 66 0 R 69 0 R 71 0 R 76 0 R 80 0 R 83 0 R 89 0 R 91 0 R 94 0 R 96 0 R 103 0 R 109 0 R 114 0 R 116 0 R 130 0 R 133 0 R 142 0 R 150 0 R 160 0 R 169 0 R 180 0 R 184 0 R 186 0 R 190 0 R 201 0 R 208 0 R 217 0 R 225 0 R 231 0 R 239 0 R 248 0 R 261 0 R 270 0 R 277 0 R 286 0 R 295 0 R 302 0 R 309 0 R 317 0 R 323 0 R 331 0 R 338 0 R 347 0 R 356 0 R 367 0 R 378 0 R 386 0 R 393 0 R 401 0 R 408 0 R 416 0 R 425 0 R 434 0 R 441 0 R 449 0 R 462 0 R 469 0 R 477 0 R 484 0 R 493 0 R 501 0 R 508 0 R 513 0 R 518 0 R 523 0 R 539 0 R 549 0 R 554 0 R 568 0 R 574 0 R 579 0 R 581 0 R 583 0 R 588 0 R 596 0 R 602 0 R 607 0 R 613 0 R 624 0 R 637 0 R 656 0 R 671 0 R 682 0 R 684 0 R 686 0 R 694 0 R 706 0 R 715 0 R 725 0 R 731 0 R 734 0 R 738 0 R 743 0 R 746 0 R 749 0 R 751 0 R 754 0 R 758 0 R 760 0 R 765 0 R 769 0 R 774 0 R 779 0 R 782 0 R 788 0 R 790 0 R 794 0 R 803 0 R 805 0 R 808 0 R 811 0 R 814 0 R 817 0 R 831 0 
 R 838 0 R 847 0 R 858 0 R 864 0 R 876 0 R 880 0 R 883 0 R 887 0 R 890 0 R 895 0 R 904 0 R 912 0 R 916 0 R 920 0 R 925 0 R 929 0 R 931 0 R 946 0 R 957 0 R 963 0 R 969 0 R 972 0 R 980 0 R 988 0 R 992 0 R 998 0 R 1003 0 R 1005 0 R 1007 0 R 1009 0 R 1020 0 R 1028 0 R 1032 0 R 1039 0 R 1047 0 R 1055 0 R 1059 0 R 1065 0 R 1070 0 R 1078 0 R 1083 0 R 1088 0 R 1090 0 R 1096 0 R 1102 0 R 1104 0 R 1111 0 R 1121 0 R 1125 0 R 1127 0 R 1131 0 R 1134 0 R 1139 0 R 1142 0 R 1154 0 R 1158 0 R 1164 0 R 1171 0 R 1176 0 R 1180 0 R 1184 0 R 1186 0 R 1189 0 R 1192 0 R 1195 0 R 1199 0 R 1203 0 R 1207 0 R 1212 0 R 1216 0 R 1219 0 R 1221 0 R 1233 0 R 1236 0 R 1244 0 R 1253 0 R 1259 0 R 1263 0 R 1265 0 R 1275 0 R 1278 0 R 1284 0 R 1292 0 R 1295 0 R 1302 0 R 1311 0 R 1313 0 R 1315 0 R 1325 0 R 1327 0 R 1329 0 R 1332 0 R 1334 0 R 1336 0 R 1338 0 R 1340 0 R 1343 0 R 1347 0 R 1352 0 R 1354 0 R 1356 0 R 1358 0 R 1363 0 R 1370 0 R 1375 0 R 1378 0 R 1380 0 R 1383 0 R 1387 0 R 1389 0 R 1392 0 R 1394 0 R 1396 0 R 1399
  0 R 1404 0 R 1409 0 R 1417 0 R 1422 0 R 1436 0 R 1448 0 R 1451 0 R 1455 0 R 1469 0 R 1478 0 R 1492 0 R 1498 0 R 1506 0 R 1520 0 R 1534 0 R 1546 0 R 1551 0 R 1558 0 R 1569 0 R 1575 0 R 1581 0 R 1589 0 R 1592 0 R 1601 0 R 1608 0 R 1612 0 R 1625 0 R 1627 0 R 1633 0 R 1639 0 R 1642 0 R 1650 0 R 1659 0 R 1663 0 R 1665 0 R 1667 0 R 1680 0 R 1686 0 R 1694 0 R 1701 0 R 1715 0 R 1720 0 R 1729 0 R 1737 0 R 1743 0 R 1750 0 R 1754 0 R 1757 0 R 1759 0 R 1765 0 R 1771 0 R 1777 0 R 1781 0 R 1789 0 R 1794 0 R 1800 0 R 1805 0 R 1807 0 R 1816 0 R 1823 0 R 1829 0 R 1834 0 R 1838 0 R 1841 0 R 1846 0 R 1851 0 R 1858 0 R 1860 0 R 1862 0 R 1865 0 R 1873 0 R 1876 0 R 1883 0 R 1893 0 R 1896 0 R 1901 0 R 1903 0 R 1908 0 R 1911 0 R 1913 0 R 1918 0 R 1928 0 R 1930 0 R 1932 0 R 1934 0 R 1936 0 R 1939 0 R 1941 0 R 1943 0 R 1946 0 R 1948 0 R 1950 0 R 1954 0 R 1958 0 R 1967 0 R 1969 0 R 1971 0 R 1977 0 R 1979 0 R 1984 0 R 1986 0 R 1988 0 R 1995 0 R 2000 0 R 2004 0 R 2008 0 R 2012 0 R 2014 0 R 2016 0 R 2020 0 R 20
 23 0 R 2025 0 R 2027 0 R 2031 0 R 2033 0 R 2036 0 R 2038 0 R 2040 0 R 2042 0 R 2049 0 R 2052 0 R 2057 0 R 2059 0 R 2061 0 R 2063 0 R 2065 0 R 2073 0 R 2084 0 R 2098 0 R 2109 0 R 2113 0 R 2118 0 R 2122 0 R 2125 0 R 2130 0 R 2136 0 R 2138 0 R 2142 0 R 2144 0 R 2146 0 R 2148 0 R 2152 0 R 2154 0 R 2167 0 R 2170 0 R 2178 0 R 2184 0 R 2196 0 R 2210 0 R 2224 0 R 2241 0 R 2245 0 R 2247 0 R 2251 0 R 2269 0 R 2275 0 R 2287 0 R 2291 0 R 2295 0 R 2304 0 R 2316 0 R 2322 0 R 2332 0 R 2345 0 R 2364 0 R 2373 0 R 2376 0 R 2385 0 R 2403 0 R 2410 0 R 2413 0 R 2418 0 R 2422 0 R 2425 0 R 2434 0 R 2443 0 R 2446 0 R 2448 0 R 2452 0 R 2467 0 R 2475 0 R 2480 0 R 2484 0 R 2488 0 R 2490 0 R 2492 0 R 2494 0 R 2499 0 R 2512 0 R 2522 0 R 2531 0 R 2540 0 R 2546 0 R 2557 0 R 2564 0 R 2570 0 R 2572 0 R 2582 0 R 2590 0 R 2600 0 R 2604 0 R 2615 0 R 2619 0 R 2629 0 R 2637 0 R 2645 0 R 2651 0 R 2655 0 R 2659 0 R 2663 0 R 2665 0 R 2671 0 R 2675 0 R 2679 0 R 2685 0 R 2691 0 R 2694 0 R 2700 0 R 2704 0 R 2713 0 R 2718 0 R 
 2723 0 R 2732 0 R 2738 0 R 2746 0 R 2750 0 R 2754 0 R 2760 0 R 2764 0 R 2768 0 R 2778 0 R 2783 0 R 2785 0 R 2792 0 R 2797 0 R 2804 0 R 2811 0 R 2819 0 R 2824 0 R 2834 0 R 2839 0 R 2843 0 R 2851 0 R 2857 0 R 2861 0 R 2863 0 R 2874 0 R 2879 0 R 2882 0 R 2884 0 R 2886 0 R 2896 0 R 2903 0 R 2907 0 R 2910 0 R 2916 0 R 2919 0 R 2923 0 R 2926 0 R 2932 0 R 2937 0 R 2943 0 R 2947 0 R 2950 0 R 2953 0 R 2955 0 R 2959 0 R 2969 0 R 2971 0 R 2975 0 R 2978 0 R 2983 0 R 2986 0 R 2990 0 R 2992 0 R 3005 0 R 3010 0 R 3015 0 R 3022 0 R 3030 0 R 3032 0 R 3040 0 R 3058 0 R 3070 0 R 3076 0 R 3092 0 R 3095 0 R 3100 0 R 3102 0 R 3109 0 R 3112 0 R 3128 0 R 3131 0 R 3136 0 R 3142 0 R 3151 0 R 3156 0 R 3167 0 R 3178 0 R 3185 0 R 3193 0 R 3198 0 R 3201 0 R 3206 0 R 3208 0 R 3214 0 R 3218 0 R 3226 0 R 3232 0 R 3237 0 R 3246 0 R 3254 0 R 3261 0 R 3273 0 R 3277 0 R 3284 0 R 3290 0 R 3293 0 R 3295 0 R 3301 0 R 3308 0 R 3310 0 R 3317 0 R 3319 0 R 3327 0 R 3334 0 R 3340 0 R 3348 0 R 3358 0 R 3365 0 R 3375 0 R 3382 0 
 R 3396 0 R 3403 0 R 3405 0 R 3410 0 R 3426 0 R 3432 0 R 3436 0 R 3439 0 R 3444 0 R 3446 0 R 3450 0 R 3452 0 R 3456 0 R 3459 0 R 3462 0 R 3470 0 R 3472 0 R 3476 0 R 3479 0 R 3488 0 R 3494 0 R 3498 0 R 3501 0 R 3503 0 R 3508 0 R 3513 0 R 3518 0 R 3521 0 R 3534 0 R 3539 0 R 3543 0 R 3547 0 R 3555 0 R 3559 0 R 3567 0 R 3572 0 R 3574 0 R 3580 0 R 3582 0 R 3587 0 R 3591 0 R 3596 0 R 3600 0 R 3612 0 R 3628 0 R 3643 0 R 3648 0 R 3651 0 R 3654 0 R 3660 0 R 3665 0 R 3667 0 R 3669 0 R 3671 0 R 3673 0 R 3675 0 R 3685 0 R 3689 0 R 3694 0 R 3699 0 R 3701 0 R 3708 0 R 3718 0 R 3725 0 R 3728 0 R 3730 0 R 3733 0 R 3740 0 R 3747 0 R 3757 0 R 3761 0 R 3764 0 R 3768 0 R 3771 0 R 3776 0 R 3779 0 R 3795 0 R 3799 0 R 3827 0 R 3831 0 R 3839 0 R 3850 0 R 3859 0 R 3861 0 R 3864 0 R 3867 0 R 3882 0 R 3887 0 R 3894 0 R]
 >>
 endobj
 4 0 obj
@@ -187,11 +187,11 @@ endobj
 << /Type /Font
 /BaseFont /71be00+NotoSerif
 /Subtype /TrueType
-/FontDescriptor 4519 0 R
+/FontDescriptor 4520 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4521 0 R
-/ToUnicode 4520 0 R
+/Widths 4522 0 R
+/ToUnicode 4521 0 R
 >>
 endobj
 11 0 obj
@@ -1750,7 +1750,7 @@ endobj
 /F1.0 10 0 R
 >>
 >>
-/Annots [3895 0 R 3896 0 R 3897 0 R 3898 0 R 3899 0 R 3900 0 R 3901 0 R 3902 0 R 3903 0 R 3904 0 R 3905 0 R 3906 0 R 3907 0 R 3908 0 R 3909 0 R 3910 0 R 3911 0 R 3912 0 R 3913 0 R 3914 0 R 3915 0 R 3916 0 R 3917 0 R 3918 0 R 3919 0 R 3920 0 R 3921 0 R 3922 0 R 3923 0 R 3924 0 R 3925 0 R 3926 0 R 3927 0 R 3928 0 R 3929 0 R 3930 0 R 3931 0 R 3932 0 R 3933 0 R 3934 0 R 3935 0 R 3936 0 R 3937 0 R 3938 0 R 3939 0 R 3940 0 R 3941 0 R 3942 0 R 3943 0 R 3944 0 R 3945 0 R 3946 0 R 3947 0 R 3948 0 R 3949 0 R 3950 0 R 3951 0 R 3952 0 R 3953 0 R 3954 0 R 3955 0 R 3956 0 R 3957 0 R 3958 0 R 3959 0 R 3960 0 R 3961 0 R 3962 0 R 3963 0 R 3964 0 R 3965 0 R 3966 0 R 3967 0 R 3968 0 R 3969 0 R 3970 0 R]
+/Annots [3896 0 R 3897 0 R 3898 0 R 3899 0 R 3900 0 R 3901 0 R 3902 0 R 3903 0 R 3904 0 R 3905 0 R 3906 0 R 3907 0 R 3908 0 R 3909 0 R 3910 0 R 3911 0 R 3912 0 R 3913 0 R 3914 0 R 3915 0 R 3916 0 R 3917 0 R 3918 0 R 3919 0 R 3920 0 R 3921 0 R 3922 0 R 3923 0 R 3924 0 R 3925 0 R 3926 0 R 3927 0 R 3928 0 R 3929 0 R 3930 0 R 3931 0 R 3932 0 R 3933 0 R 3934 0 R 3935 0 R 3936 0 R 3937 0 R 3938 0 R 3939 0 R 3940 0 R 3941 0 R 3942 0 R 3943 0 R 3944 0 R 3945 0 R 3946 0 R 3947 0 R 3948 0 R 3949 0 R 3950 0 R 3951 0 R 3952 0 R 3953 0 R 3954 0 R 3955 0 R 3956 0 R 3957 0 R 3958 0 R 3959 0 R 3960 0 R 3961 0 R 3962 0 R 3963 0 R 3964 0 R 3965 0 R 3966 0 R 3967 0 R 3968 0 R 3969 0 R 3970 0 R 3971 0 R]
 >>
 endobj
 13 0 obj
@@ -3417,7 +3417,7 @@ endobj
 /Font << /F1.0 10 0 R
 >>
 >>
-/Annots [3971 0 R 3972 0 R 3973 0 R 3974 0 R 3975 0 R 3976 0 R 3977 0 R 3978 0 R 3979 0 R 3980 0 R 3981 0 R 3982 0 R 3983 0 R 3984 0 R 3985 0 R 3986 0 R 3987 0 R 3988 0 R 3989 0 R 3990 0 R 3991 0 R 3992 0 R 3993 0 R 3994 0 R 3995 0 R 3996 0 R 3997 0 R 3998 0 R 3999 0 R 4000 0 R 4001 0 R 4002 0 R 4003 0 R 4004 0 R 4005 0 R 4006 0 R 4007 0 R 4008 0 R 4009 0 R 4010 0 R 4011 0 R 4012 0 R 4013 0 R 4014 0 R 4015 0 R 4016 0 R 4017 0 R 4018 0 R 4019 0 R 4020 0 R 4021 0 R 4022 0 R 4023 0 R 4024 0 R 4025 0 R 4026 0 R 4027 0 R 4028 0 R 4029 0 R 4030 0 R 4031 0 R 4032 0 R 4033 0 R 4034 0 R 4035 0 R 4036 0 R 4037 0 R 4038 0 R 4039 0 R 4040 0 R 4041 0 R 4042 0 R 4043 0 R 4044 0 R 4045 0 R 4046 0 R 4047 0 R 4048 0 R 4049 0 R 4050 0 R 4051 0 R 4052 0 R]
+/Annots [3972 0 R 3973 0 R 3974 0 R 3975 0 R 3976 0 R 3977 0 R 3978 0 R 3979 0 R 3980 0 R 3981 0 R 3982 0 R 3983 0 R 3984 0 R 3985 0 R 3986 0 R 3987 0 R 3988 0 R 3989 0 R 3990 0 R 3991 0 R 3992 0 R 3993 0 R 3994 0 R 3995 0 R 3996 0 R 3997 0 R 3998 0 R 3999 0 R 4000 0 R 4001 0 R 4002 0 R 4003 0 R 4004 0 R 4005 0 R 4006 0 R 4007 0 R 4008 0 R 4009 0 R 4010 0 R 4011 0 R 4012 0 R 4013 0 R 4014 0 R 4015 0 R 4016 0 R 4017 0 R 4018 0 R 4019 0 R 4020 0 R 4021 0 R 4022 0 R 4023 0 R 4024 0 R 4025 0 R 4026 0 R 4027 0 R 4028 0 R 4029 0 R 4030 0 R 4031 0 R 4032 0 R 4033 0 R 4034 0 R 4035 0 R 4036 0 R 4037 0 R 4038 0 R 4039 0 R 4040 0 R 4041 0 R 4042 0 R 4043 0 R 4044 0 R 4045 0 R 4046 0 R 4047 0 R 4048 0 R 4049 0 R 4050 0 R 4051 0 R 4052 0 R 4053 0 R]
 >>
 endobj
 15 0 obj
@@ -5084,7 +5084,7 @@ endobj
 /Font << /F1.0 10 0 R
 >>
 >>
-/Annots [4053 0 R 4054 0 R 4055 0 R 4056 0 R 4057 0 R 4058 0 R 4059 0 R 4060 0 R 4061 0 R 4062 0 R 4063 0 R 4064 0 R 4065 0 R 4066 0 R 4067 0 R 4068 0 R 4069 0 R 4070 0 R 4071 0 R 4072 0 R 4073 0 R 4074 0 R 4075 0 R 4076 0 R 4077 0 R 4078 0 R 4079 0 R 4080 0 R 4081 0 R 4082 0 R 4083 0 R 4084 0 R 4085 0 R 4086 0 R 4087 0 R 4088 0 R 4089 0 R 4090 0 R 4091 0 R 4092 0 R 4093 0 R 4094 0 R 4095 0 R 4096 0 R 4097 0 R 4098 0 R 4099 0 R 4100 0 R 4101 0 R 4102 0 R 4103 0 R 4104 0 R 4105 0 R 4106 0 R 4107 0 R 4108 0 R 4109 0 R 4110 0 R 4111 0 R 4112 0 R 4113 0 R 4114 0 R 4115 0 R 4116 0 R 4117 0 R 4118 0 R 4119 0 R 4120 0 R 4121 0 R 4122 0 R 4123 0 R 4124 0 R 4125 0 R 4126 0 R 4127 0 R 4128 0 R 4129 0 R 4130 0 R 4131 0 R 4132 0 R 4133 0 R 4134 0 R]
+/Annots [4054 0 R 4055 0 R 4056 0 R 4057 0 R 4058 0 R 4059 0 R 4060 0 R 4061 0 R 4062 0 R 4063 0 R 4064 0 R 4065 0 R 4066 0 R 4067 0 R 4068 0 R 4069 0 R 4070 0 R 4071 0 R 4072 0 R 4073 0 R 4074 0 R 4075 0 R 4076 0 R 4077 0 R 4078 0 R 4079 0 R 4080 0 R 4081 0 R 4082 0 R 4083 0 R 4084 0 R 4085 0 R 4086 0 R 4087 0 R 4088 0 R 4089 0 R 4090 0 R 4091 0 R 4092 0 R 4093 0 R 4094 0 R 4095 0 R 4096 0 R 4097 0 R 4098 0 R 4099 0 R 4100 0 R 4101 0 R 4102 0 R 4103 0 R 4104 0 R 4105 0 R 4106 0 R 4107 0 R 4108 0 R 4109 0 R 4110 0 R 4111 0 R 4112 0 R 4113 0 R 4114 0 R 4115 0 R 4116 0 R 4117 0 R 4118 0 R 4119 0 R 4120 0 R 4121 0 R 4122 0 R 4123 0 R 4124 0 R 4125 0 R 4126 0 R 4127 0 R 4128 0 R 4129 0 R 4130 0 R 4131 0 R 4132 0 R 4133 0 R 4134 0 R 4135 0 R]
 >>
 endobj
 17 0 obj
@@ -6751,7 +6751,7 @@ endobj
 /Font << /F1.0 10 0 R
 >>
 >>
-/Annots [4135 0 R 4136 0 R 4137 0 R 4138 0 R 4139 0 R 4140 0 R 4141 0 R 4142 0 R 4143 0 R 4144 0 R 4145 0 R 4146 0 R 4147 0 R 4148 0 R 4149 0 R 4150 0 R 4151 0 R 4152 0 R 4153 0 R 4154 0 R 4155 0 R 4156 0 R 4157 0 R 4158 0 R 4159 0 R 4160 0 R 4161 0 R 4162 0 R 4163 0 R 4164 0 R 4165 0 R 4166 0 R 4167 0 R 4168 0 R 4169 0 R 4170 0 R 4171 0 R 4172 0 R 4173 0 R 4174 0 R 4175 0 R 4176 0 R 4177 0 R 4178 0 R 4179 0 R 4180 0 R 4181 0 R 4182 0 R 4183 0 R 4184 0 R 4185 0 R 4186 0 R 4187 0 R 4188 0 R 4189 0 R 4190 0 R 4191 0 R 4192 0 R 4193 0 R 4194 0 R 4195 0 R 4196 0 R 4197 0 R 4198 0 R 4199 0 R 4200 0 R 4201 0 R 4202 0 R 4203 0 R 4204 0 R 4205 0 R 4206 0 R 4207 0 R 4208 0 R 4209 0 R 4210 0 R 4211 0 R 4212 0 R 4213 0 R 4214 0 R 4215 0 R 4216 0 R]
+/Annots [4136 0 R 4137 0 R 4138 0 R 4139 0 R 4140 0 R 4141 0 R 4142 0 R 4143 0 R 4144 0 R 4145 0 R 4146 0 R 4147 0 R 4148 0 R 4149 0 R 4150 0 R 4151 0 R 4152 0 R 4153 0 R 4154 0 R 4155 0 R 4156 0 R 4157 0 R 4158 0 R 4159 0 R 4160 0 R 4161 0 R 4162 0 R 4163 0 R 4164 0 R 4165 0 R 4166 0 R 4167 0 R 4168 0 R 4169 0 R 4170 0 R 4171 0 R 4172 0 R 4173 0 R 4174 0 R 4175 0 R 4176 0 R 4177 0 R 4178 0 R 4179 0 R 4180 0 R 4181 0 R 4182 0 R 4183 0 R 4184 0 R 4185 0 R 4186 0 R 4187 0 R 4188 0 R 4189 0 R 4190 0 R 4191 0 R 4192 0 R 4193 0 R 4194 0 R 4195 0 R 4196 0 R 4197 0 R 4198 0 R 4199 0 R 4200 0 R 4201 0 R 4202 0 R 4203 0 R 4204 0 R 4205 0 R 4206 0 R 4207 0 R 4208 0 R 4209 0 R 4210 0 R 4211 0 R 4212 0 R 4213 0 R 4214 0 R 4215 0 R 4216 0 R 4217 0 R]
 >>
 endobj
 19 0 obj
@@ -8429,7 +8429,7 @@ endobj
 /Font << /F1.0 10 0 R
 >>
 >>
-/Annots [4217 0 R 4218 0 R 4219 0 R 4220 0 R 4221 0 R 4222 0 R 4223 0 R 4224 0 R 4225 0 R 4226 0 R 4227 0 R 4228 0 R 4229 0 R 4230 0 R 4231 0 R 4232 0 R 4233 0 R 4234 0 R 4235 0 R 4236 0 R 4237 0 R 4238 0 R 4239 0 R 4240 0 R 4241 0 R 4242 0 R 4243 0 R 4244 0 R 4245 0 R 4246 0 R 4247 0 R 4248 0 R 4249 0 R 4250 0 R 4251 0 R 4252 0 R 4253 0 R 4254 0 R 4255 0 R 4256 0 R 4257 0 R 4258 0 R 4259 0 R 4260 0 R 4261 0 R 4262 0 R 4263 0 R 4264 0 R 4265 0 R 4266 0 R 4267 0 R 4268 0 R 4269 0 R 4270 0 R 4271 0 R 4272 0 R 4273 0 R 4274 0 R 4275 0 R 4276 0 R 4277 0 R 4278 0 R 4279 0 R 4280 0 R 4281 0 R 4282 0 R 4283 0 R 4284 0 R 4285 0 R 4286 0 R 4287 0 R 4288 0 R 4289 0 R 4290 0 R 4291 0 R 4292 0 R 4293 0 R 4294 0 R 4295 0 R 4296 0 R 4297 0 R 4298 0 R 4299 0 R 4300 0 R]
+/Annots [4218 0 R 4219 0 R 4220 0 R 4221 0 R 4222 0 R 4223 0 R 4224 0 R 4225 0 R 4226 0 R 4227 0 R 4228 0 R 4229 0 R 4230 0 R 4231 0 R 4232 0 R 4233 0 R 4234 0 R 4235 0 R 4236 0 R 4237 0 R 4238 0 R 4239 0 R 4240 0 R 4241 0 R 4242 0 R 4243 0 R 4244 0 R 4245 0 R 4246 0 R 4247 0 R 4248 0 R 4249 0 R 4250 0 R 4251 0 R 4252 0 R 4253 0 R 4254 0 R 4255 0 R 4256 0 R 4257 0 R 4258 0 R 4259 0 R 4260 0 R 4261 0 R 4262 0 R 4263 0 R 4264 0 R 4265 0 R 4266 0 R 4267 0 R 4268 0 R 4269 0 R 4270 0 R 4271 0 R 4272 0 R 4273 0 R 4274 0 R 4275 0 R 4276 0 R 4277 0 R 4278 0 R 4279 0 R 4280 0 R 4281 0 R 4282 0 R 4283 0 R 4284 0 R 4285 0 R 4286 0 R 4287 0 R 4288 0 R 4289 0 R 4290 0 R 4291 0 R 4292 0 R 4293 0 R 4294 0 R 4295 0 R 4296 0 R 4297 0 R 4298 0 R 4299 0 R 4300 0 R 4301 0 R]
 >>
 endobj
 21 0 obj
@@ -8576,7 +8576,7 @@ endobj
 /Font << /F1.0 10 0 R
 >>
 >>
-/Annots [4301 0 R 4302 0 R 4303 0 R 4304 0 R 4305 0 R 4306 0 R]
+/Annots [4302 0 R 4303 0 R 4304 0 R 4305 0 R 4306 0 R 4307 0 R]
 >>
 endobj
 23 0 obj
@@ -9388,7 +9388,7 @@ endobj
 /F4.0 35 0 R
 /F1.1 38 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [30 0 R 31 0 R 32 0 R 34 0 R 36 0 R 37 0 R 39 0 R 40 0 R 41 0 R]
@@ -9403,7 +9403,7 @@ endobj
 >>
 endobj
 27 0 obj
-<< /Kids [640 0 R 1768 0 R 641 0 R 1228 0 R 3821 0 R 2219 0 R 3482 0 R]
+<< /Kids [640 0 R 1768 0 R 641 0 R 1228 0 R 3822 0 R 2219 0 R 3482 0 R]
 >>
 endobj
 28 0 obj
@@ -9413,11 +9413,11 @@ endobj
 << /Type /Font
 /BaseFont /358635+NotoSerif-Bold
 /Subtype /TrueType
-/FontDescriptor 4523 0 R
+/FontDescriptor 4524 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4525 0 R
-/ToUnicode 4524 0 R
+/Widths 4526 0 R
+/ToUnicode 4525 0 R
 >>
 endobj
 30 0 obj
@@ -9457,11 +9457,11 @@ endobj
 << /Type /Font
 /BaseFont /d195f1+NotoSerif-Italic
 /Subtype /TrueType
-/FontDescriptor 4527 0 R
+/FontDescriptor 4528 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4529 0 R
-/ToUnicode 4528 0 R
+/Widths 4530 0 R
+/ToUnicode 4529 0 R
 >>
 endobj
 34 0 obj
@@ -9479,11 +9479,11 @@ endobj
 << /Type /Font
 /BaseFont /c7d210+mplus1mn-regular
 /Subtype /TrueType
-/FontDescriptor 4531 0 R
+/FontDescriptor 4532 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4533 0 R
-/ToUnicode 4532 0 R
+/Widths 4534 0 R
+/ToUnicode 4533 0 R
 >>
 endobj
 36 0 obj
@@ -9509,11 +9509,11 @@ endobj
 << /Type /Font
 /BaseFont /34c70d+NotoSerif
 /Subtype /TrueType
-/FontDescriptor 4535 0 R
+/FontDescriptor 4536 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4537 0 R
-/ToUnicode 4536 0 R
+/Widths 4538 0 R
+/ToUnicode 4537 0 R
 >>
 endobj
 39 0 obj
@@ -9947,7 +9947,7 @@ endobj
 /F5.1 45 0 R
 /F2.0 29 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -9956,11 +9956,11 @@ endobj
 << /Type /Font
 /BaseFont /26ec65+FontAwesome
 /Subtype /TrueType
-/FontDescriptor 4539 0 R
+/FontDescriptor 4540 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4541 0 R
-/ToUnicode 4540 0 R
+/Widths 4542 0 R
+/ToUnicode 4541 0 R
 >>
 endobj
 46 0 obj
@@ -10018,7 +10018,7 @@ endobj
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -10103,7 +10103,7 @@ endobj
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [52 0 R]
@@ -11440,7 +11440,7 @@ endobj
 /F4.0 35 0 R
 /F5.1 45 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [57 0 R 59 0 R 61 0 R]
@@ -12782,7 +12782,7 @@ endobj
 /F3.0 33 0 R
 /F5.1 45 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [64 0 R]
@@ -13669,7 +13669,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -14462,7 +14462,7 @@ endobj
 /Font << /F4.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -15321,7 +15321,7 @@ endobj
 /F3.0 33 0 R
 /F2.0 29 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [73 0 R 74 0 R]
@@ -16325,7 +16325,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [77 0 R 78 0 R]
@@ -17180,7 +17180,7 @@ endobj
 /F5.1 45 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [81 0 R]
@@ -18622,7 +18622,7 @@ endobj
 /F2.0 29 0 R
 /F5.1 45 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [84 0 R 86 0 R]
@@ -19990,7 +19990,7 @@ endobj
 /F4.0 35 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -21372,7 +21372,7 @@ endobj
 /F4.0 35 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [92 0 R]
@@ -22065,7 +22065,7 @@ endobj
 /F1.0 10 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -22856,7 +22856,7 @@ endobj
 /F1.0 10 0 R
 /F2.0 29 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [97 0 R 98 0 R 99 0 R 101 0 R]
@@ -23085,7 +23085,7 @@ endobj
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [105 0 R 106 0 R 107 0 R]
@@ -23949,7 +23949,7 @@ endobj
 /F4.0 35 0 R
 /F5.1 45 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [111 0 R 112 0 R]
@@ -24229,7 +24229,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -25663,7 +25663,7 @@ endobj
 /F5.1 45 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [119 0 R 121 0 R 122 0 R 123 0 R 124 0 R 125 0 R 126 0 R 127 0 R]
@@ -26562,7 +26562,7 @@ endobj
 /F4.0 35 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [131 0 R]
@@ -27312,7 +27312,7 @@ endobj
 /F2.0 29 0 R
 /F5.1 45 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [134 0 R 138 0 R 139 0 R 140 0 R]
@@ -27334,7 +27334,7 @@ endobj
 endobj
 136 0 obj
 << /Limits [(__anchor-top) (adding.new.node)]
-/Names [(__anchor-top) 25 0 R (__indexterm-6955508) 3262 0 R (__indexterm-6957758) 3264 0 R (__indexterm-6959820) 3265 0 R (__indexterm-6961694) 3266 0 R (acid) 891 0 R (add-metric-name-and-function-to-hadoop-compat-interface) 3361 0 R (add-the-implementation-to-both-hadoop-1-and-hadoop-2-compat-modules) 3362 0 R (add.metrics) 3359 0 R (adding-a-new-chapter-to-the-hbase-reference-guide) 3596 0 R (adding.new.node) 2859 0 R]
+/Names [(__anchor-top) 25 0 R (__indexterm-6955512) 3262 0 R (__indexterm-6957762) 3264 0 R (__indexterm-6959824) 3265 0 R (__indexterm-6961698) 3266 0 R (acid) 891 0 R (add-metric-name-and-function-to-hadoop-compat-interface) 3361 0 R (add-the-implementation-to-both-hadoop-1-and-hadoop-2-compat-modules) 3362 0 R (add.metrics) 3359 0 R (adding-a-new-chapter-to-the-hbase-reference-guide) 3597 0 R (adding.new.node) 2859 0 R]
 >>
 endobj
 137 0 obj
@@ -30467,7 +30467,7 @@ endobj
 /F5.1 45 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [143 0 R 144 0 R 145 0 R 146 0 R 147 0 R 148 0 R]
@@ -31463,7 +31463,7 @@ endobj
 /F2.0 29 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [152 0 R 153 0 R 155 0 R 156 0 R 157 0 R 158 0 R]
@@ -32652,7 +32652,7 @@ endobj
 /F4.0 35 0 R
 /F1.1 38 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [162 0 R 163 0 R 165 0 R]
@@ -33452,7 +33452,7 @@ endobj
 /F5.1 45 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [170 0 R 171 0 R 172 0 R 174 0 R 175 0 R 177 0 R 178 0 R]
@@ -34924,7 +34924,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [181 0 R 182 0 R]
@@ -35349,7 +35349,7 @@ endobj
 /F4.0 35 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -36005,7 +36005,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [188 0 R]
@@ -36742,7 +36742,7 @@ endobj
 /F4.0 35 0 R
 /F1.1 38 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [193 0 R]
@@ -36779,7 +36779,7 @@ endobj
 endobj
 199 0 obj
 << /Limits [(getshortmidpointkey-an-optimization-for-data-index-block) (handling-of-errors-during-log-splitting)]
-/Names [(getshortmidpointkey-an-optimization-for-data-index-block) 3776 0 R (getting.involved) 3113 0 R (getting_started) 48 0 R (git.best.practices) 3363 0 R (git.patch.flow) 3412 0 R (goals) 3873 0 R (guide-for-hbase-committers) 3388 0 R (guidelines-for-deploying-a-coprocessor) 2149 0 R (guidelines-for-reporting-effective-issues) 3129 0 R (hadoop) 135 0 R (hadoop.native.lib) 3696 0 R (hadoop.policy.file) 379 0 R (handling-of-errors-during-log-splitting) 1609 0 R]
+/Names [(getshortmidpointkey-an-optimization-for-data-index-block) 3777 0 R (getting.involved) 3113 0 R (getting_started) 48 0 R (git.best.practices) 3363 0 R (git.patch.flow) 3412 0 R (goals) 3874 0 R (guide-for-hbase-committers) 3388 0 R (guidelines-for-deploying-a-coprocessor) 2149 0 R (guidelines-for-reporting-effective-issues) 3129 0 R (hadoop) 135 0 R (hadoop.native.lib) 3697 0 R (hadoop.policy.file) 379 0 R (handling-of-errors-during-log-splitting) 1609 0 R]
 >>
 endobj
 200 0 obj
@@ -37300,7 +37300,7 @@ endobj
 /F3.0 33 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -37819,7 +37819,7 @@ endobj
 /F4.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -38342,7 +38342,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -38945,7 +38945,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -39473,7 +39473,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -40073,7 +40073,7 @@ endobj
 /F4.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [245 0 R 246 0 R]
@@ -40640,7 +40640,7 @@ endobj
 /F4.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [254 0 R 255 0 R 257 0 R 258 0 R]
@@ -41223,7 +41223,7 @@ endobj
 /F1.0 10 0 R
 /F1.1 38 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -41773,7 +41773,7 @@ endobj
 /F3.0 33 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -42395,7 +42395,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [280 0 R 281 0 R]
@@ -42923,7 +42923,7 @@ endobj
 /F4.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -43475,7 +43475,7 @@ endobj
 /F4.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -44040,7 +44040,7 @@ endobj
 /F3.0 33 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -44601,7 +44601,7 @@ endobj
 /F3.0 33 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -45233,7 +45233,7 @@ endobj
 /F3.0 33 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -45780,7 +45780,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -46323,7 +46323,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -46872,7 +46872,7 @@ endobj
 /F3.0 33 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [343 0 R]
@@ -47425,7 +47425,7 @@ endobj
 /F4.0 35 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [350 0 R]
@@ -48016,7 +48016,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [363 0 R 364 0 R]
@@ -48038,7 +48038,7 @@ endobj
 endobj
 361 0 obj
 << /Limits [(hbase.rootdir.perms) (hbase.server.compactchecker.interval.multiplier)]
-/Names [(hbase.rootdir.perms) 413 0 R (hbase.rpc) 3867 0 R (hbase.rpc.rows.warning.threshold) 502 0 R (hbase.rpc.shortoperation.timeout) 360 0 R (hbase.rpc.timeout) 354 0 R (hbase.rs.cacheblocksonwrite) 353 0 R (hbase.secure.bulkload) 1384 0 R (hbase.secure.configuration) 1222 0 R (hbase.secure.simpleconfiguration) 1266 0 R (hbase.secure.spnego.ui) 1217 0 R (hbase.security.authentication) 450 0 R (hbase.security.exec.permission.checks) 464 0 R (hbase.security.visibility.mutations.checkauths) 473 0 R (hbase.serial.replication.waitingMs) 480 0 R (hbase.server.compactchecker.interval.multiplier) 423 0 R]
+/Names [(hbase.rootdir.perms) 413 0 R (hbase.rpc) 3868 0 R (hbase.rpc.rows.warning.threshold) 502 0 R (hbase.rpc.shortoperation.timeout) 360 0 R (hbase.rpc.timeout) 354 0 R (hbase.rs.cacheblocksonwrite) 353 0 R (hbase.secure.bulkload) 1384 0 R (hbase.secure.configuration) 1222 0 R (hbase.secure.simpleconfiguration) 1266 0 R (hbase.secure.spnego.ui) 1217 0 R (hbase.security.authentication) 450 0 R (hbase.security.exec.permission.checks) 464 0 R (hbase.security.visibility.mutations.checkauths) 473 0 R (hbase.serial.replication.waitingMs) 480 0 R (hbase.server.compactchecker.interval.multiplier) 423 0 R]
 >>
 endobj
 362 0 obj
@@ -48632,7 +48632,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [368 0 R 370 0 R 371 0 R]
@@ -49179,7 +49179,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -49728,7 +49728,7 @@ endobj
 /F3.0 33 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -50232,7 +50232,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -50777,7 +50777,7 @@ endobj
 /F3.0 33 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -51273,7 +51273,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -51791,7 +51791,7 @@ endobj
 /F4.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -52333,7 +52333,7 @@ endobj
 /F4.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -52358,7 +52358,7 @@ endobj
 endobj
 432 0 obj
 << /Limits [(hbase.development.series) (hbase.hregion.preclose.flush.size)]
-/Names [(hbase.development.series) 622 0 R (hbase.dfs.client.read.shortcircuit.buffer.size) 431 0 R (hbase.display.keys) 387 0 R (hbase.dynamic.jars.dir) 447 0 R (hbase.encryption.server) 1372 0 R (hbase.env.sh) 503 0 R (hbase.fix.version.in.jira) 3528 0 R (hbase.fs.tmp.dir) 197 0 R (hbase.history) 3827 0 R (hbase.hregion.majorcompaction) 306 0 R (hbase.hregion.majorcompaction.jitter) 307 0 R (hbase.hregion.max.filesize) 305 0 R (hbase.hregion.memstore.block.multiplier) 303 0 R (hbase.hregion.memstore.flush.size) 298 0 R (hbase.hregion.memstore.mslab.enabled) 304 0 R (hbase.hregion.percolumnfamilyflush.size.lower.bound.min) 299 0 R (hbase.hregion.preclose.flush.size) 300 0 R]
+/Names [(hbase.development.series) 622 0 R (hbase.dfs.client.read.shortcircuit.buffer.size) 431 0 R (hbase.display.keys) 387 0 R (hbase.dynamic.jars.dir) 447 0 R (hbase.encryption.server) 1372 0 R (hbase.env.sh) 503 0 R (hbase.fix.version.in.jira) 3528 0 R (hbase.fs.tmp.dir) 197 0 R (hbase.history) 3828 0 R (hbase.hregion.majorcompaction) 306 0 R (hbase.hregion.majorcompaction.jitter) 307 0 R (hbase.hregion.max.filesize) 305 0 R (hbase.hregion.memstore.block.multiplier) 303 0 R (hbase.hregion.memstore.flush.size) 298 0 R (hbase.hregion.memstore.mslab.enabled) 304 0 R (hbase.hregion.percolumnfamilyflush.size.lower.bound.min) 299 0 R (hbase.hregion.preclose.flush.size) 300 0 R]
 >>
 endobj
 433 0 obj
@@ -52891,7 +52891,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -53383,7 +53383,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -53969,7 +53969,7 @@ endobj
 /F3.0 33 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [453 0 R 454 0 R 456 0 R 457 0 R]
@@ -54641,7 +54641,7 @@ endobj
 /F4.0 35 0 R
 /F6.0 463 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -54650,11 +54650,11 @@ endobj
 << /Type /Font
 /BaseFont /066905+mplus1mn-bold
 /Subtype /TrueType
-/FontDescriptor 4543 0 R
+/FontDescriptor 4544 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4545 0 R
-/ToUnicode 4544 0 R
+/Widths 4546 0 R
+/ToUnicode 4545 0 R
 >>
 endobj
 464 0 obj
@@ -55218,7 +55218,7 @@ endobj
 /F4.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -55773,7 +55773,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -56296,7 +56296,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -56321,7 +56321,7 @@ endobj
 endobj
 491 0 obj
 << /Limits [(hbase.offpeak.end.hour) (hbase.regionserver.global.memstore.size.lower.limit)]
-/Names [(hbase.offpeak.end.hour) 328 0 R (hbase.offpeak.start.hour) 327 0 R (hbase.org) 3238 0 R (hbase.org.site.contributing) 3240 0 R (hbase.org.site.publishing) 3242 0 R (hbase.private.api) 616 0 R (hbase.procedure.master.classes) 466 0 R (hbase.procedure.regionserver.classes) 465 0 R (hbase.rc.voting) 3227 0 R (hbase.region.replica.replication.enabled) 471 0 R (hbase.regions.slop) 293 0 R (hbase.regionserver.checksum.verify) 435 0 R (hbase.regionserver.checksum.verify.performance) 2234 0 R (hbase.regionserver.codecs) 3721 0 R (hbase.regionserver.dns.interface) 240 0 R (hbase.regionserver.dns.nameserver) 241 0 R (hbase.regionserver.global.memstore.size) 234 0 R (hbase.regionserver.global.memstore.size.lower.limit) 236 0 R]
+/Names [(hbase.offpeak.end.hour) 328 0 R (hbase.offpeak.start.hour) 327 0 R (hbase.org) 3238 0 R (hbase.org.site.contributing) 3240 0 R (hbase.org.site.publishing) 3242 0 R (hbase.private.api) 616 0 R (hbase.procedure.master.classes) 466 0 R (hbase.procedure.regionserver.classes) 465 0 R (hbase.rc.voting) 3227 0 R (hbase.region.replica.replication.enabled) 471 0 R (hbase.regions.slop) 293 0 R (hbase.regionserver.checksum.verify) 435 0 R (hbase.regionserver.checksum.verify.performance) 2234 0 R (hbase.regionserver.codecs) 3722 0 R (hbase.regionserver.dns.interface) 240 0 R (hbase.regionserver.dns.nameserver) 241 0 R (hbase.regionserver.global.memstore.size) 234 0 R (hbase.regionserver.global.memstore.size.lower.limit) 236 0 R]
 >>
 endobj
 492 0 obj
@@ -56811,7 +56811,7 @@ endobj
 /F3.0 33 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -57511,7 +57511,7 @@ endobj
 /F4.0 35 0 R
 /F2.0 29 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -57527,7 +57527,7 @@ endobj
 endobj
 505 0 obj
 << /Limits [(quota) (regions.arch.balancer)]
-/Names [(quota) 2964 0 R (read-api-and-usage) 1870 0 R (read-hbase-shell-commands-from-a-command-file) 747 0 R (reading-filtering-and-sending-edits) 2944 0 R (reading_cells_with_labels) 1359 0 R (recommended.configurations.hdfs) 537 0 R (recommended_configurations) 532 0 R (recommended_configurations.zk) 533 0 R (region-overlap-repairs) 3651 0 R (region-replication-for-meta-table-s-region) 1849 0 R (regions.arch) 1643 0 R (regions.arch.assignment) 1652 0 R (regions.arch.assignment.failover) 1654 0 R (regions.arch.assignment.startup) 1653 0 R (regions.arch.balancer) 1655 0 R]
+/Names [(quota) 2964 0 R (read-api-and-usage) 1870 0 R (read-hbase-shell-commands-from-a-command-file) 747 0 R (reading-filtering-and-sending-edits) 2944 0 R (reading_cells_with_labels) 1359 0 R (recommended.configurations.hdfs) 537 0 R (recommended_configurations) 532 0 R (recommended_configurations.zk) 533 0 R (region-overlap-repairs) 3652 0 R (region-replication-for-meta-table-s-region) 1849 0 R (regions.arch) 1643 0 R (regions.arch.assignment) 1652 0 R (regions.arch.assignment.failover) 1654 0 R (regions.arch.assignment.startup) 1653 0 R (regions.arch.balancer) 1655 0 R]
 >>
 endobj
 506 0 obj
@@ -59910,7 +59910,7 @@ endobj
 /F3.0 33 0 R
 /F2.0 29 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [510 0 R 511 0 R]
@@ -61378,7 +61378,7 @@ endobj
 /F3.0 33 0 R
 /F1.1 38 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -61902,7 +61902,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -61915,7 +61915,7 @@ endobj
 endobj
 521 0 obj
 << /Limits [(hbase_env) (hfile.block.bloom.cacheonwrite)]
-/Names [(hbase_env) 520 0 R (hbase_metrics) 2864 0 R (hbase_mob) 1884 0 R (hbase_site) 516 0 R (hbase_supported_tested_definitions) 42 0 R (hbck) 2769 0 R (hbck.in.depth) 3643 0 R (health.check) 2765 0 R (hedged.reads) 2368 0 R (hfile) 1702 0 R (hfile-format) 1703 0 R (hfile-format-2) 3747 0 R (hfile.block.bloom.cacheonwrite) 351 0 R]
+/Names [(hbase_env) 520 0 R (hbase_metrics) 2864 0 R (hbase_mob) 1884 0 R (hbase_site) 516 0 R (hbase_supported_tested_definitions) 42 0 R (hbck) 2769 0 R (hbck.in.depth) 3644 0 R (health.check) 2765 0 R (hedged.reads) 2368 0 R (hfile) 1702 0 R (hfile-format) 1703 0 R (hfile-format-2) 3748 0 R (hfile.block.bloom.cacheonwrite) 351 0 R]
 >>
 endobj
 522 0 obj
@@ -62560,7 +62560,7 @@ endobj
 /F4.0 35 0 R
 /F1.1 38 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [526 0 R 527 0 R 529 0 R 530 0 R 531 0 R 536 0 R]
@@ -63315,7 +63315,7 @@ endobj
 /F2.0 29 0 R
 /F1.1 38 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [542 0 R 545 0 R 547 0 R]
@@ -64282,7 +64282,7 @@ endobj
 /F4.0 35 0 R
 /F5.1 45 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [552 0 R]
@@ -64293,7 +64293,7 @@ endobj
 endobj
 551 0 obj
 << /Limits [(configuration-2) (count)]
-/Names [(configuration-2) 2893 0 R (configuration-3) 3614 0 R (configuration-files) 110 0 R (configuration-from-scratch) 3509 0 R (configuration-properties) 1855 0 R (configuring-columns-for-mob) 1889 0 R (configuring-server-wide-behavior-of-bloom-filters) 2273 0 R (configuring-the-rest-server-and-client) 1923 0 R (confirm) 187 0 R (connection-setup) 3878 0 R (constraints) 1029 0 R (contributing-to-documentation-or-other-strings) 3552 0 R (coprocessor-implementation-overview) 2077 0 R (coprocessor-overview) 2074 0 R (coprocessors) 1530 0 R (copy.table) 2781 0 R (count) 776 0 R]
+/Names [(configuration-2) 2893 0 R (configuration-3) 3615 0 R (configuration-files) 110 0 R (configuration-from-scratch) 3509 0 R (configuration-properties) 1855 0 R (configuring-columns-for-mob) 1889 0 R (configuring-server-wide-behavior-of-bloom-filters) 2273 0 R (configuring-the-rest-server-and-client) 1923 0 R (confirm) 187 0 R (connection-setup) 3879 0 R (constraints) 1029 0 R (contributing-to-documentation-or-other-strings) 3552 0 R (coprocessor-implementation-overview) 2077 0 R (coprocessor-overview) 2074 0 R (coprocessors) 1530 0 R (copy.table) 2781 0 R (count) 776 0 R]
 >>
 endobj
 552 0 obj
@@ -65071,7 +65071,7 @@ endobj
 /F5.1 45 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [556 0 R 557 0 R 558 0 R 562 0 R 565 0 R 566 0 R]
@@ -65847,7 +65847,7 @@ endobj
 /F1.1 38 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [569 0 R 571 0 R 572 0 R]
@@ -67290,7 +67290,7 @@ endobj
 /F1.0 10 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [576 0 R 577 0 R]
@@ -68067,7 +68067,7 @@ endobj
 /F1.0 10 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -68768,7 +68768,7 @@ endobj
 /F3.0 33 0 R
 /F5.1 45 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -69132,7 +69132,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [585 0 R 586 0 R]
@@ -69433,7 +69433,7 @@ endobj
 /F5.1 45 0 R
 /F1.1 38 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [590 0 R 591 0 R 592 0 R 593 0 R 594 0 R]
@@ -70172,7 +70172,7 @@ endobj
 /F1.0 10 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [599 0 R]
@@ -71130,7 +71130,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [603 0 R 604 0 R 605 0 R]
@@ -73419,7 +73419,7 @@ endobj
 /F3.0 33 0 R
 /F2.0 29 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [609 0 R 610 0 R 611 0 R]
@@ -74169,7 +74169,7 @@ endobj
 /F5.1 45 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [618 0 R 619 0 R 620 0 R 621 0 R]
@@ -74915,7 +74915,7 @@ endobj
 /F2.0 29 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [627 0 R 628 0 R 629 0 R 631 0 R 632 0 R 633 0 R 634 0 R 635 0 R]
@@ -75793,7 +75793,7 @@ endobj
 /F4.0 35 0 R
 /F1.1 38 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [645 0 R 648 0 R 649 0 R 650 0 R 652 0 R 653 0 R]
@@ -75809,7 +75809,7 @@ endobj
 endobj
 640 0 obj
 << /Limits [(__anchor-top) (dfs.domain.socket.path)]
-/Kids [136 0 R 3545 0 R 1814 0 R 1411 0 R 3832 0 R 1567 0 R 2360 0 R 2748 0 R 1081 0 R 1457 0 R 1484 0 R 1578 0 R 3329 0 R 3346 0 R 1767 0 R 3676 0 R 551 0 R 2132 0 R 1676 0 R 3354 0 R]
+/Kids [136 0 R 3545 0 R 1814 0 R 1411 0 R 3833 0 R 1567 0 R 2360 0 R 2748 0 R 1081 0 R 1457 0 R 1484 0 R 1578 0 R 3329 0 R 3346 0 R 1767 0 R 3677 0 R 551 0 R 2132 0 R 1676 0 R 3354 0 R]
 >>
 endobj
 641 0 obj
@@ -76750,7 +76750,7 @@ endobj
 /F2.0 29 0 R
 /F5.1 45 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [657 0 R 658 0 R 660 0 R 661 0 R 662 0 R 663 0 R 664 0 R 666 0 R 668 0 R]
@@ -77546,7 +77546,7 @@ endobj
 /F4.0 35 0 R
 /F7.0 680 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [672 0 R 674 0 R 675 0 R]
@@ -77587,7 +77587,7 @@ endobj
 endobj
 678 0 obj
 << /Limits [(upgrade1.0.scanner.caching) (using-secure-http-https-for-the-web-ui)]
-/Names [(upgrade1.0.scanner.caching) 665 0 R (upgrading) 589 0 R (upgrading-2) 3609 0 R (upgrading-code-meta-code-to-use-protocol-buffers-protobuf) 690 0 R (upgrading-from-0-94-x-to-0-98-x) 673 0 R (use-cases-for-observer-coprocessors) 2089 0 R (user-interface) 1866 0 R (using-existing-zookeeper-ensemble) 3480 0 R (using-hbase-shell) 2127 0 R (using-rest-endpoints) 1926 0 R (using-secure-http-https-for-the-web-ui) 1213 0 R]
+/Names [(upgrade1.0.scanner.caching) 665 0 R (upgrading) 589 0 R (upgrading-2) 3610 0 R (upgrading-code-meta-code-to-use-protocol-buffers-protobuf) 690 0 R (upgrading-from-0-94-x-to-0-98-x) 673 0 R (use-cases-for-observer-coprocessors) 2089 0 R (user-interface) 1866 0 R (using-existing-zookeeper-ensemble) 3480 0 R (using-hbase-shell) 2127 0 R (using-rest-endpoints) 1926 0 R (using-secure-http-https-for-the-web-ui) 1213 0 R]
 >>
 endobj
 679 0 obj
@@ -77597,11 +77597,11 @@ endobj
 << /Type /Font
 /BaseFont /9a0a42+mplus-1p-regular
 /Subtype /TrueType
-/FontDescriptor 4547 0 R
+/FontDescriptor 4548 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4549 0 R
-/ToUnicode 4548 0 R
+/Widths 4550 0 R
+/ToUnicode 4549 0 R
 >>
 endobj
 681 0 obj
@@ -78247,7 +78247,7 @@ endobj
 /F4.0 35 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -78936,7 +78936,7 @@ endobj
 /F5.1 45 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -79692,7 +79692,7 @@ endobj
 /F3.0 33 0 R
 /F4.1 689 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [692 0 R]
@@ -79708,11 +79708,11 @@ endobj
 << /Type /Font
 /BaseFont /da39a3+mplus1mn-regular
 /Subtype /TrueType
-/FontDescriptor 4551 0 R
+/FontDescriptor 4552 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4553 0 R
-/ToUnicode 4552 0 R
+/Widths 4554 0 R
+/ToUnicode 4553 0 R
 >>
 endobj
 690 0 obj
@@ -80874,7 +80874,7 @@ endobj
 /F3.0 33 0 R
 /F1.1 38 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [695 0 R 698 0 R 699 0 R 700 0 R 701 0 R 703 0 R 704 0 R]
@@ -81676,7 +81676,7 @@ endobj
 /Font << /F3.0 33 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [707 0 R 708 0 R 709 0 R 710 0 R 711 0 R 712 0 R 713 0 R]
@@ -82569,7 +82569,7 @@ endobj
 /F2.0 29 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [716 0 R 717 0 R 718 0 R 719 0 R 721 0 R 722 0 R 723 0 R]
@@ -82992,7 +82992,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [727 0 R 728 0 R 729 0 R]
@@ -83193,7 +83193,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -83431,7 +83431,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [736 0 R]
@@ -84027,7 +84027,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [741 0 R]
@@ -84569,7 +84569,7 @@ endobj
 /F4.0 35 0 R
 /F2.0 29 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -84846,7 +84846,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -85330,7 +85330,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -85605,7 +85605,7 @@ endobj
 /F4.0 35 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -86120,7 +86120,7 @@ endobj
 /F4.0 35 0 R
 /F7.0 680 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -86805,7 +86805,7 @@ endobj
 /F1.0 10 0 R
 /F7.0 680 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -87434,7 +87434,7 @@ endobj
 /F3.0 33 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [763 0 R]
@@ -88579,7 +88579,7 @@ endobj
 /F4.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -93839,7 +93839,7 @@ endobj
 /F2.0 29 0 R
 /F1.1 38 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -94215,7 +94215,7 @@ endobj
 /F2.0 29 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -94835,7 +94835,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -97376,7 +97376,7 @@ endobj
 /F5.1 45 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [784 0 R 785 0 R 786 0 R]
@@ -100395,7 +100395,7 @@ endobj
 /Font << /F4.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -101829,7 +101829,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [792 0 R]
@@ -102613,7 +102613,7 @@ endobj
 /F4.0 35 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [797 0 R 798 0 R 799 0 R]
@@ -102624,7 +102624,7 @@ endobj
 endobj
 796 0 obj
 << /Limits [(namespace_creation) (observer-example)]
-/Names [(namespace_creation) 800 0 R (namespace_quotas) 2972 0 R (namespace_special) 801 0 R (network-saturation-the-winner) 2716 0 R (new-committers) 3389 0 R (no.permanent.state.in.zk) 3532 0 R (node.management) 2835 0 R (non-root-block-index-format-in-version-2) 3768 0 R (nosuchmethoderror-java-util-concurrent-concurrenthashmap-keyset) 2687 0 R (notes) 3891 0 R (number.of.cfs) 921 0 R (number.of.cfs.card) 923 0 R (observer-coprocessors) 2086 0 R (observer-example) 2133 0 R]
+/Names [(namespace_creation) 800 0 R (namespace_quotas) 2972 0 R (namespace_special) 801 0 R (network-saturation-the-winner) 2716 0 R (new-committers) 3389 0 R (no.permanent.state.in.zk) 3532 0 R (node.management) 2835 0 R (non-root-block-index-format-in-version-2) 3769 0 R (nosuchmethoderror-java-util-concurrent-concurrenthashmap-keyset) 2687 0 R (notes) 3892 0 R (number.of.cfs) 921 0 R (number.of.cfs.card) 923 0 R (observer-coprocessors) 2086 0 R (observer-example) 2133 0 R]
 >>
 endobj
 797 0 obj
@@ -102820,7 +102820,7 @@ endobj
 /F4.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -102891,7 +102891,7 @@ endobj
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -102995,7 +102995,7 @@ endobj
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -103412,7 +103412,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -103532,7 +103532,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -105730,7 +105730,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [819 0 R 821 0 R 822 0 R 824 0 R 825 0 R 826 0 R 828 0 R 829 0 R]
@@ -106059,7 +106059,7 @@ endobj
 /F1.0 10 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [833 0 R 834 0 R 835 0 R 836 0 R]
@@ -107078,7 +107078,7 @@ endobj
 /F7.0 680 0 R
 /F7.1 845 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [840 0 R 841 0 R 844 0 R]
@@ -107114,7 +107114,7 @@ endobj
 endobj
 843 0 obj
 << /Limits [(save-the-dataframe) (schema.casestudies.log_timeseries.hostlead)]
-/Names [(save-the-dataframe) 2047 0 R (scala) 1972 0 R (scala-sbt-file) 1974 0 R (scan) 827 0 R (scenario) 2707 0 R (schema) 896 0 R (schema-design-data-access) 3617 0 R (schema.bloom) 2261 0 R (schema.casestudies) 1033 0 R (schema.casestudies.custorder) 1053 0 R (schema.casestudies.custorder.obj) 1060 0 R (schema.casestudies.custorder.obj.denorm) 1068 0 R (schema.casestudies.custorder.obj.norm) 1061 0 R (schema.casestudies.custorder.obj.rectype) 1066 0 R (schema.casestudies.custorder.obj.singleobj) 1071 0 R (schema.casestudies.custorder.tables) 1057 0 R (schema.casestudies.log_steroids) 1049 0 R (schema.casestudies.log_timeseries) 1035 0 R (schema.casestudies.log_timeseries.hostlead) 1040 0 R]
+/Names [(save-the-dataframe) 2047 0 R (scala) 1972 0 R (scala-sbt-file) 1974 0 R (scan) 827 0 R (scenario) 2707 0 R (schema) 896 0 R (schema-design-data-access) 3618 0 R (schema.bloom) 2261 0 R (schema.casestudies) 1033 0 R (schema.casestudies.custorder) 1053 0 R (schema.casestudies.custorder.obj) 1060 0 R (schema.casestudies.custorder.obj.denorm) 1068 0 R (schema.casestudies.custorder.obj.norm) 1061 0 R (schema.casestudies.custorder.obj.rectype) 1066 0 R (schema.casestudies.custorder.obj.singleobj) 1071 0 R (schema.casestudies.custorder.tables) 1057 0 R (schema.casestudies.log_steroids) 1049 0 R (schema.casestudies.log_timeseries) 1035 0 R (schema.casestudies.log_timeseries.hostlead) 1040 0 R]
 >>
 endobj
 844 0 obj
@@ -107132,11 +107132,11 @@ endobj
 << /Type /Font
 /BaseFont /a99fc7+mplus-1p-regular
 /Subtype /TrueType
-/FontDescriptor 4555 0 R
+/FontDescriptor 4556 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4557 0 R
-/ToUnicode 4556 0 R
+/Widths 4558 0 R
+/ToUnicode 4557 0 R
 >>
 endobj
 846 0 obj
@@ -109004,7 +109004,7 @@ endobj
 /F7.1 845 0 R
 /F2.0 29 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [848 0 R 849 0 R 852 0 R 853 0 R 854 0 R 855 0 R]
@@ -112940,7 +112940,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -113922,7 +113922,7 @@ endobj
 /F1.1 38 0 R
 /F5.1 45 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [866 0 R 867 0 R 868 0 R 869 0 R 870 0 R 871 0 R 874 0 R]
@@ -114300,7 +114300,7 @@ endobj
 /F2.0 29 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [878 0 R]
@@ -114416,7 +114416,7 @@ endobj
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -114583,7 +114583,7 @@ endobj
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [885 0 R]
@@ -114812,7 +114812,7 @@ endobj
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -114930,7 +114930,7 @@ endobj
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [892 0 R 893 0 R]
@@ -115343,7 +115343,7 @@ endobj
 /F1.0 10 0 R
 /F1.1 38 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [897 0 R 898 0 R 899 0 R 900 0 R 901 0 R 902 0 R]
@@ -116818,7 +116818,7 @@ endobj
 /F4.0 35 0 R
 /F5.1 45 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [906 0 R 907 0 R 908 0 R 910 0 R]
@@ -117338,7 +117338,7 @@ endobj
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [914 0 R]
@@ -117555,7 +117555,7 @@ endobj
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [918 0 R]
@@ -117872,7 +117872,7 @@ endobj
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [922 0 R]
@@ -118288,7 +118288,7 @@ endobj
 /F1.0 10 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -119017,7 +119017,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -119950,7 +119950,7 @@ endobj
 /F4.0 35 0 R
 /F2.0 29 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [932 0 R 933 0 R 934 0 R 935 0 R 937 0 R 938 0 R 939 0 R 940 0 R 941 0 R 943 0 R 944 0 R]
@@ -120575,7 +120575,7 @@ endobj
 /F2.0 29 0 R
 /F1.1 38 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [947 0 R 948 0 R 949 0 R 951 0 R 953 0 R]
@@ -124156,7 +124156,7 @@ endobj
 /F5.1 45 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [959 0 R 960 0 R 961 0 R]
@@ -124885,7 +124885,7 @@ endobj
 /F2.0 29 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [964 0 R]
@@ -128672,7 +128672,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [970 0 R]
@@ -129145,7 +129145,7 @@ endobj
 /F1.0 10 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [975 0 R 976 0 R 978 0 R]
@@ -129525,7 +129525,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [982 0 R 983 0 R 984 0 R 986 0 R]
@@ -129666,7 +129666,7 @@ endobj
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [990 0 R]
@@ -130098,7 +130098,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [995 0 R 996 0 R]
@@ -130109,7 +130109,7 @@ endobj
 endobj
 994 0 obj
 << /Limits [(understanding-access-levels) (upgrade1.0.rolling.upgrade)]
-/Names [(understanding-access-levels) 1309 0 R (unexpected-filesystem-growth) 2568 0 R (unified-version-2-block-format) 3761 0 R (unit.tests) 3427 0 R (units-of-measure-for-metrics) 2876 0 R (upgrade-guide) 697 0 R (upgrade-paths) 638 0 R (upgrade0.90) 720 0 R (upgrade0.92) 696 0 R (upgrade0.94) 691 0 R (upgrade0.96) 676 0 R (upgrade0.98) 669 0 R (upgrade1.0) 642 0 R (upgrade1.0.from.0.94) 667 0 R (upgrade1.0.hbase.bucketcache.percentage.in.combinedcache) 647 0 R (upgrade1.0.rolling.upgrade) 659 0 R]
+/Names [(understanding-access-levels) 1309 0 R (unexpected-filesystem-growth) 2568 0 R (unified-version-2-block-format) 3762 0 R (unit.tests) 3427 0 R (units-of-measure-for-metrics) 2876 0 R (upgrade-guide) 697 0 R (upgrade-paths) 638 0 R (upgrade0.90) 720 0 R (upgrade0.92) 696 0 R (upgrade0.94) 691 0 R (upgrade0.96) 676 0 R (upgrade0.98) 669 0 R (upgrade1.0) 642 0 R (upgrade1.0.from.0.94) 667 0 R (upgrade1.0.hbase.bucketcache.percentage.in.combinedcache) 647 0 R (upgrade1.0.rolling.upgrade) 659 0 R]
 >>
 endobj
 995 0 obj
@@ -130821,7 +130821,7 @@ endobj
 /F7.0 680 0 R
 /F7.1 845 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [1000 0 R 1001 0 R]
@@ -136536,7 +136536,7 @@ endobj
 /Font << /F4.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -142482,7 +142482,7 @@ endobj
 /Font << /F4.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -143568,7 +143568,7 @@ endobj
 /F1.0 10 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -144254,7 +144254,7 @@ endobj
 /F1.0 10 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [1011 0 R 1012 0 R 1013 0 R 1015 0 R 1018 0 R]
@@ -144564,7 +144564,7 @@ endobj
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [1022 0 R 1024 0 R 1026 0 R]
@@ -144772,7 +144772,7 @@ endobj
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [1030 0 R]
@@ -145568,7 +145568,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [1034 0 R 1037 0 R]
@@ -146561,7 +146561,7 @@ endobj
 /F5.1 45 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [1042 0 R 1043 0 R 1044 0 R]
@@ -147263,7 +147263,7 @@ endobj
 /F4.0 35 0 R
 /F2.0 29 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [1048 0 R 1050 0 R 1051 0 R 1052 0 R]
@@ -148016,7 +148016,7 @@ endobj
 /F3.0 33 0 R
 /F2.0 29 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [1056 0 R]
@@ -148652,7 +148652,7 @@ endobj
 /F2.0 29 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [1063 0 R]
@@ -148666,7 +148666,7 @@ endobj
 endobj
 1062 0 obj
 << /Limits [(schema.casestudies.log_timeseries.revts) (secondary.indexes)]
-/Names [(schema.casestudies.log_timeseries.revts) 1041 0 R (schema.casestudies.log_timeseries.tslead) 1036 0 R (schema.casestudies.log_timeseries.varkeys) 1045 0 R (schema.cf.blocksize) 2276 0 R (schema.creation) 905 0 R (schema.joins) 989 0 R (schema.minversions) 977 0 R (schema.ops) 1091 0 R (schema.regionsize) 2258 0 R (schema.smackdown) 1073 0 R (schema.smackdown.rowsascols) 1076 0 R (schema.smackdown.rowscols) 1075 0 R (schema.smackdown.rowsversions) 1074 0 R (schema.updates) 909 0 R (schema.versions) 973 0 R (schema.versions.max) 974 0 R (scopes) 3661 0 R (scripting) 732 0 R (secondary-replica-failover) 1854 0 R (secondary.indexes) 1010 0 R]
+/Names [(schema.casestudies.log_timeseries.revts) 1041 0 R (schema.casestudies.log_timeseries.tslead) 1036 0 R (schema.casestudies.log_timeseries.varkeys) 1045 0 R (schema.cf.blocksize) 2276 0 R (schema.creation) 905 0 R (schema.joins) 989 0 R (schema.minversions) 977 0 R (schema.ops) 1091 0 R (schema.regionsize) 2258 0 R (schema.smackdown) 1073 0 R (schema.smackdown.rowsascols) 1076 0 R (schema.smackdown.rowscols) 1075 0 R (schema.smackdown.rowsversions) 1074 0 R (schema.updates) 909 0 R (schema.versions) 973 0 R (schema.versions.max) 974 0 R (scopes) 3662 0 R (scripting) 732 0 R (secondary-replica-failover) 1854 0 R (secondary.indexes) 1010 0 R]
 >>
 endobj
 1063 0 obj
@@ -149456,7 +149456,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [1067 0 R]
@@ -150019,7 +150019,7 @@ endobj
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [1072 0 R]
@@ -151578,7 +151578,7 @@ endobj
 /F4.0 35 0 R
 /F1.1 38 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [1079 0 R]
@@ -151597,7 +151597,7 @@ endobj
 endobj
 1081 0 obj
 << /Limits [(changes-of-note) (client.connections)]
-/Names [(changes-of-note) 643 0 R (changing.compression) 3722 0 R (changing.rowkeys) 966 0 R (chaos.monkey.properties) 3312 0 R (checking-for-success-or-failure-in-scripts) 744 0 R (choosing-region-servers-to-replicate-to) 2939 0 R (cleaning-logs) 2945 0 R (client) 3879 0 R (client-side-configuration-for-secure-operation) 1230 0 R (client-side-configuration-for-secure-operation-rest-gateway) 1255 0 R (client-side-configuration-for-simple-user-access-operation) 1276 0 R (client-side-configuration-for-simple-user-access-operation-rest-gateway) 1281 0 R (client-side-configuration-for-simple-user-access-operation-thrift-gateway) 1279 0 R (client-side-properties) 1863 0 R (client.connection.pooling) 1438 0 R (client.connections) 1427 0 R]
+/Names [(changes-of-note) 643 0 R (changing.compression) 3723 0 R (changing.rowkeys) 966 0 R (chaos.monkey.properties) 3312 0 R (checking-for-success-or-failure-in-scripts) 744 0 R (choosing-region-servers-to-replicate-to) 2939 0 R (cleaning-logs) 2945 0 R (client) 3880 0 R (client-side-configuration-for-secure-operation) 1230 0 R (client-side-configuration-for-secure-operation-rest-gateway) 1255 0 R (client-side-configuration-for-simple-user-access-operation) 1276 0 R (client-side-configuration-for-simple-user-access-operation-rest-gateway) 1281 0 R (client-side-configuration-for-simple-user-access-operation-thrift-gateway) 1279 0 R (client-side-properties) 1863 0 R (client.connection.pooling) 1438 0 R (client.connections) 1427 0 R]
 >>
 endobj
 1082 0 obj
@@ -152327,7 +152327,7 @@ endobj
 /F2.0 29 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [1084 0 R 1085 0 R 1086 0 R]
@@ -152495,7 +152495,7 @@ endobj
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -153652,7 +153652,7 @@ endobj
 /F4.0 35 0 R
 /F1.1 38 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -154779,7 +154779,7 @@ endobj
 /F1.1 38 0 R
 /F2.0 29 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -154925,7 +154925,7 @@ endobj
 /Font << /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -155740,7 +155740,7 @@ endobj
 /F1.1 38 0 R
 /F7.0 680 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [1109 0 R]
@@ -156289,7 +156289,7 @@ endobj
 /F4.0 35 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [1114 0 R 1115 0 R 1116 0 R 1117 0 R 1118 0 R 1119 0 R]
@@ -156300,7 +156300,7 @@ endobj
 endobj
 1113 0 obj
 << /Limits [(keyvalue) (log4j)]
-/Names [(keyvalue) 1717 0 R (keyvalue.example) 1718 0 R (language-integrated-query) 2053 0 R (lb) 2840 0 R (life-of-a-wal-edit) 2930 0 R (limit-server-failure-impact) 1094 0 R (load-the-dataframe) 2050 0 R (load_coprocessor_in_shell) 2116 0 R (localized-repairs) 3648 0 R (log-data-to-timestamp) 762 0 R (log.splitting.step.by.step) 1621 0 R (log4j) 504 0 R]
+/Names [(keyvalue) 1717 0 R (keyvalue.example) 1718 0 R (language-integrated-query) 2053 0 R (lb) 2840 0 R (life-of-a-wal-edit) 2930 0 R (limit-server-failure-impact) 1094 0 R (load-the-dataframe) 2050 0 R (load_coprocessor_in_shell) 2116 0 R (localized-repairs) 3649 0 R (log-data-to-timestamp) 762 0 R (log.splitting.step.by.step) 1621 0 R (log4j) 504 0 R]
 >>
 endobj
 1114 0 obj
@@ -157427,7 +157427,7 @@ endobj
 /F4.0 35 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [1123 0 R]
@@ -157761,7 +157761,7 @@ endobj
 /F4.0 35 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -158514,7 +158514,7 @@ endobj
 /Font << /F4.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [1128 0 R 1129 0 R]
@@ -158952,7 +158952,7 @@ endobj
 /Font << /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [1132 0 R]
@@ -159480,7 +159480,7 @@ endobj
 /F4.0 35 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [1136 0 R 1137 0 R]
@@ -159794,7 +159794,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -160546,7 +160546,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [1144 0 R 1145 0 R 1146 0 R 1147 0 R 1148 0 R 1149 0 R 1150 0 R 1151 0 R 1152 0 R]
@@ -160783,7 +160783,7 @@ endobj
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [1156 0 R]
@@ -161092,7 +161092,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [1160 0 R 1161 0 R 1162 0 R]
@@ -161344,7 +161344,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [1167 0 R 1169 0 R]
@@ -163895,7 +163895,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [1174 0 R]
@@ -166152,7 +166152,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [1178 0 R]
@@ -168108,7 +168108,7 @@ endobj
 /F1.0 10 0 R
 /F2.0 29 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -172109,7 +172109,7 @@ endobj
 /Font << /F4.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -174368,7 +174368,7 @@ endobj
 /F4.0 35 0 R
 /F2.0 29 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -177823,7 +177823,7 @@ endobj
 /F1.0 10 0 R
 /F2.0 29 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -179430,7 +179430,7 @@ endobj
 /F4.0 35 0 R
 /F2.0 29 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -180594,7 +180594,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -180751,7 +180751,7 @@ endobj
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [1201 0 R]
@@ -184209,7 +184209,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [1205 0 R]
@@ -184564,7 +184564,7 @@ endobj
 /F3.0 33 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [1209 0 R 1210 0 R]
@@ -185183,7 +185183,7 @@ endobj
 /F3.0 33 0 R
 /F5.1 45 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [1214 0 R]
@@ -185773,7 +185773,7 @@ endobj
 /F4.0 35 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -186569,7 +186569,7 @@ endobj
 /Font << /F4.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -187417,7 +187417,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [1223 0 R 1224 0 R 1229 0 R 1231 0 R]
@@ -187456,7 +187456,7 @@ endobj
 endobj
 1227 0 obj
 << /Limits [(shell-2) (spark)]
-/Names [(shell-2) 1868 0 R (shell-3) 1871 0 R (shell-debug-switch) 771 0 R (shell-tricks) 755 0 R (shell_exercises) 67 0 R (simple-versus-secure-access) 1269 0 R (slack) 3120 0 R (slowness-due-to-high-processor-usage) 2715 0 R (snappy.compression.installation) 3715 0 R (snapshot-errors-due-to-reverse-dns) 2616 0 R (snapshots_azure) 3033 0 R (snapshots_s3) 3026 0 R (space-quotas) 2979 0 R (spark) 2017 0 R]
+/Names [(shell-2) 1868 0 R (shell-3) 1871 0 R (shell-debug-switch) 771 0 R (shell-tricks) 755 0 R (shell_exercises) 67 0 R (simple-versus-secure-access) 1269 0 R (slack) 3120 0 R (slowness-due-to-high-processor-usage) 2715 0 R (snappy.compression.installation) 3716 0 R (snapshot-errors-due-to-reverse-dns) 2616 0 R (snapshots_azure) 3033 0 R (snapshots_s3) 3026 0 R (space-quotas) 2979 0 R (spark) 2017 0 R]
 >>
 endobj
 1228 0 obj
@@ -189132,7 +189132,7 @@ endobj
 /F4.0 35 0 R
 /F2.0 29 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -190267,7 +190267,7 @@ endobj
 /F2.0 29 0 R
 /F5.1 45 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [1238 0 R 1240 0 R 1241 0 R 1242 0 R]
@@ -190277,11 +190277,11 @@ endobj
 << /Type /Font
 /BaseFont /294f18+mplus1mn-italic
 /Subtype /TrueType
-/FontDescriptor 4559 0 R
+/FontDescriptor 4560 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4561 0 R
-/ToUnicode 4560 0 R
+/Widths 4562 0 R
+/ToUnicode 4561 0 R
 >>
 endobj
 1238 0 obj
@@ -191492,7 +191492,7 @@ endobj
 /F2.0 29 0 R
 /F6.0 463 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [1245 0 R 1246 0 R 1247 0 R 1248 0 R 1250 0 R 1251 0 R]
@@ -192723,7 +192723,7 @@ endobj
 /F3.0 33 0 R
 /F8.0 1237 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [1254 0 R 1256 0 R 1257 0 R]
@@ -193749,7 +193749,7 @@ endobj
 /F3.0 33 0 R
 /F2.0 29 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [1260 0 R]
@@ -194674,7 +194674,7 @@ endobj
 /F1.0 10 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -195035,7 +195035,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [1267 0 R 1268 0 R 1270 0 R 1271 0 R]
@@ -196186,7 +196186,7 @@ endobj
 /F1.0 10 0 R
 /F2.0 29 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -197208,7 +197208,7 @@ endobj
 /F1.0 10 0 R
 /F2.0 29 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [1280 0 R 1282 0 R]
@@ -197975,7 +197975,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [1287 0 R 1288 0 R 1289 0 R]
@@ -198313,7 +198313,7 @@ endobj
 /F4.0 35 0 R
 /F7.0 680 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [1293 0 R]
@@ -199176,7 +199176,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [1297 0 R 1299 0 R 1300 0 R]
@@ -199896,7 +199896,7 @@ endobj
 /F4.0 35 0 R
 /F5.1 45 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [1306 0 R]
@@ -201119,7 +201119,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -202848,7 +202848,7 @@ endobj
 /F4.0 35 0 R
 /F2.0 29 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -203822,7 +203822,7 @@ endobj
 /F3.0 33 0 R
 /F5.1 45 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [1316 0 R 1318 0 R 1321 0 R 1322 0 R 1323 0 R]
@@ -203852,7 +203852,7 @@ endobj
 endobj
 1320 0 obj
 << /Limits [(security) (shell)]
-/Names [(security) 1208 0 R (security.client.thrift) 1234 0 R (security.data.basic.server.side) 1298 0 R (security.example.config) 1390 0 R (security.gateway.thrift) 1239 0 R (security.gateway.thrift.doas) 1249 0 R (security.prerequisites) 1225 0 R (security.rest.gateway) 1261 0 R (server) 3882 0 R (server-side-configuration) 1319 0 R (server-side-configuration-2) 1348 0 R (server-side-configuration-3) 1376 0 R (server-side-configuration-for-secure-operation) 1226 0 R (server-side-configuration-for-simple-user-access-operation) 1273 0 R (server-side-properties) 1856 0 R (set-jaas-configuration-programmatically) 3514 0 R (setting-the-classpath) 1973 0 R (setting-the-classpath-2) 1981 0 R (shaded.protobuf) 3468 0 R (shell) 726 0 R]
+/Names [(security) 1208 0 R (security.client.thrift) 1234 0 R (security.data.basic.server.side) 1298 0 R (security.example.config) 1390 0 R (security.gateway.thrift) 1239 0 R (security.gateway.thrift.doas) 1249 0 R (security.prerequisites) 1225 0 R (security.rest.gateway) 1261 0 R (server) 3883 0 R (server-side-configuration) 1319 0 R (server-side-configuration-2) 1348 0 R (server-side-configuration-3) 1376 0 R (server-side-configuration-for-secure-operation) 1226 0 R (server-side-configuration-for-simple-user-access-operation) 1273 0 R (server-side-properties) 1856 0 R (set-jaas-configuration-programmatically) 3514 0 R (setting-the-classpath) 1973 0 R (setting-the-classpath-2) 1981 0 R (shaded.protobuf) 3468 0 R (shell) 726 0 R]
 >>
 endobj
 1321 0 obj
@@ -204561,7 +204561,7 @@ endobj
 /F1.0 10 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -205756,7 +205756,7 @@ endobj
 /Font << /F4.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -206793,7 +206793,7 @@ endobj
 /F2.0 29 0 R
 /F5.1 45 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -207515,7 +207515,7 @@ endobj
 /F1.1 38 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -207843,7 +207843,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -211076,7 +211076,7 @@ endobj
 /F4.0 35 0 R
 /F7.0 680 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -213954,7 +213954,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -216813,7 +216813,7 @@ endobj
 /F2.0 29 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -217907,7 +217907,7 @@ endobj
 /F5.1 45 0 R
 /F2.0 29 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [1344 0 R 1345 0 R]
@@ -218793,7 +218793,7 @@ endobj
 /F4.0 35 0 R
 /F5.1 45 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [1349 0 R]
@@ -220839,7 +220839,7 @@ endobj
 /F4.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -223402,7 +223402,7 @@ endobj
 /F4.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -223757,7 +223757,7 @@ endobj
 /F4.0 35 0 R
 /F5.1 45 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -226688,7 +226688,7 @@ endobj
 /F2.0 29 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [1360 0 R 1361 0 R]
@@ -229662,7 +229662,7 @@ endobj
 /F2.0 29 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [1365 0 R 1366 0 R 1367 0 R]
@@ -230478,7 +230478,7 @@ endobj
 /F2.0 29 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [1371 0 R]
@@ -231416,7 +231416,7 @@ endobj
 /F4.0 35 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -232433,7 +232433,7 @@ endobj
 /F3.0 33 0 R
 /F1.1 38 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -233281,7 +233281,7 @@ endobj
 /F2.0 29 0 R
 /F5.1 45 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -234088,7 +234088,7 @@ endobj
 /F3.0 33 0 R
 /F7.0 680 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [1385 0 R]
@@ -234434,7 +234434,7 @@ endobj
 /Font << /F4.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -235567,7 +235567,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -236801,7 +236801,7 @@ endobj
 /Font << /F4.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -237972,7 +237972,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -238032,7 +238032,7 @@ endobj
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 >>
@@ -238695,7 +238695,7 @@ endobj
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -239014,7 +239014,7 @@ endobj
 /Font << /F1.0 10 0 R
 /F2.0 29 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [1406 0 R 1407 0 R]
@@ -240229,7 +240229,7 @@ endobj
 /F5.1 45 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [1413 0 R 1415 0 R]
@@ -240240,7 +240240,7 @@ endobj
 endobj
 1411 0 obj
 << /Limits [(arch.region.splits) (async.admin)]
-/Names [(arch.region.splits) 1672 0 R (arch.regions.size) 1646 0 R (arch.timelineconsistent.reads) 1830 0 R (architecture) 1397 0 R (architecture-2) 3612 0 R (architecture.client) 1423 0 R (architecture.master) 1507 0 R (asf) 3831 0 R (asf.devprocess) 3833 0 R (asf.reporting) 3835 0 R (asnyc-wal-replication) 1847 0 R (async.admin) 1449 0 R]
+/Names [(arch.region.splits) 1672 0 R (arch.regions.size) 1646 0 R (arch.timelineconsistent.reads) 1830 0 R (architecture) 1397 0 R (architecture-2) 3613 0 R (architecture.client) 1423 0 R (architecture.master) 1507 0 R (asf) 3832 0 R (asf.devprocess) 3834 0 R (asf.reporting) 3836 0 R (asnyc-wal-replication) 1847 0 R (async.admin) 1449 0 R]
 >>
 endobj
 1412 0 obj
@@ -240494,7 +240494,7 @@ endobj
 /F2.0 29 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [1418 0 R 1420 0 R]
@@ -242076,7 +242076,7 @@ endobj
 /F4.0 35 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [1424 0 R 1425 0 R 1426 0 R 1428 0 R 1429 0 R 1431 0 R 1433 0 R 1434 0 R]
@@ -244319,7 +244319,7 @@ endobj
 /F3.0 33 0 R
 /F5.1 45 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [1437 0 R 1439 0 R 1440 0 R 1442 0 R 1443 0 R 1444 0 R 1445 0 R]
@@ -245835,7 +245835,7 @@ endobj
 /F4.0 35 0 R
 /F2.0 29 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 >>
@@ -246248,7 +246248,7 @@ endobj
 /F4.0 35 0 R
 /F2.0 29 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [1453 0 R]
@@ -247951,7 +247951,7 @@ endobj
 /F1.0 10 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [1458 0 R 1459 0 R 1460 0 R 1463 0 R 1466 0 R 1467 0 R]
@@ -249910,7 +249910,7 @@ endobj
 /F2.0 29 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [1471 0 R 1473 0 R 1474 0 R 1476 0 R]
@@ -250316,7 +250316,7 @@ endobj
 /Font << /F2.0 29 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [1480 0 R 1482 0 R 1486 0 R 1488 0 R 1490 0 R]
@@ -254840,7 +254840,7 @@ endobj
 /F2.0 29 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [1494 0 R 1496 0 R]
@@ -257426,7 +257426,7 @@ endobj
 /F4.0 35 0 R
 /F2.0 29 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [1501 0 R 1504 0 R]
@@ -258232,7 +258232,7 @@ endobj
 /F4.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [1508 0 R 1509 0 R 1512 0 R 1516 0 R 1517 0 R]
@@ -258934,7 +258934,7 @@ endobj
 /F4.0 35 0 R
 /F1.0 10 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [1522 0 R 1531 0 R]
@@ -258959,7 +258959,7 @@ endobj
 endobj
 1525 0 obj
 << /Limits [(reject) (request_queues)]
-/Names [(reject) 3397 0 R (release-managers) 3322 0 R (releasing) 3194 0 R (replicating-visibility-tags-as-strings) 1368 0 R (replication-configuration-options) 2956 0 R (replication-internals) 2938 0 R (replication-metrics) 2951 0 R (replication-overview) 2913 0 R (repos) 3137 0 R (request) 3883 0 R (request-parts) 3884 0 R (request-quotas) 2967 0 R (request_queues) 2973 0 R]
+/Names [(reject) 3397 0 R (release-managers) 3322 0 R (releasing) 3194 0 R (replicating-visibility-tags-as-strings) 1368 0 R (replication-configuration-options) 2956 0 R (replication-internals) 2938 0 R (replication-metrics) 2951 0 R (replication-overview) 2913 0 R (repos) 3137 0 R (request) 3884 0 R (request-parts) 3885 0 R (request-quotas) 2967 0 R (request_queues) 2973 0 R]
 >>
 endobj
 1526 0 obj
@@ -259903,7 +259903,7 @@ endobj
 /F4.0 35 0 R
 /F1.1 38 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [1536 0 R 1537 0 R 1538 0 R 1540 0 R 1541 0 R 1542 0 R 1543 0 R]
@@ -261445,7 +261445,7 @@ endobj
 /F7.1 845 0 R
 /F2.0 29 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [1548 0 R 1549 0 R]
@@ -262329,7 +262329,7 @@ endobj
 /F3.0 33 0 R
 /F7.1 845 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [1552 0 R 1553 0 R 1554 0 R 1555 0 R]
@@ -263950,7 +263950,7 @@ endobj
 /F4.0 35 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [1559 0 R 1560 0 R 1564 0 R 1565 0 R]
@@ -264016,7 +264016,7 @@ endobj
 endobj
 1567 0 obj
 << /Limits [(block-cache-monitoring) (bucketcache-example-configuration)]
-/Names [(block-cache-monitoring) 2899 0 R (block-index-format-in-version-1) 3752 0 R (block-index-in-version-2) 3764 0 R (block.cache) 1532 0 R (block.cache.design) 1544 0 R (block.cache.usage) 1547 0 R (blockcache.prefetch) 2221 0 R (bloom-filters-in-version-2) 3771 0 R (bloom.filters.when) 2267 0 R (bloom_footprint) 2357 0 R (bloomfilter-entries-in-code-storefile-code-metadata) 2359 0 R (bloomfilter-in-the-code-storefile-fileinfo-code-data-structure) 2358 0 R (blooms) 2349 0 R (branches) 3321 0 R (brand.new.compressor) 2610 0 R (bucketcache-example-configuration) 1566 0 R]
+/Names [(block-cache-monitoring) 2899 0 R (block-index-format-in-version-1) 3753 0 R (block-index-in-version-2) 3765 0 R (block.cache) 1532 0 R (block.cache.design) 1544 0 R (block.cache.usage) 1547 0 R (blockcache.prefetch) 2221 0 R (bloom-filters-in-version-2) 3772 0 R (bloom.filters.when) 2267 0 R (bloom_footprint) 2357 0 R (bloomfilter-entries-in-code-storefile-code-metadata) 2359 0 R (bloomfilter-in-the-code-storefile-fileinfo-code-data-structure) 2358 0 R (blooms) 2349 0 R (branches) 3321 0 R (brand.new.compressor) 2610 0 R (bucketcache-example-configuration) 1566 0 R]
 >>
 endobj
 1568 0 obj
@@ -264923,7 +264923,7 @@ endobj
 /F4.0 35 0 R
 /F3.0 33 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [1570 0 R 1571 0 R]
@@ -266056,7 +266056,7 @@ endobj
 /F1.1 38 0 R
 /F2.0 29 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [1576 0 R 1579 0 R]
@@ -266900,7 +266900,7 @@ endobj
 /F3.0 33 0 R
 /F2.0 29 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [1583 0 R 1584 0 R 1585 0 R]
@@ -268694,7 +268694,7 @@ endobj
 /Contents 1588 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /XObject << /I2 1586 0 R
-/Stamp2 4308 0 R
+/Stamp2 4309 0 R
 >>
 /Font << /F3.0 33 0 R
 /F1.0 10 0 R
@@ -270032,7 +270032,7 @@ endobj
 /F3.0 33 0 R
 /F5.1 45 0 R
 >>
-/XObject << /Stamp1 4307 0 R
+/XObject << /Stamp1 4308 0 R
 >>
 >>
 /Annots [1595 0 R 1596 0 R 1597 0 R 1598 0 R 1599 0 R]
@@ -270776,7 +270776,7 @@ endobj
 /F3.0 33 0 R
 /F4.0 35 0 R
 >>
-/XObject << /Stamp2 4308 0 R
+/XObject << /Stamp2 4309 0 R
 >>
 >>
 /Annots [1603 0 R]
@@ -270804,7 +270804,7 @@ endobj
 endobj
 1606 0 obj
 << /Limits [(wal-splitting) (xml_schema)]
-/Names [(wal-splitting) 1605 0 R (wal-tools) 2773 0 R (wal.disable) 1640 0 R (wal_flush) 1604 0 R (walplayer) 2807 0 R (website_publish) 3561 0 R (where-is-the-code) 1842 0 R (where-to-go-n

<TRUNCATED>

[19/33] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.PrepareFlushResult.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.PrepareFlushResult.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.PrepareFlushResult.html
index f6a717e..a701ece 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.PrepareFlushResult.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.PrepareFlushResult.html
@@ -7930,329 +7930,342 @@
 <span class="sourceLineNo">7922</span>      case DELETE:<a name="line.7922"></a>
 <span class="sourceLineNo">7923</span>      case BATCH_MUTATE:<a name="line.7923"></a>
 <span class="sourceLineNo">7924</span>      case COMPACT_REGION:<a name="line.7924"></a>
-<span class="sourceLineNo">7925</span>        // when a region is in recovering state, no read, split or merge is allowed<a name="line.7925"></a>
-<span class="sourceLineNo">7926</span>        if (isRecovering() &amp;&amp; (this.disallowWritesInRecovering ||<a name="line.7926"></a>
-<span class="sourceLineNo">7927</span>              (op != Operation.PUT &amp;&amp; op != Operation.DELETE &amp;&amp; op != Operation.BATCH_MUTATE))) {<a name="line.7927"></a>
-<span class="sourceLineNo">7928</span>          throw new RegionInRecoveryException(getRegionInfo().getRegionNameAsString() +<a name="line.7928"></a>
-<span class="sourceLineNo">7929</span>            " is recovering; cannot take reads");<a name="line.7929"></a>
-<span class="sourceLineNo">7930</span>        }<a name="line.7930"></a>
-<span class="sourceLineNo">7931</span>        break;<a name="line.7931"></a>
-<span class="sourceLineNo">7932</span>      default:<a name="line.7932"></a>
-<span class="sourceLineNo">7933</span>        break;<a name="line.7933"></a>
-<span class="sourceLineNo">7934</span>    }<a name="line.7934"></a>
-<span class="sourceLineNo">7935</span>    if (op == Operation.MERGE_REGION || op == Operation.SPLIT_REGION<a name="line.7935"></a>
-<span class="sourceLineNo">7936</span>        || op == Operation.COMPACT_REGION) {<a name="line.7936"></a>
-<span class="sourceLineNo">7937</span>      // split, merge or compact region doesn't need to check the closing/closed state or lock the<a name="line.7937"></a>
-<span class="sourceLineNo">7938</span>      // region<a name="line.7938"></a>
-<span class="sourceLineNo">7939</span>      return;<a name="line.7939"></a>
-<span class="sourceLineNo">7940</span>    }<a name="line.7940"></a>
-<span class="sourceLineNo">7941</span>    if (this.closing.get()) {<a name="line.7941"></a>
-<span class="sourceLineNo">7942</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.7942"></a>
-<span class="sourceLineNo">7943</span>    }<a name="line.7943"></a>
-<span class="sourceLineNo">7944</span>    lock(lock.readLock());<a name="line.7944"></a>
-<span class="sourceLineNo">7945</span>    if (this.closed.get()) {<a name="line.7945"></a>
-<span class="sourceLineNo">7946</span>      lock.readLock().unlock();<a name="line.7946"></a>
-<span class="sourceLineNo">7947</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.7947"></a>
-<span class="sourceLineNo">7948</span>    }<a name="line.7948"></a>
-<span class="sourceLineNo">7949</span>    try {<a name="line.7949"></a>
-<span class="sourceLineNo">7950</span>      if (coprocessorHost != null) {<a name="line.7950"></a>
-<span class="sourceLineNo">7951</span>        coprocessorHost.postStartRegionOperation(op);<a name="line.7951"></a>
-<span class="sourceLineNo">7952</span>      }<a name="line.7952"></a>
-<span class="sourceLineNo">7953</span>    } catch (Exception e) {<a name="line.7953"></a>
-<span class="sourceLineNo">7954</span>      lock.readLock().unlock();<a name="line.7954"></a>
-<span class="sourceLineNo">7955</span>      throw new IOException(e);<a name="line.7955"></a>
-<span class="sourceLineNo">7956</span>    }<a name="line.7956"></a>
-<span class="sourceLineNo">7957</span>  }<a name="line.7957"></a>
-<span class="sourceLineNo">7958</span><a name="line.7958"></a>
-<span class="sourceLineNo">7959</span>  @Override<a name="line.7959"></a>
-<span class="sourceLineNo">7960</span>  public void closeRegionOperation() throws IOException {<a name="line.7960"></a>
-<span class="sourceLineNo">7961</span>    closeRegionOperation(Operation.ANY);<a name="line.7961"></a>
-<span class="sourceLineNo">7962</span>  }<a name="line.7962"></a>
-<span class="sourceLineNo">7963</span><a name="line.7963"></a>
-<span class="sourceLineNo">7964</span>  /**<a name="line.7964"></a>
-<span class="sourceLineNo">7965</span>   * Closes the lock. This needs to be called in the finally block corresponding<a name="line.7965"></a>
-<span class="sourceLineNo">7966</span>   * to the try block of {@link #startRegionOperation(Operation)}<a name="line.7966"></a>
-<span class="sourceLineNo">7967</span>   * @throws IOException<a name="line.7967"></a>
-<span class="sourceLineNo">7968</span>   */<a name="line.7968"></a>
-<span class="sourceLineNo">7969</span>  public void closeRegionOperation(Operation operation) throws IOException {<a name="line.7969"></a>
-<span class="sourceLineNo">7970</span>    lock.readLock().unlock();<a name="line.7970"></a>
-<span class="sourceLineNo">7971</span>    if (coprocessorHost != null) {<a name="line.7971"></a>
-<span class="sourceLineNo">7972</span>      coprocessorHost.postCloseRegionOperation(operation);<a name="line.7972"></a>
-<span class="sourceLineNo">7973</span>    }<a name="line.7973"></a>
-<span class="sourceLineNo">7974</span>  }<a name="line.7974"></a>
-<span class="sourceLineNo">7975</span><a name="line.7975"></a>
-<span class="sourceLineNo">7976</span>  /**<a name="line.7976"></a>
-<span class="sourceLineNo">7977</span>   * This method needs to be called before any public call that reads or<a name="line.7977"></a>
-<span class="sourceLineNo">7978</span>   * modifies stores in bulk. It has to be called just before a try.<a name="line.7978"></a>
-<span class="sourceLineNo">7979</span>   * #closeBulkRegionOperation needs to be called in the try's finally block<a name="line.7979"></a>
-<span class="sourceLineNo">7980</span>   * Acquires a writelock and checks if the region is closing or closed.<a name="line.7980"></a>
-<span class="sourceLineNo">7981</span>   * @throws NotServingRegionException when the region is closing or closed<a name="line.7981"></a>
-<span class="sourceLineNo">7982</span>   * @throws RegionTooBusyException if failed to get the lock in time<a name="line.7982"></a>
-<span class="sourceLineNo">7983</span>   * @throws InterruptedIOException if interrupted while waiting for a lock<a name="line.7983"></a>
-<span class="sourceLineNo">7984</span>   */<a name="line.7984"></a>
-<span class="sourceLineNo">7985</span>  private void startBulkRegionOperation(boolean writeLockNeeded)<a name="line.7985"></a>
-<span class="sourceLineNo">7986</span>      throws NotServingRegionException, RegionTooBusyException, InterruptedIOException {<a name="line.7986"></a>
-<span class="sourceLineNo">7987</span>    if (this.closing.get()) {<a name="line.7987"></a>
-<span class="sourceLineNo">7988</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.7988"></a>
-<span class="sourceLineNo">7989</span>    }<a name="line.7989"></a>
-<span class="sourceLineNo">7990</span>    if (writeLockNeeded) lock(lock.writeLock());<a name="line.7990"></a>
-<span class="sourceLineNo">7991</span>    else lock(lock.readLock());<a name="line.7991"></a>
-<span class="sourceLineNo">7992</span>    if (this.closed.get()) {<a name="line.7992"></a>
-<span class="sourceLineNo">7993</span>      if (writeLockNeeded) lock.writeLock().unlock();<a name="line.7993"></a>
-<span class="sourceLineNo">7994</span>      else lock.readLock().unlock();<a name="line.7994"></a>
-<span class="sourceLineNo">7995</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.7995"></a>
-<span class="sourceLineNo">7996</span>    }<a name="line.7996"></a>
-<span class="sourceLineNo">7997</span>  }<a name="line.7997"></a>
-<span class="sourceLineNo">7998</span><a name="line.7998"></a>
-<span class="sourceLineNo">7999</span>  /**<a name="line.7999"></a>
-<span class="sourceLineNo">8000</span>   * Closes the lock. This needs to be called in the finally block corresponding<a name="line.8000"></a>
-<span class="sourceLineNo">8001</span>   * to the try block of #startRegionOperation<a name="line.8001"></a>
-<span class="sourceLineNo">8002</span>   */<a name="line.8002"></a>
-<span class="sourceLineNo">8003</span>  private void closeBulkRegionOperation(){<a name="line.8003"></a>
-<span class="sourceLineNo">8004</span>    if (lock.writeLock().isHeldByCurrentThread()) lock.writeLock().unlock();<a name="line.8004"></a>
-<span class="sourceLineNo">8005</span>    else lock.readLock().unlock();<a name="line.8005"></a>
-<span class="sourceLineNo">8006</span>  }<a name="line.8006"></a>
-<span class="sourceLineNo">8007</span><a name="line.8007"></a>
-<span class="sourceLineNo">8008</span>  /**<a name="line.8008"></a>
-<span class="sourceLineNo">8009</span>   * Update LongAdders for number of puts without wal and the size of possible data loss.<a name="line.8009"></a>
-<span class="sourceLineNo">8010</span>   * These information are exposed by the region server metrics.<a name="line.8010"></a>
-<span class="sourceLineNo">8011</span>   */<a name="line.8011"></a>
-<span class="sourceLineNo">8012</span>  private void recordMutationWithoutWal(final Map&lt;byte [], List&lt;Cell&gt;&gt; familyMap) {<a name="line.8012"></a>
-<span class="sourceLineNo">8013</span>    numMutationsWithoutWAL.increment();<a name="line.8013"></a>
-<span class="sourceLineNo">8014</span>    if (numMutationsWithoutWAL.sum() &lt;= 1) {<a name="line.8014"></a>
-<span class="sourceLineNo">8015</span>      LOG.info("writing data to region " + this +<a name="line.8015"></a>
-<span class="sourceLineNo">8016</span>               " with WAL disabled. Data may be lost in the event of a crash.");<a name="line.8016"></a>
-<span class="sourceLineNo">8017</span>    }<a name="line.8017"></a>
-<span class="sourceLineNo">8018</span><a name="line.8018"></a>
-<span class="sourceLineNo">8019</span>    long mutationSize = 0;<a name="line.8019"></a>
-<span class="sourceLineNo">8020</span>    for (List&lt;Cell&gt; cells: familyMap.values()) {<a name="line.8020"></a>
-<span class="sourceLineNo">8021</span>      assert cells instanceof RandomAccess;<a name="line.8021"></a>
-<span class="sourceLineNo">8022</span>      int listSize = cells.size();<a name="line.8022"></a>
-<span class="sourceLineNo">8023</span>      for (int i=0; i &lt; listSize; i++) {<a name="line.8023"></a>
-<span class="sourceLineNo">8024</span>        Cell cell = cells.get(i);<a name="line.8024"></a>
-<span class="sourceLineNo">8025</span>        mutationSize += KeyValueUtil.length(cell);<a name="line.8025"></a>
-<span class="sourceLineNo">8026</span>      }<a name="line.8026"></a>
-<span class="sourceLineNo">8027</span>    }<a name="line.8027"></a>
-<span class="sourceLineNo">8028</span><a name="line.8028"></a>
-<span class="sourceLineNo">8029</span>    dataInMemoryWithoutWAL.add(mutationSize);<a name="line.8029"></a>
-<span class="sourceLineNo">8030</span>  }<a name="line.8030"></a>
+<span class="sourceLineNo">7925</span>      case SNAPSHOT:<a name="line.7925"></a>
+<span class="sourceLineNo">7926</span>        // when a region is in recovering state, no read, split, merge or snapshot is allowed<a name="line.7926"></a>
+<span class="sourceLineNo">7927</span>        if (isRecovering() &amp;&amp; (this.disallowWritesInRecovering ||<a name="line.7927"></a>
+<span class="sourceLineNo">7928</span>              (op != Operation.PUT &amp;&amp; op != Operation.DELETE &amp;&amp; op != Operation.BATCH_MUTATE))) {<a name="line.7928"></a>
+<span class="sourceLineNo">7929</span>          throw new RegionInRecoveryException(getRegionInfo().getRegionNameAsString() +<a name="line.7929"></a>
+<span class="sourceLineNo">7930</span>            " is recovering; cannot take reads");<a name="line.7930"></a>
+<span class="sourceLineNo">7931</span>        }<a name="line.7931"></a>
+<span class="sourceLineNo">7932</span>        break;<a name="line.7932"></a>
+<span class="sourceLineNo">7933</span>      default:<a name="line.7933"></a>
+<span class="sourceLineNo">7934</span>        break;<a name="line.7934"></a>
+<span class="sourceLineNo">7935</span>    }<a name="line.7935"></a>
+<span class="sourceLineNo">7936</span>    if (op == Operation.MERGE_REGION || op == Operation.SPLIT_REGION<a name="line.7936"></a>
+<span class="sourceLineNo">7937</span>        || op == Operation.COMPACT_REGION) {<a name="line.7937"></a>
+<span class="sourceLineNo">7938</span>      // split, merge or compact region doesn't need to check the closing/closed state or lock the<a name="line.7938"></a>
+<span class="sourceLineNo">7939</span>      // region<a name="line.7939"></a>
+<span class="sourceLineNo">7940</span>      return;<a name="line.7940"></a>
+<span class="sourceLineNo">7941</span>    }<a name="line.7941"></a>
+<span class="sourceLineNo">7942</span>    if (this.closing.get()) {<a name="line.7942"></a>
+<span class="sourceLineNo">7943</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.7943"></a>
+<span class="sourceLineNo">7944</span>    }<a name="line.7944"></a>
+<span class="sourceLineNo">7945</span>    lock(lock.readLock());<a name="line.7945"></a>
+<span class="sourceLineNo">7946</span>    if (this.closed.get()) {<a name="line.7946"></a>
+<span class="sourceLineNo">7947</span>      lock.readLock().unlock();<a name="line.7947"></a>
+<span class="sourceLineNo">7948</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.7948"></a>
+<span class="sourceLineNo">7949</span>    }<a name="line.7949"></a>
+<span class="sourceLineNo">7950</span>    // The unit for snapshot is a region. So, all stores for this region must be<a name="line.7950"></a>
+<span class="sourceLineNo">7951</span>    // prepared for snapshot operation before proceeding.<a name="line.7951"></a>
+<span class="sourceLineNo">7952</span>    if (op == Operation.SNAPSHOT) {<a name="line.7952"></a>
+<span class="sourceLineNo">7953</span>      for (Store store : stores.values()) {<a name="line.7953"></a>
+<span class="sourceLineNo">7954</span>        if (store instanceof HStore) {<a name="line.7954"></a>
+<span class="sourceLineNo">7955</span>          ((HStore)store).preSnapshotOperation();<a name="line.7955"></a>
+<span class="sourceLineNo">7956</span>        }<a name="line.7956"></a>
+<span class="sourceLineNo">7957</span>      }<a name="line.7957"></a>
+<span class="sourceLineNo">7958</span>    }<a name="line.7958"></a>
+<span class="sourceLineNo">7959</span>    try {<a name="line.7959"></a>
+<span class="sourceLineNo">7960</span>      if (coprocessorHost != null) {<a name="line.7960"></a>
+<span class="sourceLineNo">7961</span>        coprocessorHost.postStartRegionOperation(op);<a name="line.7961"></a>
+<span class="sourceLineNo">7962</span>      }<a name="line.7962"></a>
+<span class="sourceLineNo">7963</span>    } catch (Exception e) {<a name="line.7963"></a>
+<span class="sourceLineNo">7964</span>      lock.readLock().unlock();<a name="line.7964"></a>
+<span class="sourceLineNo">7965</span>      throw new IOException(e);<a name="line.7965"></a>
+<span class="sourceLineNo">7966</span>    }<a name="line.7966"></a>
+<span class="sourceLineNo">7967</span>  }<a name="line.7967"></a>
+<span class="sourceLineNo">7968</span><a name="line.7968"></a>
+<span class="sourceLineNo">7969</span>  @Override<a name="line.7969"></a>
+<span class="sourceLineNo">7970</span>  public void closeRegionOperation() throws IOException {<a name="line.7970"></a>
+<span class="sourceLineNo">7971</span>    closeRegionOperation(Operation.ANY);<a name="line.7971"></a>
+<span class="sourceLineNo">7972</span>  }<a name="line.7972"></a>
+<span class="sourceLineNo">7973</span><a name="line.7973"></a>
+<span class="sourceLineNo">7974</span>  @Override<a name="line.7974"></a>
+<span class="sourceLineNo">7975</span>  public void closeRegionOperation(Operation operation) throws IOException {<a name="line.7975"></a>
+<span class="sourceLineNo">7976</span>    if (operation == Operation.SNAPSHOT) {<a name="line.7976"></a>
+<span class="sourceLineNo">7977</span>      for (Store store: stores.values()) {<a name="line.7977"></a>
+<span class="sourceLineNo">7978</span>        if (store instanceof HStore) {<a name="line.7978"></a>
+<span class="sourceLineNo">7979</span>          ((HStore)store).postSnapshotOperation();<a name="line.7979"></a>
+<span class="sourceLineNo">7980</span>        }<a name="line.7980"></a>
+<span class="sourceLineNo">7981</span>      }<a name="line.7981"></a>
+<span class="sourceLineNo">7982</span>    }<a name="line.7982"></a>
+<span class="sourceLineNo">7983</span>    lock.readLock().unlock();<a name="line.7983"></a>
+<span class="sourceLineNo">7984</span>    if (coprocessorHost != null) {<a name="line.7984"></a>
+<span class="sourceLineNo">7985</span>      coprocessorHost.postCloseRegionOperation(operation);<a name="line.7985"></a>
+<span class="sourceLineNo">7986</span>    }<a name="line.7986"></a>
+<span class="sourceLineNo">7987</span>  }<a name="line.7987"></a>
+<span class="sourceLineNo">7988</span><a name="line.7988"></a>
+<span class="sourceLineNo">7989</span>  /**<a name="line.7989"></a>
+<span class="sourceLineNo">7990</span>   * This method needs to be called before any public call that reads or<a name="line.7990"></a>
+<span class="sourceLineNo">7991</span>   * modifies stores in bulk. It has to be called just before a try.<a name="line.7991"></a>
+<span class="sourceLineNo">7992</span>   * #closeBulkRegionOperation needs to be called in the try's finally block<a name="line.7992"></a>
+<span class="sourceLineNo">7993</span>   * Acquires a writelock and checks if the region is closing or closed.<a name="line.7993"></a>
+<span class="sourceLineNo">7994</span>   * @throws NotServingRegionException when the region is closing or closed<a name="line.7994"></a>
+<span class="sourceLineNo">7995</span>   * @throws RegionTooBusyException if failed to get the lock in time<a name="line.7995"></a>
+<span class="sourceLineNo">7996</span>   * @throws InterruptedIOException if interrupted while waiting for a lock<a name="line.7996"></a>
+<span class="sourceLineNo">7997</span>   */<a name="line.7997"></a>
+<span class="sourceLineNo">7998</span>  private void startBulkRegionOperation(boolean writeLockNeeded)<a name="line.7998"></a>
+<span class="sourceLineNo">7999</span>      throws NotServingRegionException, RegionTooBusyException, InterruptedIOException {<a name="line.7999"></a>
+<span class="sourceLineNo">8000</span>    if (this.closing.get()) {<a name="line.8000"></a>
+<span class="sourceLineNo">8001</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.8001"></a>
+<span class="sourceLineNo">8002</span>    }<a name="line.8002"></a>
+<span class="sourceLineNo">8003</span>    if (writeLockNeeded) lock(lock.writeLock());<a name="line.8003"></a>
+<span class="sourceLineNo">8004</span>    else lock(lock.readLock());<a name="line.8004"></a>
+<span class="sourceLineNo">8005</span>    if (this.closed.get()) {<a name="line.8005"></a>
+<span class="sourceLineNo">8006</span>      if (writeLockNeeded) lock.writeLock().unlock();<a name="line.8006"></a>
+<span class="sourceLineNo">8007</span>      else lock.readLock().unlock();<a name="line.8007"></a>
+<span class="sourceLineNo">8008</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.8008"></a>
+<span class="sourceLineNo">8009</span>    }<a name="line.8009"></a>
+<span class="sourceLineNo">8010</span>  }<a name="line.8010"></a>
+<span class="sourceLineNo">8011</span><a name="line.8011"></a>
+<span class="sourceLineNo">8012</span>  /**<a name="line.8012"></a>
+<span class="sourceLineNo">8013</span>   * Closes the lock. This needs to be called in the finally block corresponding<a name="line.8013"></a>
+<span class="sourceLineNo">8014</span>   * to the try block of #startRegionOperation<a name="line.8014"></a>
+<span class="sourceLineNo">8015</span>   */<a name="line.8015"></a>
+<span class="sourceLineNo">8016</span>  private void closeBulkRegionOperation(){<a name="line.8016"></a>
+<span class="sourceLineNo">8017</span>    if (lock.writeLock().isHeldByCurrentThread()) lock.writeLock().unlock();<a name="line.8017"></a>
+<span class="sourceLineNo">8018</span>    else lock.readLock().unlock();<a name="line.8018"></a>
+<span class="sourceLineNo">8019</span>  }<a name="line.8019"></a>
+<span class="sourceLineNo">8020</span><a name="line.8020"></a>
+<span class="sourceLineNo">8021</span>  /**<a name="line.8021"></a>
+<span class="sourceLineNo">8022</span>   * Update LongAdders for number of puts without wal and the size of possible data loss.<a name="line.8022"></a>
+<span class="sourceLineNo">8023</span>   * These information are exposed by the region server metrics.<a name="line.8023"></a>
+<span class="sourceLineNo">8024</span>   */<a name="line.8024"></a>
+<span class="sourceLineNo">8025</span>  private void recordMutationWithoutWal(final Map&lt;byte [], List&lt;Cell&gt;&gt; familyMap) {<a name="line.8025"></a>
+<span class="sourceLineNo">8026</span>    numMutationsWithoutWAL.increment();<a name="line.8026"></a>
+<span class="sourceLineNo">8027</span>    if (numMutationsWithoutWAL.sum() &lt;= 1) {<a name="line.8027"></a>
+<span class="sourceLineNo">8028</span>      LOG.info("writing data to region " + this +<a name="line.8028"></a>
+<span class="sourceLineNo">8029</span>               " with WAL disabled. Data may be lost in the event of a crash.");<a name="line.8029"></a>
+<span class="sourceLineNo">8030</span>    }<a name="line.8030"></a>
 <span class="sourceLineNo">8031</span><a name="line.8031"></a>
-<span class="sourceLineNo">8032</span>  private void lock(final Lock lock)<a name="line.8032"></a>
-<span class="sourceLineNo">8033</span>      throws RegionTooBusyException, InterruptedIOException {<a name="line.8033"></a>
-<span class="sourceLineNo">8034</span>    lock(lock, 1);<a name="line.8034"></a>
-<span class="sourceLineNo">8035</span>  }<a name="line.8035"></a>
-<span class="sourceLineNo">8036</span><a name="line.8036"></a>
-<span class="sourceLineNo">8037</span>  /**<a name="line.8037"></a>
-<span class="sourceLineNo">8038</span>   * Try to acquire a lock.  Throw RegionTooBusyException<a name="line.8038"></a>
-<span class="sourceLineNo">8039</span>   * if failed to get the lock in time. Throw InterruptedIOException<a name="line.8039"></a>
-<span class="sourceLineNo">8040</span>   * if interrupted while waiting for the lock.<a name="line.8040"></a>
-<span class="sourceLineNo">8041</span>   */<a name="line.8041"></a>
-<span class="sourceLineNo">8042</span>  private void lock(final Lock lock, final int multiplier)<a name="line.8042"></a>
-<span class="sourceLineNo">8043</span>      throws RegionTooBusyException, InterruptedIOException {<a name="line.8043"></a>
-<span class="sourceLineNo">8044</span>    try {<a name="line.8044"></a>
-<span class="sourceLineNo">8045</span>      final long waitTime = Math.min(maxBusyWaitDuration,<a name="line.8045"></a>
-<span class="sourceLineNo">8046</span>          busyWaitDuration * Math.min(multiplier, maxBusyWaitMultiplier));<a name="line.8046"></a>
-<span class="sourceLineNo">8047</span>      if (!lock.tryLock(waitTime, TimeUnit.MILLISECONDS)) {<a name="line.8047"></a>
-<span class="sourceLineNo">8048</span>        throw new RegionTooBusyException(<a name="line.8048"></a>
-<span class="sourceLineNo">8049</span>            "failed to get a lock in " + waitTime + " ms. " +<a name="line.8049"></a>
-<span class="sourceLineNo">8050</span>                "regionName=" + (this.getRegionInfo() == null ? "unknown" :<a name="line.8050"></a>
-<span class="sourceLineNo">8051</span>                this.getRegionInfo().getRegionNameAsString()) +<a name="line.8051"></a>
-<span class="sourceLineNo">8052</span>                ", server=" + (this.getRegionServerServices() == null ? "unknown" :<a name="line.8052"></a>
-<span class="sourceLineNo">8053</span>                this.getRegionServerServices().getServerName()));<a name="line.8053"></a>
-<span class="sourceLineNo">8054</span>      }<a name="line.8054"></a>
-<span class="sourceLineNo">8055</span>    } catch (InterruptedException ie) {<a name="line.8055"></a>
-<span class="sourceLineNo">8056</span>      LOG.info("Interrupted while waiting for a lock");<a name="line.8056"></a>
-<span class="sourceLineNo">8057</span>      InterruptedIOException iie = new InterruptedIOException();<a name="line.8057"></a>
-<span class="sourceLineNo">8058</span>      iie.initCause(ie);<a name="line.8058"></a>
-<span class="sourceLineNo">8059</span>      throw iie;<a name="line.8059"></a>
-<span class="sourceLineNo">8060</span>    }<a name="line.8060"></a>
-<span class="sourceLineNo">8061</span>  }<a name="line.8061"></a>
-<span class="sourceLineNo">8062</span><a name="line.8062"></a>
-<span class="sourceLineNo">8063</span>  /**<a name="line.8063"></a>
-<span class="sourceLineNo">8064</span>   * Calls sync with the given transaction ID<a name="line.8064"></a>
-<span class="sourceLineNo">8065</span>   * @param txid should sync up to which transaction<a name="line.8065"></a>
-<span class="sourceLineNo">8066</span>   * @throws IOException If anything goes wrong with DFS<a name="line.8066"></a>
-<span class="sourceLineNo">8067</span>   */<a name="line.8067"></a>
-<span class="sourceLineNo">8068</span>  private void sync(long txid, Durability durability) throws IOException {<a name="line.8068"></a>
-<span class="sourceLineNo">8069</span>    if (this.getRegionInfo().isMetaRegion()) {<a name="line.8069"></a>
-<span class="sourceLineNo">8070</span>      this.wal.sync(txid);<a name="line.8070"></a>
-<span class="sourceLineNo">8071</span>    } else {<a name="line.8071"></a>
-<span class="sourceLineNo">8072</span>      switch(durability) {<a name="line.8072"></a>
-<span class="sourceLineNo">8073</span>      case USE_DEFAULT:<a name="line.8073"></a>
-<span class="sourceLineNo">8074</span>        // do what table defaults to<a name="line.8074"></a>
-<span class="sourceLineNo">8075</span>        if (shouldSyncWAL()) {<a name="line.8075"></a>
-<span class="sourceLineNo">8076</span>          this.wal.sync(txid);<a name="line.8076"></a>
-<span class="sourceLineNo">8077</span>        }<a name="line.8077"></a>
-<span class="sourceLineNo">8078</span>        break;<a name="line.8078"></a>
-<span class="sourceLineNo">8079</span>      case SKIP_WAL:<a name="line.8079"></a>
-<span class="sourceLineNo">8080</span>        // nothing do to<a name="line.8080"></a>
-<span class="sourceLineNo">8081</span>        break;<a name="line.8081"></a>
-<span class="sourceLineNo">8082</span>      case ASYNC_WAL:<a name="line.8082"></a>
-<span class="sourceLineNo">8083</span>        // nothing do to<a name="line.8083"></a>
-<span class="sourceLineNo">8084</span>        break;<a name="line.8084"></a>
-<span class="sourceLineNo">8085</span>      case SYNC_WAL:<a name="line.8085"></a>
-<span class="sourceLineNo">8086</span>      case FSYNC_WAL:<a name="line.8086"></a>
-<span class="sourceLineNo">8087</span>        // sync the WAL edit (SYNC and FSYNC treated the same for now)<a name="line.8087"></a>
-<span class="sourceLineNo">8088</span>        this.wal.sync(txid);<a name="line.8088"></a>
-<span class="sourceLineNo">8089</span>        break;<a name="line.8089"></a>
-<span class="sourceLineNo">8090</span>      default:<a name="line.8090"></a>
-<span class="sourceLineNo">8091</span>        throw new RuntimeException("Unknown durability " + durability);<a name="line.8091"></a>
-<span class="sourceLineNo">8092</span>      }<a name="line.8092"></a>
-<span class="sourceLineNo">8093</span>    }<a name="line.8093"></a>
-<span class="sourceLineNo">8094</span>  }<a name="line.8094"></a>
-<span class="sourceLineNo">8095</span><a name="line.8095"></a>
-<span class="sourceLineNo">8096</span>  /**<a name="line.8096"></a>
-<span class="sourceLineNo">8097</span>   * Check whether we should sync the wal from the table's durability settings<a name="line.8097"></a>
-<span class="sourceLineNo">8098</span>   */<a name="line.8098"></a>
-<span class="sourceLineNo">8099</span>  private boolean shouldSyncWAL() {<a name="line.8099"></a>
-<span class="sourceLineNo">8100</span>    return durability.ordinal() &gt;  Durability.ASYNC_WAL.ordinal();<a name="line.8100"></a>
-<span class="sourceLineNo">8101</span>  }<a name="line.8101"></a>
-<span class="sourceLineNo">8102</span><a name="line.8102"></a>
-<span class="sourceLineNo">8103</span>  /**<a name="line.8103"></a>
-<span class="sourceLineNo">8104</span>   * A mocked list implementation - discards all updates.<a name="line.8104"></a>
-<span class="sourceLineNo">8105</span>   */<a name="line.8105"></a>
-<span class="sourceLineNo">8106</span>  private static final List&lt;Cell&gt; MOCKED_LIST = new AbstractList&lt;Cell&gt;() {<a name="line.8106"></a>
-<span class="sourceLineNo">8107</span><a name="line.8107"></a>
-<span class="sourceLineNo">8108</span>    @Override<a name="line.8108"></a>
-<span class="sourceLineNo">8109</span>    public void add(int index, Cell element) {<a name="line.8109"></a>
-<span class="sourceLineNo">8110</span>      // do nothing<a name="line.8110"></a>
-<span class="sourceLineNo">8111</span>    }<a name="line.8111"></a>
-<span class="sourceLineNo">8112</span><a name="line.8112"></a>
-<span class="sourceLineNo">8113</span>    @Override<a name="line.8113"></a>
-<span class="sourceLineNo">8114</span>    public boolean addAll(int index, Collection&lt;? extends Cell&gt; c) {<a name="line.8114"></a>
-<span class="sourceLineNo">8115</span>      return false; // this list is never changed as a result of an update<a name="line.8115"></a>
-<span class="sourceLineNo">8116</span>    }<a name="line.8116"></a>
-<span class="sourceLineNo">8117</span><a name="line.8117"></a>
-<span class="sourceLineNo">8118</span>    @Override<a name="line.8118"></a>
-<span class="sourceLineNo">8119</span>    public KeyValue get(int index) {<a name="line.8119"></a>
-<span class="sourceLineNo">8120</span>      throw new UnsupportedOperationException();<a name="line.8120"></a>
-<span class="sourceLineNo">8121</span>    }<a name="line.8121"></a>
-<span class="sourceLineNo">8122</span><a name="line.8122"></a>
-<span class="sourceLineNo">8123</span>    @Override<a name="line.8123"></a>
-<span class="sourceLineNo">8124</span>    public int size() {<a name="line.8124"></a>
-<span class="sourceLineNo">8125</span>      return 0;<a name="line.8125"></a>
-<span class="sourceLineNo">8126</span>    }<a name="line.8126"></a>
-<span class="sourceLineNo">8127</span>  };<a name="line.8127"></a>
-<span class="sourceLineNo">8128</span><a name="line.8128"></a>
-<span class="sourceLineNo">8129</span>  @Override<a name="line.8129"></a>
-<span class="sourceLineNo">8130</span>  public long getOpenSeqNum() {<a name="line.8130"></a>
-<span class="sourceLineNo">8131</span>    return this.openSeqNum;<a name="line.8131"></a>
-<span class="sourceLineNo">8132</span>  }<a name="line.8132"></a>
-<span class="sourceLineNo">8133</span><a name="line.8133"></a>
-<span class="sourceLineNo">8134</span>  @Override<a name="line.8134"></a>
-<span class="sourceLineNo">8135</span>  public Map&lt;byte[], Long&gt; getMaxStoreSeqId() {<a name="line.8135"></a>
-<span class="sourceLineNo">8136</span>    return this.maxSeqIdInStores;<a name="line.8136"></a>
-<span class="sourceLineNo">8137</span>  }<a name="line.8137"></a>
-<span class="sourceLineNo">8138</span><a name="line.8138"></a>
-<span class="sourceLineNo">8139</span>  @Override<a name="line.8139"></a>
-<span class="sourceLineNo">8140</span>  public long getOldestSeqIdOfStore(byte[] familyName) {<a name="line.8140"></a>
-<span class="sourceLineNo">8141</span>    return wal.getEarliestMemstoreSeqNum(getRegionInfo().getEncodedNameAsBytes(), familyName);<a name="line.8141"></a>
-<span class="sourceLineNo">8142</span>  }<a name="line.8142"></a>
-<span class="sourceLineNo">8143</span><a name="line.8143"></a>
-<span class="sourceLineNo">8144</span>  @Override<a name="line.8144"></a>
-<span class="sourceLineNo">8145</span>  public CompactionState getCompactionState() {<a name="line.8145"></a>
-<span class="sourceLineNo">8146</span>    boolean hasMajor = majorInProgress.get() &gt; 0, hasMinor = minorInProgress.get() &gt; 0;<a name="line.8146"></a>
-<span class="sourceLineNo">8147</span>    return (hasMajor ? (hasMinor ? CompactionState.MAJOR_AND_MINOR : CompactionState.MAJOR)<a name="line.8147"></a>
-<span class="sourceLineNo">8148</span>        : (hasMinor ? CompactionState.MINOR : CompactionState.NONE));<a name="line.8148"></a>
-<span class="sourceLineNo">8149</span>  }<a name="line.8149"></a>
-<span class="sourceLineNo">8150</span><a name="line.8150"></a>
-<span class="sourceLineNo">8151</span>  public void reportCompactionRequestStart(boolean isMajor){<a name="line.8151"></a>
-<span class="sourceLineNo">8152</span>    (isMajor ? majorInProgress : minorInProgress).incrementAndGet();<a name="line.8152"></a>
-<span class="sourceLineNo">8153</span>  }<a name="line.8153"></a>
-<span class="sourceLineNo">8154</span><a name="line.8154"></a>
-<span class="sourceLineNo">8155</span>  public void reportCompactionRequestEnd(boolean isMajor, int numFiles, long filesSizeCompacted) {<a name="line.8155"></a>
-<span class="sourceLineNo">8156</span>    int newValue = (isMajor ? majorInProgress : minorInProgress).decrementAndGet();<a name="line.8156"></a>
-<span class="sourceLineNo">8157</span><a name="line.8157"></a>
-<span class="sourceLineNo">8158</span>    // metrics<a name="line.8158"></a>
-<span class="sourceLineNo">8159</span>    compactionsFinished.incrementAndGet();<a name="line.8159"></a>
-<span class="sourceLineNo">8160</span>    compactionNumFilesCompacted.addAndGet(numFiles);<a name="line.8160"></a>
-<span class="sourceLineNo">8161</span>    compactionNumBytesCompacted.addAndGet(filesSizeCompacted);<a name="line.8161"></a>
-<span class="sourceLineNo">8162</span><a name="line.8162"></a>
-<span class="sourceLineNo">8163</span>    assert newValue &gt;= 0;<a name="line.8163"></a>
-<span class="sourceLineNo">8164</span>  }<a name="line.8164"></a>
-<span class="sourceLineNo">8165</span><a name="line.8165"></a>
-<span class="sourceLineNo">8166</span>  public void reportCompactionRequestFailure() {<a name="line.8166"></a>
-<span class="sourceLineNo">8167</span>    compactionsFailed.incrementAndGet();<a name="line.8167"></a>
-<span class="sourceLineNo">8168</span>  }<a name="line.8168"></a>
-<span class="sourceLineNo">8169</span><a name="line.8169"></a>
-<span class="sourceLineNo">8170</span>  public void incrementCompactionsQueuedCount() {<a name="line.8170"></a>
-<span class="sourceLineNo">8171</span>    compactionsQueued.incrementAndGet();<a name="line.8171"></a>
-<span class="sourceLineNo">8172</span>  }<a name="line.8172"></a>
-<span class="sourceLineNo">8173</span><a name="line.8173"></a>
-<span class="sourceLineNo">8174</span>  public void decrementCompactionsQueuedCount() {<a name="line.8174"></a>
-<span class="sourceLineNo">8175</span>    compactionsQueued.decrementAndGet();<a name="line.8175"></a>
-<span class="sourceLineNo">8176</span>  }<a name="line.8176"></a>
-<span class="sourceLineNo">8177</span><a name="line.8177"></a>
-<span class="sourceLineNo">8178</span>  public void incrementFlushesQueuedCount() {<a name="line.8178"></a>
-<span class="sourceLineNo">8179</span>    flushesQueued.incrementAndGet();<a name="line.8179"></a>
-<span class="sourceLineNo">8180</span>  }<a name="line.8180"></a>
-<span class="sourceLineNo">8181</span><a name="line.8181"></a>
-<span class="sourceLineNo">8182</span>  @VisibleForTesting<a name="line.8182"></a>
-<span class="sourceLineNo">8183</span>  public long getReadPoint() {<a name="line.8183"></a>
-<span class="sourceLineNo">8184</span>    return getReadPoint(IsolationLevel.READ_COMMITTED);<a name="line.8184"></a>
+<span class="sourceLineNo">8032</span>    long mutationSize = 0;<a name="line.8032"></a>
+<span class="sourceLineNo">8033</span>    for (List&lt;Cell&gt; cells: familyMap.values()) {<a name="line.8033"></a>
+<span class="sourceLineNo">8034</span>      assert cells instanceof RandomAccess;<a name="line.8034"></a>
+<span class="sourceLineNo">8035</span>      int listSize = cells.size();<a name="line.8035"></a>
+<span class="sourceLineNo">8036</span>      for (int i=0; i &lt; listSize; i++) {<a name="line.8036"></a>
+<span class="sourceLineNo">8037</span>        Cell cell = cells.get(i);<a name="line.8037"></a>
+<span class="sourceLineNo">8038</span>        mutationSize += KeyValueUtil.length(cell);<a name="line.8038"></a>
+<span class="sourceLineNo">8039</span>      }<a name="line.8039"></a>
+<span class="sourceLineNo">8040</span>    }<a name="line.8040"></a>
+<span class="sourceLineNo">8041</span><a name="line.8041"></a>
+<span class="sourceLineNo">8042</span>    dataInMemoryWithoutWAL.add(mutationSize);<a name="line.8042"></a>
+<span class="sourceLineNo">8043</span>  }<a name="line.8043"></a>
+<span class="sourceLineNo">8044</span><a name="line.8044"></a>
+<span class="sourceLineNo">8045</span>  private void lock(final Lock lock)<a name="line.8045"></a>
+<span class="sourceLineNo">8046</span>      throws RegionTooBusyException, InterruptedIOException {<a name="line.8046"></a>
+<span class="sourceLineNo">8047</span>    lock(lock, 1);<a name="line.8047"></a>
+<span class="sourceLineNo">8048</span>  }<a name="line.8048"></a>
+<span class="sourceLineNo">8049</span><a name="line.8049"></a>
+<span class="sourceLineNo">8050</span>  /**<a name="line.8050"></a>
+<span class="sourceLineNo">8051</span>   * Try to acquire a lock.  Throw RegionTooBusyException<a name="line.8051"></a>
+<span class="sourceLineNo">8052</span>   * if failed to get the lock in time. Throw InterruptedIOException<a name="line.8052"></a>
+<span class="sourceLineNo">8053</span>   * if interrupted while waiting for the lock.<a name="line.8053"></a>
+<span class="sourceLineNo">8054</span>   */<a name="line.8054"></a>
+<span class="sourceLineNo">8055</span>  private void lock(final Lock lock, final int multiplier)<a name="line.8055"></a>
+<span class="sourceLineNo">8056</span>      throws RegionTooBusyException, InterruptedIOException {<a name="line.8056"></a>
+<span class="sourceLineNo">8057</span>    try {<a name="line.8057"></a>
+<span class="sourceLineNo">8058</span>      final long waitTime = Math.min(maxBusyWaitDuration,<a name="line.8058"></a>
+<span class="sourceLineNo">8059</span>          busyWaitDuration * Math.min(multiplier, maxBusyWaitMultiplier));<a name="line.8059"></a>
+<span class="sourceLineNo">8060</span>      if (!lock.tryLock(waitTime, TimeUnit.MILLISECONDS)) {<a name="line.8060"></a>
+<span class="sourceLineNo">8061</span>        throw new RegionTooBusyException(<a name="line.8061"></a>
+<span class="sourceLineNo">8062</span>            "failed to get a lock in " + waitTime + " ms. " +<a name="line.8062"></a>
+<span class="sourceLineNo">8063</span>                "regionName=" + (this.getRegionInfo() == null ? "unknown" :<a name="line.8063"></a>
+<span class="sourceLineNo">8064</span>                this.getRegionInfo().getRegionNameAsString()) +<a name="line.8064"></a>
+<span class="sourceLineNo">8065</span>                ", server=" + (this.getRegionServerServices() == null ? "unknown" :<a name="line.8065"></a>
+<span class="sourceLineNo">8066</span>                this.getRegionServerServices().getServerName()));<a name="line.8066"></a>
+<span class="sourceLineNo">8067</span>      }<a name="line.8067"></a>
+<span class="sourceLineNo">8068</span>    } catch (InterruptedException ie) {<a name="line.8068"></a>
+<span class="sourceLineNo">8069</span>      LOG.info("Interrupted while waiting for a lock");<a name="line.8069"></a>
+<span class="sourceLineNo">8070</span>      InterruptedIOException iie = new InterruptedIOException();<a name="line.8070"></a>
+<span class="sourceLineNo">8071</span>      iie.initCause(ie);<a name="line.8071"></a>
+<span class="sourceLineNo">8072</span>      throw iie;<a name="line.8072"></a>
+<span class="sourceLineNo">8073</span>    }<a name="line.8073"></a>
+<span class="sourceLineNo">8074</span>  }<a name="line.8074"></a>
+<span class="sourceLineNo">8075</span><a name="line.8075"></a>
+<span class="sourceLineNo">8076</span>  /**<a name="line.8076"></a>
+<span class="sourceLineNo">8077</span>   * Calls sync with the given transaction ID<a name="line.8077"></a>
+<span class="sourceLineNo">8078</span>   * @param txid should sync up to which transaction<a name="line.8078"></a>
+<span class="sourceLineNo">8079</span>   * @throws IOException If anything goes wrong with DFS<a name="line.8079"></a>
+<span class="sourceLineNo">8080</span>   */<a name="line.8080"></a>
+<span class="sourceLineNo">8081</span>  private void sync(long txid, Durability durability) throws IOException {<a name="line.8081"></a>
+<span class="sourceLineNo">8082</span>    if (this.getRegionInfo().isMetaRegion()) {<a name="line.8082"></a>
+<span class="sourceLineNo">8083</span>      this.wal.sync(txid);<a name="line.8083"></a>
+<span class="sourceLineNo">8084</span>    } else {<a name="line.8084"></a>
+<span class="sourceLineNo">8085</span>      switch(durability) {<a name="line.8085"></a>
+<span class="sourceLineNo">8086</span>      case USE_DEFAULT:<a name="line.8086"></a>
+<span class="sourceLineNo">8087</span>        // do what table defaults to<a name="line.8087"></a>
+<span class="sourceLineNo">8088</span>        if (shouldSyncWAL()) {<a name="line.8088"></a>
+<span class="sourceLineNo">8089</span>          this.wal.sync(txid);<a name="line.8089"></a>
+<span class="sourceLineNo">8090</span>        }<a name="line.8090"></a>
+<span class="sourceLineNo">8091</span>        break;<a name="line.8091"></a>
+<span class="sourceLineNo">8092</span>      case SKIP_WAL:<a name="line.8092"></a>
+<span class="sourceLineNo">8093</span>        // nothing do to<a name="line.8093"></a>
+<span class="sourceLineNo">8094</span>        break;<a name="line.8094"></a>
+<span class="sourceLineNo">8095</span>      case ASYNC_WAL:<a name="line.8095"></a>
+<span class="sourceLineNo">8096</span>        // nothing do to<a name="line.8096"></a>
+<span class="sourceLineNo">8097</span>        break;<a name="line.8097"></a>
+<span class="sourceLineNo">8098</span>      case SYNC_WAL:<a name="line.8098"></a>
+<span class="sourceLineNo">8099</span>      case FSYNC_WAL:<a name="line.8099"></a>
+<span class="sourceLineNo">8100</span>        // sync the WAL edit (SYNC and FSYNC treated the same for now)<a name="line.8100"></a>
+<span class="sourceLineNo">8101</span>        this.wal.sync(txid);<a name="line.8101"></a>
+<span class="sourceLineNo">8102</span>        break;<a name="line.8102"></a>
+<span class="sourceLineNo">8103</span>      default:<a name="line.8103"></a>
+<span class="sourceLineNo">8104</span>        throw new RuntimeException("Unknown durability " + durability);<a name="line.8104"></a>
+<span class="sourceLineNo">8105</span>      }<a name="line.8105"></a>
+<span class="sourceLineNo">8106</span>    }<a name="line.8106"></a>
+<span class="sourceLineNo">8107</span>  }<a name="line.8107"></a>
+<span class="sourceLineNo">8108</span><a name="line.8108"></a>
+<span class="sourceLineNo">8109</span>  /**<a name="line.8109"></a>
+<span class="sourceLineNo">8110</span>   * Check whether we should sync the wal from the table's durability settings<a name="line.8110"></a>
+<span class="sourceLineNo">8111</span>   */<a name="line.8111"></a>
+<span class="sourceLineNo">8112</span>  private boolean shouldSyncWAL() {<a name="line.8112"></a>
+<span class="sourceLineNo">8113</span>    return durability.ordinal() &gt;  Durability.ASYNC_WAL.ordinal();<a name="line.8113"></a>
+<span class="sourceLineNo">8114</span>  }<a name="line.8114"></a>
+<span class="sourceLineNo">8115</span><a name="line.8115"></a>
+<span class="sourceLineNo">8116</span>  /**<a name="line.8116"></a>
+<span class="sourceLineNo">8117</span>   * A mocked list implementation - discards all updates.<a name="line.8117"></a>
+<span class="sourceLineNo">8118</span>   */<a name="line.8118"></a>
+<span class="sourceLineNo">8119</span>  private static final List&lt;Cell&gt; MOCKED_LIST = new AbstractList&lt;Cell&gt;() {<a name="line.8119"></a>
+<span class="sourceLineNo">8120</span><a name="line.8120"></a>
+<span class="sourceLineNo">8121</span>    @Override<a name="line.8121"></a>
+<span class="sourceLineNo">8122</span>    public void add(int index, Cell element) {<a name="line.8122"></a>
+<span class="sourceLineNo">8123</span>      // do nothing<a name="line.8123"></a>
+<span class="sourceLineNo">8124</span>    }<a name="line.8124"></a>
+<span class="sourceLineNo">8125</span><a name="line.8125"></a>
+<span class="sourceLineNo">8126</span>    @Override<a name="line.8126"></a>
+<span class="sourceLineNo">8127</span>    public boolean addAll(int index, Collection&lt;? extends Cell&gt; c) {<a name="line.8127"></a>
+<span class="sourceLineNo">8128</span>      return false; // this list is never changed as a result of an update<a name="line.8128"></a>
+<span class="sourceLineNo">8129</span>    }<a name="line.8129"></a>
+<span class="sourceLineNo">8130</span><a name="line.8130"></a>
+<span class="sourceLineNo">8131</span>    @Override<a name="line.8131"></a>
+<span class="sourceLineNo">8132</span>    public KeyValue get(int index) {<a name="line.8132"></a>
+<span class="sourceLineNo">8133</span>      throw new UnsupportedOperationException();<a name="line.8133"></a>
+<span class="sourceLineNo">8134</span>    }<a name="line.8134"></a>
+<span class="sourceLineNo">8135</span><a name="line.8135"></a>
+<span class="sourceLineNo">8136</span>    @Override<a name="line.8136"></a>
+<span class="sourceLineNo">8137</span>    public int size() {<a name="line.8137"></a>
+<span class="sourceLineNo">8138</span>      return 0;<a name="line.8138"></a>
+<span class="sourceLineNo">8139</span>    }<a name="line.8139"></a>
+<span class="sourceLineNo">8140</span>  };<a name="line.8140"></a>
+<span class="sourceLineNo">8141</span><a name="line.8141"></a>
+<span class="sourceLineNo">8142</span>  @Override<a name="line.8142"></a>
+<span class="sourceLineNo">8143</span>  public long getOpenSeqNum() {<a name="line.8143"></a>
+<span class="sourceLineNo">8144</span>    return this.openSeqNum;<a name="line.8144"></a>
+<span class="sourceLineNo">8145</span>  }<a name="line.8145"></a>
+<span class="sourceLineNo">8146</span><a name="line.8146"></a>
+<span class="sourceLineNo">8147</span>  @Override<a name="line.8147"></a>
+<span class="sourceLineNo">8148</span>  public Map&lt;byte[], Long&gt; getMaxStoreSeqId() {<a name="line.8148"></a>
+<span class="sourceLineNo">8149</span>    return this.maxSeqIdInStores;<a name="line.8149"></a>
+<span class="sourceLineNo">8150</span>  }<a name="line.8150"></a>
+<span class="sourceLineNo">8151</span><a name="line.8151"></a>
+<span class="sourceLineNo">8152</span>  @Override<a name="line.8152"></a>
+<span class="sourceLineNo">8153</span>  public long getOldestSeqIdOfStore(byte[] familyName) {<a name="line.8153"></a>
+<span class="sourceLineNo">8154</span>    return wal.getEarliestMemstoreSeqNum(getRegionInfo().getEncodedNameAsBytes(), familyName);<a name="line.8154"></a>
+<span class="sourceLineNo">8155</span>  }<a name="line.8155"></a>
+<span class="sourceLineNo">8156</span><a name="line.8156"></a>
+<span class="sourceLineNo">8157</span>  @Override<a name="line.8157"></a>
+<span class="sourceLineNo">8158</span>  public CompactionState getCompactionState() {<a name="line.8158"></a>
+<span class="sourceLineNo">8159</span>    boolean hasMajor = majorInProgress.get() &gt; 0, hasMinor = minorInProgress.get() &gt; 0;<a name="line.8159"></a>
+<span class="sourceLineNo">8160</span>    return (hasMajor ? (hasMinor ? CompactionState.MAJOR_AND_MINOR : CompactionState.MAJOR)<a name="line.8160"></a>
+<span class="sourceLineNo">8161</span>        : (hasMinor ? CompactionState.MINOR : CompactionState.NONE));<a name="line.8161"></a>
+<span class="sourceLineNo">8162</span>  }<a name="line.8162"></a>
+<span class="sourceLineNo">8163</span><a name="line.8163"></a>
+<span class="sourceLineNo">8164</span>  public void reportCompactionRequestStart(boolean isMajor){<a name="line.8164"></a>
+<span class="sourceLineNo">8165</span>    (isMajor ? majorInProgress : minorInProgress).incrementAndGet();<a name="line.8165"></a>
+<span class="sourceLineNo">8166</span>  }<a name="line.8166"></a>
+<span class="sourceLineNo">8167</span><a name="line.8167"></a>
+<span class="sourceLineNo">8168</span>  public void reportCompactionRequestEnd(boolean isMajor, int numFiles, long filesSizeCompacted) {<a name="line.8168"></a>
+<span class="sourceLineNo">8169</span>    int newValue = (isMajor ? majorInProgress : minorInProgress).decrementAndGet();<a name="line.8169"></a>
+<span class="sourceLineNo">8170</span><a name="line.8170"></a>
+<span class="sourceLineNo">8171</span>    // metrics<a name="line.8171"></a>
+<span class="sourceLineNo">8172</span>    compactionsFinished.incrementAndGet();<a name="line.8172"></a>
+<span class="sourceLineNo">8173</span>    compactionNumFilesCompacted.addAndGet(numFiles);<a name="line.8173"></a>
+<span class="sourceLineNo">8174</span>    compactionNumBytesCompacted.addAndGet(filesSizeCompacted);<a name="line.8174"></a>
+<span class="sourceLineNo">8175</span><a name="line.8175"></a>
+<span class="sourceLineNo">8176</span>    assert newValue &gt;= 0;<a name="line.8176"></a>
+<span class="sourceLineNo">8177</span>  }<a name="line.8177"></a>
+<span class="sourceLineNo">8178</span><a name="line.8178"></a>
+<span class="sourceLineNo">8179</span>  public void reportCompactionRequestFailure() {<a name="line.8179"></a>
+<span class="sourceLineNo">8180</span>    compactionsFailed.incrementAndGet();<a name="line.8180"></a>
+<span class="sourceLineNo">8181</span>  }<a name="line.8181"></a>
+<span class="sourceLineNo">8182</span><a name="line.8182"></a>
+<span class="sourceLineNo">8183</span>  public void incrementCompactionsQueuedCount() {<a name="line.8183"></a>
+<span class="sourceLineNo">8184</span>    compactionsQueued.incrementAndGet();<a name="line.8184"></a>
 <span class="sourceLineNo">8185</span>  }<a name="line.8185"></a>
 <span class="sourceLineNo">8186</span><a name="line.8186"></a>
-<span class="sourceLineNo">8187</span>  /**<a name="line.8187"></a>
-<span class="sourceLineNo">8188</span>   * {@inheritDoc}<a name="line.8188"></a>
-<span class="sourceLineNo">8189</span>   */<a name="line.8189"></a>
-<span class="sourceLineNo">8190</span>  @Override<a name="line.8190"></a>
-<span class="sourceLineNo">8191</span>  public void onConfigurationChange(Configuration conf) {<a name="line.8191"></a>
-<span class="sourceLineNo">8192</span>    // Do nothing for now.<a name="line.8192"></a>
+<span class="sourceLineNo">8187</span>  public void decrementCompactionsQueuedCount() {<a name="line.8187"></a>
+<span class="sourceLineNo">8188</span>    compactionsQueued.decrementAndGet();<a name="line.8188"></a>
+<span class="sourceLineNo">8189</span>  }<a name="line.8189"></a>
+<span class="sourceLineNo">8190</span><a name="line.8190"></a>
+<span class="sourceLineNo">8191</span>  public void incrementFlushesQueuedCount() {<a name="line.8191"></a>
+<span class="sourceLineNo">8192</span>    flushesQueued.incrementAndGet();<a name="line.8192"></a>
 <span class="sourceLineNo">8193</span>  }<a name="line.8193"></a>
 <span class="sourceLineNo">8194</span><a name="line.8194"></a>
-<span class="sourceLineNo">8195</span>  /**<a name="line.8195"></a>
-<span class="sourceLineNo">8196</span>   * {@inheritDoc}<a name="line.8196"></a>
-<span class="sourceLineNo">8197</span>   */<a name="line.8197"></a>
-<span class="sourceLineNo">8198</span>  @Override<a name="line.8198"></a>
-<span class="sourceLineNo">8199</span>  public void registerChildren(ConfigurationManager manager) {<a name="line.8199"></a>
-<span class="sourceLineNo">8200</span>    configurationManager = Optional.of(manager);<a name="line.8200"></a>
-<span class="sourceLineNo">8201</span>    for (Store s : this.stores.values()) {<a name="line.8201"></a>
-<span class="sourceLineNo">8202</span>      configurationManager.get().registerObserver(s);<a name="line.8202"></a>
-<span class="sourceLineNo">8203</span>    }<a name="line.8203"></a>
-<span class="sourceLineNo">8204</span>  }<a name="line.8204"></a>
-<span class="sourceLineNo">8205</span><a name="line.8205"></a>
-<span class="sourceLineNo">8206</span>  /**<a name="line.8206"></a>
-<span class="sourceLineNo">8207</span>   * {@inheritDoc}<a name="line.8207"></a>
-<span class="sourceLineNo">8208</span>   */<a name="line.8208"></a>
-<span class="sourceLineNo">8209</span>  @Override<a name="line.8209"></a>
-<span class="sourceLineNo">8210</span>  public void deregisterChildren(ConfigurationManager manager) {<a name="line.8210"></a>
-<span class="sourceLineNo">8211</span>    for (Store s : this.stores.values()) {<a name="line.8211"></a>
-<span class="sourceLineNo">8212</span>      configurationManager.get().deregisterObserver(s);<a name="line.8212"></a>
-<span class="sourceLineNo">8213</span>    }<a name="line.8213"></a>
-<span class="sourceLineNo">8214</span>  }<a name="line.8214"></a>
-<span class="sourceLineNo">8215</span><a name="line.8215"></a>
-<span class="sourceLineNo">8216</span>  @Override<a name="line.8216"></a>
-<span class="sourceLineNo">8217</span>  public CellComparator getCellComparator() {<a name="line.8217"></a>
-<span class="sourceLineNo">8218</span>    return this.getRegionInfo().isMetaRegion() ? CellComparator.META_COMPARATOR<a name="line.8218"></a>
-<span class="sourceLineNo">8219</span>        : CellComparator.COMPARATOR;<a name="line.8219"></a>
-<span class="sourceLineNo">8220</span>  }<a name="line.8220"></a>
-<span class="sourceLineNo">8221</span><a name="line.8221"></a>
-<span class="sourceLineNo">8222</span>  public long getMemstoreFlushSize() {<a name="line.8222"></a>
-<span class="sourceLineNo">8223</span>    return this.memstoreFlushSize;<a name="line.8223"></a>
-<span class="sourceLineNo">8224</span>  }<a name="line.8224"></a>
-<span class="sourceLineNo">8225</span><a name="line.8225"></a>
-<span class="sourceLineNo">8226</span>  //// method for debugging tests<a name="line.8226"></a>
-<span class="sourceLineNo">8227</span>  void throwException(String title, String regionName) {<a name="line.8227"></a>
-<span class="sourceLineNo">8228</span>    StringBuffer buf = new StringBuffer();<a name="line.8228"></a>
-<span class="sourceLineNo">8229</span>    buf.append(title + ", ");<a name="line.8229"></a>
-<span class="sourceLineNo">8230</span>    buf.append(getRegionInfo().toString());<a name="line.8230"></a>
-<span class="sourceLineNo">8231</span>    buf.append(getRegionInfo().isMetaRegion() ? " meta region " : " ");<a name="line.8231"></a>
-<span class="sourceLineNo">8232</span>    buf.append(getRegionInfo().isMetaTable() ? " meta table " : " ");<a name="line.8232"></a>
-<span class="sourceLineNo">8233</span>    buf.append("stores: ");<a name="line.8233"></a>
-<span class="sourceLineNo">8234</span>    for (Store s : getStores()) {<a name="line.8234"></a>
-<span class="sourceLineNo">8235</span>      buf.append(s.getColumnFamilyDescriptor().getNameAsString());<a name="line.8235"></a>
-<span class="sourceLineNo">8236</span>      buf.append(" size: ");<a name="line.8236"></a>
-<span class="sourceLineNo">8237</span>      buf.append(s.getSizeOfMemStore().getDataSize());<a name="line.8237"></a>
-<span class="sourceLineNo">8238</span>      buf.append(" ");<a name="line.8238"></a>
-<span class="sourceLineNo">8239</span>    }<a name="line.8239"></a>
-<span class="sourceLineNo">8240</span>    buf.append("end-of-stores");<a name="line.8240"></a>
-<span class="sourceLineNo">8241</span>    buf.append(", memstore size ");<a name="line.8241"></a>
-<span class="sourceLineNo">8242</span>    buf.append(getMemstoreSize());<a name="line.8242"></a>
-<span class="sourceLineNo">8243</span>    if (getRegionInfo().getRegionNameAsString().startsWith(regionName)) {<a name="line.8243"></a>
-<span class="sourceLineNo">8244</span>      throw new RuntimeException(buf.toString());<a name="line.8244"></a>
-<span class="sourceLineNo">8245</span>    }<a name="line.8245"></a>
-<span class="sourceLineNo">8246</span>  }<a name="line.8246"></a>
-<span class="sourceLineNo">8247</span>}<a name="line.8247"></a>
+<span class="sourceLineNo">8195</span>  @VisibleForTesting<a name="line.8195"></a>
+<span class="sourceLineNo">8196</span>  public long getReadPoint() {<a name="line.8196"></a>
+<span class="sourceLineNo">8197</span>    return getReadPoint(IsolationLevel.READ_COMMITTED);<a name="line.8197"></a>
+<span class="sourceLineNo">8198</span>  }<a name="line.8198"></a>
+<span class="sourceLineNo">8199</span><a name="line.8199"></a>
+<span class="sourceLineNo">8200</span>  /**<a name="line.8200"></a>
+<span class="sourceLineNo">8201</span>   * {@inheritDoc}<a name="line.8201"></a>
+<span class="sourceLineNo">8202</span>   */<a name="line.8202"></a>
+<span class="sourceLineNo">8203</span>  @Override<a name="line.8203"></a>
+<span class="sourceLineNo">8204</span>  public void onConfigurationChange(Configuration conf) {<a name="line.8204"></a>
+<span class="sourceLineNo">8205</span>    // Do nothing for now.<a name="line.8205"></a>
+<span class="sourceLineNo">8206</span>  }<a name="line.8206"></a>
+<span class="sourceLineNo">8207</span><a name="line.8207"></a>
+<span class="sourceLineNo">8208</span>  /**<a name="line.8208"></a>
+<span class="sourceLineNo">8209</span>   * {@inheritDoc}<a name="line.8209"></a>
+<span class="sourceLineNo">8210</span>   */<a name="line.8210"></a>
+<span class="sourceLineNo">8211</span>  @Override<a name="line.8211"></a>
+<span class="sourceLineNo">8212</span>  public void registerChildren(ConfigurationManager manager) {<a name="line.8212"></a>
+<span class="sourceLineNo">8213</span>    configurationManager = Optional.of(manager);<a name="line.8213"></a>
+<span class="sourceLineNo">8214</span>    for (Store s : this.stores.values()) {<a name="line.8214"></a>
+<span class="sourceLineNo">8215</span>      configurationManager.get().registerObserver(s);<a name="line.8215"></a>
+<span class="sourceLineNo">8216</span>    }<a name="line.8216"></a>
+<span class="sourceLineNo">8217</span>  }<a name="line.8217"></a>
+<span class="sourceLineNo">8218</span><a name="line.8218"></a>
+<span class="sourceLineNo">8219</span>  /**<a name="line.8219"></a>
+<span class="sourceLineNo">8220</span>   * {@inheritDoc}<a name="line.8220"></a>
+<span class="sourceLineNo">8221</span>   */<a name="line.8221"></a>
+<span class="sourceLineNo">8222</span>  @Override<a name="line.8222"></a>
+<span class="sourceLineNo">8223</span>  public void deregisterChildren(ConfigurationManager manager) {<a name="line.8223"></a>
+<span class="sourceLineNo">8224</span>    for (Store s : this.stores.values()) {<a name="line.8224"></a>
+<span class="sourceLineNo">8225</span>      configurationManager.get().deregisterObserver(s);<a name="line.8225"></a>
+<span class="sourceLineNo">8226</span>    }<a name="line.8226"></a>
+<span class="sourceLineNo">8227</span>  }<a name="line.8227"></a>
+<span class="sourceLineNo">8228</span><a name="line.8228"></a>
+<span class="sourceLineNo">8229</span>  @Override<a name="line.8229"></a>
+<span class="sourceLineNo">8230</span>  public CellComparator getCellComparator() {<a name="line.8230"></a>
+<span class="sourceLineNo">8231</span>    return this.getRegionInfo().isMetaRegion() ? CellComparator.META_COMPARATOR<a name="line.8231"></a>
+<span class="sourceLineNo">8232</span>        : CellComparator.COMPARATOR;<a name="line.8232"></a>
+<span class="sourceLineNo">8233</span>  }<a name="line.8233"></a>
+<span class="sourceLineNo">8234</span><a name="line.8234"></a>
+<span class="sourceLineNo">8235</span>  public long getMemstoreFlushSize() {<a name="line.8235"></a>
+<span class="sourceLineNo">8236</span>    return this.memstoreFlushSize;<a name="line.8236"></a>
+<span class="sourceLineNo">8237</span>  }<a name="line.8237"></a>
+<span class="sourceLineNo">8238</span><a name="line.8238"></a>
+<span class="sourceLineNo">8239</span>  //// method for debugging tests<a name="line.8239"></a>
+<span class="sourceLineNo">8240</span>  void throwException(String title, String regionName) {<a name="line.8240"></a>
+<span class="sourceLineNo">8241</span>    StringBuffer buf = new StringBuffer();<a name="line.8241"></a>
+<span class="sourceLineNo">8242</span>    buf.append(title + ", ");<a name="line.8242"></a>
+<span class="sourceLineNo">8243</span>    buf.append(getRegionInfo().toString());<a name="line.8243"></a>
+<span class="sourceLineNo">8244</span>    buf.append(getRegionInfo().isMetaRegion() ? " meta region " : " ");<a name="line.8244"></a>
+<span class="sourceLineNo">8245</span>    buf.append(getRegionInfo().isMetaTable() ? " meta table " : " ");<a name="line.8245"></a>
+<span class="sourceLineNo">8246</span>    buf.append("stores: ");<a name="line.8246"></a>
+<span class="sourceLineNo">8247</span>    for (Store s : getStores()) {<a name="line.8247"></a>
+<span class="sourceLineNo">8248</span>      buf.append(s.getColumnFamilyDescriptor().getNameAsString());<a name="line.8248"></a>
+<span class="sourceLineNo">8249</span>      buf.append(" size: ");<a name="line.8249"></a>
+<span class="sourceLineNo">8250</span>      buf.append(s.getSizeOfMemStore().getDataSize());<a name="line.8250"></a>
+<span class="sourceLineNo">8251</span>      buf.append(" ");<a name="line.8251"></a>
+<span class="sourceLineNo">8252</span>    }<a name="line.8252"></a>
+<span class="sourceLineNo">8253</span>    buf.append("end-of-stores");<a name="line.8253"></a>
+<span class="sourceLineNo">8254</span>    buf.append(", memstore size ");<a name="line.8254"></a>
+<span class="sourceLineNo">8255</span>    buf.append(getMemstoreSize());<a name="line.8255"></a>
+<span class="sourceLineNo">8256</span>    if (getRegionInfo().getRegionNameAsString().startsWith(regionName)) {<a name="line.8256"></a>
+<span class="sourceLineNo">8257</span>      throw new RuntimeException(buf.toString());<a name="line.8257"></a>
+<span class="sourceLineNo">8258</span>    }<a name="line.8258"></a>
+<span class="sourceLineNo">8259</span>  }<a name="line.8259"></a>
+<span class="sourceLineNo">8260</span>}<a name="line.8260"></a>
 
 
 


[20/33] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.ObservedExceptionsInBatch.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.ObservedExceptionsInBatch.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.ObservedExceptionsInBatch.html
index f6a717e..a701ece 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.ObservedExceptionsInBatch.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.ObservedExceptionsInBatch.html
@@ -7930,329 +7930,342 @@
 <span class="sourceLineNo">7922</span>      case DELETE:<a name="line.7922"></a>
 <span class="sourceLineNo">7923</span>      case BATCH_MUTATE:<a name="line.7923"></a>
 <span class="sourceLineNo">7924</span>      case COMPACT_REGION:<a name="line.7924"></a>
-<span class="sourceLineNo">7925</span>        // when a region is in recovering state, no read, split or merge is allowed<a name="line.7925"></a>
-<span class="sourceLineNo">7926</span>        if (isRecovering() &amp;&amp; (this.disallowWritesInRecovering ||<a name="line.7926"></a>
-<span class="sourceLineNo">7927</span>              (op != Operation.PUT &amp;&amp; op != Operation.DELETE &amp;&amp; op != Operation.BATCH_MUTATE))) {<a name="line.7927"></a>
-<span class="sourceLineNo">7928</span>          throw new RegionInRecoveryException(getRegionInfo().getRegionNameAsString() +<a name="line.7928"></a>
-<span class="sourceLineNo">7929</span>            " is recovering; cannot take reads");<a name="line.7929"></a>
-<span class="sourceLineNo">7930</span>        }<a name="line.7930"></a>
-<span class="sourceLineNo">7931</span>        break;<a name="line.7931"></a>
-<span class="sourceLineNo">7932</span>      default:<a name="line.7932"></a>
-<span class="sourceLineNo">7933</span>        break;<a name="line.7933"></a>
-<span class="sourceLineNo">7934</span>    }<a name="line.7934"></a>
-<span class="sourceLineNo">7935</span>    if (op == Operation.MERGE_REGION || op == Operation.SPLIT_REGION<a name="line.7935"></a>
-<span class="sourceLineNo">7936</span>        || op == Operation.COMPACT_REGION) {<a name="line.7936"></a>
-<span class="sourceLineNo">7937</span>      // split, merge or compact region doesn't need to check the closing/closed state or lock the<a name="line.7937"></a>
-<span class="sourceLineNo">7938</span>      // region<a name="line.7938"></a>
-<span class="sourceLineNo">7939</span>      return;<a name="line.7939"></a>
-<span class="sourceLineNo">7940</span>    }<a name="line.7940"></a>
-<span class="sourceLineNo">7941</span>    if (this.closing.get()) {<a name="line.7941"></a>
-<span class="sourceLineNo">7942</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.7942"></a>
-<span class="sourceLineNo">7943</span>    }<a name="line.7943"></a>
-<span class="sourceLineNo">7944</span>    lock(lock.readLock());<a name="line.7944"></a>
-<span class="sourceLineNo">7945</span>    if (this.closed.get()) {<a name="line.7945"></a>
-<span class="sourceLineNo">7946</span>      lock.readLock().unlock();<a name="line.7946"></a>
-<span class="sourceLineNo">7947</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.7947"></a>
-<span class="sourceLineNo">7948</span>    }<a name="line.7948"></a>
-<span class="sourceLineNo">7949</span>    try {<a name="line.7949"></a>
-<span class="sourceLineNo">7950</span>      if (coprocessorHost != null) {<a name="line.7950"></a>
-<span class="sourceLineNo">7951</span>        coprocessorHost.postStartRegionOperation(op);<a name="line.7951"></a>
-<span class="sourceLineNo">7952</span>      }<a name="line.7952"></a>
-<span class="sourceLineNo">7953</span>    } catch (Exception e) {<a name="line.7953"></a>
-<span class="sourceLineNo">7954</span>      lock.readLock().unlock();<a name="line.7954"></a>
-<span class="sourceLineNo">7955</span>      throw new IOException(e);<a name="line.7955"></a>
-<span class="sourceLineNo">7956</span>    }<a name="line.7956"></a>
-<span class="sourceLineNo">7957</span>  }<a name="line.7957"></a>
-<span class="sourceLineNo">7958</span><a name="line.7958"></a>
-<span class="sourceLineNo">7959</span>  @Override<a name="line.7959"></a>
-<span class="sourceLineNo">7960</span>  public void closeRegionOperation() throws IOException {<a name="line.7960"></a>
-<span class="sourceLineNo">7961</span>    closeRegionOperation(Operation.ANY);<a name="line.7961"></a>
-<span class="sourceLineNo">7962</span>  }<a name="line.7962"></a>
-<span class="sourceLineNo">7963</span><a name="line.7963"></a>
-<span class="sourceLineNo">7964</span>  /**<a name="line.7964"></a>
-<span class="sourceLineNo">7965</span>   * Closes the lock. This needs to be called in the finally block corresponding<a name="line.7965"></a>
-<span class="sourceLineNo">7966</span>   * to the try block of {@link #startRegionOperation(Operation)}<a name="line.7966"></a>
-<span class="sourceLineNo">7967</span>   * @throws IOException<a name="line.7967"></a>
-<span class="sourceLineNo">7968</span>   */<a name="line.7968"></a>
-<span class="sourceLineNo">7969</span>  public void closeRegionOperation(Operation operation) throws IOException {<a name="line.7969"></a>
-<span class="sourceLineNo">7970</span>    lock.readLock().unlock();<a name="line.7970"></a>
-<span class="sourceLineNo">7971</span>    if (coprocessorHost != null) {<a name="line.7971"></a>
-<span class="sourceLineNo">7972</span>      coprocessorHost.postCloseRegionOperation(operation);<a name="line.7972"></a>
-<span class="sourceLineNo">7973</span>    }<a name="line.7973"></a>
-<span class="sourceLineNo">7974</span>  }<a name="line.7974"></a>
-<span class="sourceLineNo">7975</span><a name="line.7975"></a>
-<span class="sourceLineNo">7976</span>  /**<a name="line.7976"></a>
-<span class="sourceLineNo">7977</span>   * This method needs to be called before any public call that reads or<a name="line.7977"></a>
-<span class="sourceLineNo">7978</span>   * modifies stores in bulk. It has to be called just before a try.<a name="line.7978"></a>
-<span class="sourceLineNo">7979</span>   * #closeBulkRegionOperation needs to be called in the try's finally block<a name="line.7979"></a>
-<span class="sourceLineNo">7980</span>   * Acquires a writelock and checks if the region is closing or closed.<a name="line.7980"></a>
-<span class="sourceLineNo">7981</span>   * @throws NotServingRegionException when the region is closing or closed<a name="line.7981"></a>
-<span class="sourceLineNo">7982</span>   * @throws RegionTooBusyException if failed to get the lock in time<a name="line.7982"></a>
-<span class="sourceLineNo">7983</span>   * @throws InterruptedIOException if interrupted while waiting for a lock<a name="line.7983"></a>
-<span class="sourceLineNo">7984</span>   */<a name="line.7984"></a>
-<span class="sourceLineNo">7985</span>  private void startBulkRegionOperation(boolean writeLockNeeded)<a name="line.7985"></a>
-<span class="sourceLineNo">7986</span>      throws NotServingRegionException, RegionTooBusyException, InterruptedIOException {<a name="line.7986"></a>
-<span class="sourceLineNo">7987</span>    if (this.closing.get()) {<a name="line.7987"></a>
-<span class="sourceLineNo">7988</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.7988"></a>
-<span class="sourceLineNo">7989</span>    }<a name="line.7989"></a>
-<span class="sourceLineNo">7990</span>    if (writeLockNeeded) lock(lock.writeLock());<a name="line.7990"></a>
-<span class="sourceLineNo">7991</span>    else lock(lock.readLock());<a name="line.7991"></a>
-<span class="sourceLineNo">7992</span>    if (this.closed.get()) {<a name="line.7992"></a>
-<span class="sourceLineNo">7993</span>      if (writeLockNeeded) lock.writeLock().unlock();<a name="line.7993"></a>
-<span class="sourceLineNo">7994</span>      else lock.readLock().unlock();<a name="line.7994"></a>
-<span class="sourceLineNo">7995</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.7995"></a>
-<span class="sourceLineNo">7996</span>    }<a name="line.7996"></a>
-<span class="sourceLineNo">7997</span>  }<a name="line.7997"></a>
-<span class="sourceLineNo">7998</span><a name="line.7998"></a>
-<span class="sourceLineNo">7999</span>  /**<a name="line.7999"></a>
-<span class="sourceLineNo">8000</span>   * Closes the lock. This needs to be called in the finally block corresponding<a name="line.8000"></a>
-<span class="sourceLineNo">8001</span>   * to the try block of #startRegionOperation<a name="line.8001"></a>
-<span class="sourceLineNo">8002</span>   */<a name="line.8002"></a>
-<span class="sourceLineNo">8003</span>  private void closeBulkRegionOperation(){<a name="line.8003"></a>
-<span class="sourceLineNo">8004</span>    if (lock.writeLock().isHeldByCurrentThread()) lock.writeLock().unlock();<a name="line.8004"></a>
-<span class="sourceLineNo">8005</span>    else lock.readLock().unlock();<a name="line.8005"></a>
-<span class="sourceLineNo">8006</span>  }<a name="line.8006"></a>
-<span class="sourceLineNo">8007</span><a name="line.8007"></a>
-<span class="sourceLineNo">8008</span>  /**<a name="line.8008"></a>
-<span class="sourceLineNo">8009</span>   * Update LongAdders for number of puts without wal and the size of possible data loss.<a name="line.8009"></a>
-<span class="sourceLineNo">8010</span>   * These information are exposed by the region server metrics.<a name="line.8010"></a>
-<span class="sourceLineNo">8011</span>   */<a name="line.8011"></a>
-<span class="sourceLineNo">8012</span>  private void recordMutationWithoutWal(final Map&lt;byte [], List&lt;Cell&gt;&gt; familyMap) {<a name="line.8012"></a>
-<span class="sourceLineNo">8013</span>    numMutationsWithoutWAL.increment();<a name="line.8013"></a>
-<span class="sourceLineNo">8014</span>    if (numMutationsWithoutWAL.sum() &lt;= 1) {<a name="line.8014"></a>
-<span class="sourceLineNo">8015</span>      LOG.info("writing data to region " + this +<a name="line.8015"></a>
-<span class="sourceLineNo">8016</span>               " with WAL disabled. Data may be lost in the event of a crash.");<a name="line.8016"></a>
-<span class="sourceLineNo">8017</span>    }<a name="line.8017"></a>
-<span class="sourceLineNo">8018</span><a name="line.8018"></a>
-<span class="sourceLineNo">8019</span>    long mutationSize = 0;<a name="line.8019"></a>
-<span class="sourceLineNo">8020</span>    for (List&lt;Cell&gt; cells: familyMap.values()) {<a name="line.8020"></a>
-<span class="sourceLineNo">8021</span>      assert cells instanceof RandomAccess;<a name="line.8021"></a>
-<span class="sourceLineNo">8022</span>      int listSize = cells.size();<a name="line.8022"></a>
-<span class="sourceLineNo">8023</span>      for (int i=0; i &lt; listSize; i++) {<a name="line.8023"></a>
-<span class="sourceLineNo">8024</span>        Cell cell = cells.get(i);<a name="line.8024"></a>
-<span class="sourceLineNo">8025</span>        mutationSize += KeyValueUtil.length(cell);<a name="line.8025"></a>
-<span class="sourceLineNo">8026</span>      }<a name="line.8026"></a>
-<span class="sourceLineNo">8027</span>    }<a name="line.8027"></a>
-<span class="sourceLineNo">8028</span><a name="line.8028"></a>
-<span class="sourceLineNo">8029</span>    dataInMemoryWithoutWAL.add(mutationSize);<a name="line.8029"></a>
-<span class="sourceLineNo">8030</span>  }<a name="line.8030"></a>
+<span class="sourceLineNo">7925</span>      case SNAPSHOT:<a name="line.7925"></a>
+<span class="sourceLineNo">7926</span>        // when a region is in recovering state, no read, split, merge or snapshot is allowed<a name="line.7926"></a>
+<span class="sourceLineNo">7927</span>        if (isRecovering() &amp;&amp; (this.disallowWritesInRecovering ||<a name="line.7927"></a>
+<span class="sourceLineNo">7928</span>              (op != Operation.PUT &amp;&amp; op != Operation.DELETE &amp;&amp; op != Operation.BATCH_MUTATE))) {<a name="line.7928"></a>
+<span class="sourceLineNo">7929</span>          throw new RegionInRecoveryException(getRegionInfo().getRegionNameAsString() +<a name="line.7929"></a>
+<span class="sourceLineNo">7930</span>            " is recovering; cannot take reads");<a name="line.7930"></a>
+<span class="sourceLineNo">7931</span>        }<a name="line.7931"></a>
+<span class="sourceLineNo">7932</span>        break;<a name="line.7932"></a>
+<span class="sourceLineNo">7933</span>      default:<a name="line.7933"></a>
+<span class="sourceLineNo">7934</span>        break;<a name="line.7934"></a>
+<span class="sourceLineNo">7935</span>    }<a name="line.7935"></a>
+<span class="sourceLineNo">7936</span>    if (op == Operation.MERGE_REGION || op == Operation.SPLIT_REGION<a name="line.7936"></a>
+<span class="sourceLineNo">7937</span>        || op == Operation.COMPACT_REGION) {<a name="line.7937"></a>
+<span class="sourceLineNo">7938</span>      // split, merge or compact region doesn't need to check the closing/closed state or lock the<a name="line.7938"></a>
+<span class="sourceLineNo">7939</span>      // region<a name="line.7939"></a>
+<span class="sourceLineNo">7940</span>      return;<a name="line.7940"></a>
+<span class="sourceLineNo">7941</span>    }<a name="line.7941"></a>
+<span class="sourceLineNo">7942</span>    if (this.closing.get()) {<a name="line.7942"></a>
+<span class="sourceLineNo">7943</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.7943"></a>
+<span class="sourceLineNo">7944</span>    }<a name="line.7944"></a>
+<span class="sourceLineNo">7945</span>    lock(lock.readLock());<a name="line.7945"></a>
+<span class="sourceLineNo">7946</span>    if (this.closed.get()) {<a name="line.7946"></a>
+<span class="sourceLineNo">7947</span>      lock.readLock().unlock();<a name="line.7947"></a>
+<span class="sourceLineNo">7948</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.7948"></a>
+<span class="sourceLineNo">7949</span>    }<a name="line.7949"></a>
+<span class="sourceLineNo">7950</span>    // The unit for snapshot is a region. So, all stores for this region must be<a name="line.7950"></a>
+<span class="sourceLineNo">7951</span>    // prepared for snapshot operation before proceeding.<a name="line.7951"></a>
+<span class="sourceLineNo">7952</span>    if (op == Operation.SNAPSHOT) {<a name="line.7952"></a>
+<span class="sourceLineNo">7953</span>      for (Store store : stores.values()) {<a name="line.7953"></a>
+<span class="sourceLineNo">7954</span>        if (store instanceof HStore) {<a name="line.7954"></a>
+<span class="sourceLineNo">7955</span>          ((HStore)store).preSnapshotOperation();<a name="line.7955"></a>
+<span class="sourceLineNo">7956</span>        }<a name="line.7956"></a>
+<span class="sourceLineNo">7957</span>      }<a name="line.7957"></a>
+<span class="sourceLineNo">7958</span>    }<a name="line.7958"></a>
+<span class="sourceLineNo">7959</span>    try {<a name="line.7959"></a>
+<span class="sourceLineNo">7960</span>      if (coprocessorHost != null) {<a name="line.7960"></a>
+<span class="sourceLineNo">7961</span>        coprocessorHost.postStartRegionOperation(op);<a name="line.7961"></a>
+<span class="sourceLineNo">7962</span>      }<a name="line.7962"></a>
+<span class="sourceLineNo">7963</span>    } catch (Exception e) {<a name="line.7963"></a>
+<span class="sourceLineNo">7964</span>      lock.readLock().unlock();<a name="line.7964"></a>
+<span class="sourceLineNo">7965</span>      throw new IOException(e);<a name="line.7965"></a>
+<span class="sourceLineNo">7966</span>    }<a name="line.7966"></a>
+<span class="sourceLineNo">7967</span>  }<a name="line.7967"></a>
+<span class="sourceLineNo">7968</span><a name="line.7968"></a>
+<span class="sourceLineNo">7969</span>  @Override<a name="line.7969"></a>
+<span class="sourceLineNo">7970</span>  public void closeRegionOperation() throws IOException {<a name="line.7970"></a>
+<span class="sourceLineNo">7971</span>    closeRegionOperation(Operation.ANY);<a name="line.7971"></a>
+<span class="sourceLineNo">7972</span>  }<a name="line.7972"></a>
+<span class="sourceLineNo">7973</span><a name="line.7973"></a>
+<span class="sourceLineNo">7974</span>  @Override<a name="line.7974"></a>
+<span class="sourceLineNo">7975</span>  public void closeRegionOperation(Operation operation) throws IOException {<a name="line.7975"></a>
+<span class="sourceLineNo">7976</span>    if (operation == Operation.SNAPSHOT) {<a name="line.7976"></a>
+<span class="sourceLineNo">7977</span>      for (Store store: stores.values()) {<a name="line.7977"></a>
+<span class="sourceLineNo">7978</span>        if (store instanceof HStore) {<a name="line.7978"></a>
+<span class="sourceLineNo">7979</span>          ((HStore)store).postSnapshotOperation();<a name="line.7979"></a>
+<span class="sourceLineNo">7980</span>        }<a name="line.7980"></a>
+<span class="sourceLineNo">7981</span>      }<a name="line.7981"></a>
+<span class="sourceLineNo">7982</span>    }<a name="line.7982"></a>
+<span class="sourceLineNo">7983</span>    lock.readLock().unlock();<a name="line.7983"></a>
+<span class="sourceLineNo">7984</span>    if (coprocessorHost != null) {<a name="line.7984"></a>
+<span class="sourceLineNo">7985</span>      coprocessorHost.postCloseRegionOperation(operation);<a name="line.7985"></a>
+<span class="sourceLineNo">7986</span>    }<a name="line.7986"></a>
+<span class="sourceLineNo">7987</span>  }<a name="line.7987"></a>
+<span class="sourceLineNo">7988</span><a name="line.7988"></a>
+<span class="sourceLineNo">7989</span>  /**<a name="line.7989"></a>
+<span class="sourceLineNo">7990</span>   * This method needs to be called before any public call that reads or<a name="line.7990"></a>
+<span class="sourceLineNo">7991</span>   * modifies stores in bulk. It has to be called just before a try.<a name="line.7991"></a>
+<span class="sourceLineNo">7992</span>   * #closeBulkRegionOperation needs to be called in the try's finally block<a name="line.7992"></a>
+<span class="sourceLineNo">7993</span>   * Acquires a writelock and checks if the region is closing or closed.<a name="line.7993"></a>
+<span class="sourceLineNo">7994</span>   * @throws NotServingRegionException when the region is closing or closed<a name="line.7994"></a>
+<span class="sourceLineNo">7995</span>   * @throws RegionTooBusyException if failed to get the lock in time<a name="line.7995"></a>
+<span class="sourceLineNo">7996</span>   * @throws InterruptedIOException if interrupted while waiting for a lock<a name="line.7996"></a>
+<span class="sourceLineNo">7997</span>   */<a name="line.7997"></a>
+<span class="sourceLineNo">7998</span>  private void startBulkRegionOperation(boolean writeLockNeeded)<a name="line.7998"></a>
+<span class="sourceLineNo">7999</span>      throws NotServingRegionException, RegionTooBusyException, InterruptedIOException {<a name="line.7999"></a>
+<span class="sourceLineNo">8000</span>    if (this.closing.get()) {<a name="line.8000"></a>
+<span class="sourceLineNo">8001</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.8001"></a>
+<span class="sourceLineNo">8002</span>    }<a name="line.8002"></a>
+<span class="sourceLineNo">8003</span>    if (writeLockNeeded) lock(lock.writeLock());<a name="line.8003"></a>
+<span class="sourceLineNo">8004</span>    else lock(lock.readLock());<a name="line.8004"></a>
+<span class="sourceLineNo">8005</span>    if (this.closed.get()) {<a name="line.8005"></a>
+<span class="sourceLineNo">8006</span>      if (writeLockNeeded) lock.writeLock().unlock();<a name="line.8006"></a>
+<span class="sourceLineNo">8007</span>      else lock.readLock().unlock();<a name="line.8007"></a>
+<span class="sourceLineNo">8008</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.8008"></a>
+<span class="sourceLineNo">8009</span>    }<a name="line.8009"></a>
+<span class="sourceLineNo">8010</span>  }<a name="line.8010"></a>
+<span class="sourceLineNo">8011</span><a name="line.8011"></a>
+<span class="sourceLineNo">8012</span>  /**<a name="line.8012"></a>
+<span class="sourceLineNo">8013</span>   * Closes the lock. This needs to be called in the finally block corresponding<a name="line.8013"></a>
+<span class="sourceLineNo">8014</span>   * to the try block of #startRegionOperation<a name="line.8014"></a>
+<span class="sourceLineNo">8015</span>   */<a name="line.8015"></a>
+<span class="sourceLineNo">8016</span>  private void closeBulkRegionOperation(){<a name="line.8016"></a>
+<span class="sourceLineNo">8017</span>    if (lock.writeLock().isHeldByCurrentThread()) lock.writeLock().unlock();<a name="line.8017"></a>
+<span class="sourceLineNo">8018</span>    else lock.readLock().unlock();<a name="line.8018"></a>
+<span class="sourceLineNo">8019</span>  }<a name="line.8019"></a>
+<span class="sourceLineNo">8020</span><a name="line.8020"></a>
+<span class="sourceLineNo">8021</span>  /**<a name="line.8021"></a>
+<span class="sourceLineNo">8022</span>   * Update LongAdders for number of puts without wal and the size of possible data loss.<a name="line.8022"></a>
+<span class="sourceLineNo">8023</span>   * These information are exposed by the region server metrics.<a name="line.8023"></a>
+<span class="sourceLineNo">8024</span>   */<a name="line.8024"></a>
+<span class="sourceLineNo">8025</span>  private void recordMutationWithoutWal(final Map&lt;byte [], List&lt;Cell&gt;&gt; familyMap) {<a name="line.8025"></a>
+<span class="sourceLineNo">8026</span>    numMutationsWithoutWAL.increment();<a name="line.8026"></a>
+<span class="sourceLineNo">8027</span>    if (numMutationsWithoutWAL.sum() &lt;= 1) {<a name="line.8027"></a>
+<span class="sourceLineNo">8028</span>      LOG.info("writing data to region " + this +<a name="line.8028"></a>
+<span class="sourceLineNo">8029</span>               " with WAL disabled. Data may be lost in the event of a crash.");<a name="line.8029"></a>
+<span class="sourceLineNo">8030</span>    }<a name="line.8030"></a>
 <span class="sourceLineNo">8031</span><a name="line.8031"></a>
-<span class="sourceLineNo">8032</span>  private void lock(final Lock lock)<a name="line.8032"></a>
-<span class="sourceLineNo">8033</span>      throws RegionTooBusyException, InterruptedIOException {<a name="line.8033"></a>
-<span class="sourceLineNo">8034</span>    lock(lock, 1);<a name="line.8034"></a>
-<span class="sourceLineNo">8035</span>  }<a name="line.8035"></a>
-<span class="sourceLineNo">8036</span><a name="line.8036"></a>
-<span class="sourceLineNo">8037</span>  /**<a name="line.8037"></a>
-<span class="sourceLineNo">8038</span>   * Try to acquire a lock.  Throw RegionTooBusyException<a name="line.8038"></a>
-<span class="sourceLineNo">8039</span>   * if failed to get the lock in time. Throw InterruptedIOException<a name="line.8039"></a>
-<span class="sourceLineNo">8040</span>   * if interrupted while waiting for the lock.<a name="line.8040"></a>
-<span class="sourceLineNo">8041</span>   */<a name="line.8041"></a>
-<span class="sourceLineNo">8042</span>  private void lock(final Lock lock, final int multiplier)<a name="line.8042"></a>
-<span class="sourceLineNo">8043</span>      throws RegionTooBusyException, InterruptedIOException {<a name="line.8043"></a>
-<span class="sourceLineNo">8044</span>    try {<a name="line.8044"></a>
-<span class="sourceLineNo">8045</span>      final long waitTime = Math.min(maxBusyWaitDuration,<a name="line.8045"></a>
-<span class="sourceLineNo">8046</span>          busyWaitDuration * Math.min(multiplier, maxBusyWaitMultiplier));<a name="line.8046"></a>
-<span class="sourceLineNo">8047</span>      if (!lock.tryLock(waitTime, TimeUnit.MILLISECONDS)) {<a name="line.8047"></a>
-<span class="sourceLineNo">8048</span>        throw new RegionTooBusyException(<a name="line.8048"></a>
-<span class="sourceLineNo">8049</span>            "failed to get a lock in " + waitTime + " ms. " +<a name="line.8049"></a>
-<span class="sourceLineNo">8050</span>                "regionName=" + (this.getRegionInfo() == null ? "unknown" :<a name="line.8050"></a>
-<span class="sourceLineNo">8051</span>                this.getRegionInfo().getRegionNameAsString()) +<a name="line.8051"></a>
-<span class="sourceLineNo">8052</span>                ", server=" + (this.getRegionServerServices() == null ? "unknown" :<a name="line.8052"></a>
-<span class="sourceLineNo">8053</span>                this.getRegionServerServices().getServerName()));<a name="line.8053"></a>
-<span class="sourceLineNo">8054</span>      }<a name="line.8054"></a>
-<span class="sourceLineNo">8055</span>    } catch (InterruptedException ie) {<a name="line.8055"></a>
-<span class="sourceLineNo">8056</span>      LOG.info("Interrupted while waiting for a lock");<a name="line.8056"></a>
-<span class="sourceLineNo">8057</span>      InterruptedIOException iie = new InterruptedIOException();<a name="line.8057"></a>
-<span class="sourceLineNo">8058</span>      iie.initCause(ie);<a name="line.8058"></a>
-<span class="sourceLineNo">8059</span>      throw iie;<a name="line.8059"></a>
-<span class="sourceLineNo">8060</span>    }<a name="line.8060"></a>
-<span class="sourceLineNo">8061</span>  }<a name="line.8061"></a>
-<span class="sourceLineNo">8062</span><a name="line.8062"></a>
-<span class="sourceLineNo">8063</span>  /**<a name="line.8063"></a>
-<span class="sourceLineNo">8064</span>   * Calls sync with the given transaction ID<a name="line.8064"></a>
-<span class="sourceLineNo">8065</span>   * @param txid should sync up to which transaction<a name="line.8065"></a>
-<span class="sourceLineNo">8066</span>   * @throws IOException If anything goes wrong with DFS<a name="line.8066"></a>
-<span class="sourceLineNo">8067</span>   */<a name="line.8067"></a>
-<span class="sourceLineNo">8068</span>  private void sync(long txid, Durability durability) throws IOException {<a name="line.8068"></a>
-<span class="sourceLineNo">8069</span>    if (this.getRegionInfo().isMetaRegion()) {<a name="line.8069"></a>
-<span class="sourceLineNo">8070</span>      this.wal.sync(txid);<a name="line.8070"></a>
-<span class="sourceLineNo">8071</span>    } else {<a name="line.8071"></a>
-<span class="sourceLineNo">8072</span>      switch(durability) {<a name="line.8072"></a>
-<span class="sourceLineNo">8073</span>      case USE_DEFAULT:<a name="line.8073"></a>
-<span class="sourceLineNo">8074</span>        // do what table defaults to<a name="line.8074"></a>
-<span class="sourceLineNo">8075</span>        if (shouldSyncWAL()) {<a name="line.8075"></a>
-<span class="sourceLineNo">8076</span>          this.wal.sync(txid);<a name="line.8076"></a>
-<span class="sourceLineNo">8077</span>        }<a name="line.8077"></a>
-<span class="sourceLineNo">8078</span>        break;<a name="line.8078"></a>
-<span class="sourceLineNo">8079</span>      case SKIP_WAL:<a name="line.8079"></a>
-<span class="sourceLineNo">8080</span>        // nothing do to<a name="line.8080"></a>
-<span class="sourceLineNo">8081</span>        break;<a name="line.8081"></a>
-<span class="sourceLineNo">8082</span>      case ASYNC_WAL:<a name="line.8082"></a>
-<span class="sourceLineNo">8083</span>        // nothing do to<a name="line.8083"></a>
-<span class="sourceLineNo">8084</span>        break;<a name="line.8084"></a>
-<span class="sourceLineNo">8085</span>      case SYNC_WAL:<a name="line.8085"></a>
-<span class="sourceLineNo">8086</span>      case FSYNC_WAL:<a name="line.8086"></a>
-<span class="sourceLineNo">8087</span>        // sync the WAL edit (SYNC and FSYNC treated the same for now)<a name="line.8087"></a>
-<span class="sourceLineNo">8088</span>        this.wal.sync(txid);<a name="line.8088"></a>
-<span class="sourceLineNo">8089</span>        break;<a name="line.8089"></a>
-<span class="sourceLineNo">8090</span>      default:<a name="line.8090"></a>
-<span class="sourceLineNo">8091</span>        throw new RuntimeException("Unknown durability " + durability);<a name="line.8091"></a>
-<span class="sourceLineNo">8092</span>      }<a name="line.8092"></a>
-<span class="sourceLineNo">8093</span>    }<a name="line.8093"></a>
-<span class="sourceLineNo">8094</span>  }<a name="line.8094"></a>
-<span class="sourceLineNo">8095</span><a name="line.8095"></a>
-<span class="sourceLineNo">8096</span>  /**<a name="line.8096"></a>
-<span class="sourceLineNo">8097</span>   * Check whether we should sync the wal from the table's durability settings<a name="line.8097"></a>
-<span class="sourceLineNo">8098</span>   */<a name="line.8098"></a>
-<span class="sourceLineNo">8099</span>  private boolean shouldSyncWAL() {<a name="line.8099"></a>
-<span class="sourceLineNo">8100</span>    return durability.ordinal() &gt;  Durability.ASYNC_WAL.ordinal();<a name="line.8100"></a>
-<span class="sourceLineNo">8101</span>  }<a name="line.8101"></a>
-<span class="sourceLineNo">8102</span><a name="line.8102"></a>
-<span class="sourceLineNo">8103</span>  /**<a name="line.8103"></a>
-<span class="sourceLineNo">8104</span>   * A mocked list implementation - discards all updates.<a name="line.8104"></a>
-<span class="sourceLineNo">8105</span>   */<a name="line.8105"></a>
-<span class="sourceLineNo">8106</span>  private static final List&lt;Cell&gt; MOCKED_LIST = new AbstractList&lt;Cell&gt;() {<a name="line.8106"></a>
-<span class="sourceLineNo">8107</span><a name="line.8107"></a>
-<span class="sourceLineNo">8108</span>    @Override<a name="line.8108"></a>
-<span class="sourceLineNo">8109</span>    public void add(int index, Cell element) {<a name="line.8109"></a>
-<span class="sourceLineNo">8110</span>      // do nothing<a name="line.8110"></a>
-<span class="sourceLineNo">8111</span>    }<a name="line.8111"></a>
-<span class="sourceLineNo">8112</span><a name="line.8112"></a>
-<span class="sourceLineNo">8113</span>    @Override<a name="line.8113"></a>
-<span class="sourceLineNo">8114</span>    public boolean addAll(int index, Collection&lt;? extends Cell&gt; c) {<a name="line.8114"></a>
-<span class="sourceLineNo">8115</span>      return false; // this list is never changed as a result of an update<a name="line.8115"></a>
-<span class="sourceLineNo">8116</span>    }<a name="line.8116"></a>
-<span class="sourceLineNo">8117</span><a name="line.8117"></a>
-<span class="sourceLineNo">8118</span>    @Override<a name="line.8118"></a>
-<span class="sourceLineNo">8119</span>    public KeyValue get(int index) {<a name="line.8119"></a>
-<span class="sourceLineNo">8120</span>      throw new UnsupportedOperationException();<a name="line.8120"></a>
-<span class="sourceLineNo">8121</span>    }<a name="line.8121"></a>
-<span class="sourceLineNo">8122</span><a name="line.8122"></a>
-<span class="sourceLineNo">8123</span>    @Override<a name="line.8123"></a>
-<span class="sourceLineNo">8124</span>    public int size() {<a name="line.8124"></a>
-<span class="sourceLineNo">8125</span>      return 0;<a name="line.8125"></a>
-<span class="sourceLineNo">8126</span>    }<a name="line.8126"></a>
-<span class="sourceLineNo">8127</span>  };<a name="line.8127"></a>
-<span class="sourceLineNo">8128</span><a name="line.8128"></a>
-<span class="sourceLineNo">8129</span>  @Override<a name="line.8129"></a>
-<span class="sourceLineNo">8130</span>  public long getOpenSeqNum() {<a name="line.8130"></a>
-<span class="sourceLineNo">8131</span>    return this.openSeqNum;<a name="line.8131"></a>
-<span class="sourceLineNo">8132</span>  }<a name="line.8132"></a>
-<span class="sourceLineNo">8133</span><a name="line.8133"></a>
-<span class="sourceLineNo">8134</span>  @Override<a name="line.8134"></a>
-<span class="sourceLineNo">8135</span>  public Map&lt;byte[], Long&gt; getMaxStoreSeqId() {<a name="line.8135"></a>
-<span class="sourceLineNo">8136</span>    return this.maxSeqIdInStores;<a name="line.8136"></a>
-<span class="sourceLineNo">8137</span>  }<a name="line.8137"></a>
-<span class="sourceLineNo">8138</span><a name="line.8138"></a>
-<span class="sourceLineNo">8139</span>  @Override<a name="line.8139"></a>
-<span class="sourceLineNo">8140</span>  public long getOldestSeqIdOfStore(byte[] familyName) {<a name="line.8140"></a>
-<span class="sourceLineNo">8141</span>    return wal.getEarliestMemstoreSeqNum(getRegionInfo().getEncodedNameAsBytes(), familyName);<a name="line.8141"></a>
-<span class="sourceLineNo">8142</span>  }<a name="line.8142"></a>
-<span class="sourceLineNo">8143</span><a name="line.8143"></a>
-<span class="sourceLineNo">8144</span>  @Override<a name="line.8144"></a>
-<span class="sourceLineNo">8145</span>  public CompactionState getCompactionState() {<a name="line.8145"></a>
-<span class="sourceLineNo">8146</span>    boolean hasMajor = majorInProgress.get() &gt; 0, hasMinor = minorInProgress.get() &gt; 0;<a name="line.8146"></a>
-<span class="sourceLineNo">8147</span>    return (hasMajor ? (hasMinor ? CompactionState.MAJOR_AND_MINOR : CompactionState.MAJOR)<a name="line.8147"></a>
-<span class="sourceLineNo">8148</span>        : (hasMinor ? CompactionState.MINOR : CompactionState.NONE));<a name="line.8148"></a>
-<span class="sourceLineNo">8149</span>  }<a name="line.8149"></a>
-<span class="sourceLineNo">8150</span><a name="line.8150"></a>
-<span class="sourceLineNo">8151</span>  public void reportCompactionRequestStart(boolean isMajor){<a name="line.8151"></a>
-<span class="sourceLineNo">8152</span>    (isMajor ? majorInProgress : minorInProgress).incrementAndGet();<a name="line.8152"></a>
-<span class="sourceLineNo">8153</span>  }<a name="line.8153"></a>
-<span class="sourceLineNo">8154</span><a name="line.8154"></a>
-<span class="sourceLineNo">8155</span>  public void reportCompactionRequestEnd(boolean isMajor, int numFiles, long filesSizeCompacted) {<a name="line.8155"></a>
-<span class="sourceLineNo">8156</span>    int newValue = (isMajor ? majorInProgress : minorInProgress).decrementAndGet();<a name="line.8156"></a>
-<span class="sourceLineNo">8157</span><a name="line.8157"></a>
-<span class="sourceLineNo">8158</span>    // metrics<a name="line.8158"></a>
-<span class="sourceLineNo">8159</span>    compactionsFinished.incrementAndGet();<a name="line.8159"></a>
-<span class="sourceLineNo">8160</span>    compactionNumFilesCompacted.addAndGet(numFiles);<a name="line.8160"></a>
-<span class="sourceLineNo">8161</span>    compactionNumBytesCompacted.addAndGet(filesSizeCompacted);<a name="line.8161"></a>
-<span class="sourceLineNo">8162</span><a name="line.8162"></a>
-<span class="sourceLineNo">8163</span>    assert newValue &gt;= 0;<a name="line.8163"></a>
-<span class="sourceLineNo">8164</span>  }<a name="line.8164"></a>
-<span class="sourceLineNo">8165</span><a name="line.8165"></a>
-<span class="sourceLineNo">8166</span>  public void reportCompactionRequestFailure() {<a name="line.8166"></a>
-<span class="sourceLineNo">8167</span>    compactionsFailed.incrementAndGet();<a name="line.8167"></a>
-<span class="sourceLineNo">8168</span>  }<a name="line.8168"></a>
-<span class="sourceLineNo">8169</span><a name="line.8169"></a>
-<span class="sourceLineNo">8170</span>  public void incrementCompactionsQueuedCount() {<a name="line.8170"></a>
-<span class="sourceLineNo">8171</span>    compactionsQueued.incrementAndGet();<a name="line.8171"></a>
-<span class="sourceLineNo">8172</span>  }<a name="line.8172"></a>
-<span class="sourceLineNo">8173</span><a name="line.8173"></a>
-<span class="sourceLineNo">8174</span>  public void decrementCompactionsQueuedCount() {<a name="line.8174"></a>
-<span class="sourceLineNo">8175</span>    compactionsQueued.decrementAndGet();<a name="line.8175"></a>
-<span class="sourceLineNo">8176</span>  }<a name="line.8176"></a>
-<span class="sourceLineNo">8177</span><a name="line.8177"></a>
-<span class="sourceLineNo">8178</span>  public void incrementFlushesQueuedCount() {<a name="line.8178"></a>
-<span class="sourceLineNo">8179</span>    flushesQueued.incrementAndGet();<a name="line.8179"></a>
-<span class="sourceLineNo">8180</span>  }<a name="line.8180"></a>
-<span class="sourceLineNo">8181</span><a name="line.8181"></a>
-<span class="sourceLineNo">8182</span>  @VisibleForTesting<a name="line.8182"></a>
-<span class="sourceLineNo">8183</span>  public long getReadPoint() {<a name="line.8183"></a>
-<span class="sourceLineNo">8184</span>    return getReadPoint(IsolationLevel.READ_COMMITTED);<a name="line.8184"></a>
+<span class="sourceLineNo">8032</span>    long mutationSize = 0;<a name="line.8032"></a>
+<span class="sourceLineNo">8033</span>    for (List&lt;Cell&gt; cells: familyMap.values()) {<a name="line.8033"></a>
+<span class="sourceLineNo">8034</span>      assert cells instanceof RandomAccess;<a name="line.8034"></a>
+<span class="sourceLineNo">8035</span>      int listSize = cells.size();<a name="line.8035"></a>
+<span class="sourceLineNo">8036</span>      for (int i=0; i &lt; listSize; i++) {<a name="line.8036"></a>
+<span class="sourceLineNo">8037</span>        Cell cell = cells.get(i);<a name="line.8037"></a>
+<span class="sourceLineNo">8038</span>        mutationSize += KeyValueUtil.length(cell);<a name="line.8038"></a>
+<span class="sourceLineNo">8039</span>      }<a name="line.8039"></a>
+<span class="sourceLineNo">8040</span>    }<a name="line.8040"></a>
+<span class="sourceLineNo">8041</span><a name="line.8041"></a>
+<span class="sourceLineNo">8042</span>    dataInMemoryWithoutWAL.add(mutationSize);<a name="line.8042"></a>
+<span class="sourceLineNo">8043</span>  }<a name="line.8043"></a>
+<span class="sourceLineNo">8044</span><a name="line.8044"></a>
+<span class="sourceLineNo">8045</span>  private void lock(final Lock lock)<a name="line.8045"></a>
+<span class="sourceLineNo">8046</span>      throws RegionTooBusyException, InterruptedIOException {<a name="line.8046"></a>
+<span class="sourceLineNo">8047</span>    lock(lock, 1);<a name="line.8047"></a>
+<span class="sourceLineNo">8048</span>  }<a name="line.8048"></a>
+<span class="sourceLineNo">8049</span><a name="line.8049"></a>
+<span class="sourceLineNo">8050</span>  /**<a name="line.8050"></a>
+<span class="sourceLineNo">8051</span>   * Try to acquire a lock.  Throw RegionTooBusyException<a name="line.8051"></a>
+<span class="sourceLineNo">8052</span>   * if failed to get the lock in time. Throw InterruptedIOException<a name="line.8052"></a>
+<span class="sourceLineNo">8053</span>   * if interrupted while waiting for the lock.<a name="line.8053"></a>
+<span class="sourceLineNo">8054</span>   */<a name="line.8054"></a>
+<span class="sourceLineNo">8055</span>  private void lock(final Lock lock, final int multiplier)<a name="line.8055"></a>
+<span class="sourceLineNo">8056</span>      throws RegionTooBusyException, InterruptedIOException {<a name="line.8056"></a>
+<span class="sourceLineNo">8057</span>    try {<a name="line.8057"></a>
+<span class="sourceLineNo">8058</span>      final long waitTime = Math.min(maxBusyWaitDuration,<a name="line.8058"></a>
+<span class="sourceLineNo">8059</span>          busyWaitDuration * Math.min(multiplier, maxBusyWaitMultiplier));<a name="line.8059"></a>
+<span class="sourceLineNo">8060</span>      if (!lock.tryLock(waitTime, TimeUnit.MILLISECONDS)) {<a name="line.8060"></a>
+<span class="sourceLineNo">8061</span>        throw new RegionTooBusyException(<a name="line.8061"></a>
+<span class="sourceLineNo">8062</span>            "failed to get a lock in " + waitTime + " ms. " +<a name="line.8062"></a>
+<span class="sourceLineNo">8063</span>                "regionName=" + (this.getRegionInfo() == null ? "unknown" :<a name="line.8063"></a>
+<span class="sourceLineNo">8064</span>                this.getRegionInfo().getRegionNameAsString()) +<a name="line.8064"></a>
+<span class="sourceLineNo">8065</span>                ", server=" + (this.getRegionServerServices() == null ? "unknown" :<a name="line.8065"></a>
+<span class="sourceLineNo">8066</span>                this.getRegionServerServices().getServerName()));<a name="line.8066"></a>
+<span class="sourceLineNo">8067</span>      }<a name="line.8067"></a>
+<span class="sourceLineNo">8068</span>    } catch (InterruptedException ie) {<a name="line.8068"></a>
+<span class="sourceLineNo">8069</span>      LOG.info("Interrupted while waiting for a lock");<a name="line.8069"></a>
+<span class="sourceLineNo">8070</span>      InterruptedIOException iie = new InterruptedIOException();<a name="line.8070"></a>
+<span class="sourceLineNo">8071</span>      iie.initCause(ie);<a name="line.8071"></a>
+<span class="sourceLineNo">8072</span>      throw iie;<a name="line.8072"></a>
+<span class="sourceLineNo">8073</span>    }<a name="line.8073"></a>
+<span class="sourceLineNo">8074</span>  }<a name="line.8074"></a>
+<span class="sourceLineNo">8075</span><a name="line.8075"></a>
+<span class="sourceLineNo">8076</span>  /**<a name="line.8076"></a>
+<span class="sourceLineNo">8077</span>   * Calls sync with the given transaction ID<a name="line.8077"></a>
+<span class="sourceLineNo">8078</span>   * @param txid should sync up to which transaction<a name="line.8078"></a>
+<span class="sourceLineNo">8079</span>   * @throws IOException If anything goes wrong with DFS<a name="line.8079"></a>
+<span class="sourceLineNo">8080</span>   */<a name="line.8080"></a>
+<span class="sourceLineNo">8081</span>  private void sync(long txid, Durability durability) throws IOException {<a name="line.8081"></a>
+<span class="sourceLineNo">8082</span>    if (this.getRegionInfo().isMetaRegion()) {<a name="line.8082"></a>
+<span class="sourceLineNo">8083</span>      this.wal.sync(txid);<a name="line.8083"></a>
+<span class="sourceLineNo">8084</span>    } else {<a name="line.8084"></a>
+<span class="sourceLineNo">8085</span>      switch(durability) {<a name="line.8085"></a>
+<span class="sourceLineNo">8086</span>      case USE_DEFAULT:<a name="line.8086"></a>
+<span class="sourceLineNo">8087</span>        // do what table defaults to<a name="line.8087"></a>
+<span class="sourceLineNo">8088</span>        if (shouldSyncWAL()) {<a name="line.8088"></a>
+<span class="sourceLineNo">8089</span>          this.wal.sync(txid);<a name="line.8089"></a>
+<span class="sourceLineNo">8090</span>        }<a name="line.8090"></a>
+<span class="sourceLineNo">8091</span>        break;<a name="line.8091"></a>
+<span class="sourceLineNo">8092</span>      case SKIP_WAL:<a name="line.8092"></a>
+<span class="sourceLineNo">8093</span>        // nothing do to<a name="line.8093"></a>
+<span class="sourceLineNo">8094</span>        break;<a name="line.8094"></a>
+<span class="sourceLineNo">8095</span>      case ASYNC_WAL:<a name="line.8095"></a>
+<span class="sourceLineNo">8096</span>        // nothing do to<a name="line.8096"></a>
+<span class="sourceLineNo">8097</span>        break;<a name="line.8097"></a>
+<span class="sourceLineNo">8098</span>      case SYNC_WAL:<a name="line.8098"></a>
+<span class="sourceLineNo">8099</span>      case FSYNC_WAL:<a name="line.8099"></a>
+<span class="sourceLineNo">8100</span>        // sync the WAL edit (SYNC and FSYNC treated the same for now)<a name="line.8100"></a>
+<span class="sourceLineNo">8101</span>        this.wal.sync(txid);<a name="line.8101"></a>
+<span class="sourceLineNo">8102</span>        break;<a name="line.8102"></a>
+<span class="sourceLineNo">8103</span>      default:<a name="line.8103"></a>
+<span class="sourceLineNo">8104</span>        throw new RuntimeException("Unknown durability " + durability);<a name="line.8104"></a>
+<span class="sourceLineNo">8105</span>      }<a name="line.8105"></a>
+<span class="sourceLineNo">8106</span>    }<a name="line.8106"></a>
+<span class="sourceLineNo">8107</span>  }<a name="line.8107"></a>
+<span class="sourceLineNo">8108</span><a name="line.8108"></a>
+<span class="sourceLineNo">8109</span>  /**<a name="line.8109"></a>
+<span class="sourceLineNo">8110</span>   * Check whether we should sync the wal from the table's durability settings<a name="line.8110"></a>
+<span class="sourceLineNo">8111</span>   */<a name="line.8111"></a>
+<span class="sourceLineNo">8112</span>  private boolean shouldSyncWAL() {<a name="line.8112"></a>
+<span class="sourceLineNo">8113</span>    return durability.ordinal() &gt;  Durability.ASYNC_WAL.ordinal();<a name="line.8113"></a>
+<span class="sourceLineNo">8114</span>  }<a name="line.8114"></a>
+<span class="sourceLineNo">8115</span><a name="line.8115"></a>
+<span class="sourceLineNo">8116</span>  /**<a name="line.8116"></a>
+<span class="sourceLineNo">8117</span>   * A mocked list implementation - discards all updates.<a name="line.8117"></a>
+<span class="sourceLineNo">8118</span>   */<a name="line.8118"></a>
+<span class="sourceLineNo">8119</span>  private static final List&lt;Cell&gt; MOCKED_LIST = new AbstractList&lt;Cell&gt;() {<a name="line.8119"></a>
+<span class="sourceLineNo">8120</span><a name="line.8120"></a>
+<span class="sourceLineNo">8121</span>    @Override<a name="line.8121"></a>
+<span class="sourceLineNo">8122</span>    public void add(int index, Cell element) {<a name="line.8122"></a>
+<span class="sourceLineNo">8123</span>      // do nothing<a name="line.8123"></a>
+<span class="sourceLineNo">8124</span>    }<a name="line.8124"></a>
+<span class="sourceLineNo">8125</span><a name="line.8125"></a>
+<span class="sourceLineNo">8126</span>    @Override<a name="line.8126"></a>
+<span class="sourceLineNo">8127</span>    public boolean addAll(int index, Collection&lt;? extends Cell&gt; c) {<a name="line.8127"></a>
+<span class="sourceLineNo">8128</span>      return false; // this list is never changed as a result of an update<a name="line.8128"></a>
+<span class="sourceLineNo">8129</span>    }<a name="line.8129"></a>
+<span class="sourceLineNo">8130</span><a name="line.8130"></a>
+<span class="sourceLineNo">8131</span>    @Override<a name="line.8131"></a>
+<span class="sourceLineNo">8132</span>    public KeyValue get(int index) {<a name="line.8132"></a>
+<span class="sourceLineNo">8133</span>      throw new UnsupportedOperationException();<a name="line.8133"></a>
+<span class="sourceLineNo">8134</span>    }<a name="line.8134"></a>
+<span class="sourceLineNo">8135</span><a name="line.8135"></a>
+<span class="sourceLineNo">8136</span>    @Override<a name="line.8136"></a>
+<span class="sourceLineNo">8137</span>    public int size() {<a name="line.8137"></a>
+<span class="sourceLineNo">8138</span>      return 0;<a name="line.8138"></a>
+<span class="sourceLineNo">8139</span>    }<a name="line.8139"></a>
+<span class="sourceLineNo">8140</span>  };<a name="line.8140"></a>
+<span class="sourceLineNo">8141</span><a name="line.8141"></a>
+<span class="sourceLineNo">8142</span>  @Override<a name="line.8142"></a>
+<span class="sourceLineNo">8143</span>  public long getOpenSeqNum() {<a name="line.8143"></a>
+<span class="sourceLineNo">8144</span>    return this.openSeqNum;<a name="line.8144"></a>
+<span class="sourceLineNo">8145</span>  }<a name="line.8145"></a>
+<span class="sourceLineNo">8146</span><a name="line.8146"></a>
+<span class="sourceLineNo">8147</span>  @Override<a name="line.8147"></a>
+<span class="sourceLineNo">8148</span>  public Map&lt;byte[], Long&gt; getMaxStoreSeqId() {<a name="line.8148"></a>
+<span class="sourceLineNo">8149</span>    return this.maxSeqIdInStores;<a name="line.8149"></a>
+<span class="sourceLineNo">8150</span>  }<a name="line.8150"></a>
+<span class="sourceLineNo">8151</span><a name="line.8151"></a>
+<span class="sourceLineNo">8152</span>  @Override<a name="line.8152"></a>
+<span class="sourceLineNo">8153</span>  public long getOldestSeqIdOfStore(byte[] familyName) {<a name="line.8153"></a>
+<span class="sourceLineNo">8154</span>    return wal.getEarliestMemstoreSeqNum(getRegionInfo().getEncodedNameAsBytes(), familyName);<a name="line.8154"></a>
+<span class="sourceLineNo">8155</span>  }<a name="line.8155"></a>
+<span class="sourceLineNo">8156</span><a name="line.8156"></a>
+<span class="sourceLineNo">8157</span>  @Override<a name="line.8157"></a>
+<span class="sourceLineNo">8158</span>  public CompactionState getCompactionState() {<a name="line.8158"></a>
+<span class="sourceLineNo">8159</span>    boolean hasMajor = majorInProgress.get() &gt; 0, hasMinor = minorInProgress.get() &gt; 0;<a name="line.8159"></a>
+<span class="sourceLineNo">8160</span>    return (hasMajor ? (hasMinor ? CompactionState.MAJOR_AND_MINOR : CompactionState.MAJOR)<a name="line.8160"></a>
+<span class="sourceLineNo">8161</span>        : (hasMinor ? CompactionState.MINOR : CompactionState.NONE));<a name="line.8161"></a>
+<span class="sourceLineNo">8162</span>  }<a name="line.8162"></a>
+<span class="sourceLineNo">8163</span><a name="line.8163"></a>
+<span class="sourceLineNo">8164</span>  public void reportCompactionRequestStart(boolean isMajor){<a name="line.8164"></a>
+<span class="sourceLineNo">8165</span>    (isMajor ? majorInProgress : minorInProgress).incrementAndGet();<a name="line.8165"></a>
+<span class="sourceLineNo">8166</span>  }<a name="line.8166"></a>
+<span class="sourceLineNo">8167</span><a name="line.8167"></a>
+<span class="sourceLineNo">8168</span>  public void reportCompactionRequestEnd(boolean isMajor, int numFiles, long filesSizeCompacted) {<a name="line.8168"></a>
+<span class="sourceLineNo">8169</span>    int newValue = (isMajor ? majorInProgress : minorInProgress).decrementAndGet();<a name="line.8169"></a>
+<span class="sourceLineNo">8170</span><a name="line.8170"></a>
+<span class="sourceLineNo">8171</span>    // metrics<a name="line.8171"></a>
+<span class="sourceLineNo">8172</span>    compactionsFinished.incrementAndGet();<a name="line.8172"></a>
+<span class="sourceLineNo">8173</span>    compactionNumFilesCompacted.addAndGet(numFiles);<a name="line.8173"></a>
+<span class="sourceLineNo">8174</span>    compactionNumBytesCompacted.addAndGet(filesSizeCompacted);<a name="line.8174"></a>
+<span class="sourceLineNo">8175</span><a name="line.8175"></a>
+<span class="sourceLineNo">8176</span>    assert newValue &gt;= 0;<a name="line.8176"></a>
+<span class="sourceLineNo">8177</span>  }<a name="line.8177"></a>
+<span class="sourceLineNo">8178</span><a name="line.8178"></a>
+<span class="sourceLineNo">8179</span>  public void reportCompactionRequestFailure() {<a name="line.8179"></a>
+<span class="sourceLineNo">8180</span>    compactionsFailed.incrementAndGet();<a name="line.8180"></a>
+<span class="sourceLineNo">8181</span>  }<a name="line.8181"></a>
+<span class="sourceLineNo">8182</span><a name="line.8182"></a>
+<span class="sourceLineNo">8183</span>  public void incrementCompactionsQueuedCount() {<a name="line.8183"></a>
+<span class="sourceLineNo">8184</span>    compactionsQueued.incrementAndGet();<a name="line.8184"></a>
 <span class="sourceLineNo">8185</span>  }<a name="line.8185"></a>
 <span class="sourceLineNo">8186</span><a name="line.8186"></a>
-<span class="sourceLineNo">8187</span>  /**<a name="line.8187"></a>
-<span class="sourceLineNo">8188</span>   * {@inheritDoc}<a name="line.8188"></a>
-<span class="sourceLineNo">8189</span>   */<a name="line.8189"></a>
-<span class="sourceLineNo">8190</span>  @Override<a name="line.8190"></a>
-<span class="sourceLineNo">8191</span>  public void onConfigurationChange(Configuration conf) {<a name="line.8191"></a>
-<span class="sourceLineNo">8192</span>    // Do nothing for now.<a name="line.8192"></a>
+<span class="sourceLineNo">8187</span>  public void decrementCompactionsQueuedCount() {<a name="line.8187"></a>
+<span class="sourceLineNo">8188</span>    compactionsQueued.decrementAndGet();<a name="line.8188"></a>
+<span class="sourceLineNo">8189</span>  }<a name="line.8189"></a>
+<span class="sourceLineNo">8190</span><a name="line.8190"></a>
+<span class="sourceLineNo">8191</span>  public void incrementFlushesQueuedCount() {<a name="line.8191"></a>
+<span class="sourceLineNo">8192</span>    flushesQueued.incrementAndGet();<a name="line.8192"></a>
 <span class="sourceLineNo">8193</span>  }<a name="line.8193"></a>
 <span class="sourceLineNo">8194</span><a name="line.8194"></a>
-<span class="sourceLineNo">8195</span>  /**<a name="line.8195"></a>
-<span class="sourceLineNo">8196</span>   * {@inheritDoc}<a name="line.8196"></a>
-<span class="sourceLineNo">8197</span>   */<a name="line.8197"></a>
-<span class="sourceLineNo">8198</span>  @Override<a name="line.8198"></a>
-<span class="sourceLineNo">8199</span>  public void registerChildren(ConfigurationManager manager) {<a name="line.8199"></a>
-<span class="sourceLineNo">8200</span>    configurationManager = Optional.of(manager);<a name="line.8200"></a>
-<span class="sourceLineNo">8201</span>    for (Store s : this.stores.values()) {<a name="line.8201"></a>
-<span class="sourceLineNo">8202</span>      configurationManager.get().registerObserver(s);<a name="line.8202"></a>
-<span class="sourceLineNo">8203</span>    }<a name="line.8203"></a>
-<span class="sourceLineNo">8204</span>  }<a name="line.8204"></a>
-<span class="sourceLineNo">8205</span><a name="line.8205"></a>
-<span class="sourceLineNo">8206</span>  /**<a name="line.8206"></a>
-<span class="sourceLineNo">8207</span>   * {@inheritDoc}<a name="line.8207"></a>
-<span class="sourceLineNo">8208</span>   */<a name="line.8208"></a>
-<span class="sourceLineNo">8209</span>  @Override<a name="line.8209"></a>
-<span class="sourceLineNo">8210</span>  public void deregisterChildren(ConfigurationManager manager) {<a name="line.8210"></a>
-<span class="sourceLineNo">8211</span>    for (Store s : this.stores.values()) {<a name="line.8211"></a>
-<span class="sourceLineNo">8212</span>      configurationManager.get().deregisterObserver(s);<a name="line.8212"></a>
-<span class="sourceLineNo">8213</span>    }<a name="line.8213"></a>
-<span class="sourceLineNo">8214</span>  }<a name="line.8214"></a>
-<span class="sourceLineNo">8215</span><a name="line.8215"></a>
-<span class="sourceLineNo">8216</span>  @Override<a name="line.8216"></a>
-<span class="sourceLineNo">8217</span>  public CellComparator getCellComparator() {<a name="line.8217"></a>
-<span class="sourceLineNo">8218</span>    return this.getRegionInfo().isMetaRegion() ? CellComparator.META_COMPARATOR<a name="line.8218"></a>
-<span class="sourceLineNo">8219</span>        : CellComparator.COMPARATOR;<a name="line.8219"></a>
-<span class="sourceLineNo">8220</span>  }<a name="line.8220"></a>
-<span class="sourceLineNo">8221</span><a name="line.8221"></a>
-<span class="sourceLineNo">8222</span>  public long getMemstoreFlushSize() {<a name="line.8222"></a>
-<span class="sourceLineNo">8223</span>    return this.memstoreFlushSize;<a name="line.8223"></a>
-<span class="sourceLineNo">8224</span>  }<a name="line.8224"></a>
-<span class="sourceLineNo">8225</span><a name="line.8225"></a>
-<span class="sourceLineNo">8226</span>  //// method for debugging tests<a name="line.8226"></a>
-<span class="sourceLineNo">8227</span>  void throwException(String title, String regionName) {<a name="line.8227"></a>
-<span class="sourceLineNo">8228</span>    StringBuffer buf = new StringBuffer();<a name="line.8228"></a>
-<span class="sourceLineNo">8229</span>    buf.append(title + ", ");<a name="line.8229"></a>
-<span class="sourceLineNo">8230</span>    buf.append(getRegionInfo().toString());<a name="line.8230"></a>
-<span class="sourceLineNo">8231</span>    buf.append(getRegionInfo().isMetaRegion() ? " meta region " : " ");<a name="line.8231"></a>
-<span class="sourceLineNo">8232</span>    buf.append(getRegionInfo().isMetaTable() ? " meta table " : " ");<a name="line.8232"></a>
-<span class="sourceLineNo">8233</span>    buf.append("stores: ");<a name="line.8233"></a>
-<span class="sourceLineNo">8234</span>    for (Store s : getStores()) {<a name="line.8234"></a>
-<span class="sourceLineNo">8235</span>      buf.append(s.getColumnFamilyDescriptor().getNameAsString());<a name="line.8235"></a>
-<span class="sourceLineNo">8236</span>      buf.append(" size: ");<a name="line.8236"></a>
-<span class="sourceLineNo">8237</span>      buf.append(s.getSizeOfMemStore().getDataSize());<a name="line.8237"></a>
-<span class="sourceLineNo">8238</span>      buf.append(" ");<a name="line.8238"></a>
-<span class="sourceLineNo">8239</span>    }<a name="line.8239"></a>
-<span class="sourceLineNo">8240</span>    buf.append("end-of-stores");<a name="line.8240"></a>
-<span class="sourceLineNo">8241</span>    buf.append(", memstore size ");<a name="line.8241"></a>
-<span class="sourceLineNo">8242</span>    buf.append(getMemstoreSize());<a name="line.8242"></a>
-<span class="sourceLineNo">8243</span>    if (getRegionInfo().getRegionNameAsString().startsWith(regionName)) {<a name="line.8243"></a>
-<span class="sourceLineNo">8244</span>      throw new RuntimeException(buf.toString());<a name="line.8244"></a>
-<span class="sourceLineNo">8245</span>    }<a name="line.8245"></a>
-<span class="sourceLineNo">8246</span>  }<a name="line.8246"></a>
-<span class="sourceLineNo">8247</span>}<a name="line.8247"></a>
+<span class="sourceLineNo">8195</span>  @VisibleForTesting<a name="line.8195"></a>
+<span class="sourceLineNo">8196</span>  public long getReadPoint() {<a name="line.8196"></a>
+<span class="sourceLineNo">8197</span>    return getReadPoint(IsolationLevel.READ_COMMITTED);<a name="line.8197"></a>
+<span class="sourceLineNo">8198</span>  }<a name="line.8198"></a>
+<span class="sourceLineNo">8199</span><a name="line.8199"></a>
+<span class="sourceLineNo">8200</span>  /**<a name="line.8200"></a>
+<span class="sourceLineNo">8201</span>   * {@inheritDoc}<a name="line.8201"></a>
+<span class="sourceLineNo">8202</span>   */<a name="line.8202"></a>
+<span class="sourceLineNo">8203</span>  @Override<a name="line.8203"></a>
+<span class="sourceLineNo">8204</span>  public void onConfigurationChange(Configuration conf) {<a name="line.8204"></a>
+<span class="sourceLineNo">8205</span>    // Do nothing for now.<a name="line.8205"></a>
+<span class="sourceLineNo">8206</span>  }<a name="line.8206"></a>
+<span class="sourceLineNo">8207</span><a name="line.8207"></a>
+<span class="sourceLineNo">8208</span>  /**<a name="line.8208"></a>
+<span class="sourceLineNo">8209</span>   * {@inheritDoc}<a name="line.8209"></a>
+<span class="sourceLineNo">8210</span>   */<a name="line.8210"></a>
+<span class="sourceLineNo">8211</span>  @Override<a name="line.8211"></a>
+<span class="sourceLineNo">8212</span>  public void registerChildren(ConfigurationManager manager) {<a name="line.8212"></a>
+<span class="sourceLineNo">8213</span>    configurationManager = Optional.of(manager);<a name="line.8213"></a>
+<span class="sourceLineNo">8214</span>    for (Store s : this.stores.values()) {<a name="line.8214"></a>
+<span class="sourceLineNo">8215</span>      configurationManager.get().registerObserver(s);<a name="line.8215"></a>
+<span class="sourceLineNo">8216</span>    }<a name="line.8216"></a>
+<span class="sourceLineNo">8217</span>  }<a name="line.8217"></a>
+<span class="sourceLineNo">8218</span><a name="line.8218"></a>
+<span class="sourceLineNo">8219</span>  /**<a name="line.8219"></a>
+<span class="sourceLineNo">8220</span>   * {@inheritDoc}<a name="line.8220"></a>
+<span class="sourceLineNo">8221</span>   */<a name="line.8221"></a>
+<span class="sourceLineNo">8222</span>  @Override<a name="line.8222"></a>
+<span class="sourceLineNo">8223</span>  public void deregisterChildren(ConfigurationManager manager) {<a name="line.8223"></a>
+<span class="sourceLineNo">8224</span>    for (Store s : this.stores.values()) {<a name="line.8224"></a>
+<span class="sourceLineNo">8225</span>      configurationManager.get().deregisterObserver(s);<a name="line.8225"></a>
+<span class="sourceLineNo">8226</span>    }<a name="line.8226"></a>
+<span class="sourceLineNo">8227</span>  }<a name="line.8227"></a>
+<span class="sourceLineNo">8228</span><a name="line.8228"></a>
+<span class="sourceLineNo">8229</span>  @Override<a name="line.8229"></a>
+<span class="sourceLineNo">8230</span>  public CellComparator getCellComparator() {<a name="line.8230"></a>
+<span class="sourceLineNo">8231</span>    return this.getRegionInfo().isMetaRegion() ? CellComparator.META_COMPARATOR<a name="line.8231"></a>
+<span class="sourceLineNo">8232</span>        : CellComparator.COMPARATOR;<a name="line.8232"></a>
+<span class="sourceLineNo">8233</span>  }<a name="line.8233"></a>
+<span class="sourceLineNo">8234</span><a name="line.8234"></a>
+<span class="sourceLineNo">8235</span>  public long getMemstoreFlushSize() {<a name="line.8235"></a>
+<span class="sourceLineNo">8236</span>    return this.memstoreFlushSize;<a name="line.8236"></a>
+<span class="sourceLineNo">8237</span>  }<a name="line.8237"></a>
+<span class="sourceLineNo">8238</span><a name="line.8238"></a>
+<span class="sourceLineNo">8239</span>  //// method for debugging tests<a name="line.8239"></a>
+<span class="sourceLineNo">8240</span>  void throwException(String title, String regionName) {<a name="line.8240"></a>
+<span class="sourceLineNo">8241</span>    StringBuffer buf = new StringBuffer();<a name="line.8241"></a>
+<span class="sourceLineNo">8242</span>    buf.append(title + ", ");<a name="line.8242"></a>
+<span class="sourceLineNo">8243</span>    buf.append(getRegionInfo().toString());<a name="line.8243"></a>
+<span class="sourceLineNo">8244</span>    buf.append(getRegionInfo().isMetaRegion() ? " meta region " : " ");<a name="line.8244"></a>
+<span class="sourceLineNo">8245</span>    buf.append(getRegionInfo().isMetaTable() ? " meta table " : " ");<a name="line.8245"></a>
+<span class="sourceLineNo">8246</span>    buf.append("stores: ");<a name="line.8246"></a>
+<span class="sourceLineNo">8247</span>    for (Store s : getStores()) {<a name="line.8247"></a>
+<span class="sourceLineNo">8248</span>      buf.append(s.getColumnFamilyDescriptor().getNameAsString());<a name="line.8248"></a>
+<span class="sourceLineNo">8249</span>      buf.append(" size: ");<a name="line.8249"></a>
+<span class="sourceLineNo">8250</span>      buf.append(s.getSizeOfMemStore().getDataSize());<a name="line.8250"></a>
+<span class="sourceLineNo">8251</span>      buf.append(" ");<a name="line.8251"></a>
+<span class="sourceLineNo">8252</span>    }<a name="line.8252"></a>
+<span class="sourceLineNo">8253</span>    buf.append("end-of-stores");<a name="line.8253"></a>
+<span class="sourceLineNo">8254</span>    buf.append(", memstore size ");<a name="line.8254"></a>
+<span class="sourceLineNo">8255</span>    buf.append(getMemstoreSize());<a name="line.8255"></a>
+<span class="sourceLineNo">8256</span>    if (getRegionInfo().getRegionNameAsString().startsWith(regionName)) {<a name="line.8256"></a>
+<span class="sourceLineNo">8257</span>      throw new RuntimeException(buf.toString());<a name="line.8257"></a>
+<span class="sourceLineNo">8258</span>    }<a name="line.8258"></a>
+<span class="sourceLineNo">8259</span>  }<a name="line.8259"></a>
+<span class="sourceLineNo">8260</span>}<a name="line.8260"></a>
 
 
 


[25/33] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/Region.Operation.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/Region.Operation.html b/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/Region.Operation.html
index c468b08..fd77d02 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/Region.Operation.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/Region.Operation.html
@@ -161,18 +161,22 @@ the order they are declared.</div>
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><span class="typeNameLabel">HRegion.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html#closeRegionOperation-org.apache.hadoop.hbase.regionserver.Region.Operation-">closeRegionOperation</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.Operation</a>&nbsp;operation)</code>
-<div class="block">Closes the lock.</div>
+<td class="colLast"><span class="typeNameLabel">Region.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/Region.html#closeRegionOperation-org.apache.hadoop.hbase.regionserver.Region.Operation-">closeRegionOperation</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.Operation</a>&nbsp;op)</code>
+<div class="block">Closes the region operation lock.</div>
 </td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><span class="typeNameLabel">HRegion.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html#closeRegionOperation-org.apache.hadoop.hbase.regionserver.Region.Operation-">closeRegionOperation</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.Operation</a>&nbsp;operation)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a></code></td>
 <td class="colLast"><span class="typeNameLabel">HRegion.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html#doCoprocessorPreCall-org.apache.hadoop.hbase.regionserver.Region.Operation-org.apache.hadoop.hbase.client.Mutation-">doCoprocessorPreCall</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.Operation</a>&nbsp;op,
                     <a href="../../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;mutation)</code>
 <div class="block">Do coprocessor pre-increment or pre-append call.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a></code></td>
 <td class="colLast"><span class="typeNameLabel">HRegion.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html#doDelta-org.apache.hadoop.hbase.regionserver.Region.Operation-org.apache.hadoop.hbase.client.Mutation-long-long-boolean-">doDelta</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.Operation</a>&nbsp;op,
        <a href="../../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;mutation,
@@ -182,15 +186,15 @@ the order they are declared.</div>
 <div class="block">Add "deltas" to Cells.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">RegionCoprocessorHost.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.html#postCloseRegionOperation-org.apache.hadoop.hbase.regionserver.Region.Operation-">postCloseRegionOperation</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.Operation</a>&nbsp;op)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">RegionCoprocessorHost.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.html#postStartRegionOperation-org.apache.hadoop.hbase.regionserver.Region.Operation-">postStartRegionOperation</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.Operation</a>&nbsp;op)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALEdit</a></code></td>
 <td class="colLast"><span class="typeNameLabel">HRegion.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html#reckonDeltas-org.apache.hadoop.hbase.regionserver.Region.Operation-org.apache.hadoop.hbase.client.Mutation-org.apache.hadoop.hbase.client.Durability-java.util.Map-java.util.List-">reckonDeltas</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.Operation</a>&nbsp;op,
             <a href="../../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;mutation,
@@ -202,7 +206,7 @@ the order they are declared.</div>
  this case we write back nothing, just return latest Cell value to the client).</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="http://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="../../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">HRegion.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html#reckonDeltasByStore-org.apache.hadoop.hbase.regionserver.Store-org.apache.hadoop.hbase.regionserver.Region.Operation-org.apache.hadoop.hbase.client.Mutation-org.apache.hadoop.hbase.client.Durability-long-java.util.List-java.util.List-">reckonDeltasByStore</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a>&nbsp;store,
                    <a href="../../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.Operation</a>&nbsp;op,
@@ -215,14 +219,14 @@ the order they are declared.</div>
  column family/Store.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">Region.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/Region.html#startRegionOperation-org.apache.hadoop.hbase.regionserver.Region.Operation-">startRegionOperation</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.Operation</a>&nbsp;op)</code>
 <div class="block">This method needs to be called before any public call that reads or
  modifies data.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">HRegion.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html#startRegionOperation-org.apache.hadoop.hbase.regionserver.Region.Operation-">startRegionOperation</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.Operation</a>&nbsp;op)</code>&nbsp;</td>
 </tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/Region.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/Region.html b/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/Region.html
index 0753549..8d2bf09 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/Region.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/Region.html
@@ -1051,7 +1051,7 @@
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colFirst"><code>(package private) <a href="../../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a></code></td>
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a></code></td>
 <td class="colLast"><span class="typeNameLabel">FlushSnapshotSubprocedure.RegionSnapshotTask.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.RegionSnapshotTask.html#region">region</a></span></code>&nbsp;</td>
 </tr>
 </tbody>
@@ -1093,7 +1093,10 @@
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.RegionSnapshotTask.html#RegionSnapshotTask-org.apache.hadoop.hbase.regionserver.Region-">RegionSnapshotTask</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.RegionSnapshotTask.html#RegionSnapshotTask-org.apache.hadoop.hbase.regionserver.Region-org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription-boolean-org.apache.hadoop.hbase.errorhandling.ForeignExceptionDispatcher-">RegionSnapshotTask</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region,
+                  org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription&nbsp;snapshotDesc,
+                  boolean&nbsp;skipFlush,
+                  <a href="../../../../../../org/apache/hadoop/hbase/errorhandling/ForeignExceptionDispatcher.html" title="class in org.apache.hadoop.hbase.errorhandling">ForeignExceptionDispatcher</a>&nbsp;monitor)</code>&nbsp;</td>
 </tr>
 </tbody>
 </table>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
index f78c04f..cbc2ae9 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -692,20 +692,20 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">StoreScanner.StoreScannerCompactionRace</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.StepDirection.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DefaultHeapMemoryTuner.StepDirection</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">BloomType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionOpeningState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">RegionOpeningState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.NextState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MetricsRegionServerSourceFactoryImpl.FactoryStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">FlushType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.NextState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.TaskExecutor.Status.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">SplitLogWorker.TaskExecutor.Status</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">StoreScanner.StoreScannerCompactionRace</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">CompactingMemStore.IndexType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">BloomType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.LimitScope</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MetricsRegionServerSourceFactoryImpl.FactoryStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreCompactor.Action.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MemStoreCompactor.Action</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Region.Operation</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Region.FlushResult.Result</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScanType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.TaskExecutor.Status.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">SplitLogWorker.TaskExecutor.Status</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.StepDirection.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DefaultHeapMemoryTuner.StepDirection</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Region.FlushResult.Result</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreCompactor.Action.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MemStoreCompactor.Action</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionOpeningState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">RegionOpeningState</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
index 71147b9..45eb0b3 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
@@ -131,10 +131,10 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/ScanQueryMatcher.MatchCode.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">ScanQueryMatcher.MatchCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/StripeCompactionScanQueryMatcher.DropDeletesInOutput.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">StripeCompactionScanQueryMatcher.DropDeletesInOutput</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/DeleteTracker.DeleteCompare.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">DeleteTracker.DeleteCompare</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/ScanQueryMatcher.MatchCode.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">ScanQueryMatcher.MatchCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/DeleteTracker.DeleteResult.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">DeleteTracker.DeleteResult</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/StripeCompactionScanQueryMatcher.DropDeletesInOutput.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">StripeCompactionScanQueryMatcher.DropDeletesInOutput</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.RegionSnapshotTask.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.RegionSnapshotTask.html b/devapidocs/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.RegionSnapshotTask.html
index 891d8ad..2a6ec41 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.RegionSnapshotTask.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.RegionSnapshotTask.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.html#line.77">FlushSnapshotSubprocedure.RegionSnapshotTask</a>
+<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.html#line.78">FlushSnapshotSubprocedure.RegionSnapshotTask</a>
 extends <a href="http://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="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</pre>
 <div class="block">Callable for adding files to snapshot manifest working dir.  Ready for multithreading.</div>
@@ -140,9 +140,21 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurren
 <th class="colLast" scope="col">Field and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>(package private) <a href="../../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a></code></td>
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/errorhandling/ForeignExceptionDispatcher.html" title="class in org.apache.hadoop.hbase.errorhandling">ForeignExceptionDispatcher</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.RegionSnapshotTask.html#monitor">monitor</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.RegionSnapshotTask.html#region">region</a></span></code>&nbsp;</td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.RegionSnapshotTask.html#skipFlush">skipFlush</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.RegionSnapshotTask.html#snapshotDesc">snapshotDesc</a></span></code>&nbsp;</td>
+</tr>
 </table>
 </li>
 </ul>
@@ -158,7 +170,10 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurren
 <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/regionserver/snapshot/FlushSnapshotSubprocedure.RegionSnapshotTask.html#RegionSnapshotTask-org.apache.hadoop.hbase.regionserver.Region-">RegionSnapshotTask</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region)</code>&nbsp;</td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.RegionSnapshotTask.html#RegionSnapshotTask-org.apache.hadoop.hbase.regionserver.Region-org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription-boolean-org.apache.hadoop.hbase.errorhandling.ForeignExceptionDispatcher-">RegionSnapshotTask</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region,
+                  org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription&nbsp;snapshotDesc,
+                  boolean&nbsp;skipFlush,
+                  <a href="../../../../../../org/apache/hadoop/hbase/errorhandling/ForeignExceptionDispatcher.html" title="class in org.apache.hadoop.hbase.errorhandling">ForeignExceptionDispatcher</a>&nbsp;monitor)</code>&nbsp;</td>
 </tr>
 </table>
 </li>
@@ -204,10 +219,37 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurren
 <a name="region">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>region</h4>
-<pre><a href="../../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.RegionSnapshotTask.html#line.78">region</a></pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.RegionSnapshotTask.html#line.79">region</a></pre>
+</li>
+</ul>
+<a name="skipFlush">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>skipFlush</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.RegionSnapshotTask.html#line.80">skipFlush</a></pre>
+</li>
+</ul>
+<a name="monitor">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>monitor</h4>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/errorhandling/ForeignExceptionDispatcher.html" title="class in org.apache.hadoop.hbase.errorhandling">ForeignExceptionDispatcher</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.RegionSnapshotTask.html#line.81">monitor</a></pre>
+</li>
+</ul>
+<a name="snapshotDesc">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>snapshotDesc</h4>
+<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.RegionSnapshotTask.html#line.82">snapshotDesc</a></pre>
 </li>
 </ul>
 </li>
@@ -218,13 +260,16 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurren
 <!--   -->
 </a>
 <h3>Constructor Detail</h3>
-<a name="RegionSnapshotTask-org.apache.hadoop.hbase.regionserver.Region-">
+<a name="RegionSnapshotTask-org.apache.hadoop.hbase.regionserver.Region-org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription-boolean-org.apache.hadoop.hbase.errorhandling.ForeignExceptionDispatcher-">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RegionSnapshotTask</h4>
-<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.RegionSnapshotTask.html#line.79">RegionSnapshotTask</a>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region)</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.RegionSnapshotTask.html#line.84">RegionSnapshotTask</a>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region,
+                          org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription&nbsp;snapshotDesc,
+                          boolean&nbsp;skipFlush,
+                          <a href="../../../../../../org/apache/hadoop/hbase/errorhandling/ForeignExceptionDispatcher.html" title="class in org.apache.hadoop.hbase.errorhandling">ForeignExceptionDispatcher</a>&nbsp;monitor)</pre>
 </li>
 </ul>
 </li>
@@ -241,7 +286,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurren
 <ul class="blockListLast">
 <li class="blockList">
 <h4>call</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.RegionSnapshotTask.html#line.84">call</a>()
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.RegionSnapshotTask.html#line.93">call</a>()
           throws <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.html b/devapidocs/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.html
index b039ba9..be3f430 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.html
@@ -120,7 +120,7 @@ var activeTableTab = "activeTableTab";
 <br>
 <pre><a href="../../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
  <a href="../../../../../../org/apache/hadoop/hbase/classification/InterfaceStability.Unstable.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceStability.Unstable</a>
-public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.html#line.49">FlushSnapshotSubprocedure</a>
+public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.html#line.50">FlushSnapshotSubprocedure</a>
 extends <a href="../../../../../../org/apache/hadoop/hbase/procedure/Subprocedure.html" title="class in org.apache.hadoop.hbase.procedure">Subprocedure</a></pre>
 <div class="block">This online snapshot implementation uses the distributed procedure framework to force a
  store flush and then records the hfiles.  Its enter stage does nothing.  Its leave stage then
@@ -146,7 +146,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/procedure/Subprocedur
 <th class="colLast" scope="col">Class and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>private class&nbsp;</code></td>
+<td class="colFirst"><code>static class&nbsp;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.RegionSnapshotTask.html" title="class in org.apache.hadoop.hbase.regionserver.snapshot">FlushSnapshotSubprocedure.RegionSnapshotTask</a></span></code>
 <div class="block">Callable for adding files to snapshot manifest working dir.</div>
 </td>
@@ -305,7 +305,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/procedure/Subprocedur
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.html#line.50">LOG</a></pre>
+<pre>private static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.html#line.51">LOG</a></pre>
 </li>
 </ul>
 <a name="regions">
@@ -314,7 +314,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/procedure/Subprocedur
 <ul class="blockList">
 <li class="blockList">
 <h4>regions</h4>
-<pre>private final&nbsp;<a href="http://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="../../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.html#line.52">regions</a></pre>
+<pre>private final&nbsp;<a href="http://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="../../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.html#line.53">regions</a></pre>
 </li>
 </ul>
 <a name="snapshot">
@@ -323,7 +323,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/procedure/Subprocedur
 <ul class="blockList">
 <li class="blockList">
 <h4>snapshot</h4>
-<pre>private final&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.html#line.53">snapshot</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.html#line.54">snapshot</a></pre>
 </li>
 </ul>
 <a name="taskManager">
@@ -332,7 +332,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/procedure/Subprocedur
 <ul class="blockList">
 <li class="blockList">
 <h4>taskManager</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/snapshot/RegionServerSnapshotManager.SnapshotSubprocedurePool.html" title="class in org.apache.hadoop.hbase.regionserver.snapshot">RegionServerSnapshotManager.SnapshotSubprocedurePool</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.html#line.54">taskManager</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/snapshot/RegionServerSnapshotManager.SnapshotSubprocedurePool.html" title="class in org.apache.hadoop.hbase.regionserver.snapshot">RegionServerSnapshotManager.SnapshotSubprocedurePool</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.html#line.55">taskManager</a></pre>
 </li>
 </ul>
 <a name="snapshotSkipFlush">
@@ -341,7 +341,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/procedure/Subprocedur
 <ul class="blockList">
 <li class="blockList">
 <h4>snapshotSkipFlush</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.html#line.55">snapshotSkipFlush</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.html#line.56">snapshotSkipFlush</a></pre>
 </li>
 </ul>
 <a name="MAX_RETRIES">
@@ -350,7 +350,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/procedure/Subprocedur
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MAX_RETRIES</h4>
-<pre>static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.html#line.58">MAX_RETRIES</a></pre>
+<pre>static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.html#line.59">MAX_RETRIES</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.snapshot.FlushSnapshotSubprocedure.MAX_RETRIES">Constant Field Values</a></dd>
@@ -371,7 +371,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/procedure/Subprocedur
 <ul class="blockListLast">
 <li class="blockList">
 <h4>FlushSnapshotSubprocedure</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.html#line.60">FlushSnapshotSubprocedure</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure/ProcedureMember.html" title="class in org.apache.hadoop.hbase.procedure">ProcedureMember</a>&nbsp;member,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.html#line.61">FlushSnapshotSubprocedure</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure/ProcedureMember.html" title="class in org.apache.hadoop.hbase.procedure">ProcedureMember</a>&nbsp;member,
                                  <a href="../../../../../../org/apache/hadoop/hbase/errorhandling/ForeignExceptionDispatcher.html" title="class in org.apache.hadoop.hbase.errorhandling">ForeignExceptionDispatcher</a>&nbsp;errorListener,
                                  long&nbsp;wakeFrequency,
                                  long&nbsp;timeout,
@@ -394,7 +394,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/procedure/Subprocedur
 <ul class="blockList">
 <li class="blockList">
 <h4>flushSnapshot</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.html#line.140">flushSnapshot</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.html#line.149">flushSnapshot</a>()
                     throws <a href="../../../../../../org/apache/hadoop/hbase/errorhandling/ForeignException.html" title="class in org.apache.hadoop.hbase.errorhandling">ForeignException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -408,7 +408,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/procedure/Subprocedur
 <ul class="blockList">
 <li class="blockList">
 <h4>acquireBarrier</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.html#line.176">acquireBarrier</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.html#line.185">acquireBarrier</a>()
                     throws <a href="../../../../../../org/apache/hadoop/hbase/errorhandling/ForeignException.html" title="class in org.apache.hadoop.hbase.errorhandling">ForeignException</a></pre>
 <div class="block">do nothing, core of snapshot is executed in <a href="../../../../../../org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.html#insideBarrier--"><code>insideBarrier()</code></a> step.</div>
 <dl>
@@ -425,7 +425,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/procedure/Subprocedur
 <ul class="blockList">
 <li class="blockList">
 <h4>insideBarrier</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.html#line.184">insideBarrier</a>()
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.html#line.193">insideBarrier</a>()
                      throws <a href="../../../../../../org/apache/hadoop/hbase/errorhandling/ForeignException.html" title="class in org.apache.hadoop.hbase.errorhandling">ForeignException</a></pre>
 <div class="block">do a flush snapshot of every region on this rs from the target table.</div>
 <dl>
@@ -444,7 +444,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/procedure/Subprocedur
 <ul class="blockList">
 <li class="blockList">
 <h4>cleanup</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.html#line.193">cleanup</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a>&nbsp;e)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.html#line.202">cleanup</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a>&nbsp;e)</pre>
 <div class="block">Cancel threads if they haven't finished.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -458,7 +458,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/procedure/Subprocedur
 <ul class="blockListLast">
 <li class="blockList">
 <h4>releaseBarrier</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.html#line.206">releaseBarrier</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.html#line.215">releaseBarrier</a>()</pre>
 <div class="block">Hooray!</div>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/org/apache/hadoop/hbase/regionserver/snapshot/package-frame.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/snapshot/package-frame.html b/devapidocs/org/apache/hadoop/hbase/regionserver/snapshot/package-frame.html
index ca851e9..933fdca 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/snapshot/package-frame.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/snapshot/package-frame.html
@@ -14,6 +14,7 @@
 <h2 title="Classes">Classes</h2>
 <ul title="Classes">
 <li><a href="FlushSnapshotSubprocedure.html" title="class in org.apache.hadoop.hbase.regionserver.snapshot" target="classFrame">FlushSnapshotSubprocedure</a></li>
+<li><a href="FlushSnapshotSubprocedure.RegionSnapshotTask.html" title="class in org.apache.hadoop.hbase.regionserver.snapshot" target="classFrame">FlushSnapshotSubprocedure.RegionSnapshotTask</a></li>
 <li><a href="RegionServerSnapshotManager.html" title="class in org.apache.hadoop.hbase.regionserver.snapshot" target="classFrame">RegionServerSnapshotManager</a></li>
 <li><a href="RegionServerSnapshotManager.SnapshotSubprocedurePool.html" title="class in org.apache.hadoop.hbase.regionserver.snapshot" target="classFrame">RegionServerSnapshotManager.SnapshotSubprocedurePool</a></li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/org/apache/hadoop/hbase/regionserver/snapshot/package-summary.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/snapshot/package-summary.html b/devapidocs/org/apache/hadoop/hbase/regionserver/snapshot/package-summary.html
index 414d8f4..164c1f1 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/snapshot/package-summary.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/snapshot/package-summary.html
@@ -89,6 +89,12 @@
  store flush and then records the hfiles.</div>
 </td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.RegionSnapshotTask.html" title="class in org.apache.hadoop.hbase.regionserver.snapshot">FlushSnapshotSubprocedure.RegionSnapshotTask</a></td>
+<td class="colLast">
+<div class="block">Callable for adding files to snapshot manifest working dir.</div>
+</td>
+</tr>
 <tr class="altColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/snapshot/RegionServerSnapshotManager.html" title="class in org.apache.hadoop.hbase.regionserver.snapshot">RegionServerSnapshotManager</a></td>
 <td class="colLast">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
index 2680226..1185ae8 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
@@ -214,8 +214,8 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceFactoryImpl.SourceHolder.html" title="enum in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">MetricsReplicationSourceFactoryImpl.SourceHolder</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html" title="enum in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">ReplicationSourceShipper.WorkerState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceFactoryImpl.SourceHolder.html" title="enum in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">MetricsReplicationSourceFactoryImpl.SourceHolder</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html b/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
index dc2f127..91776e4 100644
--- a/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
@@ -110,8 +110,8 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="typeNameLink">ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.FilterType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="typeNameLink">ScannerModel.FilterModel.FilterType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="typeNameLink">ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
index 66b8b75..1a1b294 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
@@ -136,9 +136,9 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessController.OpType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Action</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.Strategy.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessControlFilter.Strategy</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessController.OpType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
index 689bda0..09974e8 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
@@ -191,9 +191,9 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslUtil.QualityOfProtection.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslUtil.QualityOfProtection</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslStatus.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslStatus</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/AuthMethod.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">AuthMethod</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslUtil.QualityOfProtection.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslUtil.QualityOfProtection</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html b/devapidocs/org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html
index 37e2f22..5be98ee 100644
--- a/devapidocs/org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html
+++ b/devapidocs/org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html
@@ -109,7 +109,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.141">SnapshotManifest.RegionVisitor</a>&lt;TRegion,TFamily&gt;</pre>
+<pre>static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#line.143">SnapshotManifest.RegionVisitor</a>&lt;TRegion,TFamily&gt;</pre>
 </li>
 </ul>
 </div>
@@ -173,7 +173,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockList">
 <li class="blockList">
 <h4>regionOpen</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html" title="type parameter in SnapshotManifest.RegionVisitor">TRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html#line.142">regionOpen</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;regionInfo)
+<pre><a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html" title="type parameter in SnapshotManifest.RegionVisitor">TRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html#line.144">regionOpen</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;regionInfo)
             throws <a href="http://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>
@@ -189,7 +189,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockList">
 <li class="blockList">
 <h4>regionClose</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html#line.143">regionClose</a>(<a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html" title="type parameter in SnapshotManifest.RegionVisitor">TRegion</a>&nbsp;region)
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html#line.145">regionClose</a>(<a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html" title="type parameter in SnapshotManifest.RegionVisitor">TRegion</a>&nbsp;region)
           throws <a href="http://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>
@@ -205,7 +205,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockList">
 <li class="blockList">
 <h4>familyOpen</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html" title="type parameter in SnapshotManifest.RegionVisitor">TFamily</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html#line.145">familyOpen</a>(<a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html" title="type parameter in SnapshotManifest.RegionVisitor">TRegion</a>&nbsp;region,
+<pre><a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html" title="type parameter in SnapshotManifest.RegionVisitor">TFamily</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html#line.147">familyOpen</a>(<a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html" title="type parameter in SnapshotManifest.RegionVisitor">TRegion</a>&nbsp;region,
                    byte[]&nbsp;familyName)
             throws <a href="http://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>
@@ -222,7 +222,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockList">
 <li class="blockList">
 <h4>familyClose</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html#line.146">familyClose</a>(<a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html" title="type parameter in SnapshotManifest.RegionVisitor">TRegion</a>&nbsp;region,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html#line.148">familyClose</a>(<a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html" title="type parameter in SnapshotManifest.RegionVisitor">TRegion</a>&nbsp;region,
                  <a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html" title="type parameter in SnapshotManifest.RegionVisitor">TFamily</a>&nbsp;family)
           throws <a href="http://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>
@@ -239,7 +239,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockListLast">
 <li class="blockList">
 <h4>storeFile</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html#line.148">storeFile</a>(<a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html" title="type parameter in SnapshotManifest.RegionVisitor">TRegion</a>&nbsp;region,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html#line.150">storeFile</a>(<a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html" title="type parameter in SnapshotManifest.RegionVisitor">TRegion</a>&nbsp;region,
                <a href="../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html" title="type parameter in SnapshotManifest.RegionVisitor">TFamily</a>&nbsp;family,
                <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileInfo</a>&nbsp;storeFile)
         throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>


[30/33] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/checkstyle-aggregate.html
----------------------------------------------------------------------
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index a42b239..0337202 100644
--- a/checkstyle-aggregate.html
+++ b/checkstyle-aggregate.html
@@ -289,7 +289,7 @@
 <td>2024</td>
 <td>0</td>
 <td>0</td>
-<td>12788</td></tr></table></div>
+<td>12787</td></tr></table></div>
 <div class="section">
 <h2><a name="Files"></a>Files</h2>
 <table border="0" class="table table-striped">
@@ -4187,7 +4187,7 @@
 <td><a href="#org.apache.hadoop.hbase.regionserver.HRegion.java">org/apache/hadoop/hbase/regionserver/HRegion.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>210</td></tr>
+<td>209</td></tr>
 <tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HRegionFileSystem.java">org/apache/hadoop/hbase/regionserver/HRegionFileSystem.java</a></td>
 <td>0</td>
@@ -4437,7 +4437,7 @@
 <td><a href="#org.apache.hadoop.hbase.regionserver.Region.java">org/apache/hadoop/hbase/regionserver/Region.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>62</td></tr>
+<td>63</td></tr>
 <tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost.java">org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.java</a></td>
 <td>0</td>
@@ -5862,7 +5862,7 @@
 <td><a href="#org.apache.hadoop.hbase.snapshot.SnapshotManifest.java">org/apache/hadoop/hbase/snapshot/SnapshotManifest.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>6</td></tr>
+<td>5</td></tr>
 <tr class="a">
 <td><a href="#org.apache.hadoop.hbase.snapshot.SnapshotManifestV2.java">org/apache/hadoop/hbase/snapshot/SnapshotManifestV2.java</a></td>
 <td>0</td>
@@ -7016,12 +7016,12 @@
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_javadoc.html#JavadocTagContinuationIndentation">JavadocTagContinuationIndentation</a>
 <ul>
 <li>offset: <tt>&quot;2&quot;</tt></li></ul></td>
-<td>760</td>
+<td>765</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="b">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_javadoc.html#NonEmptyAtclauseDescription">NonEmptyAtclauseDescription</a></td>
-<td>3234</td>
+<td>3229</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="a">
 <td>misc</td>
@@ -7039,7 +7039,7 @@
 <ul>
 <li>max: <tt>&quot;100&quot;</tt></li>
 <li>ignorePattern: <tt>&quot;^package.*|^import.*|a href|href|http://|https://|ftp://|org.apache.thrift.|com.google.protobuf.|hbase.protobuf.generated&quot;</tt></li></ul></td>
-<td>938</td>
+<td>937</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="b">
 <td></td>
@@ -12913,7 +12913,7 @@
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
+<td>JavadocTagContinuationIndentation</td>
 <td>Javadoc comment at column 43 has parse error. Missed HTML close tag 'TableName'. Sometimes it means that close tag missed for one of previous tags.</td>
 <td>181</td></tr>
 <tr class="a">
@@ -16765,7 +16765,7 @@
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
+<td>JavadocTagContinuationIndentation</td>
 <td>Javadoc comment at column 64 has parse error. Missed HTML close tag 'code'. Sometimes it means that close tag missed for one of previous tags.</td>
 <td>2112</td></tr>
 <tr class="b">
@@ -22366,7 +22366,7 @@
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
+<td>JavadocTagContinuationIndentation</td>
 <td>Javadoc comment at column 37 has parse error. Details: no viable alternative at input '&lt;ColumnFamily,' while parsing HTML_ELEMENT</td>
 <td>29</td></tr></table></div>
 <div class="section">
@@ -52417,7 +52417,7 @@
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
+<td>JavadocTagContinuationIndentation</td>
 <td>Javadoc comment at column 60 has parse error. Missed HTML close tag 'Comparable'. Sometimes it means that close tag missed for one of previous tags.</td>
 <td>28</td></tr>
 <tr class="a">
@@ -55354,7 +55354,7 @@
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
+<td>JavadocTagContinuationIndentation</td>
 <td>Javadoc comment at column 0 has parse error. Unrecognized error from ANTLR parser: null</td>
 <td>73</td></tr>
 <tr class="b">
@@ -58245,428 +58245,422 @@
 <td>7794</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>7967</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>7990</td></tr>
-<tr class="a">
+<td>8003</td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'else' construct must use '{}'s.</td>
-<td>7991</td></tr>
-<tr class="b">
+<td>8004</td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>7993</td></tr>
-<tr class="a">
+<td>8006</td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'else' construct must use '{}'s.</td>
-<td>7994</td></tr>
-<tr class="b">
+<td>8007</td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>8004</td></tr>
-<tr class="a">
+<td>8017</td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'else' construct must use '{}'s.</td>
-<td>8005</td></tr>
-<tr class="b">
+<td>8018</td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 6, expected level should be 8.</td>
-<td>8073</td></tr>
-<tr class="a">
+<td>8086</td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' have incorrect indentation level 8, expected level should be 10.</td>
-<td>8075</td></tr>
-<tr class="b">
+<td>8088</td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 10, expected level should be 12.</td>
-<td>8076</td></tr>
-<tr class="a">
+<td>8089</td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' have incorrect indentation level 8, expected level should be 10.</td>
-<td>8077</td></tr>
-<tr class="b">
+<td>8090</td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
-<td>8078</td></tr>
-<tr class="a">
+<td>8091</td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 6, expected level should be 8.</td>
-<td>8079</td></tr>
-<tr class="b">
+<td>8092</td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
-<td>8081</td></tr>
-<tr class="a">
+<td>8094</td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 6, expected level should be 8.</td>
-<td>8082</td></tr>
-<tr class="b">
+<td>8095</td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
-<td>8084</td></tr>
-<tr class="a">
+<td>8097</td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 6, expected level should be 8.</td>
-<td>8085</td></tr>
-<tr class="b">
+<td>8098</td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 6, expected level should be 8.</td>
-<td>8086</td></tr>
-<tr class="a">
+<td>8099</td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
-<td>8088</td></tr>
-<tr class="b">
+<td>8101</td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
-<td>8089</td></tr>
-<tr class="a">
+<td>8102</td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 6, expected level should be 8.</td>
-<td>8090</td></tr>
-<tr class="b">
+<td>8103</td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
-<td>8091</td></tr></table></div>
+<td>8104</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.HRegionFileSystem.java">org/apache/hadoop/hbase/regionserver/HRegionFileSystem.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.shaded.com.google.common.collect.Lists' import.</td>
 <td>58</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'edu.umd.cs.findbugs.annotations.Nullable' import.</td>
 <td>60</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'ctor def rcurly' have incorrect indentation level 1, expected level should be 2.</td>
 <td>116</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>177</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>190</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>191</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>318</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>329</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>341</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>354</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>358</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>379</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>392</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>432</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>447</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>452</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>487</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>531</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>579</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>583</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>607</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>621</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>670</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>672</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>747</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>780</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>790</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>792</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>817</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>844</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>846</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>911</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1062</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1065</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1075</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1088</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1089</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1091</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1101</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1116</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1118</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1128</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1151</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1152</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1153</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1156</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1171</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -58675,787 +58669,787 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.HRegionServer.java">org/apache/hadoop/hbase/regionserver/HRegionServer.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.shaded.com.google.common.annotations.VisibleForTesting' import.</td>
 <td>211</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'TEST_SKIP_REPORTING_TRANSITION' must be private and have accessor methods.</td>
 <td>238</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'compactSplitThread' must be private and have accessor methods.</td>
 <td>288</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>775</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>788</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>789</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>794</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>809</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>821</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>822</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>855</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>856</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>921</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
 <td>Method length is 227 lines (max allowed is 150).</td>
 <td>999</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1091</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1115</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1116</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1117</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1118</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1119</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1120</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1121</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>EmptyBlock</td>
 <td>Must have at least one statement.</td>
 <td>1138</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1151</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1233</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1434</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' have incorrect indentation level 14, expected level should be 10.</td>
 <td>1476</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1736</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1772</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1778</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1817</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1851</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1859</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1935</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1936</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1937</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1938</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1939</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1940</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1941</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1977</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1990</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 7, expected level should be 8.</td>
 <td>2154</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>2276</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>2409</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>2410</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>2411</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>2412</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>2413</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>2414</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>2415</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>2416</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>2431</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>2447</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>2456</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>2554</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>2569</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>2655</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>2660</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>2747</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>2748</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2955</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2956</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2993</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child have incorrect indentation level 5, expected level should be 4.</td>
 <td>2998</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'synchronized' have incorrect indentation level 5, expected level should be 4.</td>
 <td>2999</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'for' have incorrect indentation level 7, expected level should be 6.</td>
 <td>3000</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'for' child have incorrect indentation level 9, expected level should be 8.</td>
 <td>3001</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' have incorrect indentation level 9, expected level should be 8.</td>
 <td>3002</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 11, expected level should be 10.</td>
 <td>3003</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' have incorrect indentation level 9, expected level should be 8.</td>
 <td>3004</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'for rcurly' have incorrect indentation level 7, expected level should be 6.</td>
 <td>3005</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'synchronized rcurly' have incorrect indentation level 5, expected level should be 4.</td>
 <td>3006</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child have incorrect indentation level 5, expected level should be 4.</td>
 <td>3007</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' have incorrect indentation level 3, expected level should be 2.</td>
 <td>3008</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>3159</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' have incorrect indentation level 1, expected level should be 2.</td>
 <td>3161</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'for' have incorrect indentation level 3, expected level should be 4.</td>
 <td>3163</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'for' child have incorrect indentation level 5, expected level should be 6.</td>
 <td>3164</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' have incorrect indentation level 5, expected level should be 6.</td>
 <td>3165</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 7, expected level should be 8.</td>
 <td>3166</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 7, expected level should be 8.</td>
 <td>3167</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' have incorrect indentation level 7, expected level should be 8.</td>
 <td>3168</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' child have incorrect indentation level 9, expected level should be 10.</td>
 <td>3169</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try rcurly' have incorrect indentation level 7, expected level should be 8.</td>
 <td>3170</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch' child have incorrect indentation level 9, expected level should be 10.</td>
 <td>3171</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch rcurly' have incorrect indentation level 7, expected level should be 8.</td>
 <td>3172</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' have incorrect indentation level 7, expected level should be 8.</td>
 <td>3173</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 9, expected level should be 10.</td>
 <td>3175</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' have incorrect indentation level 7, expected level should be 8.</td>
 <td>3177</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' have incorrect indentation level 7, expected level should be 8.</td>
 <td>3179</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>3180</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' have incorrect indentation level 9, expected level should be 10.</td>
 <td>3180</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 9, expected level should be 10.</td>
 <td>3181</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' have incorrect indentation level 7, expected level should be 8.</td>
 <td>3182</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' have incorrect indentation level 7, expected level should be 8.</td>
 <td>3183</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 9, expected level should be 10.</td>
 <td>3187</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' have incorrect indentation level 9, expected level should be 10.</td>
 <td>3188</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 11, expected level should be 12.</td>
 <td>3190</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' have incorrect indentation level 11, expected level should be 12.</td>
 <td>3191</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 13, expected level should be 14.</td>
 <td>3193</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' have incorrect indentation level 11, expected level should be 12.</td>
 <td>3194</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' have incorrect indentation level 9, expected level should be 10.</td>
 <td>3195</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'else' child have incorrect indentation level 11, expected level should be 12.</td>
 <td>3196</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'else rcurly' have incorrect indentation level 9, expected level should be 10.</td>
 <td>3197</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 9, expected level should be 10.</td>
 <td>3198</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 9, expected level should be 10.</td>
 <td>3202</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' have incorrect indentation level 7, expected level should be 8.</td>
 <td>3203</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 7, expected level should be 8.</td>
 <td>3205</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' have incorrect indentation level 5, expected level should be 6.</td>
 <td>3206</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'for rcurly' have incorrect indentation level 3, expected level should be 4.</td>
 <td>3207</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child have incorrect indentation level 3, expected level should be 4.</td>
 <td>3208</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>3212</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>3239</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>3253</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>3361</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'ctor def rcurly' have incorrect indentation level 5, expected level should be 4.</td>
 <td>3383</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child have incorrect indentation level 8, expected level should be 4.</td>
 <td>3456</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 48 should have line break after.</td>
 <td>3478</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 46 should have line break after.</td>
 <td>3479</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>3521</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>3522</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>3578</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>3579</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' have incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
 <td>3631</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' have incorrect indentation level 10, expected level should be one of the following: 12, 14.</td>
 <td>3633</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 12, expected level should be one of the following: 14, 16.</td>
 <td>3634</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' have incorrect indentation level 10, expected level should be one of the following: 12, 14.</td>
 <td>3635</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' have incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
 <td>3636</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -59464,25 +59458,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine.java">org/apache/hadoop/hbase/regionserver/HRegionServerCommandLine.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.conf.Configuration' import.</td>
 <td>25</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.CoordinatedStateManager' import.</td>
 <td>29</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
@@ -59491,364 +59485,364 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.HStore.java">org/apache/hadoop/hbase/regionserver/HStore.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.client.ColumnFamilyDescriptor' import.</td>
 <td>96</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>212</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>215</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>216</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 8, expected level should be 10.</td>
 <td>278</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>343</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>annotation</td>
 <td>MissingDeprecated</td>
 <td>Must include both @java.lang.Deprecated annotation and @deprecated Javadoc tag with description.</td>
 <td>393</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>annotation</td>
 <td>MissingDeprecated</td>
 <td>Must include both @java.lang.Deprecated annotation and @deprecated Javadoc tag with description.</td>
 <td>405</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>annotation</td>
 <td>MissingDeprecated</td>
 <td>Must include both @java.lang.Deprecated annotation and @deprecated Javadoc tag with description.</td>
 <td>483</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>annotation</td>
 <td>MissingDeprecated</td>
 <td>Must include both @java.lang.Deprecated annotation and @deprecated Javadoc tag with description.</td>
 <td>495</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>517</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 112).</td>
 <td>532</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>564</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>566</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>578</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>594</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>616</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>621</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>623</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>693</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>694</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' child have incorrect indentation level 7, expected level should be 6.</td>
 <td>699</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>707</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>708</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>802</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method call' child have incorrect indentation level 9, expected level should be 10.</td>
 <td>803</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method call' child have incorrect indentation level 9, expected level should be 10.</td>
 <td>804</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>807</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>815</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>922</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>928</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>955</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>956</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>957</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1295</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1412</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 114).</td>
 <td>1423</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1489</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1730</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1740</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1760</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' have incorrect indentation level 10, expected level should be 8.</td>
 <td>1859</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 12, expected level should be 10.</td>
 <td>1860</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' have incorrect indentation level 10, expected level should be 8.</td>
 <td>1861</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>annotation</td>
 <td>MissingDeprecated</td>
 <td>Must include both @java.lang.Deprecated annotation and @deprecated Javadoc tag with description.</td>
 <td>2142</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2200</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2202</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2203</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2313</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2343</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child have incorrect indentation level 11, expected level should be 4.</td>
 <td>2486</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>FileTabCharacter</td>
 <td>File contains tab characters (this is the first instance).</td>
 <td>2486</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2522</td></tr>
-<tr class="a">
+<td>2538</td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
-<td>2564</td></tr></table></div>
+<td>2580</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.HStoreFile.java">org/apache/hadoop/hbase/regionserver/HStoreFile.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.shaded.com.google.common.annotations.VisibleForTesting' import.</td>
 <td>44</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>180</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>221</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -59857,97 +59851,97 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.HeapMemoryManager.java">org/apache/hadoop/hbase/regionserver/HeapMemoryManager.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.shaded.com.google.common.annotations.VisibleForTesting' import.</td>
 <td>41</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>212</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>213</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>214</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' have incorrect indentation level 6, expected level should be 4.</td>
 <td>215</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 113).</td>
 <td>240</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>408</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
 <td>409</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
 <td>410</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>411</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
 <td>412</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
 <td>413</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>416</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
 <td>418</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -59956,19 +59950,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.HeapMemoryTuner.java">org/apache/hadoop/hbase/regionserver/HeapMemoryTuner.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.conf.Configurable' import.</td>
 <td>23</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -59977,25 +59971,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.ImmutableSegment.java">org/apache/hadoop/hbase/regionserver/ImmutableSegment.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.client.Scan' import.</td>
 <td>25</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'java.util.ArrayList' import.</td>
 <td>28</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -60004,19 +59998,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.IncreasingToUpperBoundRegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/IncreasingToUpperBoundRegionSplitPolicy.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>102</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
@@ -60025,19 +60019,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.InternalScan.java">org/apache/hadoop/hbase/regionserver/InternalScan.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>53</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
@@ -60046,19 +60040,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.InternalScanner.java">org/apache/hadoop/hbase/regionserver/InternalScanner.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>58</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -60067,13 +60061,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.KeyPrefixRegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/KeyPrefixRegionSplitPolicy.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>annotation</td>
 <td>MissingDeprecated</td>
@@ -60082,73 +60076,73 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.KeyValueHeap.java">org/apache/hadoop/hbase/regionserver/KeyValueHeap.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'java.io.IOException' import.</td>
 <td>24</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>76</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>77</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>86</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>87</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>88</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>143</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>186</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>204</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>205</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -60157,31 +60151,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.KeyValueScanner.java">org/apache/hadoop/hbase/regionserver/KeyValueScanner.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.fs.Path' import.</td>
 <td>25</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>173</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>179</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
@@ -60190,13 +60184,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.LeaseException.java">org/apache/hadoop/hbase/regionserver/LeaseException.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -60205,79 +60199,79 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.Leases.java">org/apache/hadoop/hbase/regionserver/Leases.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'java.util.ConcurrentModificationException' import.</td>
 <td>27</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'java.io.IOException' import.</td>
 <td>34</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>')' is preceded with whitespace.</td>
 <td>85</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>'(' is followed by whitespace.</td>
 <td>111</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>160</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>171</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>172</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>189</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>')' is preceded with whitespace.</td>
 <td>197</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>207</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>219</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -60286,37 +60280,37 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.LogRoller.java">org/apache/hadoop/hbase/regionserver/LogRoller.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.HConstants' import.</td>
 <td>31</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.regionserver.wal.WALActionsListener' import.</td>
 <td>36</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.shaded.com.google.common.annotations.VisibleForTesting' import.</td>
 <td>41</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>96</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -60325,61 +60319,61 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.MemStore.java">org/apache/hadoop/hbase/regionserver/MemStore.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>46</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>47</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>70</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>78</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>100</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>109</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>124</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 39 should have line break after.</td>
 <td>135</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
@@ -60388,127 +60382,127 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.MemStoreCompactor.java">org/apache/hadoop/hbase/regionserver/MemStoreCompactor.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.commons.logging.Log' import.</td>
 <td>22</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'java.io.IOException' import.</td>
 <td>30</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>132</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
 <td>Inner assignments should be avoided.</td>
 <td>214</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 4, expected level should be 6.</td>
 <td>249</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>250</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>255</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>258</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>259</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error<

<TRUNCATED>

[12/33] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.html
index f2ed401..29c147d 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.html
@@ -2494,127 +2494,143 @@
 <span class="sourceLineNo">2486</span>     return getRegionInfo().getReplicaId() == HRegionInfo.DEFAULT_REPLICA_ID;<a name="line.2486"></a>
 <span class="sourceLineNo">2487</span>  }<a name="line.2487"></a>
 <span class="sourceLineNo">2488</span><a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>  @Override<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>  public synchronized void closeAndArchiveCompactedFiles() throws IOException {<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    // ensure other threads do not attempt to archive the same files on close()<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    archiveLock.lock();<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>    try {<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>      lock.readLock().lock();<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>      Collection&lt;StoreFile&gt; copyCompactedfiles = null;<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>      try {<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>        Collection&lt;StoreFile&gt; compactedfiles =<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>            this.getStoreEngine().getStoreFileManager().getCompactedfiles();<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>        if (compactedfiles != null &amp;&amp; compactedfiles.size() != 0) {<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>          // Do a copy under read lock<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>          copyCompactedfiles = new ArrayList&lt;&gt;(compactedfiles);<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>        } else {<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>          if (LOG.isTraceEnabled()) {<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>            LOG.trace("No compacted files to archive");<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>            return;<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>          }<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>        }<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>      } finally {<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>        lock.readLock().unlock();<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>      }<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span>      if (copyCompactedfiles != null &amp;&amp; !copyCompactedfiles.isEmpty()) {<a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>        removeCompactedfiles(copyCompactedfiles);<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>      }<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>    } finally {<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>      archiveLock.unlock();<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>    }<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>  }<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span><a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>  /**<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span>   * Archives and removes the compacted files<a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>   * @param compactedfiles The compacted files in this store that are not active in reads<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>   * @throws IOException<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>   */<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>  private void removeCompactedfiles(Collection&lt;StoreFile&gt; compactedfiles)<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>      throws IOException {<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>    final List&lt;StoreFile&gt; filesToRemove = new ArrayList&lt;&gt;(compactedfiles.size());<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>    for (final StoreFile file : compactedfiles) {<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span>      synchronized (file) {<a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>        try {<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>          StoreFileReader r = file.getReader();<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>          if (r == null) {<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>            if (LOG.isDebugEnabled()) {<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>              LOG.debug("The file " + file + " was closed but still not archived.");<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span>            }<a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>            filesToRemove.add(file);<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>            continue;<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>          }<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>          if (file.isCompactedAway() &amp;&amp; !file.isReferencedInReads()) {<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>            // Even if deleting fails we need not bother as any new scanners won't be<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span>            // able to use the compacted file as the status is already compactedAway<a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>            if (LOG.isTraceEnabled()) {<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>              LOG.trace("Closing and archiving the file " + file.getPath());<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>            }<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>            r.close(true);<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>            // Just close and return<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span>            filesToRemove.add(file);<a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>          }<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>        } catch (Exception e) {<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>          LOG.error(<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>            "Exception while trying to close the compacted store file " + file.getPath().getName());<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>        }<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span>      }<a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>    }<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>    if (this.isPrimaryReplicaStore()) {<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>      // Only the primary region is allowed to move the file to archive.<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>      // The secondary region does not move the files to archive. Any active reads from<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      // the secondary region will still work because the file as such has active readers on it.<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span>      if (!filesToRemove.isEmpty()) {<a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>        if (LOG.isDebugEnabled()) {<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>          LOG.debug("Moving the files " + filesToRemove + " to archive");<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>        }<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>        // Only if this is successful it has to be removed<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>        try {<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span>          this.fs.removeStoreFiles(this.getColumnFamilyDescriptor().getNameAsString(), filesToRemove);<a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>        } catch (FailedArchiveException fae) {<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>          // Even if archiving some files failed, we still need to clear out any of the<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>          // files which were successfully archived.  Otherwise we will receive a<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>          // FileNotFoundException when we attempt to re-archive them in the next go around.<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>          Collection&lt;Path&gt; failedFiles = fae.getFailedFiles();<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span>          Iterator&lt;StoreFile&gt; iter = filesToRemove.iterator();<a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>          while (iter.hasNext()) {<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>            if (failedFiles.contains(iter.next().getPath())) {<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>              iter.remove();<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>            }<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>          }<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span>          if (!filesToRemove.isEmpty()) {<a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>            clearCompactedfiles(filesToRemove);<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>          }<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>          throw fae;<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>        }<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>      }<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span>    }<a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>    if (!filesToRemove.isEmpty()) {<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>      // Clear the compactedfiles from the store file manager<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>      clearCompactedfiles(filesToRemove);<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>    }<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>  }<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span><a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>  public Long preFlushSeqIDEstimation() {<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>    return memstore.preFlushSeqIDEstimation();<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>  }<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span><a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>  @Override<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span>  public boolean isSloppyMemstore() {<a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>    return this.memstore.isSloppy();<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>  }<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span><a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>  private void clearCompactedfiles(final List&lt;StoreFile&gt; filesToRemove) throws IOException {<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>    if (LOG.isTraceEnabled()) {<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span>      LOG.trace("Clearing the compacted file " + filesToRemove + " from this store");<a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>    }<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>    try {<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>      lock.writeLock().lock();<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>      this.getStoreEngine().getStoreFileManager().removeCompactedFiles(filesToRemove);<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>    } finally {<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span>      lock.writeLock().unlock();<a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>    }<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>  }<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>}<a name="line.2609"></a>
+<span class="sourceLineNo">2489</span>  /**<a name="line.2489"></a>
+<span class="sourceLineNo">2490</span>   * Sets the store up for a region level snapshot operation.<a name="line.2490"></a>
+<span class="sourceLineNo">2491</span>   * @see #postSnapshotOperation()<a name="line.2491"></a>
+<span class="sourceLineNo">2492</span>   */<a name="line.2492"></a>
+<span class="sourceLineNo">2493</span>  public void preSnapshotOperation() {<a name="line.2493"></a>
+<span class="sourceLineNo">2494</span>    archiveLock.lock();<a name="line.2494"></a>
+<span class="sourceLineNo">2495</span>  }<a name="line.2495"></a>
+<span class="sourceLineNo">2496</span><a name="line.2496"></a>
+<span class="sourceLineNo">2497</span>  /**<a name="line.2497"></a>
+<span class="sourceLineNo">2498</span>   * Perform tasks needed after the completion of snapshot operation.<a name="line.2498"></a>
+<span class="sourceLineNo">2499</span>   * @see #preSnapshotOperation()<a name="line.2499"></a>
+<span class="sourceLineNo">2500</span>   */<a name="line.2500"></a>
+<span class="sourceLineNo">2501</span>  public void postSnapshotOperation() {<a name="line.2501"></a>
+<span class="sourceLineNo">2502</span>    archiveLock.unlock();<a name="line.2502"></a>
+<span class="sourceLineNo">2503</span>  }<a name="line.2503"></a>
+<span class="sourceLineNo">2504</span><a name="line.2504"></a>
+<span class="sourceLineNo">2505</span>  @Override<a name="line.2505"></a>
+<span class="sourceLineNo">2506</span>  public synchronized void closeAndArchiveCompactedFiles() throws IOException {<a name="line.2506"></a>
+<span class="sourceLineNo">2507</span>    // ensure other threads do not attempt to archive the same files on close()<a name="line.2507"></a>
+<span class="sourceLineNo">2508</span>    archiveLock.lock();<a name="line.2508"></a>
+<span class="sourceLineNo">2509</span>    try {<a name="line.2509"></a>
+<span class="sourceLineNo">2510</span>      lock.readLock().lock();<a name="line.2510"></a>
+<span class="sourceLineNo">2511</span>      Collection&lt;StoreFile&gt; copyCompactedfiles = null;<a name="line.2511"></a>
+<span class="sourceLineNo">2512</span>      try {<a name="line.2512"></a>
+<span class="sourceLineNo">2513</span>        Collection&lt;StoreFile&gt; compactedfiles =<a name="line.2513"></a>
+<span class="sourceLineNo">2514</span>            this.getStoreEngine().getStoreFileManager().getCompactedfiles();<a name="line.2514"></a>
+<span class="sourceLineNo">2515</span>        if (compactedfiles != null &amp;&amp; compactedfiles.size() != 0) {<a name="line.2515"></a>
+<span class="sourceLineNo">2516</span>          // Do a copy under read lock<a name="line.2516"></a>
+<span class="sourceLineNo">2517</span>          copyCompactedfiles = new ArrayList&lt;&gt;(compactedfiles);<a name="line.2517"></a>
+<span class="sourceLineNo">2518</span>        } else {<a name="line.2518"></a>
+<span class="sourceLineNo">2519</span>          if (LOG.isTraceEnabled()) {<a name="line.2519"></a>
+<span class="sourceLineNo">2520</span>            LOG.trace("No compacted files to archive");<a name="line.2520"></a>
+<span class="sourceLineNo">2521</span>            return;<a name="line.2521"></a>
+<span class="sourceLineNo">2522</span>          }<a name="line.2522"></a>
+<span class="sourceLineNo">2523</span>        }<a name="line.2523"></a>
+<span class="sourceLineNo">2524</span>      } finally {<a name="line.2524"></a>
+<span class="sourceLineNo">2525</span>        lock.readLock().unlock();<a name="line.2525"></a>
+<span class="sourceLineNo">2526</span>      }<a name="line.2526"></a>
+<span class="sourceLineNo">2527</span>      if (copyCompactedfiles != null &amp;&amp; !copyCompactedfiles.isEmpty()) {<a name="line.2527"></a>
+<span class="sourceLineNo">2528</span>        removeCompactedfiles(copyCompactedfiles);<a name="line.2528"></a>
+<span class="sourceLineNo">2529</span>      }<a name="line.2529"></a>
+<span class="sourceLineNo">2530</span>    } finally {<a name="line.2530"></a>
+<span class="sourceLineNo">2531</span>      archiveLock.unlock();<a name="line.2531"></a>
+<span class="sourceLineNo">2532</span>    }<a name="line.2532"></a>
+<span class="sourceLineNo">2533</span>  }<a name="line.2533"></a>
+<span class="sourceLineNo">2534</span><a name="line.2534"></a>
+<span class="sourceLineNo">2535</span>  /**<a name="line.2535"></a>
+<span class="sourceLineNo">2536</span>   * Archives and removes the compacted files<a name="line.2536"></a>
+<span class="sourceLineNo">2537</span>   * @param compactedfiles The compacted files in this store that are not active in reads<a name="line.2537"></a>
+<span class="sourceLineNo">2538</span>   * @throws IOException<a name="line.2538"></a>
+<span class="sourceLineNo">2539</span>   */<a name="line.2539"></a>
+<span class="sourceLineNo">2540</span>  private void removeCompactedfiles(Collection&lt;StoreFile&gt; compactedfiles)<a name="line.2540"></a>
+<span class="sourceLineNo">2541</span>      throws IOException {<a name="line.2541"></a>
+<span class="sourceLineNo">2542</span>    final List&lt;StoreFile&gt; filesToRemove = new ArrayList&lt;&gt;(compactedfiles.size());<a name="line.2542"></a>
+<span class="sourceLineNo">2543</span>    for (final StoreFile file : compactedfiles) {<a name="line.2543"></a>
+<span class="sourceLineNo">2544</span>      synchronized (file) {<a name="line.2544"></a>
+<span class="sourceLineNo">2545</span>        try {<a name="line.2545"></a>
+<span class="sourceLineNo">2546</span>          StoreFileReader r = file.getReader();<a name="line.2546"></a>
+<span class="sourceLineNo">2547</span>          if (r == null) {<a name="line.2547"></a>
+<span class="sourceLineNo">2548</span>            if (LOG.isDebugEnabled()) {<a name="line.2548"></a>
+<span class="sourceLineNo">2549</span>              LOG.debug("The file " + file + " was closed but still not archived.");<a name="line.2549"></a>
+<span class="sourceLineNo">2550</span>            }<a name="line.2550"></a>
+<span class="sourceLineNo">2551</span>            filesToRemove.add(file);<a name="line.2551"></a>
+<span class="sourceLineNo">2552</span>            continue;<a name="line.2552"></a>
+<span class="sourceLineNo">2553</span>          }<a name="line.2553"></a>
+<span class="sourceLineNo">2554</span>          if (file.isCompactedAway() &amp;&amp; !file.isReferencedInReads()) {<a name="line.2554"></a>
+<span class="sourceLineNo">2555</span>            // Even if deleting fails we need not bother as any new scanners won't be<a name="line.2555"></a>
+<span class="sourceLineNo">2556</span>            // able to use the compacted file as the status is already compactedAway<a name="line.2556"></a>
+<span class="sourceLineNo">2557</span>            if (LOG.isTraceEnabled()) {<a name="line.2557"></a>
+<span class="sourceLineNo">2558</span>              LOG.trace("Closing and archiving the file " + file.getPath());<a name="line.2558"></a>
+<span class="sourceLineNo">2559</span>            }<a name="line.2559"></a>
+<span class="sourceLineNo">2560</span>            r.close(true);<a name="line.2560"></a>
+<span class="sourceLineNo">2561</span>            // Just close and return<a name="line.2561"></a>
+<span class="sourceLineNo">2562</span>            filesToRemove.add(file);<a name="line.2562"></a>
+<span class="sourceLineNo">2563</span>          }<a name="line.2563"></a>
+<span class="sourceLineNo">2564</span>        } catch (Exception e) {<a name="line.2564"></a>
+<span class="sourceLineNo">2565</span>          LOG.error(<a name="line.2565"></a>
+<span class="sourceLineNo">2566</span>            "Exception while trying to close the compacted store file " + file.getPath().getName());<a name="line.2566"></a>
+<span class="sourceLineNo">2567</span>        }<a name="line.2567"></a>
+<span class="sourceLineNo">2568</span>      }<a name="line.2568"></a>
+<span class="sourceLineNo">2569</span>    }<a name="line.2569"></a>
+<span class="sourceLineNo">2570</span>    if (this.isPrimaryReplicaStore()) {<a name="line.2570"></a>
+<span class="sourceLineNo">2571</span>      // Only the primary region is allowed to move the file to archive.<a name="line.2571"></a>
+<span class="sourceLineNo">2572</span>      // The secondary region does not move the files to archive. Any active reads from<a name="line.2572"></a>
+<span class="sourceLineNo">2573</span>      // the secondary region will still work because the file as such has active readers on it.<a name="line.2573"></a>
+<span class="sourceLineNo">2574</span>      if (!filesToRemove.isEmpty()) {<a name="line.2574"></a>
+<span class="sourceLineNo">2575</span>        if (LOG.isDebugEnabled()) {<a name="line.2575"></a>
+<span class="sourceLineNo">2576</span>          LOG.debug("Moving the files " + filesToRemove + " to archive");<a name="line.2576"></a>
+<span class="sourceLineNo">2577</span>        }<a name="line.2577"></a>
+<span class="sourceLineNo">2578</span>        // Only if this is successful it has to be removed<a name="line.2578"></a>
+<span class="sourceLineNo">2579</span>        try {<a name="line.2579"></a>
+<span class="sourceLineNo">2580</span>          this.fs.removeStoreFiles(this.getColumnFamilyDescriptor().getNameAsString(), filesToRemove);<a name="line.2580"></a>
+<span class="sourceLineNo">2581</span>        } catch (FailedArchiveException fae) {<a name="line.2581"></a>
+<span class="sourceLineNo">2582</span>          // Even if archiving some files failed, we still need to clear out any of the<a name="line.2582"></a>
+<span class="sourceLineNo">2583</span>          // files which were successfully archived.  Otherwise we will receive a<a name="line.2583"></a>
+<span class="sourceLineNo">2584</span>          // FileNotFoundException when we attempt to re-archive them in the next go around.<a name="line.2584"></a>
+<span class="sourceLineNo">2585</span>          Collection&lt;Path&gt; failedFiles = fae.getFailedFiles();<a name="line.2585"></a>
+<span class="sourceLineNo">2586</span>          Iterator&lt;StoreFile&gt; iter = filesToRemove.iterator();<a name="line.2586"></a>
+<span class="sourceLineNo">2587</span>          while (iter.hasNext()) {<a name="line.2587"></a>
+<span class="sourceLineNo">2588</span>            if (failedFiles.contains(iter.next().getPath())) {<a name="line.2588"></a>
+<span class="sourceLineNo">2589</span>              iter.remove();<a name="line.2589"></a>
+<span class="sourceLineNo">2590</span>            }<a name="line.2590"></a>
+<span class="sourceLineNo">2591</span>          }<a name="line.2591"></a>
+<span class="sourceLineNo">2592</span>          if (!filesToRemove.isEmpty()) {<a name="line.2592"></a>
+<span class="sourceLineNo">2593</span>            clearCompactedfiles(filesToRemove);<a name="line.2593"></a>
+<span class="sourceLineNo">2594</span>          }<a name="line.2594"></a>
+<span class="sourceLineNo">2595</span>          throw fae;<a name="line.2595"></a>
+<span class="sourceLineNo">2596</span>        }<a name="line.2596"></a>
+<span class="sourceLineNo">2597</span>      }<a name="line.2597"></a>
+<span class="sourceLineNo">2598</span>    }<a name="line.2598"></a>
+<span class="sourceLineNo">2599</span>    if (!filesToRemove.isEmpty()) {<a name="line.2599"></a>
+<span class="sourceLineNo">2600</span>      // Clear the compactedfiles from the store file manager<a name="line.2600"></a>
+<span class="sourceLineNo">2601</span>      clearCompactedfiles(filesToRemove);<a name="line.2601"></a>
+<span class="sourceLineNo">2602</span>    }<a name="line.2602"></a>
+<span class="sourceLineNo">2603</span>  }<a name="line.2603"></a>
+<span class="sourceLineNo">2604</span><a name="line.2604"></a>
+<span class="sourceLineNo">2605</span>  public Long preFlushSeqIDEstimation() {<a name="line.2605"></a>
+<span class="sourceLineNo">2606</span>    return memstore.preFlushSeqIDEstimation();<a name="line.2606"></a>
+<span class="sourceLineNo">2607</span>  }<a name="line.2607"></a>
+<span class="sourceLineNo">2608</span><a name="line.2608"></a>
+<span class="sourceLineNo">2609</span>  @Override<a name="line.2609"></a>
+<span class="sourceLineNo">2610</span>  public boolean isSloppyMemstore() {<a name="line.2610"></a>
+<span class="sourceLineNo">2611</span>    return this.memstore.isSloppy();<a name="line.2611"></a>
+<span class="sourceLineNo">2612</span>  }<a name="line.2612"></a>
+<span class="sourceLineNo">2613</span><a name="line.2613"></a>
+<span class="sourceLineNo">2614</span>  private void clearCompactedfiles(final List&lt;StoreFile&gt; filesToRemove) throws IOException {<a name="line.2614"></a>
+<span class="sourceLineNo">2615</span>    if (LOG.isTraceEnabled()) {<a name="line.2615"></a>
+<span class="sourceLineNo">2616</span>      LOG.trace("Clearing the compacted file " + filesToRemove + " from this store");<a name="line.2616"></a>
+<span class="sourceLineNo">2617</span>    }<a name="line.2617"></a>
+<span class="sourceLineNo">2618</span>    try {<a name="line.2618"></a>
+<span class="sourceLineNo">2619</span>      lock.writeLock().lock();<a name="line.2619"></a>
+<span class="sourceLineNo">2620</span>      this.getStoreEngine().getStoreFileManager().removeCompactedFiles(filesToRemove);<a name="line.2620"></a>
+<span class="sourceLineNo">2621</span>    } finally {<a name="line.2621"></a>
+<span class="sourceLineNo">2622</span>      lock.writeLock().unlock();<a name="line.2622"></a>
+<span class="sourceLineNo">2623</span>    }<a name="line.2623"></a>
+<span class="sourceLineNo">2624</span>  }<a name="line.2624"></a>
+<span class="sourceLineNo">2625</span>}<a name="line.2625"></a>
 
 
 


[26/33] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/org/apache/hadoop/hbase/regionserver/Region.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/Region.html b/devapidocs/org/apache/hadoop/hbase/regionserver/Region.html
index d1caa8a..f5016f9 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/Region.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/Region.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":6,"i1":6,"i2":6,"i3":6,"i4":6,"i5":6,"i6":6,"i7":6,"i8":6,"i9":6,"i10":6,"i11":6,"i12":6,"i13":6,"i14":6,"i15":6,"i16":6,"i17":6,"i18":6,"i19":6,"i20":6,"i21":6,"i22":6,"i23":6,"i24":6,"i25":6,"i26":6,"i27":6,"i28":6,"i29":6,"i30":6,"i31":6,"i32":6,"i33":38,"i34":6,"i35":38,"i36":6,"i37":6,"i38":6,"i39":6,"i40":6,"i41":6,"i42":6,"i43":6,"i44":6,"i45":6,"i46":6,"i47":6,"i48":6,"i49":6,"i50":6,"i51":6,"i52":6,"i53":6,"i54":6,"i55":6,"i56":6,"i57":6,"i58":6,"i59":6,"i60":6,"i61":6,"i62":6,"i63":6,"i64":6,"i65":6,"i66":6,"i67":6,"i68":6,"i69":6,"i70":6,"i71":6,"i72":6,"i73":6,"i74":6,"i75":6};
+var methods = {"i0":6,"i1":6,"i2":6,"i3":6,"i4":6,"i5":6,"i6":6,"i7":6,"i8":6,"i9":6,"i10":6,"i11":6,"i12":6,"i13":6,"i14":6,"i15":6,"i16":6,"i17":6,"i18":6,"i19":6,"i20":6,"i21":6,"i22":6,"i23":6,"i24":6,"i25":6,"i26":6,"i27":6,"i28":6,"i29":6,"i30":6,"i31":6,"i32":6,"i33":6,"i34":38,"i35":6,"i36":38,"i37":6,"i38":6,"i39":6,"i40":6,"i41":6,"i42":6,"i43":6,"i44":6,"i45":6,"i46":6,"i47":6,"i48":6,"i49":6,"i50":6,"i51":6,"i52":6,"i53":6,"i54":6,"i55":6,"i56":6,"i57":6,"i58":6,"i59":6,"i60":6,"i61":6,"i62":6,"i63":6,"i64":6,"i65":6,"i66":6,"i67":6,"i68":6,"i69":6,"i70":6,"i71":6,"i72":6,"i73":6,"i74":6,"i75":6,"i76":6};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"],32:["t6","Deprecated Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -271,17 +271,23 @@ extends <a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationObserv
 </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/hbase/regionserver/Region.html#closeRegionOperation-org.apache.hadoop.hbase.regionserver.Region.Operation-">closeRegionOperation</a></span>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.Operation</a>&nbsp;op)</code>
+<div class="block">Closes the region operation lock.</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/hbase/regionserver/Region.html#compact-boolean-">compact</a></span>(boolean&nbsp;majorCompaction)</code>
 <div class="block">Synchronously compact all stores in the region.</div>
 </td>
 </tr>
-<tr id="i11" class="rowColor">
+<tr id="i12" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#delete-org.apache.hadoop.hbase.client.Delete-">delete</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/Delete.html" title="class in org.apache.hadoop.hbase.client">Delete</a>&nbsp;delete)</code>
 <div class="block">Deletes the specified cells/row.</div>
 </td>
 </tr>
-<tr id="i12" class="altColor">
+<tr id="i13" class="rowColor">
 <td class="colFirst"><code>com.google.protobuf.Message</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#execService-com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceCall-">execService</a></span>(com.google.protobuf.RpcController&nbsp;controller,
            org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceCall&nbsp;call)</code>
@@ -289,26 +295,26 @@ extends <a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationObserv
  the registered protocol handlers.</div>
 </td>
 </tr>
-<tr id="i13" class="rowColor">
+<tr id="i14" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.FlushResult.html" title="interface in org.apache.hadoop.hbase.regionserver">Region.FlushResult</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#flush-boolean-">flush</a></span>(boolean&nbsp;force)</code>
 <div class="block">Flush the cache.</div>
 </td>
 </tr>
-<tr id="i14" class="altColor">
+<tr id="i15" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#get-org.apache.hadoop.hbase.client.Get-">get</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.client">Get</a>&nbsp;get)</code>
 <div class="block">Do a get based on the get parameter.</div>
 </td>
 </tr>
-<tr id="i15" class="rowColor">
+<tr id="i16" class="altColor">
 <td class="colFirst"><code><a href="http://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="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#get-org.apache.hadoop.hbase.client.Get-boolean-">get</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.client">Get</a>&nbsp;get,
    boolean&nbsp;withCoprocessor)</code>
 <div class="block">Do a get based on the get parameter.</div>
 </td>
 </tr>
-<tr id="i16" class="altColor">
+<tr id="i17" class="rowColor">
 <td class="colFirst"><code><a href="http://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="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#get-org.apache.hadoop.hbase.client.Get-boolean-long-long-">get</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.client">Get</a>&nbsp;get,
    boolean&nbsp;withCoprocessor,
@@ -317,75 +323,75 @@ extends <a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationObserv
 <div class="block">Do a get for duplicate non-idempotent operation.</div>
 </td>
 </tr>
-<tr id="i17" class="rowColor">
+<tr id="i18" class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getBlockedRequestsCount--">getBlockedRequestsCount</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i18" class="altColor">
+<tr id="i19" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getCellComparator--">getCellComparator</a></span>()</code>
 <div class="block">The comparator to be used with the region</div>
 </td>
 </tr>
-<tr id="i19" class="rowColor">
+<tr id="i20" class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getCheckAndMutateChecksFailed--">getCheckAndMutateChecksFailed</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i20" class="altColor">
+<tr id="i21" class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getCheckAndMutateChecksPassed--">getCheckAndMutateChecksPassed</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i21" class="rowColor">
+<tr id="i22" class="altColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse.CompactionState</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getCompactionState--">getCompactionState</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i22" class="altColor">
+<tr id="i23" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver">RegionCoprocessorHost</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getCoprocessorHost--">getCoprocessorHost</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i23" class="rowColor">
+<tr id="i24" class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getDataInMemoryWithoutWAL--">getDataInMemoryWithoutWAL</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i24" class="altColor">
+<tr id="i25" class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getEarliestFlushTimeForAllStores--">getEarliestFlushTimeForAllStores</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i25" class="rowColor">
+<tr id="i26" class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getFilteredReadRequestsCount--">getFilteredReadRequestsCount</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i26" class="altColor">
+<tr id="i27" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HDFSBlocksDistribution.html" title="class in org.apache.hadoop.hbase">HDFSBlocksDistribution</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getHDFSBlocksDistribution--">getHDFSBlocksDistribution</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i27" class="rowColor">
+<tr id="i28" class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getMaxFlushedSeqId--">getMaxFlushedSeqId</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i28" class="altColor">
+<tr id="i29" class="rowColor">
 <td class="colFirst"><code><a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getMaxStoreSeqId--">getMaxStoreSeqId</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i29" class="rowColor">
+<tr id="i30" class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getMemstoreSize--">getMemstoreSize</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i30" class="altColor">
+<tr id="i31" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegion.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsRegion</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getMetrics--">getMetrics</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i31" class="rowColor">
+<tr id="i32" class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getNumMutationsWithoutWAL--">getNumMutationsWithoutWAL</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i32" class="altColor">
+<tr id="i33" class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getOldestHfileTs-boolean-">getOldestHfileTs</a></span>(boolean&nbsp;majorCompactionOnly)</code>
 <div class="block">This can be used to determine the last time all files of this region were major compacted.</div>
 </td>
 </tr>
-<tr id="i33" class="rowColor">
+<tr id="i34" class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getOldestSeqIdOfStore-byte:A-">getOldestSeqIdOfStore</a></span>(byte[]&nbsp;familyName)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -394,11 +400,11 @@ extends <a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationObserv
 </div>
 </td>
 </tr>
-<tr id="i34" class="altColor">
+<tr id="i35" class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getOpenSeqNum--">getOpenSeqNum</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i35" class="rowColor">
+<tr id="i36" class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getReadpoint-org.apache.hadoop.hbase.client.IsolationLevel-">getReadpoint</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client">IsolationLevel</a>&nbsp;isolationLevel)</code>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
@@ -406,37 +412,37 @@ extends <a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationObserv
 </div>
 </td>
 </tr>
-<tr id="i36" class="altColor">
+<tr id="i37" class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getReadPoint-org.apache.hadoop.hbase.client.IsolationLevel-">getReadPoint</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client">IsolationLevel</a>&nbsp;isolationLevel)</code>&nbsp;</td>
 </tr>
-<tr id="i37" class="rowColor">
+<tr id="i38" class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getReadRequestsCount--">getReadRequestsCount</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i38" class="altColor">
+<tr id="i39" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getRegionInfo--">getRegionInfo</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i39" class="rowColor">
+<tr id="i40" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServicesForStores.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServicesForStores</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getRegionServicesForStores--">getRegionServicesForStores</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i40" class="altColor">
+<tr id="i41" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.RowLock.html" title="interface in org.apache.hadoop.hbase.regionserver">Region.RowLock</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getRowLock-byte:A-boolean-">getRowLock</a></span>(byte[]&nbsp;row,
           boolean&nbsp;readLock)</code>
 <div class="block">Get a row lock for the specified row.</div>
 </td>
 </tr>
-<tr id="i41" class="rowColor">
+<tr id="i42" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getScanner-org.apache.hadoop.hbase.client.Scan-">getScanner</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan)</code>
 <div class="block">Return an iterator that scans over the HRegion, returning the indicated
  columns and rows specified by the <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client"><code>Scan</code></a>.</div>
 </td>
 </tr>
-<tr id="i42" class="altColor">
+<tr id="i43" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getScanner-org.apache.hadoop.hbase.client.Scan-java.util.List-">getScanner</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
           <a href="http://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="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;additionalScanners)</code>
@@ -444,31 +450,31 @@ extends <a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationObserv
  specified by the <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client"><code>Scan</code></a>.</div>
 </td>
 </tr>
-<tr id="i43" class="rowColor">
+<tr id="i44" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getStore-byte:A-">getStore</a></span>(byte[]&nbsp;family)</code>
 <div class="block">Return the Store for the given family</div>
 </td>
 </tr>
-<tr id="i44" class="altColor">
+<tr id="i45" class="rowColor">
 <td class="colFirst"><code><a href="http://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="http://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/regionserver/Region.html#getStoreFileList-byte:A:A-">getStoreFileList</a></span>(byte[][]&nbsp;columns)</code>&nbsp;</td>
 </tr>
-<tr id="i45" class="rowColor">
+<tr id="i46" class="altColor">
 <td class="colFirst"><code><a href="http://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="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getStores--">getStores</a></span>()</code>
 <div class="block">Return the list of Stores managed by this region</div>
 </td>
 </tr>
-<tr id="i46" class="altColor">
+<tr id="i47" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getTableDescriptor--">getTableDescriptor</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i47" class="rowColor">
+<tr id="i48" class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getWriteRequestsCount--">getWriteRequestsCount</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i48" class="altColor">
+<tr id="i49" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#increment-org.apache.hadoop.hbase.client.Increment-long-long-">increment</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;increment,
          long&nbsp;nonceGroup,
@@ -476,45 +482,45 @@ extends <a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationObserv
 <div class="block">Perform one or more increment operations on a row.</div>
 </td>
 </tr>
-<tr id="i49" class="rowColor">
+<tr id="i50" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#isAvailable--">isAvailable</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i50" class="altColor">
+<tr id="i51" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#isClosed--">isClosed</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i51" class="rowColor">
+<tr id="i52" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#isClosing--">isClosing</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i52" class="altColor">
+<tr id="i53" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#isLoadingCfsOnDemandDefault--">isLoadingCfsOnDemandDefault</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i53" class="rowColor">
+<tr id="i54" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#isMergeable--">isMergeable</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i54" class="altColor">
+<tr id="i55" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#isReadOnly--">isReadOnly</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i55" class="rowColor">
+<tr id="i56" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#isRecovering--">isRecovering</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i56" class="altColor">
+<tr id="i57" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#isSplittable--">isSplittable</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i57" class="rowColor">
+<tr id="i58" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#mutateRow-org.apache.hadoop.hbase.client.RowMutations-">mutateRow</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/RowMutations.html" title="class in org.apache.hadoop.hbase.client">RowMutations</a>&nbsp;mutations)</code>
 <div class="block">Performs multiple mutations atomically on a single row.</div>
 </td>
 </tr>
-<tr id="i58" class="altColor">
+<tr id="i59" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#mutateRowsWithLocks-java.util.Collection-java.util.Collection-long-long-">mutateRowsWithLocks</a></span>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&gt;&nbsp;mutations,
                    <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;byte[]&gt;&nbsp;rowsToLock,
@@ -523,13 +529,13 @@ extends <a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationObserv
 <div class="block">Perform atomic mutations within the region.</div>
 </td>
 </tr>
-<tr id="i59" class="rowColor">
+<tr id="i60" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#prepareDelete-org.apache.hadoop.hbase.client.Delete-">prepareDelete</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/Delete.html" title="class in org.apache.hadoop.hbase.client">Delete</a>&nbsp;delete)</code>
 <div class="block">Prepare a delete for a row mutation processor</div>
 </td>
 </tr>
-<tr id="i60" class="altColor">
+<tr id="i61" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#prepareDeleteTimestamps-org.apache.hadoop.hbase.client.Mutation-java.util.Map-byte:A-">prepareDeleteTimestamps</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;mutation,
                        <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="http://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="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&gt;&nbsp;familyCellMap,
@@ -537,13 +543,13 @@ extends <a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationObserv
 <div class="block">Set up correct timestamps in the KVs in Delete object.</div>
 </td>
 </tr>
-<tr id="i61" class="rowColor">
+<tr id="i62" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#processRowsWithLocks-org.apache.hadoop.hbase.regionserver.RowProcessor-">processRowsWithLocks</a></span>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RowProcessor.html" title="interface in org.apache.hadoop.hbase.regionserver">RowProcessor</a>&lt;?,?&gt;&nbsp;processor)</code>
 <div class="block">Performs atomic multiple reads and writes on a given row.</div>
 </td>
 </tr>
-<tr id="i62" class="altColor">
+<tr id="i63" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#processRowsWithLocks-org.apache.hadoop.hbase.regionserver.RowProcessor-long-long-">processRowsWithLocks</a></span>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RowProcessor.html" title="interface in org.apache.hadoop.hbase.regionserver">RowProcessor</a>&lt;?,?&gt;&nbsp;processor,
                     long&nbsp;nonceGroup,
@@ -551,7 +557,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationObserv
 <div class="block">Performs atomic multiple reads and writes on a given row.</div>
 </td>
 </tr>
-<tr id="i63" class="rowColor">
+<tr id="i64" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#processRowsWithLocks-org.apache.hadoop.hbase.regionserver.RowProcessor-long-long-long-">processRowsWithLocks</a></span>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RowProcessor.html" title="interface in org.apache.hadoop.hbase.regionserver">RowProcessor</a>&lt;?,?&gt;&nbsp;processor,
                     long&nbsp;timeout,
@@ -560,13 +566,13 @@ extends <a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationObserv
 <div class="block">Performs atomic multiple reads and writes on a given row.</div>
 </td>
 </tr>
-<tr id="i64" class="altColor">
+<tr id="i65" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#put-org.apache.hadoop.hbase.client.Put-">put</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&nbsp;put)</code>
 <div class="block">Puts some data in the table.</div>
 </td>
 </tr>
-<tr id="i65" class="rowColor">
+<tr id="i66" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#refreshStoreFiles--">refreshStoreFiles</a></span>()</code>
 <div class="block">Check the region's underlying store files, open the files that have not
@@ -574,7 +580,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationObserv
  longer available.</div>
 </td>
 </tr>
-<tr id="i66" class="altColor">
+<tr id="i67" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#registerService-com.google.protobuf.Service-">registerService</a></span>(com.google.protobuf.Service&nbsp;instance)</code>
 <div class="block">Registers a new protocol buffer <code>Service</code> subclass as a coprocessor endpoint to
@@ -582,33 +588,33 @@ extends <a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationObserv
     org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceCall) calls.</div>
 </td>
 </tr>
-<tr id="i67" class="rowColor">
+<tr id="i68" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#releaseRowLocks-java.util.List-">releaseRowLocks</a></span>(<a href="http://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="../../../../../org/apache/hadoop/hbase/regionserver/Region.RowLock.html" title="interface in org.apache.hadoop.hbase.regionserver">Region.RowLock</a>&gt;&nbsp;rowLocks)</code>
 <div class="block">If the given list of row locks is not null, releases all locks.</div>
 </td>
 </tr>
-<tr id="i68" class="altColor">
+<tr id="i69" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#startRegionOperation--">startRegionOperation</a></span>()</code>
 <div class="block">This method needs to be called before any public call that reads or
  modifies data.</div>
 </td>
 </tr>
-<tr id="i69" class="rowColor">
+<tr id="i70" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#startRegionOperation-org.apache.hadoop.hbase.regionserver.Region.Operation-">startRegionOperation</a></span>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.Operation</a>&nbsp;op)</code>
 <div class="block">This method needs to be called before any public call that reads or
  modifies data.</div>
 </td>
 </tr>
-<tr id="i70" class="altColor">
+<tr id="i71" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#triggerMajorCompaction--">triggerMajorCompaction</a></span>()</code>
 <div class="block">Trigger major compaction on all stores in the region.</div>
 </td>
 </tr>
-<tr id="i71" class="rowColor">
+<tr id="i72" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#updateCellTimestamps-java.lang.Iterable-byte:A-">updateCellTimestamps</a></span>(<a href="http://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="http://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="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&gt;&nbsp;values,
                     byte[]&nbsp;now)</code>
@@ -616,25 +622,25 @@ extends <a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationObserv
  provided current timestamp.</div>
 </td>
 </tr>
-<tr id="i72" class="altColor">
+<tr id="i73" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#updateReadRequestsCount-long-">updateReadRequestsCount</a></span>(long&nbsp;i)</code>
 <div class="block">Update the read request count for this region</div>
 </td>
 </tr>
-<tr id="i73" class="rowColor">
+<tr id="i74" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#updateWriteRequestsCount-long-">updateWriteRequestsCount</a></span>(long&nbsp;i)</code>
 <div class="block">Update the write request count for this region</div>
 </td>
 </tr>
-<tr id="i74" class="altColor">
+<tr id="i75" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#waitForFlushes--">waitForFlushes</a></span>()</code>
 <div class="block">Wait for all current flushes of the region to complete</div>
 </td>
 </tr>
-<tr id="i75" class="rowColor">
+<tr id="i76" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#waitForFlushesAndCompactions--">waitForFlushesAndCompactions</a></span>()</code>
 <div class="block">Wait for all current flushes and compactions of the region to complete</div>
@@ -1214,13 +1220,29 @@ long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/
 </dl>
 </li>
 </ul>
+<a name="closeRegionOperation-org.apache.hadoop.hbase.regionserver.Region.Operation-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>closeRegionOperation</h4>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.285">closeRegionOperation</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.Operation</a>&nbsp;op)
+                   throws <a href="http://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">Closes the region operation lock. This needs to be called in the finally block corresponding
+ to the try block of <a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#startRegionOperation-org.apache.hadoop.hbase.regionserver.Region.Operation-"><code>startRegionOperation(Operation)</code></a></div>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="http://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="getRowLock-byte:A-boolean-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>getRowLock</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.RowLock.html" title="interface in org.apache.hadoop.hbase.regionserver">Region.RowLock</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.314">getRowLock</a>(byte[]&nbsp;row,
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.RowLock.html" title="interface in org.apache.hadoop.hbase.regionserver">Region.RowLock</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.321">getRowLock</a>(byte[]&nbsp;row,
                           boolean&nbsp;readLock)
                    throws <a href="http://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">Get a row lock for the specified row. All locks are reentrant.
@@ -1250,7 +1272,7 @@ long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/
 <ul class="blockList">
 <li class="blockList">
 <h4>releaseRowLocks</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.319">releaseRowLocks</a>(<a href="http://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="../../../../../org/apache/hadoop/hbase/regionserver/Region.RowLock.html" title="interface in org.apache.hadoop.hbase.regionserver">Region.RowLock</a>&gt;&nbsp;rowLocks)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.326">releaseRowLocks</a>(<a href="http://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="../../../../../org/apache/hadoop/hbase/regionserver/Region.RowLock.html" title="interface in org.apache.hadoop.hbase.regionserver">Region.RowLock</a>&gt;&nbsp;rowLocks)</pre>
 <div class="block">If the given list of row locks is not null, releases all locks.</div>
 </li>
 </ul>
@@ -1260,7 +1282,7 @@ long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/
 <ul class="blockList">
 <li class="blockList">
 <h4>append</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.332">append</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;append,
+<pre><a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.339">append</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;append,
               long&nbsp;nonceGroup,
               long&nbsp;nonce)
        throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -1283,7 +1305,7 @@ long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/
 <ul class="blockList">
 <li class="blockList">
 <h4>batchMutate</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/OperationStatus.html" title="class in org.apache.hadoop.hbase.regionserver">OperationStatus</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.345">batchMutate</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>[]&nbsp;mutations,
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/OperationStatus.html" title="class in org.apache.hadoop.hbase.regionserver">OperationStatus</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.352">batchMutate</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>[]&nbsp;mutations,
                               long&nbsp;nonceGroup,
                               long&nbsp;nonce)
                        throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -1309,7 +1331,7 @@ long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/
 <ul class="blockList">
 <li class="blockList">
 <h4>batchReplay</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/OperationStatus.html" title="class in org.apache.hadoop.hbase.regionserver">OperationStatus</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.356">batchReplay</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.MutationReplay.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.MutationReplay</a>[]&nbsp;mutations,
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/OperationStatus.html" title="class in org.apache.hadoop.hbase.regionserver">OperationStatus</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.363">batchReplay</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.MutationReplay.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.MutationReplay</a>[]&nbsp;mutations,
                               long&nbsp;replaySeqId)
                        throws <a href="http://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">Replay a batch of mutations.</div>
@@ -1331,7 +1353,7 @@ long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/
 <ul class="blockList">
 <li class="blockList">
 <h4>checkAndMutate</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.373">checkAndMutate</a>(byte[]&nbsp;row,
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.380">checkAndMutate</a>(byte[]&nbsp;row,
                        byte[]&nbsp;family,
                        byte[]&nbsp;qualifier,
                        <a href="../../../../../org/apache/hadoop/hbase/filter/CompareFilter.CompareOp.html" title="enum in org.apache.hadoop.hbase.filter">CompareFilter.CompareOp</a>&nbsp;compareOp,
@@ -1365,7 +1387,7 @@ long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/
 <ul class="blockList">
 <li class="blockList">
 <h4>checkAndRowMutate</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.391">checkAndRowMutate</a>(byte[]&nbsp;row,
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.398">checkAndRowMutate</a>(byte[]&nbsp;row,
                           byte[]&nbsp;family,
                           byte[]&nbsp;qualifier,
                           <a href="../../../../../org/apache/hadoop/hbase/filter/CompareFilter.CompareOp.html" title="enum in org.apache.hadoop.hbase.filter">CompareFilter.CompareOp</a>&nbsp;compareOp,
@@ -1399,7 +1421,7 @@ long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/
 <ul class="blockList">
 <li class="blockList">
 <h4>delete</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.400">delete</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Delete.html" title="class in org.apache.hadoop.hbase.client">Delete</a>&nbsp;delete)
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.407">delete</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Delete.html" title="class in org.apache.hadoop.hbase.client">Delete</a>&nbsp;delete)
      throws <a href="http://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">Deletes the specified cells/row.</div>
 <dl>
@@ -1416,7 +1438,7 @@ long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/
 <ul class="blockList">
 <li class="blockList">
 <h4>get</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.407">get</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.client">Get</a>&nbsp;get)
+<pre><a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.414">get</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.client">Get</a>&nbsp;get)
     throws <a href="http://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">Do a get based on the get parameter.</div>
 <dl>
@@ -1435,7 +1457,7 @@ long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/
 <ul class="blockList">
 <li class="blockList">
 <h4>get</h4>
-<pre><a href="http://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="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.416">get</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.client">Get</a>&nbsp;get,
+<pre><a href="http://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="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.423">get</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.client">Get</a>&nbsp;get,
                boolean&nbsp;withCoprocessor)
         throws <a href="http://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">Do a get based on the get parameter.</div>
@@ -1457,7 +1479,7 @@ long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/
 <ul class="blockList">
 <li class="blockList">
 <h4>get</h4>
-<pre><a href="http://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="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.427">get</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.client">Get</a>&nbsp;get,
+<pre><a href="http://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="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.434">get</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.client">Get</a>&nbsp;get,
                boolean&nbsp;withCoprocessor,
                long&nbsp;nonceGroup,
                long&nbsp;nonce)
@@ -1482,7 +1504,7 @@ long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/
 <ul class="blockList">
 <li class="blockList">
 <h4>getScanner</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.439">getScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan)
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.446">getScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan)
                   throws <a href="http://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">Return an iterator that scans over the HRegion, returning the indicated
  columns and rows specified by the <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client"><code>Scan</code></a>.
@@ -1504,7 +1526,7 @@ long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/
 <ul class="blockList">
 <li class="blockList">
 <h4>getScanner</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.454">getScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.461">getScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
                          <a href="http://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="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;additionalScanners)
                   throws <a href="http://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">Return an iterator that scans over the HRegion, returning the indicated columns and rows
@@ -1530,7 +1552,7 @@ long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/
 <ul class="blockList">
 <li class="blockList">
 <h4>getCellComparator</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.457">getCellComparator</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.464">getCellComparator</a>()</pre>
 <div class="block">The comparator to be used with the region</div>
 </li>
 </ul>
@@ -1540,7 +1562,7 @@ long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/
 <ul class="blockList">
 <li class="blockList">
 <h4>increment</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.467">increment</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;increment,
+<pre><a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.474">increment</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;increment,
                  long&nbsp;nonceGroup,
                  long&nbsp;nonce)
           throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -1563,7 +1585,7 @@ long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/
 <ul class="blockList">
 <li class="blockList">
 <h4>mutateRow</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.476">mutateRow</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RowMutations.html" title="class in org.apache.hadoop.hbase.client">RowMutations</a>&nbsp;mutations)
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.483">mutateRow</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RowMutations.html" title="class in org.apache.hadoop.hbase.client">RowMutations</a>&nbsp;mutations)
         throws <a href="http://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">Performs multiple mutations atomically on a single row. Currently
  <a href="../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client"><code>Put</code></a> and <a href="../../../../../org/apache/hadoop/hbase/client/Delete.html" title="class in org.apache.hadoop.hbase.client"><code>Delete</code></a> are supported.</div>
@@ -1581,7 +1603,7 @@ long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/
 <ul class="blockList">
 <li class="blockList">
 <h4>mutateRowsWithLocks</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.491">mutateRowsWithLocks</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&gt;&nbsp;mutations,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.498">mutateRowsWithLocks</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&gt;&nbsp;mutations,
                          <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;byte[]&gt;&nbsp;rowsToLock,
                          long&nbsp;nonceGroup,
                          long&nbsp;nonce)
@@ -1608,7 +1630,7 @@ long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/
 <ul class="blockList">
 <li class="blockList">
 <h4>processRowsWithLocks</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.499">processRowsWithLocks</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RowProcessor.html" title="interface in org.apache.hadoop.hbase.regionserver">RowProcessor</a>&lt;?,?&gt;&nbsp;processor)
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.506">processRowsWithLocks</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RowProcessor.html" title="interface in org.apache.hadoop.hbase.regionserver">RowProcessor</a>&lt;?,?&gt;&nbsp;processor)
                    throws <a href="http://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">Performs atomic multiple reads and writes on a given row.</div>
 <dl>
@@ -1625,7 +1647,7 @@ long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/
 <ul class="blockList">
 <li class="blockList">
 <h4>processRowsWithLocks</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.508">processRowsWithLocks</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RowProcessor.html" title="interface in org.apache.hadoop.hbase.regionserver">RowProcessor</a>&lt;?,?&gt;&nbsp;processor,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.515">processRowsWithLocks</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RowProcessor.html" title="interface in org.apache.hadoop.hbase.regionserver">RowProcessor</a>&lt;?,?&gt;&nbsp;processor,
                           long&nbsp;nonceGroup,
                           long&nbsp;nonce)
                    throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -1646,7 +1668,7 @@ long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/
 <ul class="blockList">
 <li class="blockList">
 <h4>processRowsWithLocks</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.520">processRowsWithLocks</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RowProcessor.html" title="interface in org.apache.hadoop.hbase.regionserver">RowProcessor</a>&lt;?,?&gt;&nbsp;processor,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.527">processRowsWithLocks</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RowProcessor.html" title="interface in org.apache.hadoop.hbase.regionserver">RowProcessor</a>&lt;?,?&gt;&nbsp;processor,
                           long&nbsp;timeout,
                           long&nbsp;nonceGroup,
                           long&nbsp;nonce)
@@ -1670,7 +1692,7 @@ long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/
 <ul class="blockList">
 <li class="blockList">
 <h4>put</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.528">put</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&nbsp;put)
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.535">put</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&nbsp;put)
   throws <a href="http://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">Puts some data in the table.</div>
 <dl>
@@ -1687,7 +1709,7 @@ long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/
 <ul class="blockList">
 <li class="blockList">
 <h4>bulkLoadHFiles</h4>
-<pre><a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.fs.Path&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.574">bulkLoadHFiles</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;byte[],<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&gt;&nbsp;familyPaths,
+<pre><a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.fs.Path&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.581">bulkLoadHFiles</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;byte[],<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&gt;&nbsp;familyPaths,
                                                            boolean&nbsp;assignSeqId,
                                                            <a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.BulkLoadListener.html" title="interface in org.apache.hadoop.hbase.regionserver">Region.BulkLoadListener</a>&nbsp;bulkLoadListener)
                                                     throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -1712,7 +1734,7 @@ long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/
 <ul class="blockList">
 <li class="blockList">
 <h4>bulkLoadHFiles</h4>
-<pre><a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.fs.Path&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.589">bulkLoadHFiles</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;byte[],<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&gt;&nbsp;familyPaths,
+<pre><a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.fs.Path&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.596">bulkLoadHFiles</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;byte[],<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&gt;&nbsp;familyPaths,
                                                            boolean&nbsp;assignSeqId,
                                                            <a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.BulkLoadListener.html" title="interface in org.apache.hadoop.hbase.regionserver">Region.BulkLoadListener</a>&nbsp;bulkLoadListener,
                                                            boolean&nbsp;copyFile)
@@ -1739,7 +1761,7 @@ long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/
 <ul class="blockList">
 <li class="blockList">
 <h4>getCoprocessorHost</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver">RegionCoprocessorHost</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.596">getCoprocessorHost</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver">RegionCoprocessorHost</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.603">getCoprocessorHost</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the coprocessor host</dd>
@@ -1752,7 +1774,7 @@ long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/
 <ul class="blockList">
 <li class="blockList">
 <h4>execService</h4>
-<pre>com.google.protobuf.Message&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.612">execService</a>(com.google.protobuf.RpcController&nbsp;controller,
+<pre>com.google.protobuf.Message&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.619">execService</a>(com.google.protobuf.RpcController&nbsp;controller,
                                         org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceCall&nbsp;call)
                                  throws <a href="http://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">Executes a single protocol buffer coprocessor endpoint <code>Service</code> method using
@@ -1780,7 +1802,7 @@ long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/
 <ul class="blockList">
 <li class="blockList">
 <h4>registerService</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.631">registerService</a>(com.google.protobuf.Service&nbsp;instance)</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.638">registerService</a>(com.google.protobuf.Service&nbsp;instance)</pre>
 <div class="block">Registers a new protocol buffer <code>Service</code> subclass as a coprocessor endpoint to
  be available for handling Region#execService(com.google.protobuf.RpcController,
     org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceCall) calls.
@@ -1806,7 +1828,7 @@ long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/
 <ul class="blockList">
 <li class="blockList">
 <h4>checkFamilies</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.641">checkFamilies</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;byte[]&gt;&nbsp;families)
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.648">checkFamilies</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;byte[]&gt;&nbsp;families)
             throws <a href="../../../../../org/apache/hadoop/hbase/regionserver/NoSuchColumnFamilyException.html" title="class in org.apache.hadoop.hbase.regionserver">NoSuchColumnFamilyException</a></pre>
 <div class="block">Check the collection of families for validity.</div>
 <dl>
@@ -1823,7 +1845,7 @@ long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/
 <ul class="blockList">
 <li class="blockList">
 <h4>checkTimestamps</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.649">checkTimestamps</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="http://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="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&gt;&nbsp;familyMap,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.656">checkTimestamps</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="http://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="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&gt;&nbsp;familyMap,
                      long&nbsp;now)
               throws <a href="../../../../../org/apache/hadoop/hbase/exceptions/FailedSanityCheckException.html" title="class in org.apache.hadoop.hbase.exceptions">FailedSanityCheckException</a></pre>
 <div class="block">Check the collection of families for valid timestamps</div>
@@ -1842,7 +1864,7 @@ long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/
 <ul class="blockList">
 <li class="blockList">
 <h4>prepareDelete</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.657">prepareDelete</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Delete.html" title="class in org.apache.hadoop.hbase.client">Delete</a>&nbsp;delete)
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.664">prepareDelete</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Delete.html" title="class in org.apache.hadoop.hbase.client">Delete</a>&nbsp;delete)
             throws <a href="http://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">Prepare a delete for a row mutation processor</div>
 <dl>
@@ -1859,7 +1881,7 @@ long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/
 <ul class="blockList">
 <li class="blockList">
 <h4>prepareDeleteTimestamps</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.667">prepareDeleteTimestamps</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;mutation,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.674">prepareDeleteTimestamps</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;mutation,
                              <a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="http://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="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&gt;&nbsp;familyCellMap,
                              byte[]&nbsp;now)
                       throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -1881,7 +1903,7 @@ long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/
 <ul class="blockList">
 <li class="blockList">
 <h4>updateCellTimestamps</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.676">updateCellTimestamps</a>(<a href="http://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="http://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="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&gt;&nbsp;values,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.683">updateCellTimestamps</a>(<a href="http://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="http://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="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&gt;&nbsp;values,
                           byte[]&nbsp;now)
                    throws <a href="http://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">Replace any cell timestamps set to <a href="../../../../../org/apache/hadoop/hbase/HConstants.html#LATEST_TIMESTAMP"><code>HConstants.LATEST_TIMESTAMP</code></a>
@@ -1901,7 +1923,7 @@ long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/
 <ul class="blockList">
 <li class="blockList">
 <h4>flush</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.FlushResult.html" title="interface in org.apache.hadoop.hbase.regionserver">Region.FlushResult</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.723">flush</a>(boolean&nbsp;force)
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.FlushResult.html" title="interface in org.apache.hadoop.hbase.regionserver">Region.FlushResult</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.730">flush</a>(boolean&nbsp;force)
                   throws <a href="http://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">Flush the cache.
 
@@ -1933,7 +1955,7 @@ long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/
 <ul class="blockList">
 <li class="blockList">
 <h4>compact</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.738">compact</a>(boolean&nbsp;majorCompaction)
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.745">compact</a>(boolean&nbsp;majorCompaction)
       throws <a href="http://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">Synchronously compact all stores in the region.
  <p>This operation could block for a long time, so don't call it from a
@@ -1957,7 +1979,7 @@ long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/
 <ul class="blockList">
 <li class="blockList">
 <h4>triggerMajorCompaction</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.747">triggerMajorCompaction</a>()
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.754">triggerMajorCompaction</a>()
                      throws <a href="http://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">Trigger major compaction on all stores in the region.
  <p>
@@ -1975,7 +1997,7 @@ long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/
 <ul class="blockList">
 <li class="blockList">
 <h4>getCompactionState</h4>
-<pre>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse.CompactionState&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.752">getCompactionState</a>()</pre>
+<pre>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse.CompactionState&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.759">getCompactionState</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>if a given region is in compaction now.</dd>
@@ -1988,7 +2010,7 @@ long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/
 <ul class="blockList">
 <li class="blockList">
 <h4>waitForFlushesAndCompactions</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.755">waitForFlushesAndCompactions</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.762">waitForFlushesAndCompactions</a>()</pre>
 <div class="block">Wait for all current flushes and compactions of the region to complete</div>
 </li>
 </ul>
@@ -1998,7 +2020,7 @@ long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/
 <ul class="blockListLast">
 <li class="blockList">
 <h4>waitForFlushes</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.759">waitForFlushes</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Region.html#line.766">waitForFlushes</a>()</pre>
 <div class="block">Wait for all current flushes of the region to complete</div>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/HRegion.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/HRegion.html b/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/HRegion.html
index f347963..08876b1 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/HRegion.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/HRegion.html
@@ -722,6 +722,11 @@
 </td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><span class="typeNameLabel">SnapshotManifest.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.html#addRegion-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.snapshot.SnapshotManifest.RegionVisitor-">addRegion</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
+         <a href="../../../../../../org/apache/hadoop/hbase/snapshot/SnapshotManifest.RegionVisitor.html" title="interface in org.apache.hadoop.hbase.snapshot">SnapshotManifest.RegionVisitor</a>&nbsp;visitor)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="typeNameLabel">RestoreSnapshotHelper.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.html#cloneRegion-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.HRegionInfo-org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest-">cloneRegion</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
            <a href="../../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;snapshotRegionInfo,


[10/33] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/Region.FlushResult.Result.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/Region.FlushResult.Result.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/Region.FlushResult.Result.html
index b361c26..53efdb2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/Region.FlushResult.Result.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/Region.FlushResult.Result.html
@@ -255,7 +255,7 @@
 <span class="sourceLineNo">247</span>   */<a name="line.247"></a>
 <span class="sourceLineNo">248</span>  enum Operation {<a name="line.248"></a>
 <span class="sourceLineNo">249</span>    ANY, GET, PUT, DELETE, SCAN, APPEND, INCREMENT, SPLIT_REGION, MERGE_REGION, BATCH_MUTATE,<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    REPLAY_BATCH_MUTATE, COMPACT_REGION, REPLAY_EVENT<a name="line.250"></a>
+<span class="sourceLineNo">250</span>    REPLAY_BATCH_MUTATE, COMPACT_REGION, REPLAY_EVENT, SNAPSHOT<a name="line.250"></a>
 <span class="sourceLineNo">251</span>  }<a name="line.251"></a>
 <span class="sourceLineNo">252</span><a name="line.252"></a>
 <span class="sourceLineNo">253</span>  /**<a name="line.253"></a>
@@ -285,487 +285,494 @@
 <span class="sourceLineNo">277</span>   */<a name="line.277"></a>
 <span class="sourceLineNo">278</span>  void closeRegionOperation() throws IOException;<a name="line.278"></a>
 <span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span>  // Row write locks<a name="line.280"></a>
-<span class="sourceLineNo">281</span><a name="line.281"></a>
-<span class="sourceLineNo">282</span>  /**<a name="line.282"></a>
-<span class="sourceLineNo">283</span>   * Row lock held by a given thread.<a name="line.283"></a>
-<span class="sourceLineNo">284</span>   * One thread may acquire multiple locks on the same row simultaneously.<a name="line.284"></a>
-<span class="sourceLineNo">285</span>   * The locks must be released by calling release() from the same thread.<a name="line.285"></a>
-<span class="sourceLineNo">286</span>   */<a name="line.286"></a>
-<span class="sourceLineNo">287</span>  public interface RowLock {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    /**<a name="line.288"></a>
-<span class="sourceLineNo">289</span>     * Release the given lock.  If there are no remaining locks held by the current thread<a name="line.289"></a>
-<span class="sourceLineNo">290</span>     * then unlock the row and allow other threads to acquire the lock.<a name="line.290"></a>
-<span class="sourceLineNo">291</span>     * @throws IllegalArgumentException if called by a different thread than the lock owning<a name="line.291"></a>
-<span class="sourceLineNo">292</span>     *     thread<a name="line.292"></a>
-<span class="sourceLineNo">293</span>     */<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    void release();<a name="line.294"></a>
-<span class="sourceLineNo">295</span>  }<a name="line.295"></a>
-<span class="sourceLineNo">296</span><a name="line.296"></a>
-<span class="sourceLineNo">297</span>  /**<a name="line.297"></a>
-<span class="sourceLineNo">298</span>   *<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   * Get a row lock for the specified row. All locks are reentrant.<a name="line.299"></a>
-<span class="sourceLineNo">300</span>   *<a name="line.300"></a>
-<span class="sourceLineNo">301</span>   * Before calling this function make sure that a region operation has already been<a name="line.301"></a>
-<span class="sourceLineNo">302</span>   * started (the calling thread has already acquired the region-close-guard lock).<a name="line.302"></a>
-<span class="sourceLineNo">303</span>   * <a name="line.303"></a>
-<span class="sourceLineNo">304</span>   * NOTE: the boolean passed here has changed. It used to be a boolean that<a name="line.304"></a>
-<span class="sourceLineNo">305</span>   * stated whether or not to wait on the lock. Now it is whether it an exclusive<a name="line.305"></a>
-<span class="sourceLineNo">306</span>   * lock is requested.<a name="line.306"></a>
-<span class="sourceLineNo">307</span>   * <a name="line.307"></a>
-<span class="sourceLineNo">308</span>   * @param row The row actions will be performed against<a name="line.308"></a>
-<span class="sourceLineNo">309</span>   * @param readLock is the lock reader or writer. True indicates that a non-exclusive<a name="line.309"></a>
-<span class="sourceLineNo">310</span>   * lock is requested<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   * @see #startRegionOperation()<a name="line.311"></a>
-<span class="sourceLineNo">312</span>   * @see #startRegionOperation(Operation)<a name="line.312"></a>
-<span class="sourceLineNo">313</span>   */<a name="line.313"></a>
-<span class="sourceLineNo">314</span>  RowLock getRowLock(byte[] row, boolean readLock) throws IOException;<a name="line.314"></a>
-<span class="sourceLineNo">315</span><a name="line.315"></a>
-<span class="sourceLineNo">316</span>  /**<a name="line.316"></a>
-<span class="sourceLineNo">317</span>   * If the given list of row locks is not null, releases all locks.<a name="line.317"></a>
-<span class="sourceLineNo">318</span>   */<a name="line.318"></a>
-<span class="sourceLineNo">319</span>  void releaseRowLocks(List&lt;RowLock&gt; rowLocks);<a name="line.319"></a>
-<span class="sourceLineNo">320</span><a name="line.320"></a>
-<span class="sourceLineNo">321</span>  ///////////////////////////////////////////////////////////////////////////<a name="line.321"></a>
-<span class="sourceLineNo">322</span>  // Region operations<a name="line.322"></a>
-<span class="sourceLineNo">323</span><a name="line.323"></a>
-<span class="sourceLineNo">324</span>  /**<a name="line.324"></a>
-<span class="sourceLineNo">325</span>   * Perform one or more append operations on a row.<a name="line.325"></a>
-<span class="sourceLineNo">326</span>   * @param append<a name="line.326"></a>
-<span class="sourceLineNo">327</span>   * @param nonceGroup<a name="line.327"></a>
-<span class="sourceLineNo">328</span>   * @param nonce<a name="line.328"></a>
-<span class="sourceLineNo">329</span>   * @return result of the operation<a name="line.329"></a>
-<span class="sourceLineNo">330</span>   * @throws IOException<a name="line.330"></a>
-<span class="sourceLineNo">331</span>   */<a name="line.331"></a>
-<span class="sourceLineNo">332</span>  Result append(Append append, long nonceGroup, long nonce) throws IOException;<a name="line.332"></a>
-<span class="sourceLineNo">333</span><a name="line.333"></a>
-<span class="sourceLineNo">334</span>  /**<a name="line.334"></a>
-<span class="sourceLineNo">335</span>   * Perform a batch of mutations.<a name="line.335"></a>
-<span class="sourceLineNo">336</span>   * &lt;p&gt;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>   * Note this supports only Put and Delete mutations and will ignore other types passed.<a name="line.337"></a>
-<span class="sourceLineNo">338</span>   * @param mutations the list of mutations<a name="line.338"></a>
-<span class="sourceLineNo">339</span>   * @param nonceGroup<a name="line.339"></a>
-<span class="sourceLineNo">340</span>   * @param nonce<a name="line.340"></a>
-<span class="sourceLineNo">341</span>   * @return an array of OperationStatus which internally contains the<a name="line.341"></a>
-<span class="sourceLineNo">342</span>   *         OperationStatusCode and the exceptionMessage if any.<a name="line.342"></a>
-<span class="sourceLineNo">343</span>   * @throws IOException<a name="line.343"></a>
-<span class="sourceLineNo">344</span>   */<a name="line.344"></a>
-<span class="sourceLineNo">345</span>  OperationStatus[] batchMutate(Mutation[] mutations, long nonceGroup, long nonce)<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      throws IOException;<a name="line.346"></a>
-<span class="sourceLineNo">347</span><a name="line.347"></a>
-<span class="sourceLineNo">348</span>  /**<a name="line.348"></a>
-<span class="sourceLineNo">349</span>   * Replay a batch of mutations.<a name="line.349"></a>
-<span class="sourceLineNo">350</span>   * @param mutations mutations to replay.<a name="line.350"></a>
-<span class="sourceLineNo">351</span>   * @param replaySeqId<a name="line.351"></a>
-<span class="sourceLineNo">352</span>   * @return an array of OperationStatus which internally contains the<a name="line.352"></a>
-<span class="sourceLineNo">353</span>   *         OperationStatusCode and the exceptionMessage if any.<a name="line.353"></a>
-<span class="sourceLineNo">354</span>   * @throws IOException<a name="line.354"></a>
-<span class="sourceLineNo">355</span>   */<a name="line.355"></a>
-<span class="sourceLineNo">356</span>   OperationStatus[] batchReplay(MutationReplay[] mutations, long replaySeqId) throws IOException;<a name="line.356"></a>
-<span class="sourceLineNo">357</span><a name="line.357"></a>
-<span class="sourceLineNo">358</span>  /**<a name="line.358"></a>
-<span class="sourceLineNo">359</span>   * Atomically checks if a row/family/qualifier value matches the expected value and if it does,<a name="line.359"></a>
-<span class="sourceLineNo">360</span>   * it performs the mutation. If the passed value is null, the lack of column value<a name="line.360"></a>
-<span class="sourceLineNo">361</span>   * (ie: non-existence) is used. See checkAndRowMutate to do many checkAndPuts at a time on a<a name="line.361"></a>
-<span class="sourceLineNo">362</span>   * single row.<a name="line.362"></a>
-<span class="sourceLineNo">363</span>   * @param row to check<a name="line.363"></a>
-<span class="sourceLineNo">364</span>   * @param family column family to check<a name="line.364"></a>
-<span class="sourceLineNo">365</span>   * @param qualifier column qualifier to check<a name="line.365"></a>
-<span class="sourceLineNo">366</span>   * @param compareOp the comparison operator<a name="line.366"></a>
-<span class="sourceLineNo">367</span>   * @param comparator<a name="line.367"></a>
-<span class="sourceLineNo">368</span>   * @param mutation<a name="line.368"></a>
-<span class="sourceLineNo">369</span>   * @param writeToWAL<a name="line.369"></a>
-<span class="sourceLineNo">370</span>   * @return true if mutation was applied, false otherwise<a name="line.370"></a>
-<span class="sourceLineNo">371</span>   * @throws IOException<a name="line.371"></a>
-<span class="sourceLineNo">372</span>   */<a name="line.372"></a>
-<span class="sourceLineNo">373</span>  boolean checkAndMutate(byte [] row, byte [] family, byte [] qualifier, CompareOp compareOp,<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      ByteArrayComparable comparator, Mutation mutation, boolean writeToWAL) throws IOException;<a name="line.374"></a>
-<span class="sourceLineNo">375</span><a name="line.375"></a>
-<span class="sourceLineNo">376</span>  /**<a name="line.376"></a>
-<span class="sourceLineNo">377</span>   * Atomically checks if a row/family/qualifier value matches the expected values and if it does,<a name="line.377"></a>
-<span class="sourceLineNo">378</span>   * it performs the row mutations. If the passed value is null, the lack of column value<a name="line.378"></a>
-<span class="sourceLineNo">379</span>   * (ie: non-existence) is used. Use to do many mutations on a single row. Use checkAndMutate<a name="line.379"></a>
-<span class="sourceLineNo">380</span>   * to do one checkAndMutate at a time.<a name="line.380"></a>
-<span class="sourceLineNo">381</span>   * @param row to check<a name="line.381"></a>
-<span class="sourceLineNo">382</span>   * @param family column family to check<a name="line.382"></a>
-<span class="sourceLineNo">383</span>   * @param qualifier column qualifier to check<a name="line.383"></a>
-<span class="sourceLineNo">384</span>   * @param compareOp the comparison operator<a name="line.384"></a>
-<span class="sourceLineNo">385</span>   * @param comparator<a name="line.385"></a>
-<span class="sourceLineNo">386</span>   * @param mutations<a name="line.386"></a>
-<span class="sourceLineNo">387</span>   * @param writeToWAL<a name="line.387"></a>
-<span class="sourceLineNo">388</span>   * @return true if mutations were applied, false otherwise<a name="line.388"></a>
-<span class="sourceLineNo">389</span>   * @throws IOException<a name="line.389"></a>
-<span class="sourceLineNo">390</span>   */<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  boolean checkAndRowMutate(byte [] row, byte [] family, byte [] qualifier, CompareOp compareOp,<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      ByteArrayComparable comparator, RowMutations mutations, boolean writeToWAL)<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      throws IOException;<a name="line.393"></a>
-<span class="sourceLineNo">394</span><a name="line.394"></a>
-<span class="sourceLineNo">395</span>  /**<a name="line.395"></a>
-<span class="sourceLineNo">396</span>   * Deletes the specified cells/row.<a name="line.396"></a>
-<span class="sourceLineNo">397</span>   * @param delete<a name="line.397"></a>
-<span class="sourceLineNo">398</span>   * @throws IOException<a name="line.398"></a>
-<span class="sourceLineNo">399</span>   */<a name="line.399"></a>
-<span class="sourceLineNo">400</span>  void delete(Delete delete) throws IOException;<a name="line.400"></a>
+<span class="sourceLineNo">280</span>  /**<a name="line.280"></a>
+<span class="sourceLineNo">281</span>   * Closes the region operation lock. This needs to be called in the finally block corresponding<a name="line.281"></a>
+<span class="sourceLineNo">282</span>   * to the try block of {@link #startRegionOperation(Operation)}<a name="line.282"></a>
+<span class="sourceLineNo">283</span>   * @throws IOException<a name="line.283"></a>
+<span class="sourceLineNo">284</span>   */<a name="line.284"></a>
+<span class="sourceLineNo">285</span>  void closeRegionOperation(Operation op) throws IOException;<a name="line.285"></a>
+<span class="sourceLineNo">286</span><a name="line.286"></a>
+<span class="sourceLineNo">287</span>  // Row write locks<a name="line.287"></a>
+<span class="sourceLineNo">288</span><a name="line.288"></a>
+<span class="sourceLineNo">289</span>  /**<a name="line.289"></a>
+<span class="sourceLineNo">290</span>   * Row lock held by a given thread.<a name="line.290"></a>
+<span class="sourceLineNo">291</span>   * One thread may acquire multiple locks on the same row simultaneously.<a name="line.291"></a>
+<span class="sourceLineNo">292</span>   * The locks must be released by calling release() from the same thread.<a name="line.292"></a>
+<span class="sourceLineNo">293</span>   */<a name="line.293"></a>
+<span class="sourceLineNo">294</span>  public interface RowLock {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    /**<a name="line.295"></a>
+<span class="sourceLineNo">296</span>     * Release the given lock.  If there are no remaining locks held by the current thread<a name="line.296"></a>
+<span class="sourceLineNo">297</span>     * then unlock the row and allow other threads to acquire the lock.<a name="line.297"></a>
+<span class="sourceLineNo">298</span>     * @throws IllegalArgumentException if called by a different thread than the lock owning<a name="line.298"></a>
+<span class="sourceLineNo">299</span>     *     thread<a name="line.299"></a>
+<span class="sourceLineNo">300</span>     */<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    void release();<a name="line.301"></a>
+<span class="sourceLineNo">302</span>  }<a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span>  /**<a name="line.304"></a>
+<span class="sourceLineNo">305</span>   *<a name="line.305"></a>
+<span class="sourceLineNo">306</span>   * Get a row lock for the specified row. All locks are reentrant.<a name="line.306"></a>
+<span class="sourceLineNo">307</span>   *<a name="line.307"></a>
+<span class="sourceLineNo">308</span>   * Before calling this function make sure that a region operation has already been<a name="line.308"></a>
+<span class="sourceLineNo">309</span>   * started (the calling thread has already acquired the region-close-guard lock).<a name="line.309"></a>
+<span class="sourceLineNo">310</span>   * <a name="line.310"></a>
+<span class="sourceLineNo">311</span>   * NOTE: the boolean passed here has changed. It used to be a boolean that<a name="line.311"></a>
+<span class="sourceLineNo">312</span>   * stated whether or not to wait on the lock. Now it is whether it an exclusive<a name="line.312"></a>
+<span class="sourceLineNo">313</span>   * lock is requested.<a name="line.313"></a>
+<span class="sourceLineNo">314</span>   * <a name="line.314"></a>
+<span class="sourceLineNo">315</span>   * @param row The row actions will be performed against<a name="line.315"></a>
+<span class="sourceLineNo">316</span>   * @param readLock is the lock reader or writer. True indicates that a non-exclusive<a name="line.316"></a>
+<span class="sourceLineNo">317</span>   * lock is requested<a name="line.317"></a>
+<span class="sourceLineNo">318</span>   * @see #startRegionOperation()<a name="line.318"></a>
+<span class="sourceLineNo">319</span>   * @see #startRegionOperation(Operation)<a name="line.319"></a>
+<span class="sourceLineNo">320</span>   */<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  RowLock getRowLock(byte[] row, boolean readLock) throws IOException;<a name="line.321"></a>
+<span class="sourceLineNo">322</span><a name="line.322"></a>
+<span class="sourceLineNo">323</span>  /**<a name="line.323"></a>
+<span class="sourceLineNo">324</span>   * If the given list of row locks is not null, releases all locks.<a name="line.324"></a>
+<span class="sourceLineNo">325</span>   */<a name="line.325"></a>
+<span class="sourceLineNo">326</span>  void releaseRowLocks(List&lt;RowLock&gt; rowLocks);<a name="line.326"></a>
+<span class="sourceLineNo">327</span><a name="line.327"></a>
+<span class="sourceLineNo">328</span>  ///////////////////////////////////////////////////////////////////////////<a name="line.328"></a>
+<span class="sourceLineNo">329</span>  // Region operations<a name="line.329"></a>
+<span class="sourceLineNo">330</span><a name="line.330"></a>
+<span class="sourceLineNo">331</span>  /**<a name="line.331"></a>
+<span class="sourceLineNo">332</span>   * Perform one or more append operations on a row.<a name="line.332"></a>
+<span class="sourceLineNo">333</span>   * @param append<a name="line.333"></a>
+<span class="sourceLineNo">334</span>   * @param nonceGroup<a name="line.334"></a>
+<span class="sourceLineNo">335</span>   * @param nonce<a name="line.335"></a>
+<span class="sourceLineNo">336</span>   * @return result of the operation<a name="line.336"></a>
+<span class="sourceLineNo">337</span>   * @throws IOException<a name="line.337"></a>
+<span class="sourceLineNo">338</span>   */<a name="line.338"></a>
+<span class="sourceLineNo">339</span>  Result append(Append append, long nonceGroup, long nonce) throws IOException;<a name="line.339"></a>
+<span class="sourceLineNo">340</span><a name="line.340"></a>
+<span class="sourceLineNo">341</span>  /**<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   * Perform a batch of mutations.<a name="line.342"></a>
+<span class="sourceLineNo">343</span>   * &lt;p&gt;<a name="line.343"></a>
+<span class="sourceLineNo">344</span>   * Note this supports only Put and Delete mutations and will ignore other types passed.<a name="line.344"></a>
+<span class="sourceLineNo">345</span>   * @param mutations the list of mutations<a name="line.345"></a>
+<span class="sourceLineNo">346</span>   * @param nonceGroup<a name="line.346"></a>
+<span class="sourceLineNo">347</span>   * @param nonce<a name="line.347"></a>
+<span class="sourceLineNo">348</span>   * @return an array of OperationStatus which internally contains the<a name="line.348"></a>
+<span class="sourceLineNo">349</span>   *         OperationStatusCode and the exceptionMessage if any.<a name="line.349"></a>
+<span class="sourceLineNo">350</span>   * @throws IOException<a name="line.350"></a>
+<span class="sourceLineNo">351</span>   */<a name="line.351"></a>
+<span class="sourceLineNo">352</span>  OperationStatus[] batchMutate(Mutation[] mutations, long nonceGroup, long nonce)<a name="line.352"></a>
+<span class="sourceLineNo">353</span>      throws IOException;<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>  /**<a name="line.355"></a>
+<span class="sourceLineNo">356</span>   * Replay a batch of mutations.<a name="line.356"></a>
+<span class="sourceLineNo">357</span>   * @param mutations mutations to replay.<a name="line.357"></a>
+<span class="sourceLineNo">358</span>   * @param replaySeqId<a name="line.358"></a>
+<span class="sourceLineNo">359</span>   * @return an array of OperationStatus which internally contains the<a name="line.359"></a>
+<span class="sourceLineNo">360</span>   *         OperationStatusCode and the exceptionMessage if any.<a name="line.360"></a>
+<span class="sourceLineNo">361</span>   * @throws IOException<a name="line.361"></a>
+<span class="sourceLineNo">362</span>   */<a name="line.362"></a>
+<span class="sourceLineNo">363</span>   OperationStatus[] batchReplay(MutationReplay[] mutations, long replaySeqId) throws IOException;<a name="line.363"></a>
+<span class="sourceLineNo">364</span><a name="line.364"></a>
+<span class="sourceLineNo">365</span>  /**<a name="line.365"></a>
+<span class="sourceLineNo">366</span>   * Atomically checks if a row/family/qualifier value matches the expected value and if it does,<a name="line.366"></a>
+<span class="sourceLineNo">367</span>   * it performs the mutation. If the passed value is null, the lack of column value<a name="line.367"></a>
+<span class="sourceLineNo">368</span>   * (ie: non-existence) is used. See checkAndRowMutate to do many checkAndPuts at a time on a<a name="line.368"></a>
+<span class="sourceLineNo">369</span>   * single row.<a name="line.369"></a>
+<span class="sourceLineNo">370</span>   * @param row to check<a name="line.370"></a>
+<span class="sourceLineNo">371</span>   * @param family column family to check<a name="line.371"></a>
+<span class="sourceLineNo">372</span>   * @param qualifier column qualifier to check<a name="line.372"></a>
+<span class="sourceLineNo">373</span>   * @param compareOp the comparison operator<a name="line.373"></a>
+<span class="sourceLineNo">374</span>   * @param comparator<a name="line.374"></a>
+<span class="sourceLineNo">375</span>   * @param mutation<a name="line.375"></a>
+<span class="sourceLineNo">376</span>   * @param writeToWAL<a name="line.376"></a>
+<span class="sourceLineNo">377</span>   * @return true if mutation was applied, false otherwise<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   * @throws IOException<a name="line.378"></a>
+<span class="sourceLineNo">379</span>   */<a name="line.379"></a>
+<span class="sourceLineNo">380</span>  boolean checkAndMutate(byte [] row, byte [] family, byte [] qualifier, CompareOp compareOp,<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      ByteArrayComparable comparator, Mutation mutation, boolean writeToWAL) throws IOException;<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span>  /**<a name="line.383"></a>
+<span class="sourceLineNo">384</span>   * Atomically checks if a row/family/qualifier value matches the expected values and if it does,<a name="line.384"></a>
+<span class="sourceLineNo">385</span>   * it performs the row mutations. If the passed value is null, the lack of column value<a name="line.385"></a>
+<span class="sourceLineNo">386</span>   * (ie: non-existence) is used. Use to do many mutations on a single row. Use checkAndMutate<a name="line.386"></a>
+<span class="sourceLineNo">387</span>   * to do one checkAndMutate at a time.<a name="line.387"></a>
+<span class="sourceLineNo">388</span>   * @param row to check<a name="line.388"></a>
+<span class="sourceLineNo">389</span>   * @param family column family to check<a name="line.389"></a>
+<span class="sourceLineNo">390</span>   * @param qualifier column qualifier to check<a name="line.390"></a>
+<span class="sourceLineNo">391</span>   * @param compareOp the comparison operator<a name="line.391"></a>
+<span class="sourceLineNo">392</span>   * @param comparator<a name="line.392"></a>
+<span class="sourceLineNo">393</span>   * @param mutations<a name="line.393"></a>
+<span class="sourceLineNo">394</span>   * @param writeToWAL<a name="line.394"></a>
+<span class="sourceLineNo">395</span>   * @return true if mutations were applied, false otherwise<a name="line.395"></a>
+<span class="sourceLineNo">396</span>   * @throws IOException<a name="line.396"></a>
+<span class="sourceLineNo">397</span>   */<a name="line.397"></a>
+<span class="sourceLineNo">398</span>  boolean checkAndRowMutate(byte [] row, byte [] family, byte [] qualifier, CompareOp compareOp,<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      ByteArrayComparable comparator, RowMutations mutations, boolean writeToWAL)<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      throws IOException;<a name="line.400"></a>
 <span class="sourceLineNo">401</span><a name="line.401"></a>
 <span class="sourceLineNo">402</span>  /**<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   * Do a get based on the get parameter.<a name="line.403"></a>
-<span class="sourceLineNo">404</span>   * @param get query parameters<a name="line.404"></a>
-<span class="sourceLineNo">405</span>   * @return result of the operation<a name="line.405"></a>
+<span class="sourceLineNo">403</span>   * Deletes the specified cells/row.<a name="line.403"></a>
+<span class="sourceLineNo">404</span>   * @param delete<a name="line.404"></a>
+<span class="sourceLineNo">405</span>   * @throws IOException<a name="line.405"></a>
 <span class="sourceLineNo">406</span>   */<a name="line.406"></a>
-<span class="sourceLineNo">407</span>  Result get(Get get) throws IOException;<a name="line.407"></a>
+<span class="sourceLineNo">407</span>  void delete(Delete delete) throws IOException;<a name="line.407"></a>
 <span class="sourceLineNo">408</span><a name="line.408"></a>
 <span class="sourceLineNo">409</span>  /**<a name="line.409"></a>
 <span class="sourceLineNo">410</span>   * Do a get based on the get parameter.<a name="line.410"></a>
 <span class="sourceLineNo">411</span>   * @param get query parameters<a name="line.411"></a>
-<span class="sourceLineNo">412</span>   * @param withCoprocessor invoke coprocessor or not. We don't want to<a name="line.412"></a>
-<span class="sourceLineNo">413</span>   * always invoke cp.<a name="line.413"></a>
-<span class="sourceLineNo">414</span>   * @return list of cells resulting from the operation<a name="line.414"></a>
-<span class="sourceLineNo">415</span>   */<a name="line.415"></a>
-<span class="sourceLineNo">416</span>  List&lt;Cell&gt; get(Get get, boolean withCoprocessor) throws IOException;<a name="line.416"></a>
-<span class="sourceLineNo">417</span><a name="line.417"></a>
-<span class="sourceLineNo">418</span>  /**<a name="line.418"></a>
-<span class="sourceLineNo">419</span>   * Do a get for duplicate non-idempotent operation.<a name="line.419"></a>
-<span class="sourceLineNo">420</span>   * @param get query parameters.<a name="line.420"></a>
-<span class="sourceLineNo">421</span>   * @param withCoprocessor<a name="line.421"></a>
-<span class="sourceLineNo">422</span>   * @param nonceGroup Nonce group.<a name="line.422"></a>
-<span class="sourceLineNo">423</span>   * @param nonce Nonce.<a name="line.423"></a>
-<span class="sourceLineNo">424</span>   * @return list of cells resulting from the operation<a name="line.424"></a>
-<span class="sourceLineNo">425</span>   * @throws IOException<a name="line.425"></a>
-<span class="sourceLineNo">426</span>   */<a name="line.426"></a>
-<span class="sourceLineNo">427</span>  List&lt;Cell&gt; get(Get get, boolean withCoprocessor, long nonceGroup, long nonce) throws IOException;<a name="line.427"></a>
-<span class="sourceLineNo">428</span><a name="line.428"></a>
-<span class="sourceLineNo">429</span>  /**<a name="line.429"></a>
-<span class="sourceLineNo">430</span>   * Return an iterator that scans over the HRegion, returning the indicated<a name="line.430"></a>
-<span class="sourceLineNo">431</span>   * columns and rows specified by the {@link Scan}.<a name="line.431"></a>
-<span class="sourceLineNo">432</span>   * &lt;p&gt;<a name="line.432"></a>
-<span class="sourceLineNo">433</span>   * This Iterator must be closed by the caller.<a name="line.433"></a>
-<span class="sourceLineNo">434</span>   *<a name="line.434"></a>
-<span class="sourceLineNo">435</span>   * @param scan configured {@link Scan}<a name="line.435"></a>
-<span class="sourceLineNo">436</span>   * @return RegionScanner<a name="line.436"></a>
-<span class="sourceLineNo">437</span>   * @throws IOException read exceptions<a name="line.437"></a>
-<span class="sourceLineNo">438</span>   */<a name="line.438"></a>
-<span class="sourceLineNo">439</span>  RegionScanner getScanner(Scan scan) throws IOException;<a name="line.439"></a>
-<span class="sourceLineNo">440</span><a name="line.440"></a>
-<span class="sourceLineNo">441</span>  /**<a name="line.441"></a>
-<span class="sourceLineNo">442</span>   * Return an iterator that scans over the HRegion, returning the indicated columns and rows<a name="line.442"></a>
-<span class="sourceLineNo">443</span>   * specified by the {@link Scan}. The scanner will also include the additional scanners passed<a name="line.443"></a>
-<span class="sourceLineNo">444</span>   * along with the scanners for the specified Scan instance. Should be careful with the usage to<a name="line.444"></a>
-<span class="sourceLineNo">445</span>   * pass additional scanners only within this Region<a name="line.445"></a>
-<span class="sourceLineNo">446</span>   * &lt;p&gt;<a name="line.446"></a>
-<span class="sourceLineNo">447</span>   * This Iterator must be closed by the caller.<a name="line.447"></a>
-<span class="sourceLineNo">448</span>   *<a name="line.448"></a>
-<span class="sourceLineNo">449</span>   * @param scan configured {@link Scan}<a name="line.449"></a>
-<span class="sourceLineNo">450</span>   * @param additionalScanners Any additional scanners to be used<a name="line.450"></a>
-<span class="sourceLineNo">451</span>   * @return RegionScanner<a name="line.451"></a>
-<span class="sourceLineNo">452</span>   * @throws IOException read exceptions<a name="line.452"></a>
-<span class="sourceLineNo">453</span>   */<a name="line.453"></a>
-<span class="sourceLineNo">454</span>  RegionScanner getScanner(Scan scan, List&lt;KeyValueScanner&gt; additionalScanners) throws IOException;<a name="line.454"></a>
-<span class="sourceLineNo">455</span><a name="line.455"></a>
-<span class="sourceLineNo">456</span>  /** The comparator to be used with the region */<a name="line.456"></a>
-<span class="sourceLineNo">457</span>  CellComparator getCellComparator();<a name="line.457"></a>
-<span class="sourceLineNo">458</span><a name="line.458"></a>
-<span class="sourceLineNo">459</span>  /**<a name="line.459"></a>
-<span class="sourceLineNo">460</span>   * Perform one or more increment operations on a row.<a name="line.460"></a>
-<span class="sourceLineNo">461</span>   * @param increment<a name="line.461"></a>
-<span class="sourceLineNo">462</span>   * @param nonceGroup<a name="line.462"></a>
-<span class="sourceLineNo">463</span>   * @param nonce<a name="line.463"></a>
-<span class="sourceLineNo">464</span>   * @return result of the operation<a name="line.464"></a>
-<span class="sourceLineNo">465</span>   * @throws IOException<a name="line.465"></a>
-<span class="sourceLineNo">466</span>   */<a name="line.466"></a>
-<span class="sourceLineNo">467</span>  Result increment(Increment increment, long nonceGroup, long nonce) throws IOException;<a name="line.467"></a>
-<span class="sourceLineNo">468</span><a name="line.468"></a>
-<span class="sourceLineNo">469</span>  /**<a name="line.469"></a>
-<span class="sourceLineNo">470</span>   * Performs multiple mutations atomically on a single row. Currently<a name="line.470"></a>
-<span class="sourceLineNo">471</span>   * {@link Put} and {@link Delete} are supported.<a name="line.471"></a>
-<span class="sourceLineNo">472</span>   *<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   * @param mutations object that specifies the set of mutations to perform atomically<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   * @throws IOException<a name="line.474"></a>
-<span class="sourceLineNo">475</span>   */<a name="line.475"></a>
-<span class="sourceLineNo">476</span>  void mutateRow(RowMutations mutations) throws IOException;<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>  /**<a name="line.478"></a>
-<span class="sourceLineNo">479</span>   * Perform atomic mutations within the region.<a name="line.479"></a>
-<span class="sourceLineNo">480</span>   *<a name="line.480"></a>
-<span class="sourceLineNo">481</span>   * @param mutations The list of mutations to perform.<a name="line.481"></a>
-<span class="sourceLineNo">482</span>   * &lt;code&gt;mutations&lt;/code&gt; can contain operations for multiple rows.<a name="line.482"></a>
-<span class="sourceLineNo">483</span>   * Caller has to ensure that all rows are contained in this region.<a name="line.483"></a>
-<span class="sourceLineNo">484</span>   * @param rowsToLock Rows to lock<a name="line.484"></a>
-<span class="sourceLineNo">485</span>   * @param nonceGroup Optional nonce group of the operation (client Id)<a name="line.485"></a>
-<span class="sourceLineNo">486</span>   * @param nonce Optional nonce of the operation (unique random id to ensure "more idempotence")<a name="line.486"></a>
-<span class="sourceLineNo">487</span>   * If multiple rows are locked care should be taken that<a name="line.487"></a>
-<span class="sourceLineNo">488</span>   * &lt;code&gt;rowsToLock&lt;/code&gt; is sorted in order to avoid deadlocks.<a name="line.488"></a>
-<span class="sourceLineNo">489</span>   * @throws IOException<a name="line.489"></a>
-<span class="sourceLineNo">490</span>   */<a name="line.490"></a>
-<span class="sourceLineNo">491</span>  void mutateRowsWithLocks(Collection&lt;Mutation&gt; mutations, Collection&lt;byte[]&gt; rowsToLock,<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      long nonceGroup, long nonce) throws IOException;<a name="line.492"></a>
-<span class="sourceLineNo">493</span><a name="line.493"></a>
-<span class="sourceLineNo">494</span>  /**<a name="line.494"></a>
-<span class="sourceLineNo">495</span>   * Performs atomic multiple reads and writes on a given row.<a name="line.495"></a>
-<span class="sourceLineNo">496</span>   *<a name="line.496"></a>
-<span class="sourceLineNo">497</span>   * @param processor The object defines the reads and writes to a row.<a name="line.497"></a>
-<span class="sourceLineNo">498</span>   */<a name="line.498"></a>
-<span class="sourceLineNo">499</span>  void processRowsWithLocks(RowProcessor&lt;?,?&gt; processor) throws IOException;<a name="line.499"></a>
+<span class="sourceLineNo">412</span>   * @return result of the operation<a name="line.412"></a>
+<span class="sourceLineNo">413</span>   */<a name="line.413"></a>
+<span class="sourceLineNo">414</span>  Result get(Get get) throws IOException;<a name="line.414"></a>
+<span class="sourceLineNo">415</span><a name="line.415"></a>
+<span class="sourceLineNo">416</span>  /**<a name="line.416"></a>
+<span class="sourceLineNo">417</span>   * Do a get based on the get parameter.<a name="line.417"></a>
+<span class="sourceLineNo">418</span>   * @param get query parameters<a name="line.418"></a>
+<span class="sourceLineNo">419</span>   * @param withCoprocessor invoke coprocessor or not. We don't want to<a name="line.419"></a>
+<span class="sourceLineNo">420</span>   * always invoke cp.<a name="line.420"></a>
+<span class="sourceLineNo">421</span>   * @return list of cells resulting from the operation<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   */<a name="line.422"></a>
+<span class="sourceLineNo">423</span>  List&lt;Cell&gt; get(Get get, boolean withCoprocessor) throws IOException;<a name="line.423"></a>
+<span class="sourceLineNo">424</span><a name="line.424"></a>
+<span class="sourceLineNo">425</span>  /**<a name="line.425"></a>
+<span class="sourceLineNo">426</span>   * Do a get for duplicate non-idempotent operation.<a name="line.426"></a>
+<span class="sourceLineNo">427</span>   * @param get query parameters.<a name="line.427"></a>
+<span class="sourceLineNo">428</span>   * @param withCoprocessor<a name="line.428"></a>
+<span class="sourceLineNo">429</span>   * @param nonceGroup Nonce group.<a name="line.429"></a>
+<span class="sourceLineNo">430</span>   * @param nonce Nonce.<a name="line.430"></a>
+<span class="sourceLineNo">431</span>   * @return list of cells resulting from the operation<a name="line.431"></a>
+<span class="sourceLineNo">432</span>   * @throws IOException<a name="line.432"></a>
+<span class="sourceLineNo">433</span>   */<a name="line.433"></a>
+<span class="sourceLineNo">434</span>  List&lt;Cell&gt; get(Get get, boolean withCoprocessor, long nonceGroup, long nonce) throws IOException;<a name="line.434"></a>
+<span class="sourceLineNo">435</span><a name="line.435"></a>
+<span class="sourceLineNo">436</span>  /**<a name="line.436"></a>
+<span class="sourceLineNo">437</span>   * Return an iterator that scans over the HRegion, returning the indicated<a name="line.437"></a>
+<span class="sourceLineNo">438</span>   * columns and rows specified by the {@link Scan}.<a name="line.438"></a>
+<span class="sourceLineNo">439</span>   * &lt;p&gt;<a name="line.439"></a>
+<span class="sourceLineNo">440</span>   * This Iterator must be closed by the caller.<a name="line.440"></a>
+<span class="sourceLineNo">441</span>   *<a name="line.441"></a>
+<span class="sourceLineNo">442</span>   * @param scan configured {@link Scan}<a name="line.442"></a>
+<span class="sourceLineNo">443</span>   * @return RegionScanner<a name="line.443"></a>
+<span class="sourceLineNo">444</span>   * @throws IOException read exceptions<a name="line.444"></a>
+<span class="sourceLineNo">445</span>   */<a name="line.445"></a>
+<span class="sourceLineNo">446</span>  RegionScanner getScanner(Scan scan) throws IOException;<a name="line.446"></a>
+<span class="sourceLineNo">447</span><a name="line.447"></a>
+<span class="sourceLineNo">448</span>  /**<a name="line.448"></a>
+<span class="sourceLineNo">449</span>   * Return an iterator that scans over the HRegion, returning the indicated columns and rows<a name="line.449"></a>
+<span class="sourceLineNo">450</span>   * specified by the {@link Scan}. The scanner will also include the additional scanners passed<a name="line.450"></a>
+<span class="sourceLineNo">451</span>   * along with the scanners for the specified Scan instance. Should be careful with the usage to<a name="line.451"></a>
+<span class="sourceLineNo">452</span>   * pass additional scanners only within this Region<a name="line.452"></a>
+<span class="sourceLineNo">453</span>   * &lt;p&gt;<a name="line.453"></a>
+<span class="sourceLineNo">454</span>   * This Iterator must be closed by the caller.<a name="line.454"></a>
+<span class="sourceLineNo">455</span>   *<a name="line.455"></a>
+<span class="sourceLineNo">456</span>   * @param scan configured {@link Scan}<a name="line.456"></a>
+<span class="sourceLineNo">457</span>   * @param additionalScanners Any additional scanners to be used<a name="line.457"></a>
+<span class="sourceLineNo">458</span>   * @return RegionScanner<a name="line.458"></a>
+<span class="sourceLineNo">459</span>   * @throws IOException read exceptions<a name="line.459"></a>
+<span class="sourceLineNo">460</span>   */<a name="line.460"></a>
+<span class="sourceLineNo">461</span>  RegionScanner getScanner(Scan scan, List&lt;KeyValueScanner&gt; additionalScanners) throws IOException;<a name="line.461"></a>
+<span class="sourceLineNo">462</span><a name="line.462"></a>
+<span class="sourceLineNo">463</span>  /** The comparator to be used with the region */<a name="line.463"></a>
+<span class="sourceLineNo">464</span>  CellComparator getCellComparator();<a name="line.464"></a>
+<span class="sourceLineNo">465</span><a name="line.465"></a>
+<span class="sourceLineNo">466</span>  /**<a name="line.466"></a>
+<span class="sourceLineNo">467</span>   * Perform one or more increment operations on a row.<a name="line.467"></a>
+<span class="sourceLineNo">468</span>   * @param increment<a name="line.468"></a>
+<span class="sourceLineNo">469</span>   * @param nonceGroup<a name="line.469"></a>
+<span class="sourceLineNo">470</span>   * @param nonce<a name="line.470"></a>
+<span class="sourceLineNo">471</span>   * @return result of the operation<a name="line.471"></a>
+<span class="sourceLineNo">472</span>   * @throws IOException<a name="line.472"></a>
+<span class="sourceLineNo">473</span>   */<a name="line.473"></a>
+<span class="sourceLineNo">474</span>  Result increment(Increment increment, long nonceGroup, long nonce) throws IOException;<a name="line.474"></a>
+<span class="sourceLineNo">475</span><a name="line.475"></a>
+<span class="sourceLineNo">476</span>  /**<a name="line.476"></a>
+<span class="sourceLineNo">477</span>   * Performs multiple mutations atomically on a single row. Currently<a name="line.477"></a>
+<span class="sourceLineNo">478</span>   * {@link Put} and {@link Delete} are supported.<a name="line.478"></a>
+<span class="sourceLineNo">479</span>   *<a name="line.479"></a>
+<span class="sourceLineNo">480</span>   * @param mutations object that specifies the set of mutations to perform atomically<a name="line.480"></a>
+<span class="sourceLineNo">481</span>   * @throws IOException<a name="line.481"></a>
+<span class="sourceLineNo">482</span>   */<a name="line.482"></a>
+<span class="sourceLineNo">483</span>  void mutateRow(RowMutations mutations) throws IOException;<a name="line.483"></a>
+<span class="sourceLineNo">484</span><a name="line.484"></a>
+<span class="sourceLineNo">485</span>  /**<a name="line.485"></a>
+<span class="sourceLineNo">486</span>   * Perform atomic mutations within the region.<a name="line.486"></a>
+<span class="sourceLineNo">487</span>   *<a name="line.487"></a>
+<span class="sourceLineNo">488</span>   * @param mutations The list of mutations to perform.<a name="line.488"></a>
+<span class="sourceLineNo">489</span>   * &lt;code&gt;mutations&lt;/code&gt; can contain operations for multiple rows.<a name="line.489"></a>
+<span class="sourceLineNo">490</span>   * Caller has to ensure that all rows are contained in this region.<a name="line.490"></a>
+<span class="sourceLineNo">491</span>   * @param rowsToLock Rows to lock<a name="line.491"></a>
+<span class="sourceLineNo">492</span>   * @param nonceGroup Optional nonce group of the operation (client Id)<a name="line.492"></a>
+<span class="sourceLineNo">493</span>   * @param nonce Optional nonce of the operation (unique random id to ensure "more idempotence")<a name="line.493"></a>
+<span class="sourceLineNo">494</span>   * If multiple rows are locked care should be taken that<a name="line.494"></a>
+<span class="sourceLineNo">495</span>   * &lt;code&gt;rowsToLock&lt;/code&gt; is sorted in order to avoid deadlocks.<a name="line.495"></a>
+<span class="sourceLineNo">496</span>   * @throws IOException<a name="line.496"></a>
+<span class="sourceLineNo">497</span>   */<a name="line.497"></a>
+<span class="sourceLineNo">498</span>  void mutateRowsWithLocks(Collection&lt;Mutation&gt; mutations, Collection&lt;byte[]&gt; rowsToLock,<a name="line.498"></a>
+<span class="sourceLineNo">499</span>      long nonceGroup, long nonce) throws IOException;<a name="line.499"></a>
 <span class="sourceLineNo">500</span><a name="line.500"></a>
 <span class="sourceLineNo">501</span>  /**<a name="line.501"></a>
 <span class="sourceLineNo">502</span>   * Performs atomic multiple reads and writes on a given row.<a name="line.502"></a>
 <span class="sourceLineNo">503</span>   *<a name="line.503"></a>
 <span class="sourceLineNo">504</span>   * @param processor The object defines the reads and writes to a row.<a name="line.504"></a>
-<span class="sourceLineNo">505</span>   * @param nonceGroup Optional nonce group of the operation (client Id)<a name="line.505"></a>
-<span class="sourceLineNo">506</span>   * @param nonce Optional nonce of the operation (unique random id to ensure "more idempotence")<a name="line.506"></a>
-<span class="sourceLineNo">507</span>   */<a name="line.507"></a>
-<span class="sourceLineNo">508</span>  void processRowsWithLocks(RowProcessor&lt;?,?&gt; processor, long nonceGroup, long nonce)<a name="line.508"></a>
-<span class="sourceLineNo">509</span>      throws IOException;<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span>  /**<a name="line.511"></a>
-<span class="sourceLineNo">512</span>   * Performs atomic multiple reads and writes on a given row.<a name="line.512"></a>
-<span class="sourceLineNo">513</span>   *<a name="line.513"></a>
-<span class="sourceLineNo">514</span>   * @param processor The object defines the reads and writes to a row.<a name="line.514"></a>
-<span class="sourceLineNo">515</span>   * @param timeout The timeout of the processor.process() execution<a name="line.515"></a>
-<span class="sourceLineNo">516</span>   *                Use a negative number to switch off the time bound<a name="line.516"></a>
-<span class="sourceLineNo">517</span>   * @param nonceGroup Optional nonce group of the operation (client Id)<a name="line.517"></a>
-<span class="sourceLineNo">518</span>   * @param nonce Optional nonce of the operation (unique random id to ensure "more idempotence")<a name="line.518"></a>
-<span class="sourceLineNo">519</span>   */<a name="line.519"></a>
-<span class="sourceLineNo">520</span>  void processRowsWithLocks(RowProcessor&lt;?,?&gt; processor, long timeout, long nonceGroup, long nonce)<a name="line.520"></a>
-<span class="sourceLineNo">521</span>      throws IOException;<a name="line.521"></a>
-<span class="sourceLineNo">522</span><a name="line.522"></a>
-<span class="sourceLineNo">523</span>  /**<a name="line.523"></a>
-<span class="sourceLineNo">524</span>   * Puts some data in the table.<a name="line.524"></a>
-<span class="sourceLineNo">525</span>   * @param put<a name="line.525"></a>
-<span class="sourceLineNo">526</span>   * @throws IOException<a name="line.526"></a>
-<span class="sourceLineNo">527</span>   */<a name="line.527"></a>
-<span class="sourceLineNo">528</span>  void put(Put put) throws IOException;<a name="line.528"></a>
+<span class="sourceLineNo">505</span>   */<a name="line.505"></a>
+<span class="sourceLineNo">506</span>  void processRowsWithLocks(RowProcessor&lt;?,?&gt; processor) throws IOException;<a name="line.506"></a>
+<span class="sourceLineNo">507</span><a name="line.507"></a>
+<span class="sourceLineNo">508</span>  /**<a name="line.508"></a>
+<span class="sourceLineNo">509</span>   * Performs atomic multiple reads and writes on a given row.<a name="line.509"></a>
+<span class="sourceLineNo">510</span>   *<a name="line.510"></a>
+<span class="sourceLineNo">511</span>   * @param processor The object defines the reads and writes to a row.<a name="line.511"></a>
+<span class="sourceLineNo">512</span>   * @param nonceGroup Optional nonce group of the operation (client Id)<a name="line.512"></a>
+<span class="sourceLineNo">513</span>   * @param nonce Optional nonce of the operation (unique random id to ensure "more idempotence")<a name="line.513"></a>
+<span class="sourceLineNo">514</span>   */<a name="line.514"></a>
+<span class="sourceLineNo">515</span>  void processRowsWithLocks(RowProcessor&lt;?,?&gt; processor, long nonceGroup, long nonce)<a name="line.515"></a>
+<span class="sourceLineNo">516</span>      throws IOException;<a name="line.516"></a>
+<span class="sourceLineNo">517</span><a name="line.517"></a>
+<span class="sourceLineNo">518</span>  /**<a name="line.518"></a>
+<span class="sourceLineNo">519</span>   * Performs atomic multiple reads and writes on a given row.<a name="line.519"></a>
+<span class="sourceLineNo">520</span>   *<a name="line.520"></a>
+<span class="sourceLineNo">521</span>   * @param processor The object defines the reads and writes to a row.<a name="line.521"></a>
+<span class="sourceLineNo">522</span>   * @param timeout The timeout of the processor.process() execution<a name="line.522"></a>
+<span class="sourceLineNo">523</span>   *                Use a negative number to switch off the time bound<a name="line.523"></a>
+<span class="sourceLineNo">524</span>   * @param nonceGroup Optional nonce group of the operation (client Id)<a name="line.524"></a>
+<span class="sourceLineNo">525</span>   * @param nonce Optional nonce of the operation (unique random id to ensure "more idempotence")<a name="line.525"></a>
+<span class="sourceLineNo">526</span>   */<a name="line.526"></a>
+<span class="sourceLineNo">527</span>  void processRowsWithLocks(RowProcessor&lt;?,?&gt; processor, long timeout, long nonceGroup, long nonce)<a name="line.527"></a>
+<span class="sourceLineNo">528</span>      throws IOException;<a name="line.528"></a>
 <span class="sourceLineNo">529</span><a name="line.529"></a>
 <span class="sourceLineNo">530</span>  /**<a name="line.530"></a>
-<span class="sourceLineNo">531</span>   * Listener class to enable callers of<a name="line.531"></a>
-<span class="sourceLineNo">532</span>   * bulkLoadHFile() to perform any necessary<a name="line.532"></a>
-<span class="sourceLineNo">533</span>   * pre/post processing of a given bulkload call<a name="line.533"></a>
+<span class="sourceLineNo">531</span>   * Puts some data in the table.<a name="line.531"></a>
+<span class="sourceLineNo">532</span>   * @param put<a name="line.532"></a>
+<span class="sourceLineNo">533</span>   * @throws IOException<a name="line.533"></a>
 <span class="sourceLineNo">534</span>   */<a name="line.534"></a>
-<span class="sourceLineNo">535</span>  interface BulkLoadListener {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    /**<a name="line.536"></a>
-<span class="sourceLineNo">537</span>     * Called before an HFile is actually loaded<a name="line.537"></a>
-<span class="sourceLineNo">538</span>     * @param family family being loaded to<a name="line.538"></a>
-<span class="sourceLineNo">539</span>     * @param srcPath path of HFile<a name="line.539"></a>
-<span class="sourceLineNo">540</span>     * @return final path to be used for actual loading<a name="line.540"></a>
-<span class="sourceLineNo">541</span>     * @throws IOException<a name="line.541"></a>
-<span class="sourceLineNo">542</span>     */<a name="line.542"></a>
-<span class="sourceLineNo">543</span>    String prepareBulkLoad(byte[] family, String srcPath, boolean copyFile)<a name="line.543"></a>
-<span class="sourceLineNo">544</span>        throws IOException;<a name="line.544"></a>
-<span class="sourceLineNo">545</span><a name="line.545"></a>
-<span class="sourceLineNo">546</span>    /**<a name="line.546"></a>
-<span class="sourceLineNo">547</span>     * Called after a successful HFile load<a name="line.547"></a>
-<span class="sourceLineNo">548</span>     * @param family family being loaded to<a name="line.548"></a>
-<span class="sourceLineNo">549</span>     * @param srcPath path of HFile<a name="line.549"></a>
-<span class="sourceLineNo">550</span>     * @throws IOException<a name="line.550"></a>
-<span class="sourceLineNo">551</span>     */<a name="line.551"></a>
-<span class="sourceLineNo">552</span>    void doneBulkLoad(byte[] family, String srcPath) throws IOException;<a name="line.552"></a>
-<span class="sourceLineNo">553</span><a name="line.553"></a>
-<span class="sourceLineNo">554</span>    /**<a name="line.554"></a>
-<span class="sourceLineNo">555</span>     * Called after a failed HFile load<a name="line.555"></a>
-<span class="sourceLineNo">556</span>     * @param family family being loaded to<a name="line.556"></a>
-<span class="sourceLineNo">557</span>     * @param srcPath path of HFile<a name="line.557"></a>
-<span class="sourceLineNo">558</span>     * @throws IOException<a name="line.558"></a>
-<span class="sourceLineNo">559</span>     */<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    void failedBulkLoad(byte[] family, String srcPath) throws IOException;<a name="line.560"></a>
-<span class="sourceLineNo">561</span>  }<a name="line.561"></a>
-<span class="sourceLineNo">562</span><a name="line.562"></a>
-<span class="sourceLineNo">563</span>  /**<a name="line.563"></a>
-<span class="sourceLineNo">564</span>   * Attempts to atomically load a group of hfiles.  This is critical for loading<a name="line.564"></a>
-<span class="sourceLineNo">565</span>   * rows with multiple column families atomically.<a name="line.565"></a>
-<span class="sourceLineNo">566</span>   *<a name="line.566"></a>
-<span class="sourceLineNo">567</span>   * @param familyPaths List of Pair&amp;lt;byte[] column family, String hfilePath&amp;gt;<a name="line.567"></a>
-<span class="sourceLineNo">568</span>   * @param bulkLoadListener Internal hooks enabling massaging/preparation of a<a name="line.568"></a>
-<span class="sourceLineNo">569</span>   * file about to be bulk loaded<a name="line.569"></a>
-<span class="sourceLineNo">570</span>   * @param assignSeqId<a name="line.570"></a>
-<span class="sourceLineNo">571</span>   * @return Map from family to List of store file paths if successful, null if failed recoverably<a name="line.571"></a>
-<span class="sourceLineNo">572</span>   * @throws IOException if failed unrecoverably.<a name="line.572"></a>
-<span class="sourceLineNo">573</span>   */<a name="line.573"></a>
-<span class="sourceLineNo">574</span>  Map&lt;byte[], List&lt;Path&gt;&gt; bulkLoadHFiles(Collection&lt;Pair&lt;byte[], String&gt;&gt; familyPaths,<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      boolean assignSeqId, BulkLoadListener bulkLoadListener) throws IOException;<a name="line.575"></a>
-<span class="sourceLineNo">576</span><a name="line.576"></a>
-<span class="sourceLineNo">577</span>  /**<a name="line.577"></a>
-<span class="sourceLineNo">578</span>   * Attempts to atomically load a group of hfiles.  This is critical for loading<a name="line.578"></a>
-<span class="sourceLineNo">579</span>   * rows with multiple column families atomically.<a name="line.579"></a>
-<span class="sourceLineNo">580</span>   *<a name="line.580"></a>
-<span class="sourceLineNo">581</span>   * @param familyPaths List of Pair&amp;lt;byte[] column family, String hfilePath&amp;gt;<a name="line.581"></a>
-<span class="sourceLineNo">582</span>   * @param assignSeqId<a name="line.582"></a>
-<span class="sourceLineNo">583</span>   * @param bulkLoadListener Internal hooks enabling massaging/preparation of a<a name="line.583"></a>
-<span class="sourceLineNo">584</span>   * file about to be bulk loaded<a name="line.584"></a>
-<span class="sourceLineNo">585</span>   * @param copyFile always copy hfiles if true<a name="line.585"></a>
-<span class="sourceLineNo">586</span>   * @return Map from family to List of store file paths if successful, null if failed recoverably<a name="line.586"></a>
-<span class="sourceLineNo">587</span>   * @throws IOException if failed unrecoverably.<a name="line.587"></a>
-<span class="sourceLineNo">588</span>   */<a name="line.588"></a>
-<span class="sourceLineNo">589</span>  Map&lt;byte[], List&lt;Path&gt;&gt; bulkLoadHFiles(Collection&lt;Pair&lt;byte[], String&gt;&gt; familyPaths,<a name="line.589"></a>
-<span class="sourceLineNo">590</span>      boolean assignSeqId, BulkLoadListener bulkLoadListener, boolean copyFile) throws IOException;<a name="line.590"></a>
-<span class="sourceLineNo">591</span><a name="line.591"></a>
-<span class="sourceLineNo">592</span>  ///////////////////////////////////////////////////////////////////////////<a name="line.592"></a>
-<span class="sourceLineNo">593</span>  // Coprocessors<a name="line.593"></a>
-<span class="sourceLineNo">594</span><a name="line.594"></a>
-<span class="sourceLineNo">595</span>  /** @return the coprocessor host */<a name="line.595"></a>
-<span class="sourceLineNo">596</span>  RegionCoprocessorHost getCoprocessorHost();<a name="line.596"></a>
-<span class="sourceLineNo">597</span><a name="line.597"></a>
-<span class="sourceLineNo">598</span>  /**<a name="line.598"></a>
-<span class="sourceLineNo">599</span>   * Executes a single protocol buffer coprocessor endpoint {@link Service} method using<a name="line.599"></a>
-<span class="sourceLineNo">600</span>   * the registered protocol handlers.  {@link Service} implementations must be registered via the<a name="line.600"></a>
-<span class="sourceLineNo">601</span>   * {@link Region#registerService(com.google.protobuf.Service)}<a name="line.601"></a>
-<span class="sourceLineNo">602</span>   * method before they are available.<a name="line.602"></a>
-<span class="sourceLineNo">603</span>   *<a name="line.603"></a>
-<span class="sourceLineNo">604</span>   * @param controller an {@code RpcContoller} implementation to pass to the invoked service<a name="line.604"></a>
-<span class="sourceLineNo">605</span>   * @param call a {@code CoprocessorServiceCall} instance identifying the service, method,<a name="line.605"></a>
-<span class="sourceLineNo">606</span>   *     and parameters for the method invocation<a name="line.606"></a>
-<span class="sourceLineNo">607</span>   * @return a protocol buffer {@code Message} instance containing the method's result<a name="line.607"></a>
-<span class="sourceLineNo">608</span>   * @throws IOException if no registered service handler is found or an error<a name="line.608"></a>
-<span class="sourceLineNo">609</span>   *     occurs during the invocation<a name="line.609"></a>
-<span class="sourceLineNo">610</span>   * @see org.apache.hadoop.hbase.regionserver.Region#registerService(com.google.protobuf.Service)<a name="line.610"></a>
-<span class="sourceLineNo">611</span>   */<a name="line.611"></a>
-<span class="sourceLineNo">612</span>  com.google.protobuf.Message execService(com.google.protobuf.RpcController controller,<a name="line.612"></a>
-<span class="sourceLineNo">613</span>      CoprocessorServiceCall call)<a name="line.613"></a>
-<span class="sourceLineNo">614</span>  throws IOException;<a name="line.614"></a>
-<span class="sourceLineNo">615</span><a name="line.615"></a>
-<span class="sourceLineNo">616</span>  /**<a name="line.616"></a>
-<span class="sourceLineNo">617</span>   * Registers a new protocol buffer {@link Service} subclass as a coprocessor endpoint to<a name="line.617"></a>
-<span class="sourceLineNo">618</span>   * be available for handling Region#execService(com.google.protobuf.RpcController,<a name="line.618"></a>
-<span class="sourceLineNo">619</span>   *    org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceCall) calls.<a name="line.619"></a>
-<span class="sourceLineNo">620</span>   *<a name="line.620"></a>
-<span class="sourceLineNo">621</span>   * &lt;p&gt;<a name="line.621"></a>
-<span class="sourceLineNo">622</span>   * Only a single instance may be registered per region for a given {@link Service} subclass (the<a name="line.622"></a>
-<span class="sourceLineNo">623</span>   * instances are keyed on {@link com.google.protobuf.Descriptors.ServiceDescriptor#getFullName()}.<a name="line.623"></a>
-<span class="sourceLineNo">624</span>   * After the first registration, subsequent calls with the same service name will fail with<a name="line.624"></a>
-<span class="sourceLineNo">625</span>   * a return value of {@code false}.<a name="line.625"></a>
-<span class="sourceLineNo">626</span>   * &lt;/p&gt;<a name="line.626"></a>
-<span class="sourceLineNo">627</span>   * @param instance the {@code Service} subclass instance to expose as a coprocessor endpoint<a name="line.627"></a>
-<span class="sourceLineNo">628</span>   * @return {@code true} if the registration was successful, {@code false}<a name="line.628"></a>
-<span class="sourceLineNo">629</span>   * otherwise<a name="line.629"></a>
-<span class="sourceLineNo">630</span>   */<a name="line.630"></a>
-<span class="sourceLineNo">631</span>  boolean registerService(com.google.protobuf.Service instance);<a name="line.631"></a>
-<span class="sourceLineNo">632</span><a name="line.632"></a>
-<span class="sourceLineNo">633</span>  ///////////////////////////////////////////////////////////////////////////<a name="line.633"></a>
-<span class="sourceLineNo">634</span>  // RowMutation processor support<a name="line.634"></a>
-<span class="sourceLineNo">635</span><a name="line.635"></a>
-<span class="sourceLineNo">636</span>  /**<a name="line.636"></a>
-<span class="sourceLineNo">637</span>   * Check the collection of families for validity.<a name="line.637"></a>
-<span class="sourceLineNo">638</span>   * @param families<a name="line.638"></a>
-<span class="sourceLineNo">639</span>   * @throws NoSuchColumnFamilyException<a name="line.639"></a>
-<span class="sourceLineNo">640</span>   */<a name="line.640"></a>
-<span class="sourceLineNo">641</span>  void checkFamilies(Collection&lt;byte[]&gt; families) throws NoSuchColumnFamilyException;<a name="line.641"></a>
+<span class="sourceLineNo">535</span>  void put(Put put) throws IOException;<a name="line.535"></a>
+<span class="sourceLineNo">536</span><a name="line.536"></a>
+<span class="sourceLineNo">537</span>  /**<a name="line.537"></a>
+<span class="sourceLineNo">538</span>   * Listener class to enable callers of<a name="line.538"></a>
+<span class="sourceLineNo">539</span>   * bulkLoadHFile() to perform any necessary<a name="line.539"></a>
+<span class="sourceLineNo">540</span>   * pre/post processing of a given bulkload call<a name="line.540"></a>
+<span class="sourceLineNo">541</span>   */<a name="line.541"></a>
+<span class="sourceLineNo">542</span>  interface BulkLoadListener {<a name="line.542"></a>
+<span class="sourceLineNo">543</span>    /**<a name="line.543"></a>
+<span class="sourceLineNo">544</span>     * Called before an HFile is actually loaded<a name="line.544"></a>
+<span class="sourceLineNo">545</span>     * @param family family being loaded to<a name="line.545"></a>
+<span class="sourceLineNo">546</span>     * @param srcPath path of HFile<a name="line.546"></a>
+<span class="sourceLineNo">547</span>     * @return final path to be used for actual loading<a name="line.547"></a>
+<span class="sourceLineNo">548</span>     * @throws IOException<a name="line.548"></a>
+<span class="sourceLineNo">549</span>     */<a name="line.549"></a>
+<span class="sourceLineNo">550</span>    String prepareBulkLoad(byte[] family, String srcPath, boolean copyFile)<a name="line.550"></a>
+<span class="sourceLineNo">551</span>        throws IOException;<a name="line.551"></a>
+<span class="sourceLineNo">552</span><a name="line.552"></a>
+<span class="sourceLineNo">553</span>    /**<a name="line.553"></a>
+<span class="sourceLineNo">554</span>     * Called after a successful HFile load<a name="line.554"></a>
+<span class="sourceLineNo">555</span>     * @param family family being loaded to<a name="line.555"></a>
+<span class="sourceLineNo">556</span>     * @param srcPath path of HFile<a name="line.556"></a>
+<span class="sourceLineNo">557</span>     * @throws IOException<a name="line.557"></a>
+<span class="sourceLineNo">558</span>     */<a name="line.558"></a>
+<span class="sourceLineNo">559</span>    void doneBulkLoad(byte[] family, String srcPath) throws IOException;<a name="line.559"></a>
+<span class="sourceLineNo">560</span><a name="line.560"></a>
+<span class="sourceLineNo">561</span>    /**<a name="line.561"></a>
+<span class="sourceLineNo">562</span>     * Called after a failed HFile load<a name="line.562"></a>
+<span class="sourceLineNo">563</span>     * @param family family being loaded to<a name="line.563"></a>
+<span class="sourceLineNo">564</span>     * @param srcPath path of HFile<a name="line.564"></a>
+<span class="sourceLineNo">565</span>     * @throws IOException<a name="line.565"></a>
+<span class="sourceLineNo">566</span>     */<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    void failedBulkLoad(byte[] family, String srcPath) throws IOException;<a name="line.567"></a>
+<span class="sourceLineNo">568</span>  }<a name="line.568"></a>
+<span class="sourceLineNo">569</span><a name="line.569"></a>
+<span class="sourceLineNo">570</span>  /**<a name="line.570"></a>
+<span class="sourceLineNo">571</span>   * Attempts to atomically load a group of hfiles.  This is critical for loading<a name="line.571"></a>
+<span class="sourceLineNo">572</span>   * rows with multiple column families atomically.<a name="line.572"></a>
+<span class="sourceLineNo">573</span>   *<a name="line.573"></a>
+<span class="sourceLineNo">574</span>   * @param familyPaths List of Pair&amp;lt;byte[] column family, String hfilePath&amp;gt;<a name="line.574"></a>
+<span class="sourceLineNo">575</span>   * @param bulkLoadListener Internal hooks enabling massaging/preparation of a<a name="line.575"></a>
+<span class="sourceLineNo">576</span>   * file about to be bulk loaded<a name="line.576"></a>
+<span class="sourceLineNo">577</span>   * @param assignSeqId<a name="line.577"></a>
+<span class="sourceLineNo">578</span>   * @return Map from family to List of store file paths if successful, null if failed recoverably<a name="line.578"></a>
+<span class="sourceLineNo">579</span>   * @throws IOException if failed unrecoverably.<a name="line.579"></a>
+<span class="sourceLineNo">580</span>   */<a name="line.580"></a>
+<span class="sourceLineNo">581</span>  Map&lt;byte[], List&lt;Path&gt;&gt; bulkLoadHFiles(Collection&lt;Pair&lt;byte[], String&gt;&gt; familyPaths,<a name="line.581"></a>
+<span class="sourceLineNo">582</span>      boolean assignSeqId, BulkLoadListener bulkLoadListener) throws IOException;<a name="line.582"></a>
+<span class="sourceLineNo">583</span><a name="line.583"></a>
+<span class="sourceLineNo">584</span>  /**<a name="line.584"></a>
+<span class="sourceLineNo">585</span>   * Attempts to atomically load a group of hfiles.  This is critical for loading<a name="line.585"></a>
+<span class="sourceLineNo">586</span>   * rows with multiple column families atomically.<a name="line.586"></a>
+<span class="sourceLineNo">587</span>   *<a name="line.587"></a>
+<span class="sourceLineNo">588</span>   * @param familyPaths List of Pair&amp;lt;byte[] column family, String hfilePath&amp;gt;<a name="line.588"></a>
+<span class="sourceLineNo">589</span>   * @param assignSeqId<a name="line.589"></a>
+<span class="sourceLineNo">590</span>   * @param bulkLoadListener Internal hooks enabling massaging/preparation of a<a name="line.590"></a>
+<span class="sourceLineNo">591</span>   * file about to be bulk loaded<a name="line.591"></a>
+<span class="sourceLineNo">592</span>   * @param copyFile always copy hfiles if true<a name="line.592"></a>
+<span class="sourceLineNo">593</span>   * @return Map from family to List of store file paths if successful, null if failed recoverably<a name="line.593"></a>
+<span class="sourceLineNo">594</span>   * @throws IOException if failed unrecoverably.<a name="line.594"></a>
+<span class="sourceLineNo">595</span>   */<a name="line.595"></a>
+<span class="sourceLineNo">596</span>  Map&lt;byte[], List&lt;Path&gt;&gt; bulkLoadHFiles(Collection&lt;Pair&lt;byte[], String&gt;&gt; familyPaths,<a name="line.596"></a>
+<span class="sourceLineNo">597</span>      boolean assignSeqId, BulkLoadListener bulkLoadListener, boolean copyFile) throws IOException;<a name="line.597"></a>
+<span class="sourceLineNo">598</span><a name="line.598"></a>
+<span class="sourceLineNo">599</span>  ///////////////////////////////////////////////////////////////////////////<a name="line.599"></a>
+<span class="sourceLineNo">600</span>  // Coprocessors<a name="line.600"></a>
+<span class="sourceLineNo">601</span><a name="line.601"></a>
+<span class="sourceLineNo">602</span>  /** @return the coprocessor host */<a name="line.602"></a>
+<span class="sourceLineNo">603</span>  RegionCoprocessorHost getCoprocessorHost();<a name="line.603"></a>
+<span class="sourceLineNo">604</span><a name="line.604"></a>
+<span class="sourceLineNo">605</span>  /**<a name="line.605"></a>
+<span class="sourceLineNo">606</span>   * Executes a single protocol buffer coprocessor endpoint {@link Service} method using<a name="line.606"></a>
+<span class="sourceLineNo">607</span>   * the registered protocol handlers.  {@link Service} implementations must be registered via the<a name="line.607"></a>
+<span class="sourceLineNo">608</span>   * {@link Region#registerService(com.google.protobuf.Service)}<a name="line.608"></a>
+<span class="sourceLineNo">609</span>   * method before they are available.<a name="line.609"></a>
+<span class="sourceLineNo">610</span>   *<a name="line.610"></a>
+<span class="sourceLineNo">611</span>   * @param controller an {@code RpcContoller} implementation to pass to the invoked service<a name="line.611"></a>
+<span class="sourceLineNo">612</span>   * @param call a {@code CoprocessorServiceCall} instance identifying the service, method,<a name="line.612"></a>
+<span class="sourceLineNo">613</span>   *     and parameters for the method invocation<a name="line.613"></a>
+<span class="sourceLineNo">614</span>   * @return a protocol buffer {@code Message} instance containing the method's result<a name="line.614"></a>
+<span class="sourceLineNo">615</span>   * @throws IOException if no registered service handler is found or an error<a name="line.615"></a>
+<span class="sourceLineNo">616</span>   *     occurs during the invocation<a name="line.616"></a>
+<span class="sourceLineNo">617</span>   * @see org.apache.hadoop.hbase.regionserver.Region#registerService(com.google.protobuf.Service)<a name="line.617"></a>
+<span class="sourceLineNo">618</span>   */<a name="line.618"></a>
+<span class="sourceLineNo">619</span>  com.google.protobuf.Message execService(com.google.protobuf.RpcController controller,<a name="line.619"></a>
+<span class="sourceLineNo">620</span>      CoprocessorServiceCall call)<a name="line.620"></a>
+<span class="sourceLineNo">621</span>  throws IOException;<a name="line.621"></a>
+<span class="sourceLineNo">622</span><a name="line.622"></a>
+<span class="sourceLineNo">623</span>  /**<a name="line.623"></a>
+<span class="sourceLineNo">624</span>   * Registers a new protocol buffer {@link Service} subclass as a coprocessor endpoint to<a name="line.624"></a>
+<span class="sourceLineNo">625</span>   * be available for handling Region#execService(com.google.protobuf.RpcController,<a name="line.625"></a>
+<span class="sourceLineNo">626</span>   *    org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceCall) calls.<a name="line.626"></a>
+<span class="sourceLineNo">627</span>   *<a name="line.627"></a>
+<span class="sourceLineNo">628</span>   * &lt;p&gt;<a name="line.628"></a>
+<span class="sourceLineNo">629</span>   * Only a single instance may be registered per region for a given {@link Service} subclass (the<a name="line.629"></a>
+<span class="sourceLineNo">630</span>   * instances are keyed on {@link com.google.protobuf.Descriptors.ServiceDescriptor#getFullName()}.<a name="line.630"></a>
+<span class="sourceLineNo">631</span>   * After the first registration, subsequent calls with the same service name will fail with<a name="line.631"></a>
+<span class="sourceLineNo">632</span>   * a return value of {@code false}.<a name="line.632"></a>
+<span class="sourceLineNo">633</span>   * &lt;/p&gt;<a name="line.633"></a>
+<span class="sourceLineNo">634</span>   * @param instance the {@code Service} subclass instance to expose as a coprocessor endpoint<a name="line.634"></a>
+<span class="sourceLineNo">635</span>   * @return {@code true} if the registration was successful, {@code false}<a name="line.635"></a>
+<span class="sourceLineNo">636</span>   * otherwise<a name="line.636"></a>
+<span class="sourceLineNo">637</span>   */<a name="line.637"></a>
+<span class="sourceLineNo">638</span>  boolean registerService(com.google.protobuf.Service instance);<a name="line.638"></a>
+<span class="sourceLineNo">639</span><a name="line.639"></a>
+<span class="sourceLineNo">640</span>  ///////////////////////////////////////////////////////////////////////////<a name="line.640"></a>
+<span class="sourceLineNo">641</span>  // RowMutation processor support<a name="line.641"></a>
 <span class="sourceLineNo">642</span><a name="line.642"></a>
 <span class="sourceLineNo">643</span>  /**<a name="line.643"></a>
-<span class="sourceLineNo">644</span>   * Check the collection of families for valid timestamps<a name="line.644"></a>
-<span class="sourceLineNo">645</span>   * @param familyMap<a name="line.645"></a>
-<span class="sourceLineNo">646</span>   * @param now current timestamp<a name="line.646"></a>
-<span class="sourceLineNo">647</span>   * @throws FailedSanityCheckException<a name="line.647"></a>
-<span class="sourceLineNo">648</span>   */<a name="line.648"></a>
-<span class="sourceLineNo">649</span>  void checkTimestamps(Map&lt;byte[], List&lt;Cell&gt;&gt; familyMap, long now)<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      throws FailedSanityCheckException;<a name="line.650"></a>
-<span class="sourceLineNo">651</span><a name="line.651"></a>
-<span class="sourceLineNo">652</span>  /**<a name="line.652"></a>
-<span class="sourceLineNo">653</span>   * Prepare a delete for a row mutation processor<a name="line.653"></a>
-<span class="sourceLineNo">654</span>   * @param delete The passed delete is modified by this method. WARNING!<a name="line.654"></a>
-<span class="sourceLineNo">655</span>   * @throws IOException<a name="line.655"></a>
-<span class="sourceLineNo">656</span>   */<a name="line.656"></a>
-<span class="sourceLineNo">657</span>  void prepareDelete(Delete delete) throws IOException;<a name="line.657"></a>
+<span class="sourceLineNo">644</span>   * Check the collection of families for validity.<a name="line.644"></a>
+<span class="sourceLineNo">645</span>   * @param families<a name="line.645"></a>
+<span class="sourceLineNo">646</span>   * @throws NoSuchColumnFamilyException<a name="line.646"></a>
+<span class="sourceLineNo">647</span>   */<a name="line.647"></a>
+<span class="sourceLineNo">648</span>  void checkFamilies(Collection&lt;byte[]&gt; families) throws NoSuchColumnFamilyException;<a name="line.648"></a>
+<span class="sourceLineNo">649</span><a name="line.649"></a>
+<span class="sourceLineNo">650</span>  /**<a name="line.650"></a>
+<span class="sourceLineNo">651</span>   * Check the collection of families for valid timestamps<a name="line.651"></a>
+<span class="sourceLineNo">652</span>   * @param familyMap<a name="line.652"></a>
+<span class="sourceLineNo">653</span>   * @param now current timestamp<a name="line.653"></a>
+<span class="sourceLineNo">654</span>   * @throws FailedSanityCheckException<a name="line.654"></a>
+<span class="sourceLineNo">655</span>   */<a name="line.655"></a>
+<span class="sourceLineNo">656</span>  void checkTimestamps(Map&lt;byte[], List&lt;Cell&gt;&gt; familyMap, long now)<a name="line.656"></a>
+<span class="sourceLineNo">657</span>      throws FailedSanityCheckException;<a name="line.657"></a>
 <span class="sourceLineNo">658</span><a name="line.658"></a>
 <span class="sourceLineNo">659</span>  /**<a name="line.659"></a>
-<span class="sourceLineNo">660</span>   * Set up correct timestamps in the KVs in Delete object.<a name="line.660"></a>
-<span class="sourceLineNo">661</span>   * &lt;p&gt;Caller should have the row and region locks.<a name="line.661"></a>
-<span class="sourceLineNo">662</span>   * @param mutation<a name="line.662"></a>
-<span class="sourceLineNo">663</span>   * @param familyCellMap<a name="line.663"></a>
-<span class="sourceLineNo">664</span>   * @param now<a name="line.664"></a>
-<span class="sourceLineNo">665</span>   * @throws IOException<a name="line.665"></a>
-<span class="sourceLineNo">666</span>   */<a name="line.666"></a>
-<span class="sourceLineNo">667</span>  void prepareDeleteTimestamps(Mutation mutation, Map&lt;byte[], List&lt;Cell&gt;&gt; familyCellMap,<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      byte[] now) throws IOException;<a name="line.668"></a>
-<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span>  /**<a name="line.670"></a>
-<span class="sourceLineNo">671</span>   * Replace any cell timestamps set to {@link org.apache.hadoop.hbase.HConstants#LATEST_TIMESTAMP}<a name="line.671"></a>
-<span class="sourceLineNo">672</span>   * provided current timestamp.<a name="line.672"></a>
-<span class="sourceLineNo">673</span>   * @param values<a name="line.673"></a>
-<span class="sourceLineNo">674</span>   * @param now<a name="line.674"></a>
-<span class="sourceLineNo">675</span>   */<a name="line.675"></a>
-<span class="sourceLineNo">676</span>  void updateCellTimestamps(final Iterable&lt;List&lt;Cell&gt;&gt; values, final byte[] now)<a name="line.676"></a>
-<span class="sourceLineNo">677</span>      throws IOException;<a name="line.677"></a>
-<span class="sourceLineNo">678</span><a name="line.678"></a>
-<span class="sourceLineNo">679</span>  ///////////////////////////////////////////////////////////////////////////<a name="line.679"></a>
-<span class="sourceLineNo">680</span>  // Flushes, compactions, splits, etc.<a name="line.680"></a>
-<span class="sourceLineNo">681</span>  // Wizards only, please<a name="line.681"></a>
-<span class="sourceLineNo">682</span><a name="line.682"></a>
-<span class="sourceLineNo">683</span>  interface FlushResult {<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    enum Result {<a name="line.684"></a>
-<span class="sourceLineNo">685</span>      FLUSHED_NO_COMPACTION_NEEDED,<a name="line.685"></a>
-<span class="sourceLineNo">686</span>      FLUSHED_COMPACTION_NEEDED,<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      // Special case where a flush didn't run because there's nothing in the memstores. Used when<a name="line.687"></a>
-<span class="sourceLineNo">688</span>      // bulk loading to know when we can still load even if a flush didn't happen.<a name="line.688"></a>
-<span class="sourceLineNo">689</span>      CANNOT_FLUSH_MEMSTORE_EMPTY,<a name="line.689"></a>
-<span class="sourceLineNo">690</span>      CANNOT_FLUSH<a name="line.690"></a>
-<span class="sourceLineNo">691</span>    }<a name="line.691"></a>
-<span class="sourceLineNo">692</span><a name="line.692"></a>
-<span class="sourceLineNo">693</span>    /** @return the detailed result code */<a name="line.693"></a>
-<span class="sourceLineNo">694</span>    Result getResult();<a name="line.694"></a>
-<span class="sourceLineNo">695</span><a name="line.695"></a>
-<span class="sourceLineNo">696</span>    /** @return true if the memstores were flushed, else false */<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    boolean isFlushSucceeded();<a name="line.697"></a>
-<span class="sourceLineNo">698</span><a name="line.698"></a>
-<span class="sourceLineNo">699</span>    /** @return True if the flush requested a compaction, else false */<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    boolean isCompactionNeeded();<a name="line.700"></a>
-<span class="sourceLineNo">701</span>  }<a name="line.701"></a>
+<span class="sourceLineNo">660</span>   * Prepare a delete for a row mutation processor<a name="line.660"></a>
+<span class="sourceLineNo">661</span>   * @param delete The passed delete is modified by this method. WARNING!<a name="line.661"></a>
+<span class="sourceLineNo">662</span>   * @throws IOException<a name="line.662"></a>
+<span class="sourceLineNo">663</span>   */<a name="line.663"></a>
+<span class="sourceLineNo">664</span>  void prepareDelete(Delete delete) throws IOException;<a name="line.664"></a>
+<span class="sourceLineNo">665</span><a name="line.665"></a>
+<span class="sourceLineNo">666</span>  /**<a name="line.666"></a>
+<span class="sourceLineNo">667</span>   * Set up correct timestamps in the KVs in Delete object.<a name="line.667"></a>
+<span class="sourceLineNo">668</span>   * &lt;p&gt;Caller should have the row and region locks.<a name="line.668"></a>
+<span class="sourceLineNo">669</span>   * @param mutation<a name="line.669"></a>
+<span class="sourceLineNo">670</span>   * @param familyCellMap<a name="line.670"></a>
+<span class="sourceLineNo">671</span>   * @param now<a name="line.671"></a>
+<span class="sourceLineNo">672</span>   * @throws IOException<a name="line.672"></a>
+<span class="sourceLineNo">673</span>   */<a name="line.673"></a>
+<span class="sourceLineNo">674</span>  void prepareDeleteTimestamps(Mutation mutation, Map&lt;byte[], List&lt;Cell&gt;&gt; familyCellMap,<a name="line.674"></a>
+<span class="sourceLineNo">675</span>      byte[] now) throws IOException;<a name="line.675"></a>
+<span class="sourceLineNo">676</span><a name="line.676"></a>
+<span class="sourceLineNo">677</span>  /**<a name="line.677"></a>
+<span class="sourceLineNo">678</span>   * Replace any cell timestamps set to {@link org.apache.hadoop.hbase.HConstants#LATEST_TIMESTAMP}<a name="line.678"></a>
+<span class="sourceLineNo">679</span>   * provided current timestamp.<a name="line.679"></a>
+<span class="sourceLineNo">680</span>   * @param values<a name="line.680"></a>
+<span class="sourceLineNo">681</span>   * @param now<a name="line.681"></a>
+<span class="sourceLineNo">682</span>   */<a name="line.682"></a>
+<span class="sourceLineNo">683</span>  void updateCellTimestamps(final Iterable&lt;List&lt;Cell&gt;&gt; values, final byte[] now)<a name="line.683"></a>
+<span class="sourceLineNo">684</span>      throws IOException;<a name="line.684"></a>
+<span class="sourceLineNo">685</span><a name="line.685"></a>
+<span class="sourceLineNo">686</span>  ///////////////////////////////////////////////////////////////////////////<a name="line.686"></a>
+<span class="sourceLineNo">687</span>  // Flushes, compactions, splits, etc.<a name="line.687"></a>
+<span class="sourceLineNo">688</span>  // Wizards only, please<a name="line.688"></a>
+<span class="sourceLineNo">689</span><a name="line.689"></a>
+<span class="sourceLineNo">690</span>  interface FlushResult {<a name="line.690"></a>
+<span class="sourceLineNo">691</span>    enum Result {<a name="line.691"></a>
+<span class="sourceLineNo">692</span>      FLUSHED_NO_COMPACTION_NEEDED,<a name="line.692"></a>
+<span class="sourceLineNo">693</span>      FLUSHED_COMPACTION_NEEDED,<a name="line.693"></a>
+<span class="sourceLineNo">694</span>      // Special case where a flush didn't run because there's nothing in the memstores. Used when<a name="line.694"></a>
+<span class="sourceLineNo">695</span>      // bulk loading to know when we can still load even if a flush didn't happen.<a name="line.695"></a>
+<span class="sourceLineNo">696</span>      CANNOT_FLUSH_MEMSTORE_EMPTY,<a name="line.696"></a>
+<span class="sourceLineNo">697</span>      CANNOT_FLUSH<a name="line.697"></a>
+<span class="sourceLineNo">698</span>    }<a name="line.698"></a>
+<span class="sourceLineNo">699</span><a name="line.699"></a>
+<span class="sourceLineNo">700</span>    /** @return the detailed result code */<a name="line.700"></a>
+<span class="sourceLineNo">701</span>    Result getResult();<a name="line.701"></a>
 <span class="sourceLineNo">702</span><a name="line.702"></a>
-<span class="sourceLineNo">703</span>  /**<a name="line.703"></a>
-<span class="sourceLineNo">704</span>   * Flush the cache.<a name="line.704"></a>
-<span class="sourceLineNo">705</span>   *<a name="line.705"></a>
-<span class="sourceLineNo">706</span>   * &lt;p&gt;When this method is called the cache will be flushed unless:<a name="line.706"></a>
-<span class="sourceLineNo">707</span>   * &lt;ol&gt;<a name="line.707"></a>
-<span class="sourceLineNo">708</span>   *   &lt;li&gt;the cache is empty&lt;/li&gt;<a name="line.708"></a>
-<span class="sourceLineNo">709</span>   *   &lt;li&gt;the region is closed.&lt;/li&gt;<a name="line.709"></a>
-<span class="sourceLineNo">710</span>   *   &lt;li&gt;a flush is already in progress&lt;/li&gt;<a name="line.710"></a>
-<span class="sourceLineNo">711</span>   *   &lt;li&gt;writes are disabled&lt;/li&gt;<a name="line.711"></a>
-<span class="sourceLineNo">712</span>   * &lt;/ol&gt;<a name="line.712"></a>
-<span class="sourceLineNo">713</span>   *<a name="line.713"></a>
-<span class="sourceLineNo">714</span>   * &lt;p&gt;This method may block for some time, so it should not be called from a<a name="line.714"></a>
-<span class="sourceLineNo">715</span>   * time-sensitive thread.<a name="line.715"></a>
-<span class="sourceLineNo">716</span>   * @param force whether we want to force a flush of all stores<a name="line.716"></a>
-<span class="sourceLineNo">717</span>   * @return FlushResult indicating whether the flush was successful or not and if<a name="line.717"></a>
-<span class="sourceLineNo">718</span>   * the region needs compacting<a name="line.718"></a>
-<span class="sourceLineNo">719</span>   *<a name="line.719"></a>
-<span class="sourceLineNo">720</span>   * @throws IOException general io exceptions<a name="line.720"></a>
-<span class="sourceLineNo">721</span>   * because a snapshot was not properly persisted.<a name="line.721"></a>
-<span class="sourceLineNo">722</span>   */<a name="line.722"></a>
-<span class="sourceLineNo">723</span>  FlushResult flush(boolean force) throws IOException;<a name="line.723"></a>
-<span class="sourceLineNo">724</span><a name="line.724"></a>
-<span class="sourceLineNo">725</span>  /**<a name="line.725"></a>
-<span class="sourceLineNo">726</span>   * Synchronously compact all stores in the region.<a name="line.726"></a>
-<span class="sourceLineNo">727</span>   * &lt;p&gt;This operation could block for a long time, so don't call it from a<a name="line.727"></a>
-<span class="sourceLineNo">728</span>   * time-sensitive thread.<a name="line.728"></a>
-<span class="sourceLineNo">729</span>   * &lt;p&gt;Note that no locks are taken to prevent possible conflicts between<a name="line.729"></a>
-<span class="sourceLineNo">730</span>   * compaction and splitting activities. The regionserver does not normally compact<a name="line.730"></a>
-<span class="sourceLineNo">731</span>   * and split in parallel. However by calling this method you may introduce<a name="line.731"></a>
-<span class="sourceLineNo">732</span>   * unexpected and unhandled concurrency. Don't do this unless you know what<a name="line.732"></a>
-<span class="sourceLineNo">733</span>   * you are doing.<a name="line.733"></a>
-<span class="sourceLineNo">734</span>   *<a name="line.734"></a>
-<span class="sourceLineNo">735</span>   * @param majorCompaction True to force a major compaction regardless of thresholds<a name="line.735"></a>
-<span class="sourceLineNo">736</span>   * @throws IOException<a name="line.736"></a>
-<span class="sourceLineNo">737</span>   */<a name="line.737"></a>
-<span class="sourceLineNo">738</span>  void compact(final boolean majorCompaction) throws IOException;<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span>  /**<a name="line.740"></a>
-<span class="sourceLineNo">741</span>   * Trigger major compaction on all stores in the region.<a name="line.741"></a>
-<span class="sourceLineNo">742</span>   * &lt;p&gt;<a name="line.742"></a>
-<span class="sourceLineNo">743</span>   * Compaction will be performed asynchronously to this call by the RegionServer's<a name="line.743"></a>
-<span class="sourceLineNo">744</span>   * CompactSplitThread. See also {@link Store#triggerMajorCompaction()}<a name="line.744"></a>
-<span class="sourceLineNo">745</span>   * @throws IOException<a name="line.745"></a>
-<span class="sourceLineNo">746</span>   */<a name="line.746"></a>
-<span class="sourceLineNo">747</span>  void triggerMajorCompaction() throws IOException;<a name="line.747"></a>
-<span class="sourceLineNo">748</span><a name="line.748"></a>
-<span class="sourceLineNo">749</span>  /**<a name="line.749"></a>
-<span class="sourceLineNo">750</span>   * @return if a given region is in compaction now.<a name="line.750"></a>
-<span class="sourceLineNo">751</span>   */<a name="line.751"></a>
-<span class="sourceLineNo">752</span>  CompactionState getCompactionState();<a name="line.752"></a>
-<span class="sourceLineNo">753</span><a name="line.753"></a>
-<span class="sourceLineNo">754</span>  /** Wait for all current flushes and compactions of the region to complete */<a name="line.

<TRUNCATED>

[22/33] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.FlushResultImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.FlushResultImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.FlushResultImpl.html
index f6a717e..a701ece 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.FlushResultImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.FlushResultImpl.html
@@ -7930,329 +7930,342 @@
 <span class="sourceLineNo">7922</span>      case DELETE:<a name="line.7922"></a>
 <span class="sourceLineNo">7923</span>      case BATCH_MUTATE:<a name="line.7923"></a>
 <span class="sourceLineNo">7924</span>      case COMPACT_REGION:<a name="line.7924"></a>
-<span class="sourceLineNo">7925</span>        // when a region is in recovering state, no read, split or merge is allowed<a name="line.7925"></a>
-<span class="sourceLineNo">7926</span>        if (isRecovering() &amp;&amp; (this.disallowWritesInRecovering ||<a name="line.7926"></a>
-<span class="sourceLineNo">7927</span>              (op != Operation.PUT &amp;&amp; op != Operation.DELETE &amp;&amp; op != Operation.BATCH_MUTATE))) {<a name="line.7927"></a>
-<span class="sourceLineNo">7928</span>          throw new RegionInRecoveryException(getRegionInfo().getRegionNameAsString() +<a name="line.7928"></a>
-<span class="sourceLineNo">7929</span>            " is recovering; cannot take reads");<a name="line.7929"></a>
-<span class="sourceLineNo">7930</span>        }<a name="line.7930"></a>
-<span class="sourceLineNo">7931</span>        break;<a name="line.7931"></a>
-<span class="sourceLineNo">7932</span>      default:<a name="line.7932"></a>
-<span class="sourceLineNo">7933</span>        break;<a name="line.7933"></a>
-<span class="sourceLineNo">7934</span>    }<a name="line.7934"></a>
-<span class="sourceLineNo">7935</span>    if (op == Operation.MERGE_REGION || op == Operation.SPLIT_REGION<a name="line.7935"></a>
-<span class="sourceLineNo">7936</span>        || op == Operation.COMPACT_REGION) {<a name="line.7936"></a>
-<span class="sourceLineNo">7937</span>      // split, merge or compact region doesn't need to check the closing/closed state or lock the<a name="line.7937"></a>
-<span class="sourceLineNo">7938</span>      // region<a name="line.7938"></a>
-<span class="sourceLineNo">7939</span>      return;<a name="line.7939"></a>
-<span class="sourceLineNo">7940</span>    }<a name="line.7940"></a>
-<span class="sourceLineNo">7941</span>    if (this.closing.get()) {<a name="line.7941"></a>
-<span class="sourceLineNo">7942</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.7942"></a>
-<span class="sourceLineNo">7943</span>    }<a name="line.7943"></a>
-<span class="sourceLineNo">7944</span>    lock(lock.readLock());<a name="line.7944"></a>
-<span class="sourceLineNo">7945</span>    if (this.closed.get()) {<a name="line.7945"></a>
-<span class="sourceLineNo">7946</span>      lock.readLock().unlock();<a name="line.7946"></a>
-<span class="sourceLineNo">7947</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.7947"></a>
-<span class="sourceLineNo">7948</span>    }<a name="line.7948"></a>
-<span class="sourceLineNo">7949</span>    try {<a name="line.7949"></a>
-<span class="sourceLineNo">7950</span>      if (coprocessorHost != null) {<a name="line.7950"></a>
-<span class="sourceLineNo">7951</span>        coprocessorHost.postStartRegionOperation(op);<a name="line.7951"></a>
-<span class="sourceLineNo">7952</span>      }<a name="line.7952"></a>
-<span class="sourceLineNo">7953</span>    } catch (Exception e) {<a name="line.7953"></a>
-<span class="sourceLineNo">7954</span>      lock.readLock().unlock();<a name="line.7954"></a>
-<span class="sourceLineNo">7955</span>      throw new IOException(e);<a name="line.7955"></a>
-<span class="sourceLineNo">7956</span>    }<a name="line.7956"></a>
-<span class="sourceLineNo">7957</span>  }<a name="line.7957"></a>
-<span class="sourceLineNo">7958</span><a name="line.7958"></a>
-<span class="sourceLineNo">7959</span>  @Override<a name="line.7959"></a>
-<span class="sourceLineNo">7960</span>  public void closeRegionOperation() throws IOException {<a name="line.7960"></a>
-<span class="sourceLineNo">7961</span>    closeRegionOperation(Operation.ANY);<a name="line.7961"></a>
-<span class="sourceLineNo">7962</span>  }<a name="line.7962"></a>
-<span class="sourceLineNo">7963</span><a name="line.7963"></a>
-<span class="sourceLineNo">7964</span>  /**<a name="line.7964"></a>
-<span class="sourceLineNo">7965</span>   * Closes the lock. This needs to be called in the finally block corresponding<a name="line.7965"></a>
-<span class="sourceLineNo">7966</span>   * to the try block of {@link #startRegionOperation(Operation)}<a name="line.7966"></a>
-<span class="sourceLineNo">7967</span>   * @throws IOException<a name="line.7967"></a>
-<span class="sourceLineNo">7968</span>   */<a name="line.7968"></a>
-<span class="sourceLineNo">7969</span>  public void closeRegionOperation(Operation operation) throws IOException {<a name="line.7969"></a>
-<span class="sourceLineNo">7970</span>    lock.readLock().unlock();<a name="line.7970"></a>
-<span class="sourceLineNo">7971</span>    if (coprocessorHost != null) {<a name="line.7971"></a>
-<span class="sourceLineNo">7972</span>      coprocessorHost.postCloseRegionOperation(operation);<a name="line.7972"></a>
-<span class="sourceLineNo">7973</span>    }<a name="line.7973"></a>
-<span class="sourceLineNo">7974</span>  }<a name="line.7974"></a>
-<span class="sourceLineNo">7975</span><a name="line.7975"></a>
-<span class="sourceLineNo">7976</span>  /**<a name="line.7976"></a>
-<span class="sourceLineNo">7977</span>   * This method needs to be called before any public call that reads or<a name="line.7977"></a>
-<span class="sourceLineNo">7978</span>   * modifies stores in bulk. It has to be called just before a try.<a name="line.7978"></a>
-<span class="sourceLineNo">7979</span>   * #closeBulkRegionOperation needs to be called in the try's finally block<a name="line.7979"></a>
-<span class="sourceLineNo">7980</span>   * Acquires a writelock and checks if the region is closing or closed.<a name="line.7980"></a>
-<span class="sourceLineNo">7981</span>   * @throws NotServingRegionException when the region is closing or closed<a name="line.7981"></a>
-<span class="sourceLineNo">7982</span>   * @throws RegionTooBusyException if failed to get the lock in time<a name="line.7982"></a>
-<span class="sourceLineNo">7983</span>   * @throws InterruptedIOException if interrupted while waiting for a lock<a name="line.7983"></a>
-<span class="sourceLineNo">7984</span>   */<a name="line.7984"></a>
-<span class="sourceLineNo">7985</span>  private void startBulkRegionOperation(boolean writeLockNeeded)<a name="line.7985"></a>
-<span class="sourceLineNo">7986</span>      throws NotServingRegionException, RegionTooBusyException, InterruptedIOException {<a name="line.7986"></a>
-<span class="sourceLineNo">7987</span>    if (this.closing.get()) {<a name="line.7987"></a>
-<span class="sourceLineNo">7988</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.7988"></a>
-<span class="sourceLineNo">7989</span>    }<a name="line.7989"></a>
-<span class="sourceLineNo">7990</span>    if (writeLockNeeded) lock(lock.writeLock());<a name="line.7990"></a>
-<span class="sourceLineNo">7991</span>    else lock(lock.readLock());<a name="line.7991"></a>
-<span class="sourceLineNo">7992</span>    if (this.closed.get()) {<a name="line.7992"></a>
-<span class="sourceLineNo">7993</span>      if (writeLockNeeded) lock.writeLock().unlock();<a name="line.7993"></a>
-<span class="sourceLineNo">7994</span>      else lock.readLock().unlock();<a name="line.7994"></a>
-<span class="sourceLineNo">7995</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.7995"></a>
-<span class="sourceLineNo">7996</span>    }<a name="line.7996"></a>
-<span class="sourceLineNo">7997</span>  }<a name="line.7997"></a>
-<span class="sourceLineNo">7998</span><a name="line.7998"></a>
-<span class="sourceLineNo">7999</span>  /**<a name="line.7999"></a>
-<span class="sourceLineNo">8000</span>   * Closes the lock. This needs to be called in the finally block corresponding<a name="line.8000"></a>
-<span class="sourceLineNo">8001</span>   * to the try block of #startRegionOperation<a name="line.8001"></a>
-<span class="sourceLineNo">8002</span>   */<a name="line.8002"></a>
-<span class="sourceLineNo">8003</span>  private void closeBulkRegionOperation(){<a name="line.8003"></a>
-<span class="sourceLineNo">8004</span>    if (lock.writeLock().isHeldByCurrentThread()) lock.writeLock().unlock();<a name="line.8004"></a>
-<span class="sourceLineNo">8005</span>    else lock.readLock().unlock();<a name="line.8005"></a>
-<span class="sourceLineNo">8006</span>  }<a name="line.8006"></a>
-<span class="sourceLineNo">8007</span><a name="line.8007"></a>
-<span class="sourceLineNo">8008</span>  /**<a name="line.8008"></a>
-<span class="sourceLineNo">8009</span>   * Update LongAdders for number of puts without wal and the size of possible data loss.<a name="line.8009"></a>
-<span class="sourceLineNo">8010</span>   * These information are exposed by the region server metrics.<a name="line.8010"></a>
-<span class="sourceLineNo">8011</span>   */<a name="line.8011"></a>
-<span class="sourceLineNo">8012</span>  private void recordMutationWithoutWal(final Map&lt;byte [], List&lt;Cell&gt;&gt; familyMap) {<a name="line.8012"></a>
-<span class="sourceLineNo">8013</span>    numMutationsWithoutWAL.increment();<a name="line.8013"></a>
-<span class="sourceLineNo">8014</span>    if (numMutationsWithoutWAL.sum() &lt;= 1) {<a name="line.8014"></a>
-<span class="sourceLineNo">8015</span>      LOG.info("writing data to region " + this +<a name="line.8015"></a>
-<span class="sourceLineNo">8016</span>               " with WAL disabled. Data may be lost in the event of a crash.");<a name="line.8016"></a>
-<span class="sourceLineNo">8017</span>    }<a name="line.8017"></a>
-<span class="sourceLineNo">8018</span><a name="line.8018"></a>
-<span class="sourceLineNo">8019</span>    long mutationSize = 0;<a name="line.8019"></a>
-<span class="sourceLineNo">8020</span>    for (List&lt;Cell&gt; cells: familyMap.values()) {<a name="line.8020"></a>
-<span class="sourceLineNo">8021</span>      assert cells instanceof RandomAccess;<a name="line.8021"></a>
-<span class="sourceLineNo">8022</span>      int listSize = cells.size();<a name="line.8022"></a>
-<span class="sourceLineNo">8023</span>      for (int i=0; i &lt; listSize; i++) {<a name="line.8023"></a>
-<span class="sourceLineNo">8024</span>        Cell cell = cells.get(i);<a name="line.8024"></a>
-<span class="sourceLineNo">8025</span>        mutationSize += KeyValueUtil.length(cell);<a name="line.8025"></a>
-<span class="sourceLineNo">8026</span>      }<a name="line.8026"></a>
-<span class="sourceLineNo">8027</span>    }<a name="line.8027"></a>
-<span class="sourceLineNo">8028</span><a name="line.8028"></a>
-<span class="sourceLineNo">8029</span>    dataInMemoryWithoutWAL.add(mutationSize);<a name="line.8029"></a>
-<span class="sourceLineNo">8030</span>  }<a name="line.8030"></a>
+<span class="sourceLineNo">7925</span>      case SNAPSHOT:<a name="line.7925"></a>
+<span class="sourceLineNo">7926</span>        // when a region is in recovering state, no read, split, merge or snapshot is allowed<a name="line.7926"></a>
+<span class="sourceLineNo">7927</span>        if (isRecovering() &amp;&amp; (this.disallowWritesInRecovering ||<a name="line.7927"></a>
+<span class="sourceLineNo">7928</span>              (op != Operation.PUT &amp;&amp; op != Operation.DELETE &amp;&amp; op != Operation.BATCH_MUTATE))) {<a name="line.7928"></a>
+<span class="sourceLineNo">7929</span>          throw new RegionInRecoveryException(getRegionInfo().getRegionNameAsString() +<a name="line.7929"></a>
+<span class="sourceLineNo">7930</span>            " is recovering; cannot take reads");<a name="line.7930"></a>
+<span class="sourceLineNo">7931</span>        }<a name="line.7931"></a>
+<span class="sourceLineNo">7932</span>        break;<a name="line.7932"></a>
+<span class="sourceLineNo">7933</span>      default:<a name="line.7933"></a>
+<span class="sourceLineNo">7934</span>        break;<a name="line.7934"></a>
+<span class="sourceLineNo">7935</span>    }<a name="line.7935"></a>
+<span class="sourceLineNo">7936</span>    if (op == Operation.MERGE_REGION || op == Operation.SPLIT_REGION<a name="line.7936"></a>
+<span class="sourceLineNo">7937</span>        || op == Operation.COMPACT_REGION) {<a name="line.7937"></a>
+<span class="sourceLineNo">7938</span>      // split, merge or compact region doesn't need to check the closing/closed state or lock the<a name="line.7938"></a>
+<span class="sourceLineNo">7939</span>      // region<a name="line.7939"></a>
+<span class="sourceLineNo">7940</span>      return;<a name="line.7940"></a>
+<span class="sourceLineNo">7941</span>    }<a name="line.7941"></a>
+<span class="sourceLineNo">7942</span>    if (this.closing.get()) {<a name="line.7942"></a>
+<span class="sourceLineNo">7943</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.7943"></a>
+<span class="sourceLineNo">7944</span>    }<a name="line.7944"></a>
+<span class="sourceLineNo">7945</span>    lock(lock.readLock());<a name="line.7945"></a>
+<span class="sourceLineNo">7946</span>    if (this.closed.get()) {<a name="line.7946"></a>
+<span class="sourceLineNo">7947</span>      lock.readLock().unlock();<a name="line.7947"></a>
+<span class="sourceLineNo">7948</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.7948"></a>
+<span class="sourceLineNo">7949</span>    }<a name="line.7949"></a>
+<span class="sourceLineNo">7950</span>    // The unit for snapshot is a region. So, all stores for this region must be<a name="line.7950"></a>
+<span class="sourceLineNo">7951</span>    // prepared for snapshot operation before proceeding.<a name="line.7951"></a>
+<span class="sourceLineNo">7952</span>    if (op == Operation.SNAPSHOT) {<a name="line.7952"></a>
+<span class="sourceLineNo">7953</span>      for (Store store : stores.values()) {<a name="line.7953"></a>
+<span class="sourceLineNo">7954</span>        if (store instanceof HStore) {<a name="line.7954"></a>
+<span class="sourceLineNo">7955</span>          ((HStore)store).preSnapshotOperation();<a name="line.7955"></a>
+<span class="sourceLineNo">7956</span>        }<a name="line.7956"></a>
+<span class="sourceLineNo">7957</span>      }<a name="line.7957"></a>
+<span class="sourceLineNo">7958</span>    }<a name="line.7958"></a>
+<span class="sourceLineNo">7959</span>    try {<a name="line.7959"></a>
+<span class="sourceLineNo">7960</span>      if (coprocessorHost != null) {<a name="line.7960"></a>
+<span class="sourceLineNo">7961</span>        coprocessorHost.postStartRegionOperation(op);<a name="line.7961"></a>
+<span class="sourceLineNo">7962</span>      }<a name="line.7962"></a>
+<span class="sourceLineNo">7963</span>    } catch (Exception e) {<a name="line.7963"></a>
+<span class="sourceLineNo">7964</span>      lock.readLock().unlock();<a name="line.7964"></a>
+<span class="sourceLineNo">7965</span>      throw new IOException(e);<a name="line.7965"></a>
+<span class="sourceLineNo">7966</span>    }<a name="line.7966"></a>
+<span class="sourceLineNo">7967</span>  }<a name="line.7967"></a>
+<span class="sourceLineNo">7968</span><a name="line.7968"></a>
+<span class="sourceLineNo">7969</span>  @Override<a name="line.7969"></a>
+<span class="sourceLineNo">7970</span>  public void closeRegionOperation() throws IOException {<a name="line.7970"></a>
+<span class="sourceLineNo">7971</span>    closeRegionOperation(Operation.ANY);<a name="line.7971"></a>
+<span class="sourceLineNo">7972</span>  }<a name="line.7972"></a>
+<span class="sourceLineNo">7973</span><a name="line.7973"></a>
+<span class="sourceLineNo">7974</span>  @Override<a name="line.7974"></a>
+<span class="sourceLineNo">7975</span>  public void closeRegionOperation(Operation operation) throws IOException {<a name="line.7975"></a>
+<span class="sourceLineNo">7976</span>    if (operation == Operation.SNAPSHOT) {<a name="line.7976"></a>
+<span class="sourceLineNo">7977</span>      for (Store store: stores.values()) {<a name="line.7977"></a>
+<span class="sourceLineNo">7978</span>        if (store instanceof HStore) {<a name="line.7978"></a>
+<span class="sourceLineNo">7979</span>          ((HStore)store).postSnapshotOperation();<a name="line.7979"></a>
+<span class="sourceLineNo">7980</span>        }<a name="line.7980"></a>
+<span class="sourceLineNo">7981</span>      }<a name="line.7981"></a>
+<span class="sourceLineNo">7982</span>    }<a name="line.7982"></a>
+<span class="sourceLineNo">7983</span>    lock.readLock().unlock();<a name="line.7983"></a>
+<span class="sourceLineNo">7984</span>    if (coprocessorHost != null) {<a name="line.7984"></a>
+<span class="sourceLineNo">7985</span>      coprocessorHost.postCloseRegionOperation(operation);<a name="line.7985"></a>
+<span class="sourceLineNo">7986</span>    }<a name="line.7986"></a>
+<span class="sourceLineNo">7987</span>  }<a name="line.7987"></a>
+<span class="sourceLineNo">7988</span><a name="line.7988"></a>
+<span class="sourceLineNo">7989</span>  /**<a name="line.7989"></a>
+<span class="sourceLineNo">7990</span>   * This method needs to be called before any public call that reads or<a name="line.7990"></a>
+<span class="sourceLineNo">7991</span>   * modifies stores in bulk. It has to be called just before a try.<a name="line.7991"></a>
+<span class="sourceLineNo">7992</span>   * #closeBulkRegionOperation needs to be called in the try's finally block<a name="line.7992"></a>
+<span class="sourceLineNo">7993</span>   * Acquires a writelock and checks if the region is closing or closed.<a name="line.7993"></a>
+<span class="sourceLineNo">7994</span>   * @throws NotServingRegionException when the region is closing or closed<a name="line.7994"></a>
+<span class="sourceLineNo">7995</span>   * @throws RegionTooBusyException if failed to get the lock in time<a name="line.7995"></a>
+<span class="sourceLineNo">7996</span>   * @throws InterruptedIOException if interrupted while waiting for a lock<a name="line.7996"></a>
+<span class="sourceLineNo">7997</span>   */<a name="line.7997"></a>
+<span class="sourceLineNo">7998</span>  private void startBulkRegionOperation(boolean writeLockNeeded)<a name="line.7998"></a>
+<span class="sourceLineNo">7999</span>      throws NotServingRegionException, RegionTooBusyException, InterruptedIOException {<a name="line.7999"></a>
+<span class="sourceLineNo">8000</span>    if (this.closing.get()) {<a name="line.8000"></a>
+<span class="sourceLineNo">8001</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.8001"></a>
+<span class="sourceLineNo">8002</span>    }<a name="line.8002"></a>
+<span class="sourceLineNo">8003</span>    if (writeLockNeeded) lock(lock.writeLock());<a name="line.8003"></a>
+<span class="sourceLineNo">8004</span>    else lock(lock.readLock());<a name="line.8004"></a>
+<span class="sourceLineNo">8005</span>    if (this.closed.get()) {<a name="line.8005"></a>
+<span class="sourceLineNo">8006</span>      if (writeLockNeeded) lock.writeLock().unlock();<a name="line.8006"></a>
+<span class="sourceLineNo">8007</span>      else lock.readLock().unlock();<a name="line.8007"></a>
+<span class="sourceLineNo">8008</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.8008"></a>
+<span class="sourceLineNo">8009</span>    }<a name="line.8009"></a>
+<span class="sourceLineNo">8010</span>  }<a name="line.8010"></a>
+<span class="sourceLineNo">8011</span><a name="line.8011"></a>
+<span class="sourceLineNo">8012</span>  /**<a name="line.8012"></a>
+<span class="sourceLineNo">8013</span>   * Closes the lock. This needs to be called in the finally block corresponding<a name="line.8013"></a>
+<span class="sourceLineNo">8014</span>   * to the try block of #startRegionOperation<a name="line.8014"></a>
+<span class="sourceLineNo">8015</span>   */<a name="line.8015"></a>
+<span class="sourceLineNo">8016</span>  private void closeBulkRegionOperation(){<a name="line.8016"></a>
+<span class="sourceLineNo">8017</span>    if (lock.writeLock().isHeldByCurrentThread()) lock.writeLock().unlock();<a name="line.8017"></a>
+<span class="sourceLineNo">8018</span>    else lock.readLock().unlock();<a name="line.8018"></a>
+<span class="sourceLineNo">8019</span>  }<a name="line.8019"></a>
+<span class="sourceLineNo">8020</span><a name="line.8020"></a>
+<span class="sourceLineNo">8021</span>  /**<a name="line.8021"></a>
+<span class="sourceLineNo">8022</span>   * Update LongAdders for number of puts without wal and the size of possible data loss.<a name="line.8022"></a>
+<span class="sourceLineNo">8023</span>   * These information are exposed by the region server metrics.<a name="line.8023"></a>
+<span class="sourceLineNo">8024</span>   */<a name="line.8024"></a>
+<span class="sourceLineNo">8025</span>  private void recordMutationWithoutWal(final Map&lt;byte [], List&lt;Cell&gt;&gt; familyMap) {<a name="line.8025"></a>
+<span class="sourceLineNo">8026</span>    numMutationsWithoutWAL.increment();<a name="line.8026"></a>
+<span class="sourceLineNo">8027</span>    if (numMutationsWithoutWAL.sum() &lt;= 1) {<a name="line.8027"></a>
+<span class="sourceLineNo">8028</span>      LOG.info("writing data to region " + this +<a name="line.8028"></a>
+<span class="sourceLineNo">8029</span>               " with WAL disabled. Data may be lost in the event of a crash.");<a name="line.8029"></a>
+<span class="sourceLineNo">8030</span>    }<a name="line.8030"></a>
 <span class="sourceLineNo">8031</span><a name="line.8031"></a>
-<span class="sourceLineNo">8032</span>  private void lock(final Lock lock)<a name="line.8032"></a>
-<span class="sourceLineNo">8033</span>      throws RegionTooBusyException, InterruptedIOException {<a name="line.8033"></a>
-<span class="sourceLineNo">8034</span>    lock(lock, 1);<a name="line.8034"></a>
-<span class="sourceLineNo">8035</span>  }<a name="line.8035"></a>
-<span class="sourceLineNo">8036</span><a name="line.8036"></a>
-<span class="sourceLineNo">8037</span>  /**<a name="line.8037"></a>
-<span class="sourceLineNo">8038</span>   * Try to acquire a lock.  Throw RegionTooBusyException<a name="line.8038"></a>
-<span class="sourceLineNo">8039</span>   * if failed to get the lock in time. Throw InterruptedIOException<a name="line.8039"></a>
-<span class="sourceLineNo">8040</span>   * if interrupted while waiting for the lock.<a name="line.8040"></a>
-<span class="sourceLineNo">8041</span>   */<a name="line.8041"></a>
-<span class="sourceLineNo">8042</span>  private void lock(final Lock lock, final int multiplier)<a name="line.8042"></a>
-<span class="sourceLineNo">8043</span>      throws RegionTooBusyException, InterruptedIOException {<a name="line.8043"></a>
-<span class="sourceLineNo">8044</span>    try {<a name="line.8044"></a>
-<span class="sourceLineNo">8045</span>      final long waitTime = Math.min(maxBusyWaitDuration,<a name="line.8045"></a>
-<span class="sourceLineNo">8046</span>          busyWaitDuration * Math.min(multiplier, maxBusyWaitMultiplier));<a name="line.8046"></a>
-<span class="sourceLineNo">8047</span>      if (!lock.tryLock(waitTime, TimeUnit.MILLISECONDS)) {<a name="line.8047"></a>
-<span class="sourceLineNo">8048</span>        throw new RegionTooBusyException(<a name="line.8048"></a>
-<span class="sourceLineNo">8049</span>            "failed to get a lock in " + waitTime + " ms. " +<a name="line.8049"></a>
-<span class="sourceLineNo">8050</span>                "regionName=" + (this.getRegionInfo() == null ? "unknown" :<a name="line.8050"></a>
-<span class="sourceLineNo">8051</span>                this.getRegionInfo().getRegionNameAsString()) +<a name="line.8051"></a>
-<span class="sourceLineNo">8052</span>                ", server=" + (this.getRegionServerServices() == null ? "unknown" :<a name="line.8052"></a>
-<span class="sourceLineNo">8053</span>                this.getRegionServerServices().getServerName()));<a name="line.8053"></a>
-<span class="sourceLineNo">8054</span>      }<a name="line.8054"></a>
-<span class="sourceLineNo">8055</span>    } catch (InterruptedException ie) {<a name="line.8055"></a>
-<span class="sourceLineNo">8056</span>      LOG.info("Interrupted while waiting for a lock");<a name="line.8056"></a>
-<span class="sourceLineNo">8057</span>      InterruptedIOException iie = new InterruptedIOException();<a name="line.8057"></a>
-<span class="sourceLineNo">8058</span>      iie.initCause(ie);<a name="line.8058"></a>
-<span class="sourceLineNo">8059</span>      throw iie;<a name="line.8059"></a>
-<span class="sourceLineNo">8060</span>    }<a name="line.8060"></a>
-<span class="sourceLineNo">8061</span>  }<a name="line.8061"></a>
-<span class="sourceLineNo">8062</span><a name="line.8062"></a>
-<span class="sourceLineNo">8063</span>  /**<a name="line.8063"></a>
-<span class="sourceLineNo">8064</span>   * Calls sync with the given transaction ID<a name="line.8064"></a>
-<span class="sourceLineNo">8065</span>   * @param txid should sync up to which transaction<a name="line.8065"></a>
-<span class="sourceLineNo">8066</span>   * @throws IOException If anything goes wrong with DFS<a name="line.8066"></a>
-<span class="sourceLineNo">8067</span>   */<a name="line.8067"></a>
-<span class="sourceLineNo">8068</span>  private void sync(long txid, Durability durability) throws IOException {<a name="line.8068"></a>
-<span class="sourceLineNo">8069</span>    if (this.getRegionInfo().isMetaRegion()) {<a name="line.8069"></a>
-<span class="sourceLineNo">8070</span>      this.wal.sync(txid);<a name="line.8070"></a>
-<span class="sourceLineNo">8071</span>    } else {<a name="line.8071"></a>
-<span class="sourceLineNo">8072</span>      switch(durability) {<a name="line.8072"></a>
-<span class="sourceLineNo">8073</span>      case USE_DEFAULT:<a name="line.8073"></a>
-<span class="sourceLineNo">8074</span>        // do what table defaults to<a name="line.8074"></a>
-<span class="sourceLineNo">8075</span>        if (shouldSyncWAL()) {<a name="line.8075"></a>
-<span class="sourceLineNo">8076</span>          this.wal.sync(txid);<a name="line.8076"></a>
-<span class="sourceLineNo">8077</span>        }<a name="line.8077"></a>
-<span class="sourceLineNo">8078</span>        break;<a name="line.8078"></a>
-<span class="sourceLineNo">8079</span>      case SKIP_WAL:<a name="line.8079"></a>
-<span class="sourceLineNo">8080</span>        // nothing do to<a name="line.8080"></a>
-<span class="sourceLineNo">8081</span>        break;<a name="line.8081"></a>
-<span class="sourceLineNo">8082</span>      case ASYNC_WAL:<a name="line.8082"></a>
-<span class="sourceLineNo">8083</span>        // nothing do to<a name="line.8083"></a>
-<span class="sourceLineNo">8084</span>        break;<a name="line.8084"></a>
-<span class="sourceLineNo">8085</span>      case SYNC_WAL:<a name="line.8085"></a>
-<span class="sourceLineNo">8086</span>      case FSYNC_WAL:<a name="line.8086"></a>
-<span class="sourceLineNo">8087</span>        // sync the WAL edit (SYNC and FSYNC treated the same for now)<a name="line.8087"></a>
-<span class="sourceLineNo">8088</span>        this.wal.sync(txid);<a name="line.8088"></a>
-<span class="sourceLineNo">8089</span>        break;<a name="line.8089"></a>
-<span class="sourceLineNo">8090</span>      default:<a name="line.8090"></a>
-<span class="sourceLineNo">8091</span>        throw new RuntimeException("Unknown durability " + durability);<a name="line.8091"></a>
-<span class="sourceLineNo">8092</span>      }<a name="line.8092"></a>
-<span class="sourceLineNo">8093</span>    }<a name="line.8093"></a>
-<span class="sourceLineNo">8094</span>  }<a name="line.8094"></a>
-<span class="sourceLineNo">8095</span><a name="line.8095"></a>
-<span class="sourceLineNo">8096</span>  /**<a name="line.8096"></a>
-<span class="sourceLineNo">8097</span>   * Check whether we should sync the wal from the table's durability settings<a name="line.8097"></a>
-<span class="sourceLineNo">8098</span>   */<a name="line.8098"></a>
-<span class="sourceLineNo">8099</span>  private boolean shouldSyncWAL() {<a name="line.8099"></a>
-<span class="sourceLineNo">8100</span>    return durability.ordinal() &gt;  Durability.ASYNC_WAL.ordinal();<a name="line.8100"></a>
-<span class="sourceLineNo">8101</span>  }<a name="line.8101"></a>
-<span class="sourceLineNo">8102</span><a name="line.8102"></a>
-<span class="sourceLineNo">8103</span>  /**<a name="line.8103"></a>
-<span class="sourceLineNo">8104</span>   * A mocked list implementation - discards all updates.<a name="line.8104"></a>
-<span class="sourceLineNo">8105</span>   */<a name="line.8105"></a>
-<span class="sourceLineNo">8106</span>  private static final List&lt;Cell&gt; MOCKED_LIST = new AbstractList&lt;Cell&gt;() {<a name="line.8106"></a>
-<span class="sourceLineNo">8107</span><a name="line.8107"></a>
-<span class="sourceLineNo">8108</span>    @Override<a name="line.8108"></a>
-<span class="sourceLineNo">8109</span>    public void add(int index, Cell element) {<a name="line.8109"></a>
-<span class="sourceLineNo">8110</span>      // do nothing<a name="line.8110"></a>
-<span class="sourceLineNo">8111</span>    }<a name="line.8111"></a>
-<span class="sourceLineNo">8112</span><a name="line.8112"></a>
-<span class="sourceLineNo">8113</span>    @Override<a name="line.8113"></a>
-<span class="sourceLineNo">8114</span>    public boolean addAll(int index, Collection&lt;? extends Cell&gt; c) {<a name="line.8114"></a>
-<span class="sourceLineNo">8115</span>      return false; // this list is never changed as a result of an update<a name="line.8115"></a>
-<span class="sourceLineNo">8116</span>    }<a name="line.8116"></a>
-<span class="sourceLineNo">8117</span><a name="line.8117"></a>
-<span class="sourceLineNo">8118</span>    @Override<a name="line.8118"></a>
-<span class="sourceLineNo">8119</span>    public KeyValue get(int index) {<a name="line.8119"></a>
-<span class="sourceLineNo">8120</span>      throw new UnsupportedOperationException();<a name="line.8120"></a>
-<span class="sourceLineNo">8121</span>    }<a name="line.8121"></a>
-<span class="sourceLineNo">8122</span><a name="line.8122"></a>
-<span class="sourceLineNo">8123</span>    @Override<a name="line.8123"></a>
-<span class="sourceLineNo">8124</span>    public int size() {<a name="line.8124"></a>
-<span class="sourceLineNo">8125</span>      return 0;<a name="line.8125"></a>
-<span class="sourceLineNo">8126</span>    }<a name="line.8126"></a>
-<span class="sourceLineNo">8127</span>  };<a name="line.8127"></a>
-<span class="sourceLineNo">8128</span><a name="line.8128"></a>
-<span class="sourceLineNo">8129</span>  @Override<a name="line.8129"></a>
-<span class="sourceLineNo">8130</span>  public long getOpenSeqNum() {<a name="line.8130"></a>
-<span class="sourceLineNo">8131</span>    return this.openSeqNum;<a name="line.8131"></a>
-<span class="sourceLineNo">8132</span>  }<a name="line.8132"></a>
-<span class="sourceLineNo">8133</span><a name="line.8133"></a>
-<span class="sourceLineNo">8134</span>  @Override<a name="line.8134"></a>
-<span class="sourceLineNo">8135</span>  public Map&lt;byte[], Long&gt; getMaxStoreSeqId() {<a name="line.8135"></a>
-<span class="sourceLineNo">8136</span>    return this.maxSeqIdInStores;<a name="line.8136"></a>
-<span class="sourceLineNo">8137</span>  }<a name="line.8137"></a>
-<span class="sourceLineNo">8138</span><a name="line.8138"></a>
-<span class="sourceLineNo">8139</span>  @Override<a name="line.8139"></a>
-<span class="sourceLineNo">8140</span>  public long getOldestSeqIdOfStore(byte[] familyName) {<a name="line.8140"></a>
-<span class="sourceLineNo">8141</span>    return wal.getEarliestMemstoreSeqNum(getRegionInfo().getEncodedNameAsBytes(), familyName);<a name="line.8141"></a>
-<span class="sourceLineNo">8142</span>  }<a name="line.8142"></a>
-<span class="sourceLineNo">8143</span><a name="line.8143"></a>
-<span class="sourceLineNo">8144</span>  @Override<a name="line.8144"></a>
-<span class="sourceLineNo">8145</span>  public CompactionState getCompactionState() {<a name="line.8145"></a>
-<span class="sourceLineNo">8146</span>    boolean hasMajor = majorInProgress.get() &gt; 0, hasMinor = minorInProgress.get() &gt; 0;<a name="line.8146"></a>
-<span class="sourceLineNo">8147</span>    return (hasMajor ? (hasMinor ? CompactionState.MAJOR_AND_MINOR : CompactionState.MAJOR)<a name="line.8147"></a>
-<span class="sourceLineNo">8148</span>        : (hasMinor ? CompactionState.MINOR : CompactionState.NONE));<a name="line.8148"></a>
-<span class="sourceLineNo">8149</span>  }<a name="line.8149"></a>
-<span class="sourceLineNo">8150</span><a name="line.8150"></a>
-<span class="sourceLineNo">8151</span>  public void reportCompactionRequestStart(boolean isMajor){<a name="line.8151"></a>
-<span class="sourceLineNo">8152</span>    (isMajor ? majorInProgress : minorInProgress).incrementAndGet();<a name="line.8152"></a>
-<span class="sourceLineNo">8153</span>  }<a name="line.8153"></a>
-<span class="sourceLineNo">8154</span><a name="line.8154"></a>
-<span class="sourceLineNo">8155</span>  public void reportCompactionRequestEnd(boolean isMajor, int numFiles, long filesSizeCompacted) {<a name="line.8155"></a>
-<span class="sourceLineNo">8156</span>    int newValue = (isMajor ? majorInProgress : minorInProgress).decrementAndGet();<a name="line.8156"></a>
-<span class="sourceLineNo">8157</span><a name="line.8157"></a>
-<span class="sourceLineNo">8158</span>    // metrics<a name="line.8158"></a>
-<span class="sourceLineNo">8159</span>    compactionsFinished.incrementAndGet();<a name="line.8159"></a>
-<span class="sourceLineNo">8160</span>    compactionNumFilesCompacted.addAndGet(numFiles);<a name="line.8160"></a>
-<span class="sourceLineNo">8161</span>    compactionNumBytesCompacted.addAndGet(filesSizeCompacted);<a name="line.8161"></a>
-<span class="sourceLineNo">8162</span><a name="line.8162"></a>
-<span class="sourceLineNo">8163</span>    assert newValue &gt;= 0;<a name="line.8163"></a>
-<span class="sourceLineNo">8164</span>  }<a name="line.8164"></a>
-<span class="sourceLineNo">8165</span><a name="line.8165"></a>
-<span class="sourceLineNo">8166</span>  public void reportCompactionRequestFailure() {<a name="line.8166"></a>
-<span class="sourceLineNo">8167</span>    compactionsFailed.incrementAndGet();<a name="line.8167"></a>
-<span class="sourceLineNo">8168</span>  }<a name="line.8168"></a>
-<span class="sourceLineNo">8169</span><a name="line.8169"></a>
-<span class="sourceLineNo">8170</span>  public void incrementCompactionsQueuedCount() {<a name="line.8170"></a>
-<span class="sourceLineNo">8171</span>    compactionsQueued.incrementAndGet();<a name="line.8171"></a>
-<span class="sourceLineNo">8172</span>  }<a name="line.8172"></a>
-<span class="sourceLineNo">8173</span><a name="line.8173"></a>
-<span class="sourceLineNo">8174</span>  public void decrementCompactionsQueuedCount() {<a name="line.8174"></a>
-<span class="sourceLineNo">8175</span>    compactionsQueued.decrementAndGet();<a name="line.8175"></a>
-<span class="sourceLineNo">8176</span>  }<a name="line.8176"></a>
-<span class="sourceLineNo">8177</span><a name="line.8177"></a>
-<span class="sourceLineNo">8178</span>  public void incrementFlushesQueuedCount() {<a name="line.8178"></a>
-<span class="sourceLineNo">8179</span>    flushesQueued.incrementAndGet();<a name="line.8179"></a>
-<span class="sourceLineNo">8180</span>  }<a name="line.8180"></a>
-<span class="sourceLineNo">8181</span><a name="line.8181"></a>
-<span class="sourceLineNo">8182</span>  @VisibleForTesting<a name="line.8182"></a>
-<span class="sourceLineNo">8183</span>  public long getReadPoint() {<a name="line.8183"></a>
-<span class="sourceLineNo">8184</span>    return getReadPoint(IsolationLevel.READ_COMMITTED);<a name="line.8184"></a>
+<span class="sourceLineNo">8032</span>    long mutationSize = 0;<a name="line.8032"></a>
+<span class="sourceLineNo">8033</span>    for (List&lt;Cell&gt; cells: familyMap.values()) {<a name="line.8033"></a>
+<span class="sourceLineNo">8034</span>      assert cells instanceof RandomAccess;<a name="line.8034"></a>
+<span class="sourceLineNo">8035</span>      int listSize = cells.size();<a name="line.8035"></a>
+<span class="sourceLineNo">8036</span>      for (int i=0; i &lt; listSize; i++) {<a name="line.8036"></a>
+<span class="sourceLineNo">8037</span>        Cell cell = cells.get(i);<a name="line.8037"></a>
+<span class="sourceLineNo">8038</span>        mutationSize += KeyValueUtil.length(cell);<a name="line.8038"></a>
+<span class="sourceLineNo">8039</span>      }<a name="line.8039"></a>
+<span class="sourceLineNo">8040</span>    }<a name="line.8040"></a>
+<span class="sourceLineNo">8041</span><a name="line.8041"></a>
+<span class="sourceLineNo">8042</span>    dataInMemoryWithoutWAL.add(mutationSize);<a name="line.8042"></a>
+<span class="sourceLineNo">8043</span>  }<a name="line.8043"></a>
+<span class="sourceLineNo">8044</span><a name="line.8044"></a>
+<span class="sourceLineNo">8045</span>  private void lock(final Lock lock)<a name="line.8045"></a>
+<span class="sourceLineNo">8046</span>      throws RegionTooBusyException, InterruptedIOException {<a name="line.8046"></a>
+<span class="sourceLineNo">8047</span>    lock(lock, 1);<a name="line.8047"></a>
+<span class="sourceLineNo">8048</span>  }<a name="line.8048"></a>
+<span class="sourceLineNo">8049</span><a name="line.8049"></a>
+<span class="sourceLineNo">8050</span>  /**<a name="line.8050"></a>
+<span class="sourceLineNo">8051</span>   * Try to acquire a lock.  Throw RegionTooBusyException<a name="line.8051"></a>
+<span class="sourceLineNo">8052</span>   * if failed to get the lock in time. Throw InterruptedIOException<a name="line.8052"></a>
+<span class="sourceLineNo">8053</span>   * if interrupted while waiting for the lock.<a name="line.8053"></a>
+<span class="sourceLineNo">8054</span>   */<a name="line.8054"></a>
+<span class="sourceLineNo">8055</span>  private void lock(final Lock lock, final int multiplier)<a name="line.8055"></a>
+<span class="sourceLineNo">8056</span>      throws RegionTooBusyException, InterruptedIOException {<a name="line.8056"></a>
+<span class="sourceLineNo">8057</span>    try {<a name="line.8057"></a>
+<span class="sourceLineNo">8058</span>      final long waitTime = Math.min(maxBusyWaitDuration,<a name="line.8058"></a>
+<span class="sourceLineNo">8059</span>          busyWaitDuration * Math.min(multiplier, maxBusyWaitMultiplier));<a name="line.8059"></a>
+<span class="sourceLineNo">8060</span>      if (!lock.tryLock(waitTime, TimeUnit.MILLISECONDS)) {<a name="line.8060"></a>
+<span class="sourceLineNo">8061</span>        throw new RegionTooBusyException(<a name="line.8061"></a>
+<span class="sourceLineNo">8062</span>            "failed to get a lock in " + waitTime + " ms. " +<a name="line.8062"></a>
+<span class="sourceLineNo">8063</span>                "regionName=" + (this.getRegionInfo() == null ? "unknown" :<a name="line.8063"></a>
+<span class="sourceLineNo">8064</span>                this.getRegionInfo().getRegionNameAsString()) +<a name="line.8064"></a>
+<span class="sourceLineNo">8065</span>                ", server=" + (this.getRegionServerServices() == null ? "unknown" :<a name="line.8065"></a>
+<span class="sourceLineNo">8066</span>                this.getRegionServerServices().getServerName()));<a name="line.8066"></a>
+<span class="sourceLineNo">8067</span>      }<a name="line.8067"></a>
+<span class="sourceLineNo">8068</span>    } catch (InterruptedException ie) {<a name="line.8068"></a>
+<span class="sourceLineNo">8069</span>      LOG.info("Interrupted while waiting for a lock");<a name="line.8069"></a>
+<span class="sourceLineNo">8070</span>      InterruptedIOException iie = new InterruptedIOException();<a name="line.8070"></a>
+<span class="sourceLineNo">8071</span>      iie.initCause(ie);<a name="line.8071"></a>
+<span class="sourceLineNo">8072</span>      throw iie;<a name="line.8072"></a>
+<span class="sourceLineNo">8073</span>    }<a name="line.8073"></a>
+<span class="sourceLineNo">8074</span>  }<a name="line.8074"></a>
+<span class="sourceLineNo">8075</span><a name="line.8075"></a>
+<span class="sourceLineNo">8076</span>  /**<a name="line.8076"></a>
+<span class="sourceLineNo">8077</span>   * Calls sync with the given transaction ID<a name="line.8077"></a>
+<span class="sourceLineNo">8078</span>   * @param txid should sync up to which transaction<a name="line.8078"></a>
+<span class="sourceLineNo">8079</span>   * @throws IOException If anything goes wrong with DFS<a name="line.8079"></a>
+<span class="sourceLineNo">8080</span>   */<a name="line.8080"></a>
+<span class="sourceLineNo">8081</span>  private void sync(long txid, Durability durability) throws IOException {<a name="line.8081"></a>
+<span class="sourceLineNo">8082</span>    if (this.getRegionInfo().isMetaRegion()) {<a name="line.8082"></a>
+<span class="sourceLineNo">8083</span>      this.wal.sync(txid);<a name="line.8083"></a>
+<span class="sourceLineNo">8084</span>    } else {<a name="line.8084"></a>
+<span class="sourceLineNo">8085</span>      switch(durability) {<a name="line.8085"></a>
+<span class="sourceLineNo">8086</span>      case USE_DEFAULT:<a name="line.8086"></a>
+<span class="sourceLineNo">8087</span>        // do what table defaults to<a name="line.8087"></a>
+<span class="sourceLineNo">8088</span>        if (shouldSyncWAL()) {<a name="line.8088"></a>
+<span class="sourceLineNo">8089</span>          this.wal.sync(txid);<a name="line.8089"></a>
+<span class="sourceLineNo">8090</span>        }<a name="line.8090"></a>
+<span class="sourceLineNo">8091</span>        break;<a name="line.8091"></a>
+<span class="sourceLineNo">8092</span>      case SKIP_WAL:<a name="line.8092"></a>
+<span class="sourceLineNo">8093</span>        // nothing do to<a name="line.8093"></a>
+<span class="sourceLineNo">8094</span>        break;<a name="line.8094"></a>
+<span class="sourceLineNo">8095</span>      case ASYNC_WAL:<a name="line.8095"></a>
+<span class="sourceLineNo">8096</span>        // nothing do to<a name="line.8096"></a>
+<span class="sourceLineNo">8097</span>        break;<a name="line.8097"></a>
+<span class="sourceLineNo">8098</span>      case SYNC_WAL:<a name="line.8098"></a>
+<span class="sourceLineNo">8099</span>      case FSYNC_WAL:<a name="line.8099"></a>
+<span class="sourceLineNo">8100</span>        // sync the WAL edit (SYNC and FSYNC treated the same for now)<a name="line.8100"></a>
+<span class="sourceLineNo">8101</span>        this.wal.sync(txid);<a name="line.8101"></a>
+<span class="sourceLineNo">8102</span>        break;<a name="line.8102"></a>
+<span class="sourceLineNo">8103</span>      default:<a name="line.8103"></a>
+<span class="sourceLineNo">8104</span>        throw new RuntimeException("Unknown durability " + durability);<a name="line.8104"></a>
+<span class="sourceLineNo">8105</span>      }<a name="line.8105"></a>
+<span class="sourceLineNo">8106</span>    }<a name="line.8106"></a>
+<span class="sourceLineNo">8107</span>  }<a name="line.8107"></a>
+<span class="sourceLineNo">8108</span><a name="line.8108"></a>
+<span class="sourceLineNo">8109</span>  /**<a name="line.8109"></a>
+<span class="sourceLineNo">8110</span>   * Check whether we should sync the wal from the table's durability settings<a name="line.8110"></a>
+<span class="sourceLineNo">8111</span>   */<a name="line.8111"></a>
+<span class="sourceLineNo">8112</span>  private boolean shouldSyncWAL() {<a name="line.8112"></a>
+<span class="sourceLineNo">8113</span>    return durability.ordinal() &gt;  Durability.ASYNC_WAL.ordinal();<a name="line.8113"></a>
+<span class="sourceLineNo">8114</span>  }<a name="line.8114"></a>
+<span class="sourceLineNo">8115</span><a name="line.8115"></a>
+<span class="sourceLineNo">8116</span>  /**<a name="line.8116"></a>
+<span class="sourceLineNo">8117</span>   * A mocked list implementation - discards all updates.<a name="line.8117"></a>
+<span class="sourceLineNo">8118</span>   */<a name="line.8118"></a>
+<span class="sourceLineNo">8119</span>  private static final List&lt;Cell&gt; MOCKED_LIST = new AbstractList&lt;Cell&gt;() {<a name="line.8119"></a>
+<span class="sourceLineNo">8120</span><a name="line.8120"></a>
+<span class="sourceLineNo">8121</span>    @Override<a name="line.8121"></a>
+<span class="sourceLineNo">8122</span>    public void add(int index, Cell element) {<a name="line.8122"></a>
+<span class="sourceLineNo">8123</span>      // do nothing<a name="line.8123"></a>
+<span class="sourceLineNo">8124</span>    }<a name="line.8124"></a>
+<span class="sourceLineNo">8125</span><a name="line.8125"></a>
+<span class="sourceLineNo">8126</span>    @Override<a name="line.8126"></a>
+<span class="sourceLineNo">8127</span>    public boolean addAll(int index, Collection&lt;? extends Cell&gt; c) {<a name="line.8127"></a>
+<span class="sourceLineNo">8128</span>      return false; // this list is never changed as a result of an update<a name="line.8128"></a>
+<span class="sourceLineNo">8129</span>    }<a name="line.8129"></a>
+<span class="sourceLineNo">8130</span><a name="line.8130"></a>
+<span class="sourceLineNo">8131</span>    @Override<a name="line.8131"></a>
+<span class="sourceLineNo">8132</span>    public KeyValue get(int index) {<a name="line.8132"></a>
+<span class="sourceLineNo">8133</span>      throw new UnsupportedOperationException();<a name="line.8133"></a>
+<span class="sourceLineNo">8134</span>    }<a name="line.8134"></a>
+<span class="sourceLineNo">8135</span><a name="line.8135"></a>
+<span class="sourceLineNo">8136</span>    @Override<a name="line.8136"></a>
+<span class="sourceLineNo">8137</span>    public int size() {<a name="line.8137"></a>
+<span class="sourceLineNo">8138</span>      return 0;<a name="line.8138"></a>
+<span class="sourceLineNo">8139</span>    }<a name="line.8139"></a>
+<span class="sourceLineNo">8140</span>  };<a name="line.8140"></a>
+<span class="sourceLineNo">8141</span><a name="line.8141"></a>
+<span class="sourceLineNo">8142</span>  @Override<a name="line.8142"></a>
+<span class="sourceLineNo">8143</span>  public long getOpenSeqNum() {<a name="line.8143"></a>
+<span class="sourceLineNo">8144</span>    return this.openSeqNum;<a name="line.8144"></a>
+<span class="sourceLineNo">8145</span>  }<a name="line.8145"></a>
+<span class="sourceLineNo">8146</span><a name="line.8146"></a>
+<span class="sourceLineNo">8147</span>  @Override<a name="line.8147"></a>
+<span class="sourceLineNo">8148</span>  public Map&lt;byte[], Long&gt; getMaxStoreSeqId() {<a name="line.8148"></a>
+<span class="sourceLineNo">8149</span>    return this.maxSeqIdInStores;<a name="line.8149"></a>
+<span class="sourceLineNo">8150</span>  }<a name="line.8150"></a>
+<span class="sourceLineNo">8151</span><a name="line.8151"></a>
+<span class="sourceLineNo">8152</span>  @Override<a name="line.8152"></a>
+<span class="sourceLineNo">8153</span>  public long getOldestSeqIdOfStore(byte[] familyName) {<a name="line.8153"></a>
+<span class="sourceLineNo">8154</span>    return wal.getEarliestMemstoreSeqNum(getRegionInfo().getEncodedNameAsBytes(), familyName);<a name="line.8154"></a>
+<span class="sourceLineNo">8155</span>  }<a name="line.8155"></a>
+<span class="sourceLineNo">8156</span><a name="line.8156"></a>
+<span class="sourceLineNo">8157</span>  @Override<a name="line.8157"></a>
+<span class="sourceLineNo">8158</span>  public CompactionState getCompactionState() {<a name="line.8158"></a>
+<span class="sourceLineNo">8159</span>    boolean hasMajor = majorInProgress.get() &gt; 0, hasMinor = minorInProgress.get() &gt; 0;<a name="line.8159"></a>
+<span class="sourceLineNo">8160</span>    return (hasMajor ? (hasMinor ? CompactionState.MAJOR_AND_MINOR : CompactionState.MAJOR)<a name="line.8160"></a>
+<span class="sourceLineNo">8161</span>        : (hasMinor ? CompactionState.MINOR : CompactionState.NONE));<a name="line.8161"></a>
+<span class="sourceLineNo">8162</span>  }<a name="line.8162"></a>
+<span class="sourceLineNo">8163</span><a name="line.8163"></a>
+<span class="sourceLineNo">8164</span>  public void reportCompactionRequestStart(boolean isMajor){<a name="line.8164"></a>
+<span class="sourceLineNo">8165</span>    (isMajor ? majorInProgress : minorInProgress).incrementAndGet();<a name="line.8165"></a>
+<span class="sourceLineNo">8166</span>  }<a name="line.8166"></a>
+<span class="sourceLineNo">8167</span><a name="line.8167"></a>
+<span class="sourceLineNo">8168</span>  public void reportCompactionRequestEnd(boolean isMajor, int numFiles, long filesSizeCompacted) {<a name="line.8168"></a>
+<span class="sourceLineNo">8169</span>    int newValue = (isMajor ? majorInProgress : minorInProgress).decrementAndGet();<a name="line.8169"></a>
+<span class="sourceLineNo">8170</span><a name="line.8170"></a>
+<span class="sourceLineNo">8171</span>    // metrics<a name="line.8171"></a>
+<span class="sourceLineNo">8172</span>    compactionsFinished.incrementAndGet();<a name="line.8172"></a>
+<span class="sourceLineNo">8173</span>    compactionNumFilesCompacted.addAndGet(numFiles);<a name="line.8173"></a>
+<span class="sourceLineNo">8174</span>    compactionNumBytesCompacted.addAndGet(filesSizeCompacted);<a name="line.8174"></a>
+<span class="sourceLineNo">8175</span><a name="line.8175"></a>
+<span class="sourceLineNo">8176</span>    assert newValue &gt;= 0;<a name="line.8176"></a>
+<span class="sourceLineNo">8177</span>  }<a name="line.8177"></a>
+<span class="sourceLineNo">8178</span><a name="line.8178"></a>
+<span class="sourceLineNo">8179</span>  public void reportCompactionRequestFailure() {<a name="line.8179"></a>
+<span class="sourceLineNo">8180</span>    compactionsFailed.incrementAndGet();<a name="line.8180"></a>
+<span class="sourceLineNo">8181</span>  }<a name="line.8181"></a>
+<span class="sourceLineNo">8182</span><a name="line.8182"></a>
+<span class="sourceLineNo">8183</span>  public void incrementCompactionsQueuedCount() {<a name="line.8183"></a>
+<span class="sourceLineNo">8184</span>    compactionsQueued.incrementAndGet();<a name="line.8184"></a>
 <span class="sourceLineNo">8185</span>  }<a name="line.8185"></a>
 <span class="sourceLineNo">8186</span><a name="line.8186"></a>
-<span class="sourceLineNo">8187</span>  /**<a name="line.8187"></a>
-<span class="sourceLineNo">8188</span>   * {@inheritDoc}<a name="line.8188"></a>
-<span class="sourceLineNo">8189</span>   */<a name="line.8189"></a>
-<span class="sourceLineNo">8190</span>  @Override<a name="line.8190"></a>
-<span class="sourceLineNo">8191</span>  public void onConfigurationChange(Configuration conf) {<a name="line.8191"></a>
-<span class="sourceLineNo">8192</span>    // Do nothing for now.<a name="line.8192"></a>
+<span class="sourceLineNo">8187</span>  public void decrementCompactionsQueuedCount() {<a name="line.8187"></a>
+<span class="sourceLineNo">8188</span>    compactionsQueued.decrementAndGet();<a name="line.8188"></a>
+<span class="sourceLineNo">8189</span>  }<a name="line.8189"></a>
+<span class="sourceLineNo">8190</span><a name="line.8190"></a>
+<span class="sourceLineNo">8191</span>  public void incrementFlushesQueuedCount() {<a name="line.8191"></a>
+<span class="sourceLineNo">8192</span>    flushesQueued.incrementAndGet();<a name="line.8192"></a>
 <span class="sourceLineNo">8193</span>  }<a name="line.8193"></a>
 <span class="sourceLineNo">8194</span><a name="line.8194"></a>
-<span class="sourceLineNo">8195</span>  /**<a name="line.8195"></a>
-<span class="sourceLineNo">8196</span>   * {@inheritDoc}<a name="line.8196"></a>
-<span class="sourceLineNo">8197</span>   */<a name="line.8197"></a>
-<span class="sourceLineNo">8198</span>  @Override<a name="line.8198"></a>
-<span class="sourceLineNo">8199</span>  public void registerChildren(ConfigurationManager manager) {<a name="line.8199"></a>
-<span class="sourceLineNo">8200</span>    configurationManager = Optional.of(manager);<a name="line.8200"></a>
-<span class="sourceLineNo">8201</span>    for (Store s : this.stores.values()) {<a name="line.8201"></a>
-<span class="sourceLineNo">8202</span>      configurationManager.get().registerObserver(s);<a name="line.8202"></a>
-<span class="sourceLineNo">8203</span>    }<a name="line.8203"></a>
-<span class="sourceLineNo">8204</span>  }<a name="line.8204"></a>
-<span class="sourceLineNo">8205</span><a name="line.8205"></a>
-<span class="sourceLineNo">8206</span>  /**<a name="line.8206"></a>
-<span class="sourceLineNo">8207</span>   * {@inheritDoc}<a name="line.8207"></a>
-<span class="sourceLineNo">8208</span>   */<a name="line.8208"></a>
-<span class="sourceLineNo">8209</span>  @Override<a name="line.8209"></a>
-<span class="sourceLineNo">8210</span>  public void deregisterChildren(ConfigurationManager manager) {<a name="line.8210"></a>
-<span class="sourceLineNo">8211</span>    for (Store s : this.stores.values()) {<a name="line.8211"></a>
-<span class="sourceLineNo">8212</span>      configurationManager.get().deregisterObserver(s);<a name="line.8212"></a>
-<span class="sourceLineNo">8213</span>    }<a name="line.8213"></a>
-<span class="sourceLineNo">8214</span>  }<a name="line.8214"></a>
-<span class="sourceLineNo">8215</span><a name="line.8215"></a>
-<span class="sourceLineNo">8216</span>  @Override<a name="line.8216"></a>
-<span class="sourceLineNo">8217</span>  public CellComparator getCellComparator() {<a name="line.8217"></a>
-<span class="sourceLineNo">8218</span>    return this.getRegionInfo().isMetaRegion() ? CellComparator.META_COMPARATOR<a name="line.8218"></a>
-<span class="sourceLineNo">8219</span>        : CellComparator.COMPARATOR;<a name="line.8219"></a>
-<span class="sourceLineNo">8220</span>  }<a name="line.8220"></a>
-<span class="sourceLineNo">8221</span><a name="line.8221"></a>
-<span class="sourceLineNo">8222</span>  public long getMemstoreFlushSize() {<a name="line.8222"></a>
-<span class="sourceLineNo">8223</span>    return this.memstoreFlushSize;<a name="line.8223"></a>
-<span class="sourceLineNo">8224</span>  }<a name="line.8224"></a>
-<span class="sourceLineNo">8225</span><a name="line.8225"></a>
-<span class="sourceLineNo">8226</span>  //// method for debugging tests<a name="line.8226"></a>
-<span class="sourceLineNo">8227</span>  void throwException(String title, String regionName) {<a name="line.8227"></a>
-<span class="sourceLineNo">8228</span>    StringBuffer buf = new StringBuffer();<a name="line.8228"></a>
-<span class="sourceLineNo">8229</span>    buf.append(title + ", ");<a name="line.8229"></a>
-<span class="sourceLineNo">8230</span>    buf.append(getRegionInfo().toString());<a name="line.8230"></a>
-<span class="sourceLineNo">8231</span>    buf.append(getRegionInfo().isMetaRegion() ? " meta region " : " ");<a name="line.8231"></a>
-<span class="sourceLineNo">8232</span>    buf.append(getRegionInfo().isMetaTable() ? " meta table " : " ");<a name="line.8232"></a>
-<span class="sourceLineNo">8233</span>    buf.append("stores: ");<a name="line.8233"></a>
-<span class="sourceLineNo">8234</span>    for (Store s : getStores()) {<a name="line.8234"></a>
-<span class="sourceLineNo">8235</span>      buf.append(s.getColumnFamilyDescriptor().getNameAsString());<a name="line.8235"></a>
-<span class="sourceLineNo">8236</span>      buf.append(" size: ");<a name="line.8236"></a>
-<span class="sourceLineNo">8237</span>      buf.append(s.getSizeOfMemStore().getDataSize());<a name="line.8237"></a>
-<span class="sourceLineNo">8238</span>      buf.append(" ");<a name="line.8238"></a>
-<span class="sourceLineNo">8239</span>    }<a name="line.8239"></a>
-<span class="sourceLineNo">8240</span>    buf.append("end-of-stores");<a name="line.8240"></a>
-<span class="sourceLineNo">8241</span>    buf.append(", memstore size ");<a name="line.8241"></a>
-<span class="sourceLineNo">8242</span>    buf.append(getMemstoreSize());<a name="line.8242"></a>
-<span class="sourceLineNo">8243</span>    if (getRegionInfo().getRegionNameAsString().startsWith(regionName)) {<a name="line.8243"></a>
-<span class="sourceLineNo">8244</span>      throw new RuntimeException(buf.toString());<a name="line.8244"></a>
-<span class="sourceLineNo">8245</span>    }<a name="line.8245"></a>
-<span class="sourceLineNo">8246</span>  }<a name="line.8246"></a>
-<span class="sourceLineNo">8247</span>}<a name="line.8247"></a>
+<span class="sourceLineNo">8195</span>  @VisibleForTesting<a name="line.8195"></a>
+<span class="sourceLineNo">8196</span>  public long getReadPoint() {<a name="line.8196"></a>
+<span class="sourceLineNo">8197</span>    return getReadPoint(IsolationLevel.READ_COMMITTED);<a name="line.8197"></a>
+<span class="sourceLineNo">8198</span>  }<a name="line.8198"></a>
+<span class="sourceLineNo">8199</span><a name="line.8199"></a>
+<span class="sourceLineNo">8200</span>  /**<a name="line.8200"></a>
+<span class="sourceLineNo">8201</span>   * {@inheritDoc}<a name="line.8201"></a>
+<span class="sourceLineNo">8202</span>   */<a name="line.8202"></a>
+<span class="sourceLineNo">8203</span>  @Override<a name="line.8203"></a>
+<span class="sourceLineNo">8204</span>  public void onConfigurationChange(Configuration conf) {<a name="line.8204"></a>
+<span class="sourceLineNo">8205</span>    // Do nothing for now.<a name="line.8205"></a>
+<span class="sourceLineNo">8206</span>  }<a name="line.8206"></a>
+<span class="sourceLineNo">8207</span><a name="line.8207"></a>
+<span class="sourceLineNo">8208</span>  /**<a name="line.8208"></a>
+<span class="sourceLineNo">8209</span>   * {@inheritDoc}<a name="line.8209"></a>
+<span class="sourceLineNo">8210</span>   */<a name="line.8210"></a>
+<span class="sourceLineNo">8211</span>  @Override<a name="line.8211"></a>
+<span class="sourceLineNo">8212</span>  public void registerChildren(ConfigurationManager manager) {<a name="line.8212"></a>
+<span class="sourceLineNo">8213</span>    configurationManager = Optional.of(manager);<a name="line.8213"></a>
+<span class="sourceLineNo">8214</span>    for (Store s : this.stores.values()) {<a name="line.8214"></a>
+<span class="sourceLineNo">8215</span>      configurationManager.get().registerObserver(s);<a name="line.8215"></a>
+<span class="sourceLineNo">8216</span>    }<a name="line.8216"></a>
+<span class="sourceLineNo">8217</span>  }<a name="line.8217"></a>
+<span class="sourceLineNo">8218</span><a name="line.8218"></a>
+<span class="sourceLineNo">8219</span>  /**<a name="line.8219"></a>
+<span class="sourceLineNo">8220</span>   * {@inheritDoc}<a name="line.8220"></a>
+<span class="sourceLineNo">8221</span>   */<a name="line.8221"></a>
+<span class="sourceLineNo">8222</span>  @Override<a name="line.8222"></a>
+<span class="sourceLineNo">8223</span>  public void deregisterChildren(ConfigurationManager manager) {<a name="line.8223"></a>
+<span class="sourceLineNo">8224</span>    for (Store s : this.stores.values()) {<a name="line.8224"></a>
+<span class="sourceLineNo">8225</span>      configurationManager.get().deregisterObserver(s);<a name="line.8225"></a>
+<span class="sourceLineNo">8226</span>    }<a name="line.8226"></a>
+<span class="sourceLineNo">8227</span>  }<a name="line.8227"></a>
+<span class="sourceLineNo">8228</span><a name="line.8228"></a>
+<span class="sourceLineNo">8229</span>  @Override<a name="line.8229"></a>
+<span class="sourceLineNo">8230</span>  public CellComparator getCellComparator() {<a name="line.8230"></a>
+<span class="sourceLineNo">8231</span>    return this.getRegionInfo().isMetaRegion() ? CellComparator.META_COMPARATOR<a name="line.8231"></a>
+<span class="sourceLineNo">8232</span>        : CellComparator.COMPARATOR;<a name="line.8232"></a>
+<span class="sourceLineNo">8233</span>  }<a name="line.8233"></a>
+<span class="sourceLineNo">8234</span><a name="line.8234"></a>
+<span class="sourceLineNo">8235</span>  public long getMemstoreFlushSize() {<a name="line.8235"></a>
+<span class="sourceLineNo">8236</span>    return this.memstoreFlushSize;<a name="line.8236"></a>
+<span class="sourceLineNo">8237</span>  }<a name="line.8237"></a>
+<span class="sourceLineNo">8238</span><a name="line.8238"></a>
+<span class="sourceLineNo">8239</span>  //// method for debugging tests<a name="line.8239"></a>
+<span class="sourceLineNo">8240</span>  void throwException(String title, String regionName) {<a name="line.8240"></a>
+<span class="sourceLineNo">8241</span>    StringBuffer buf = new StringBuffer();<a name="line.8241"></a>
+<span class="sourceLineNo">8242</span>    buf.append(title + ", ");<a name="line.8242"></a>
+<span class="sourceLineNo">8243</span>    buf.append(getRegionInfo().toString());<a name="line.8243"></a>
+<span class="sourceLineNo">8244</span>    buf.append(getRegionInfo().isMetaRegion() ? " meta region " : " ");<a name="line.8244"></a>
+<span class="sourceLineNo">8245</span>    buf.append(getRegionInfo().isMetaTable() ? " meta table " : " ");<a name="line.8245"></a>
+<span class="sourceLineNo">8246</span>    buf.append("stores: ");<a name="line.8246"></a>
+<span class="sourceLineNo">8247</span>    for (Store s : getStores()) {<a name="line.8247"></a>
+<span class="sourceLineNo">8248</span>      buf.append(s.getColumnFamilyDescriptor().getNameAsString());<a name="line.8248"></a>
+<span class="sourceLineNo">8249</span>      buf.append(" size: ");<a name="line.8249"></a>
+<span class="sourceLineNo">8250</span>      buf.append(s.getSizeOfMemStore().getDataSize());<a name="line.8250"></a>
+<span class="sourceLineNo">8251</span>      buf.append(" ");<a name="line.8251"></a>
+<span class="sourceLineNo">8252</span>    }<a name="line.8252"></a>
+<span class="sourceLineNo">8253</span>    buf.append("end-of-stores");<a name="line.8253"></a>
+<span class="sourceLineNo">8254</span>    buf.append(", memstore size ");<a name="line.8254"></a>
+<span class="sourceLineNo">8255</span>    buf.append(getMemstoreSize());<a name="line.8255"></a>
+<span class="sourceLineNo">8256</span>    if (getRegionInfo().getRegionNameAsString().startsWith(regionName)) {<a name="line.8256"></a>
+<span class="sourceLineNo">8257</span>      throw new RuntimeException(buf.toString());<a name="line.8257"></a>
+<span class="sourceLineNo">8258</span>    }<a name="line.8258"></a>
+<span class="sourceLineNo">8259</span>  }<a name="line.8259"></a>
+<span class="sourceLineNo">8260</span>}<a name="line.8260"></a>
 
 
 


[16/33] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html
index f6a717e..a701ece 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html
@@ -7930,329 +7930,342 @@
 <span class="sourceLineNo">7922</span>      case DELETE:<a name="line.7922"></a>
 <span class="sourceLineNo">7923</span>      case BATCH_MUTATE:<a name="line.7923"></a>
 <span class="sourceLineNo">7924</span>      case COMPACT_REGION:<a name="line.7924"></a>
-<span class="sourceLineNo">7925</span>        // when a region is in recovering state, no read, split or merge is allowed<a name="line.7925"></a>
-<span class="sourceLineNo">7926</span>        if (isRecovering() &amp;&amp; (this.disallowWritesInRecovering ||<a name="line.7926"></a>
-<span class="sourceLineNo">7927</span>              (op != Operation.PUT &amp;&amp; op != Operation.DELETE &amp;&amp; op != Operation.BATCH_MUTATE))) {<a name="line.7927"></a>
-<span class="sourceLineNo">7928</span>          throw new RegionInRecoveryException(getRegionInfo().getRegionNameAsString() +<a name="line.7928"></a>
-<span class="sourceLineNo">7929</span>            " is recovering; cannot take reads");<a name="line.7929"></a>
-<span class="sourceLineNo">7930</span>        }<a name="line.7930"></a>
-<span class="sourceLineNo">7931</span>        break;<a name="line.7931"></a>
-<span class="sourceLineNo">7932</span>      default:<a name="line.7932"></a>
-<span class="sourceLineNo">7933</span>        break;<a name="line.7933"></a>
-<span class="sourceLineNo">7934</span>    }<a name="line.7934"></a>
-<span class="sourceLineNo">7935</span>    if (op == Operation.MERGE_REGION || op == Operation.SPLIT_REGION<a name="line.7935"></a>
-<span class="sourceLineNo">7936</span>        || op == Operation.COMPACT_REGION) {<a name="line.7936"></a>
-<span class="sourceLineNo">7937</span>      // split, merge or compact region doesn't need to check the closing/closed state or lock the<a name="line.7937"></a>
-<span class="sourceLineNo">7938</span>      // region<a name="line.7938"></a>
-<span class="sourceLineNo">7939</span>      return;<a name="line.7939"></a>
-<span class="sourceLineNo">7940</span>    }<a name="line.7940"></a>
-<span class="sourceLineNo">7941</span>    if (this.closing.get()) {<a name="line.7941"></a>
-<span class="sourceLineNo">7942</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.7942"></a>
-<span class="sourceLineNo">7943</span>    }<a name="line.7943"></a>
-<span class="sourceLineNo">7944</span>    lock(lock.readLock());<a name="line.7944"></a>
-<span class="sourceLineNo">7945</span>    if (this.closed.get()) {<a name="line.7945"></a>
-<span class="sourceLineNo">7946</span>      lock.readLock().unlock();<a name="line.7946"></a>
-<span class="sourceLineNo">7947</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.7947"></a>
-<span class="sourceLineNo">7948</span>    }<a name="line.7948"></a>
-<span class="sourceLineNo">7949</span>    try {<a name="line.7949"></a>
-<span class="sourceLineNo">7950</span>      if (coprocessorHost != null) {<a name="line.7950"></a>
-<span class="sourceLineNo">7951</span>        coprocessorHost.postStartRegionOperation(op);<a name="line.7951"></a>
-<span class="sourceLineNo">7952</span>      }<a name="line.7952"></a>
-<span class="sourceLineNo">7953</span>    } catch (Exception e) {<a name="line.7953"></a>
-<span class="sourceLineNo">7954</span>      lock.readLock().unlock();<a name="line.7954"></a>
-<span class="sourceLineNo">7955</span>      throw new IOException(e);<a name="line.7955"></a>
-<span class="sourceLineNo">7956</span>    }<a name="line.7956"></a>
-<span class="sourceLineNo">7957</span>  }<a name="line.7957"></a>
-<span class="sourceLineNo">7958</span><a name="line.7958"></a>
-<span class="sourceLineNo">7959</span>  @Override<a name="line.7959"></a>
-<span class="sourceLineNo">7960</span>  public void closeRegionOperation() throws IOException {<a name="line.7960"></a>
-<span class="sourceLineNo">7961</span>    closeRegionOperation(Operation.ANY);<a name="line.7961"></a>
-<span class="sourceLineNo">7962</span>  }<a name="line.7962"></a>
-<span class="sourceLineNo">7963</span><a name="line.7963"></a>
-<span class="sourceLineNo">7964</span>  /**<a name="line.7964"></a>
-<span class="sourceLineNo">7965</span>   * Closes the lock. This needs to be called in the finally block corresponding<a name="line.7965"></a>
-<span class="sourceLineNo">7966</span>   * to the try block of {@link #startRegionOperation(Operation)}<a name="line.7966"></a>
-<span class="sourceLineNo">7967</span>   * @throws IOException<a name="line.7967"></a>
-<span class="sourceLineNo">7968</span>   */<a name="line.7968"></a>
-<span class="sourceLineNo">7969</span>  public void closeRegionOperation(Operation operation) throws IOException {<a name="line.7969"></a>
-<span class="sourceLineNo">7970</span>    lock.readLock().unlock();<a name="line.7970"></a>
-<span class="sourceLineNo">7971</span>    if (coprocessorHost != null) {<a name="line.7971"></a>
-<span class="sourceLineNo">7972</span>      coprocessorHost.postCloseRegionOperation(operation);<a name="line.7972"></a>
-<span class="sourceLineNo">7973</span>    }<a name="line.7973"></a>
-<span class="sourceLineNo">7974</span>  }<a name="line.7974"></a>
-<span class="sourceLineNo">7975</span><a name="line.7975"></a>
-<span class="sourceLineNo">7976</span>  /**<a name="line.7976"></a>
-<span class="sourceLineNo">7977</span>   * This method needs to be called before any public call that reads or<a name="line.7977"></a>
-<span class="sourceLineNo">7978</span>   * modifies stores in bulk. It has to be called just before a try.<a name="line.7978"></a>
-<span class="sourceLineNo">7979</span>   * #closeBulkRegionOperation needs to be called in the try's finally block<a name="line.7979"></a>
-<span class="sourceLineNo">7980</span>   * Acquires a writelock and checks if the region is closing or closed.<a name="line.7980"></a>
-<span class="sourceLineNo">7981</span>   * @throws NotServingRegionException when the region is closing or closed<a name="line.7981"></a>
-<span class="sourceLineNo">7982</span>   * @throws RegionTooBusyException if failed to get the lock in time<a name="line.7982"></a>
-<span class="sourceLineNo">7983</span>   * @throws InterruptedIOException if interrupted while waiting for a lock<a name="line.7983"></a>
-<span class="sourceLineNo">7984</span>   */<a name="line.7984"></a>
-<span class="sourceLineNo">7985</span>  private void startBulkRegionOperation(boolean writeLockNeeded)<a name="line.7985"></a>
-<span class="sourceLineNo">7986</span>      throws NotServingRegionException, RegionTooBusyException, InterruptedIOException {<a name="line.7986"></a>
-<span class="sourceLineNo">7987</span>    if (this.closing.get()) {<a name="line.7987"></a>
-<span class="sourceLineNo">7988</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.7988"></a>
-<span class="sourceLineNo">7989</span>    }<a name="line.7989"></a>
-<span class="sourceLineNo">7990</span>    if (writeLockNeeded) lock(lock.writeLock());<a name="line.7990"></a>
-<span class="sourceLineNo">7991</span>    else lock(lock.readLock());<a name="line.7991"></a>
-<span class="sourceLineNo">7992</span>    if (this.closed.get()) {<a name="line.7992"></a>
-<span class="sourceLineNo">7993</span>      if (writeLockNeeded) lock.writeLock().unlock();<a name="line.7993"></a>
-<span class="sourceLineNo">7994</span>      else lock.readLock().unlock();<a name="line.7994"></a>
-<span class="sourceLineNo">7995</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.7995"></a>
-<span class="sourceLineNo">7996</span>    }<a name="line.7996"></a>
-<span class="sourceLineNo">7997</span>  }<a name="line.7997"></a>
-<span class="sourceLineNo">7998</span><a name="line.7998"></a>
-<span class="sourceLineNo">7999</span>  /**<a name="line.7999"></a>
-<span class="sourceLineNo">8000</span>   * Closes the lock. This needs to be called in the finally block corresponding<a name="line.8000"></a>
-<span class="sourceLineNo">8001</span>   * to the try block of #startRegionOperation<a name="line.8001"></a>
-<span class="sourceLineNo">8002</span>   */<a name="line.8002"></a>
-<span class="sourceLineNo">8003</span>  private void closeBulkRegionOperation(){<a name="line.8003"></a>
-<span class="sourceLineNo">8004</span>    if (lock.writeLock().isHeldByCurrentThread()) lock.writeLock().unlock();<a name="line.8004"></a>
-<span class="sourceLineNo">8005</span>    else lock.readLock().unlock();<a name="line.8005"></a>
-<span class="sourceLineNo">8006</span>  }<a name="line.8006"></a>
-<span class="sourceLineNo">8007</span><a name="line.8007"></a>
-<span class="sourceLineNo">8008</span>  /**<a name="line.8008"></a>
-<span class="sourceLineNo">8009</span>   * Update LongAdders for number of puts without wal and the size of possible data loss.<a name="line.8009"></a>
-<span class="sourceLineNo">8010</span>   * These information are exposed by the region server metrics.<a name="line.8010"></a>
-<span class="sourceLineNo">8011</span>   */<a name="line.8011"></a>
-<span class="sourceLineNo">8012</span>  private void recordMutationWithoutWal(final Map&lt;byte [], List&lt;Cell&gt;&gt; familyMap) {<a name="line.8012"></a>
-<span class="sourceLineNo">8013</span>    numMutationsWithoutWAL.increment();<a name="line.8013"></a>
-<span class="sourceLineNo">8014</span>    if (numMutationsWithoutWAL.sum() &lt;= 1) {<a name="line.8014"></a>
-<span class="sourceLineNo">8015</span>      LOG.info("writing data to region " + this +<a name="line.8015"></a>
-<span class="sourceLineNo">8016</span>               " with WAL disabled. Data may be lost in the event of a crash.");<a name="line.8016"></a>
-<span class="sourceLineNo">8017</span>    }<a name="line.8017"></a>
-<span class="sourceLineNo">8018</span><a name="line.8018"></a>
-<span class="sourceLineNo">8019</span>    long mutationSize = 0;<a name="line.8019"></a>
-<span class="sourceLineNo">8020</span>    for (List&lt;Cell&gt; cells: familyMap.values()) {<a name="line.8020"></a>
-<span class="sourceLineNo">8021</span>      assert cells instanceof RandomAccess;<a name="line.8021"></a>
-<span class="sourceLineNo">8022</span>      int listSize = cells.size();<a name="line.8022"></a>
-<span class="sourceLineNo">8023</span>      for (int i=0; i &lt; listSize; i++) {<a name="line.8023"></a>
-<span class="sourceLineNo">8024</span>        Cell cell = cells.get(i);<a name="line.8024"></a>
-<span class="sourceLineNo">8025</span>        mutationSize += KeyValueUtil.length(cell);<a name="line.8025"></a>
-<span class="sourceLineNo">8026</span>      }<a name="line.8026"></a>
-<span class="sourceLineNo">8027</span>    }<a name="line.8027"></a>
-<span class="sourceLineNo">8028</span><a name="line.8028"></a>
-<span class="sourceLineNo">8029</span>    dataInMemoryWithoutWAL.add(mutationSize);<a name="line.8029"></a>
-<span class="sourceLineNo">8030</span>  }<a name="line.8030"></a>
+<span class="sourceLineNo">7925</span>      case SNAPSHOT:<a name="line.7925"></a>
+<span class="sourceLineNo">7926</span>        // when a region is in recovering state, no read, split, merge or snapshot is allowed<a name="line.7926"></a>
+<span class="sourceLineNo">7927</span>        if (isRecovering() &amp;&amp; (this.disallowWritesInRecovering ||<a name="line.7927"></a>
+<span class="sourceLineNo">7928</span>              (op != Operation.PUT &amp;&amp; op != Operation.DELETE &amp;&amp; op != Operation.BATCH_MUTATE))) {<a name="line.7928"></a>
+<span class="sourceLineNo">7929</span>          throw new RegionInRecoveryException(getRegionInfo().getRegionNameAsString() +<a name="line.7929"></a>
+<span class="sourceLineNo">7930</span>            " is recovering; cannot take reads");<a name="line.7930"></a>
+<span class="sourceLineNo">7931</span>        }<a name="line.7931"></a>
+<span class="sourceLineNo">7932</span>        break;<a name="line.7932"></a>
+<span class="sourceLineNo">7933</span>      default:<a name="line.7933"></a>
+<span class="sourceLineNo">7934</span>        break;<a name="line.7934"></a>
+<span class="sourceLineNo">7935</span>    }<a name="line.7935"></a>
+<span class="sourceLineNo">7936</span>    if (op == Operation.MERGE_REGION || op == Operation.SPLIT_REGION<a name="line.7936"></a>
+<span class="sourceLineNo">7937</span>        || op == Operation.COMPACT_REGION) {<a name="line.7937"></a>
+<span class="sourceLineNo">7938</span>      // split, merge or compact region doesn't need to check the closing/closed state or lock the<a name="line.7938"></a>
+<span class="sourceLineNo">7939</span>      // region<a name="line.7939"></a>
+<span class="sourceLineNo">7940</span>      return;<a name="line.7940"></a>
+<span class="sourceLineNo">7941</span>    }<a name="line.7941"></a>
+<span class="sourceLineNo">7942</span>    if (this.closing.get()) {<a name="line.7942"></a>
+<span class="sourceLineNo">7943</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.7943"></a>
+<span class="sourceLineNo">7944</span>    }<a name="line.7944"></a>
+<span class="sourceLineNo">7945</span>    lock(lock.readLock());<a name="line.7945"></a>
+<span class="sourceLineNo">7946</span>    if (this.closed.get()) {<a name="line.7946"></a>
+<span class="sourceLineNo">7947</span>      lock.readLock().unlock();<a name="line.7947"></a>
+<span class="sourceLineNo">7948</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.7948"></a>
+<span class="sourceLineNo">7949</span>    }<a name="line.7949"></a>
+<span class="sourceLineNo">7950</span>    // The unit for snapshot is a region. So, all stores for this region must be<a name="line.7950"></a>
+<span class="sourceLineNo">7951</span>    // prepared for snapshot operation before proceeding.<a name="line.7951"></a>
+<span class="sourceLineNo">7952</span>    if (op == Operation.SNAPSHOT) {<a name="line.7952"></a>
+<span class="sourceLineNo">7953</span>      for (Store store : stores.values()) {<a name="line.7953"></a>
+<span class="sourceLineNo">7954</span>        if (store instanceof HStore) {<a name="line.7954"></a>
+<span class="sourceLineNo">7955</span>          ((HStore)store).preSnapshotOperation();<a name="line.7955"></a>
+<span class="sourceLineNo">7956</span>        }<a name="line.7956"></a>
+<span class="sourceLineNo">7957</span>      }<a name="line.7957"></a>
+<span class="sourceLineNo">7958</span>    }<a name="line.7958"></a>
+<span class="sourceLineNo">7959</span>    try {<a name="line.7959"></a>
+<span class="sourceLineNo">7960</span>      if (coprocessorHost != null) {<a name="line.7960"></a>
+<span class="sourceLineNo">7961</span>        coprocessorHost.postStartRegionOperation(op);<a name="line.7961"></a>
+<span class="sourceLineNo">7962</span>      }<a name="line.7962"></a>
+<span class="sourceLineNo">7963</span>    } catch (Exception e) {<a name="line.7963"></a>
+<span class="sourceLineNo">7964</span>      lock.readLock().unlock();<a name="line.7964"></a>
+<span class="sourceLineNo">7965</span>      throw new IOException(e);<a name="line.7965"></a>
+<span class="sourceLineNo">7966</span>    }<a name="line.7966"></a>
+<span class="sourceLineNo">7967</span>  }<a name="line.7967"></a>
+<span class="sourceLineNo">7968</span><a name="line.7968"></a>
+<span class="sourceLineNo">7969</span>  @Override<a name="line.7969"></a>
+<span class="sourceLineNo">7970</span>  public void closeRegionOperation() throws IOException {<a name="line.7970"></a>
+<span class="sourceLineNo">7971</span>    closeRegionOperation(Operation.ANY);<a name="line.7971"></a>
+<span class="sourceLineNo">7972</span>  }<a name="line.7972"></a>
+<span class="sourceLineNo">7973</span><a name="line.7973"></a>
+<span class="sourceLineNo">7974</span>  @Override<a name="line.7974"></a>
+<span class="sourceLineNo">7975</span>  public void closeRegionOperation(Operation operation) throws IOException {<a name="line.7975"></a>
+<span class="sourceLineNo">7976</span>    if (operation == Operation.SNAPSHOT) {<a name="line.7976"></a>
+<span class="sourceLineNo">7977</span>      for (Store store: stores.values()) {<a name="line.7977"></a>
+<span class="sourceLineNo">7978</span>        if (store instanceof HStore) {<a name="line.7978"></a>
+<span class="sourceLineNo">7979</span>          ((HStore)store).postSnapshotOperation();<a name="line.7979"></a>
+<span class="sourceLineNo">7980</span>        }<a name="line.7980"></a>
+<span class="sourceLineNo">7981</span>      }<a name="line.7981"></a>
+<span class="sourceLineNo">7982</span>    }<a name="line.7982"></a>
+<span class="sourceLineNo">7983</span>    lock.readLock().unlock();<a name="line.7983"></a>
+<span class="sourceLineNo">7984</span>    if (coprocessorHost != null) {<a name="line.7984"></a>
+<span class="sourceLineNo">7985</span>      coprocessorHost.postCloseRegionOperation(operation);<a name="line.7985"></a>
+<span class="sourceLineNo">7986</span>    }<a name="line.7986"></a>
+<span class="sourceLineNo">7987</span>  }<a name="line.7987"></a>
+<span class="sourceLineNo">7988</span><a name="line.7988"></a>
+<span class="sourceLineNo">7989</span>  /**<a name="line.7989"></a>
+<span class="sourceLineNo">7990</span>   * This method needs to be called before any public call that reads or<a name="line.7990"></a>
+<span class="sourceLineNo">7991</span>   * modifies stores in bulk. It has to be called just before a try.<a name="line.7991"></a>
+<span class="sourceLineNo">7992</span>   * #closeBulkRegionOperation needs to be called in the try's finally block<a name="line.7992"></a>
+<span class="sourceLineNo">7993</span>   * Acquires a writelock and checks if the region is closing or closed.<a name="line.7993"></a>
+<span class="sourceLineNo">7994</span>   * @throws NotServingRegionException when the region is closing or closed<a name="line.7994"></a>
+<span class="sourceLineNo">7995</span>   * @throws RegionTooBusyException if failed to get the lock in time<a name="line.7995"></a>
+<span class="sourceLineNo">7996</span>   * @throws InterruptedIOException if interrupted while waiting for a lock<a name="line.7996"></a>
+<span class="sourceLineNo">7997</span>   */<a name="line.7997"></a>
+<span class="sourceLineNo">7998</span>  private void startBulkRegionOperation(boolean writeLockNeeded)<a name="line.7998"></a>
+<span class="sourceLineNo">7999</span>      throws NotServingRegionException, RegionTooBusyException, InterruptedIOException {<a name="line.7999"></a>
+<span class="sourceLineNo">8000</span>    if (this.closing.get()) {<a name="line.8000"></a>
+<span class="sourceLineNo">8001</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.8001"></a>
+<span class="sourceLineNo">8002</span>    }<a name="line.8002"></a>
+<span class="sourceLineNo">8003</span>    if (writeLockNeeded) lock(lock.writeLock());<a name="line.8003"></a>
+<span class="sourceLineNo">8004</span>    else lock(lock.readLock());<a name="line.8004"></a>
+<span class="sourceLineNo">8005</span>    if (this.closed.get()) {<a name="line.8005"></a>
+<span class="sourceLineNo">8006</span>      if (writeLockNeeded) lock.writeLock().unlock();<a name="line.8006"></a>
+<span class="sourceLineNo">8007</span>      else lock.readLock().unlock();<a name="line.8007"></a>
+<span class="sourceLineNo">8008</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.8008"></a>
+<span class="sourceLineNo">8009</span>    }<a name="line.8009"></a>
+<span class="sourceLineNo">8010</span>  }<a name="line.8010"></a>
+<span class="sourceLineNo">8011</span><a name="line.8011"></a>
+<span class="sourceLineNo">8012</span>  /**<a name="line.8012"></a>
+<span class="sourceLineNo">8013</span>   * Closes the lock. This needs to be called in the finally block corresponding<a name="line.8013"></a>
+<span class="sourceLineNo">8014</span>   * to the try block of #startRegionOperation<a name="line.8014"></a>
+<span class="sourceLineNo">8015</span>   */<a name="line.8015"></a>
+<span class="sourceLineNo">8016</span>  private void closeBulkRegionOperation(){<a name="line.8016"></a>
+<span class="sourceLineNo">8017</span>    if (lock.writeLock().isHeldByCurrentThread()) lock.writeLock().unlock();<a name="line.8017"></a>
+<span class="sourceLineNo">8018</span>    else lock.readLock().unlock();<a name="line.8018"></a>
+<span class="sourceLineNo">8019</span>  }<a name="line.8019"></a>
+<span class="sourceLineNo">8020</span><a name="line.8020"></a>
+<span class="sourceLineNo">8021</span>  /**<a name="line.8021"></a>
+<span class="sourceLineNo">8022</span>   * Update LongAdders for number of puts without wal and the size of possible data loss.<a name="line.8022"></a>
+<span class="sourceLineNo">8023</span>   * These information are exposed by the region server metrics.<a name="line.8023"></a>
+<span class="sourceLineNo">8024</span>   */<a name="line.8024"></a>
+<span class="sourceLineNo">8025</span>  private void recordMutationWithoutWal(final Map&lt;byte [], List&lt;Cell&gt;&gt; familyMap) {<a name="line.8025"></a>
+<span class="sourceLineNo">8026</span>    numMutationsWithoutWAL.increment();<a name="line.8026"></a>
+<span class="sourceLineNo">8027</span>    if (numMutationsWithoutWAL.sum() &lt;= 1) {<a name="line.8027"></a>
+<span class="sourceLineNo">8028</span>      LOG.info("writing data to region " + this +<a name="line.8028"></a>
+<span class="sourceLineNo">8029</span>               " with WAL disabled. Data may be lost in the event of a crash.");<a name="line.8029"></a>
+<span class="sourceLineNo">8030</span>    }<a name="line.8030"></a>
 <span class="sourceLineNo">8031</span><a name="line.8031"></a>
-<span class="sourceLineNo">8032</span>  private void lock(final Lock lock)<a name="line.8032"></a>
-<span class="sourceLineNo">8033</span>      throws RegionTooBusyException, InterruptedIOException {<a name="line.8033"></a>
-<span class="sourceLineNo">8034</span>    lock(lock, 1);<a name="line.8034"></a>
-<span class="sourceLineNo">8035</span>  }<a name="line.8035"></a>
-<span class="sourceLineNo">8036</span><a name="line.8036"></a>
-<span class="sourceLineNo">8037</span>  /**<a name="line.8037"></a>
-<span class="sourceLineNo">8038</span>   * Try to acquire a lock.  Throw RegionTooBusyException<a name="line.8038"></a>
-<span class="sourceLineNo">8039</span>   * if failed to get the lock in time. Throw InterruptedIOException<a name="line.8039"></a>
-<span class="sourceLineNo">8040</span>   * if interrupted while waiting for the lock.<a name="line.8040"></a>
-<span class="sourceLineNo">8041</span>   */<a name="line.8041"></a>
-<span class="sourceLineNo">8042</span>  private void lock(final Lock lock, final int multiplier)<a name="line.8042"></a>
-<span class="sourceLineNo">8043</span>      throws RegionTooBusyException, InterruptedIOException {<a name="line.8043"></a>
-<span class="sourceLineNo">8044</span>    try {<a name="line.8044"></a>
-<span class="sourceLineNo">8045</span>      final long waitTime = Math.min(maxBusyWaitDuration,<a name="line.8045"></a>
-<span class="sourceLineNo">8046</span>          busyWaitDuration * Math.min(multiplier, maxBusyWaitMultiplier));<a name="line.8046"></a>
-<span class="sourceLineNo">8047</span>      if (!lock.tryLock(waitTime, TimeUnit.MILLISECONDS)) {<a name="line.8047"></a>
-<span class="sourceLineNo">8048</span>        throw new RegionTooBusyException(<a name="line.8048"></a>
-<span class="sourceLineNo">8049</span>            "failed to get a lock in " + waitTime + " ms. " +<a name="line.8049"></a>
-<span class="sourceLineNo">8050</span>                "regionName=" + (this.getRegionInfo() == null ? "unknown" :<a name="line.8050"></a>
-<span class="sourceLineNo">8051</span>                this.getRegionInfo().getRegionNameAsString()) +<a name="line.8051"></a>
-<span class="sourceLineNo">8052</span>                ", server=" + (this.getRegionServerServices() == null ? "unknown" :<a name="line.8052"></a>
-<span class="sourceLineNo">8053</span>                this.getRegionServerServices().getServerName()));<a name="line.8053"></a>
-<span class="sourceLineNo">8054</span>      }<a name="line.8054"></a>
-<span class="sourceLineNo">8055</span>    } catch (InterruptedException ie) {<a name="line.8055"></a>
-<span class="sourceLineNo">8056</span>      LOG.info("Interrupted while waiting for a lock");<a name="line.8056"></a>
-<span class="sourceLineNo">8057</span>      InterruptedIOException iie = new InterruptedIOException();<a name="line.8057"></a>
-<span class="sourceLineNo">8058</span>      iie.initCause(ie);<a name="line.8058"></a>
-<span class="sourceLineNo">8059</span>      throw iie;<a name="line.8059"></a>
-<span class="sourceLineNo">8060</span>    }<a name="line.8060"></a>
-<span class="sourceLineNo">8061</span>  }<a name="line.8061"></a>
-<span class="sourceLineNo">8062</span><a name="line.8062"></a>
-<span class="sourceLineNo">8063</span>  /**<a name="line.8063"></a>
-<span class="sourceLineNo">8064</span>   * Calls sync with the given transaction ID<a name="line.8064"></a>
-<span class="sourceLineNo">8065</span>   * @param txid should sync up to which transaction<a name="line.8065"></a>
-<span class="sourceLineNo">8066</span>   * @throws IOException If anything goes wrong with DFS<a name="line.8066"></a>
-<span class="sourceLineNo">8067</span>   */<a name="line.8067"></a>
-<span class="sourceLineNo">8068</span>  private void sync(long txid, Durability durability) throws IOException {<a name="line.8068"></a>
-<span class="sourceLineNo">8069</span>    if (this.getRegionInfo().isMetaRegion()) {<a name="line.8069"></a>
-<span class="sourceLineNo">8070</span>      this.wal.sync(txid);<a name="line.8070"></a>
-<span class="sourceLineNo">8071</span>    } else {<a name="line.8071"></a>
-<span class="sourceLineNo">8072</span>      switch(durability) {<a name="line.8072"></a>
-<span class="sourceLineNo">8073</span>      case USE_DEFAULT:<a name="line.8073"></a>
-<span class="sourceLineNo">8074</span>        // do what table defaults to<a name="line.8074"></a>
-<span class="sourceLineNo">8075</span>        if (shouldSyncWAL()) {<a name="line.8075"></a>
-<span class="sourceLineNo">8076</span>          this.wal.sync(txid);<a name="line.8076"></a>
-<span class="sourceLineNo">8077</span>        }<a name="line.8077"></a>
-<span class="sourceLineNo">8078</span>        break;<a name="line.8078"></a>
-<span class="sourceLineNo">8079</span>      case SKIP_WAL:<a name="line.8079"></a>
-<span class="sourceLineNo">8080</span>        // nothing do to<a name="line.8080"></a>
-<span class="sourceLineNo">8081</span>        break;<a name="line.8081"></a>
-<span class="sourceLineNo">8082</span>      case ASYNC_WAL:<a name="line.8082"></a>
-<span class="sourceLineNo">8083</span>        // nothing do to<a name="line.8083"></a>
-<span class="sourceLineNo">8084</span>        break;<a name="line.8084"></a>
-<span class="sourceLineNo">8085</span>      case SYNC_WAL:<a name="line.8085"></a>
-<span class="sourceLineNo">8086</span>      case FSYNC_WAL:<a name="line.8086"></a>
-<span class="sourceLineNo">8087</span>        // sync the WAL edit (SYNC and FSYNC treated the same for now)<a name="line.8087"></a>
-<span class="sourceLineNo">8088</span>        this.wal.sync(txid);<a name="line.8088"></a>
-<span class="sourceLineNo">8089</span>        break;<a name="line.8089"></a>
-<span class="sourceLineNo">8090</span>      default:<a name="line.8090"></a>
-<span class="sourceLineNo">8091</span>        throw new RuntimeException("Unknown durability " + durability);<a name="line.8091"></a>
-<span class="sourceLineNo">8092</span>      }<a name="line.8092"></a>
-<span class="sourceLineNo">8093</span>    }<a name="line.8093"></a>
-<span class="sourceLineNo">8094</span>  }<a name="line.8094"></a>
-<span class="sourceLineNo">8095</span><a name="line.8095"></a>
-<span class="sourceLineNo">8096</span>  /**<a name="line.8096"></a>
-<span class="sourceLineNo">8097</span>   * Check whether we should sync the wal from the table's durability settings<a name="line.8097"></a>
-<span class="sourceLineNo">8098</span>   */<a name="line.8098"></a>
-<span class="sourceLineNo">8099</span>  private boolean shouldSyncWAL() {<a name="line.8099"></a>
-<span class="sourceLineNo">8100</span>    return durability.ordinal() &gt;  Durability.ASYNC_WAL.ordinal();<a name="line.8100"></a>
-<span class="sourceLineNo">8101</span>  }<a name="line.8101"></a>
-<span class="sourceLineNo">8102</span><a name="line.8102"></a>
-<span class="sourceLineNo">8103</span>  /**<a name="line.8103"></a>
-<span class="sourceLineNo">8104</span>   * A mocked list implementation - discards all updates.<a name="line.8104"></a>
-<span class="sourceLineNo">8105</span>   */<a name="line.8105"></a>
-<span class="sourceLineNo">8106</span>  private static final List&lt;Cell&gt; MOCKED_LIST = new AbstractList&lt;Cell&gt;() {<a name="line.8106"></a>
-<span class="sourceLineNo">8107</span><a name="line.8107"></a>
-<span class="sourceLineNo">8108</span>    @Override<a name="line.8108"></a>
-<span class="sourceLineNo">8109</span>    public void add(int index, Cell element) {<a name="line.8109"></a>
-<span class="sourceLineNo">8110</span>      // do nothing<a name="line.8110"></a>
-<span class="sourceLineNo">8111</span>    }<a name="line.8111"></a>
-<span class="sourceLineNo">8112</span><a name="line.8112"></a>
-<span class="sourceLineNo">8113</span>    @Override<a name="line.8113"></a>
-<span class="sourceLineNo">8114</span>    public boolean addAll(int index, Collection&lt;? extends Cell&gt; c) {<a name="line.8114"></a>
-<span class="sourceLineNo">8115</span>      return false; // this list is never changed as a result of an update<a name="line.8115"></a>
-<span class="sourceLineNo">8116</span>    }<a name="line.8116"></a>
-<span class="sourceLineNo">8117</span><a name="line.8117"></a>
-<span class="sourceLineNo">8118</span>    @Override<a name="line.8118"></a>
-<span class="sourceLineNo">8119</span>    public KeyValue get(int index) {<a name="line.8119"></a>
-<span class="sourceLineNo">8120</span>      throw new UnsupportedOperationException();<a name="line.8120"></a>
-<span class="sourceLineNo">8121</span>    }<a name="line.8121"></a>
-<span class="sourceLineNo">8122</span><a name="line.8122"></a>
-<span class="sourceLineNo">8123</span>    @Override<a name="line.8123"></a>
-<span class="sourceLineNo">8124</span>    public int size() {<a name="line.8124"></a>
-<span class="sourceLineNo">8125</span>      return 0;<a name="line.8125"></a>
-<span class="sourceLineNo">8126</span>    }<a name="line.8126"></a>
-<span class="sourceLineNo">8127</span>  };<a name="line.8127"></a>
-<span class="sourceLineNo">8128</span><a name="line.8128"></a>
-<span class="sourceLineNo">8129</span>  @Override<a name="line.8129"></a>
-<span class="sourceLineNo">8130</span>  public long getOpenSeqNum() {<a name="line.8130"></a>
-<span class="sourceLineNo">8131</span>    return this.openSeqNum;<a name="line.8131"></a>
-<span class="sourceLineNo">8132</span>  }<a name="line.8132"></a>
-<span class="sourceLineNo">8133</span><a name="line.8133"></a>
-<span class="sourceLineNo">8134</span>  @Override<a name="line.8134"></a>
-<span class="sourceLineNo">8135</span>  public Map&lt;byte[], Long&gt; getMaxStoreSeqId() {<a name="line.8135"></a>
-<span class="sourceLineNo">8136</span>    return this.maxSeqIdInStores;<a name="line.8136"></a>
-<span class="sourceLineNo">8137</span>  }<a name="line.8137"></a>
-<span class="sourceLineNo">8138</span><a name="line.8138"></a>
-<span class="sourceLineNo">8139</span>  @Override<a name="line.8139"></a>
-<span class="sourceLineNo">8140</span>  public long getOldestSeqIdOfStore(byte[] familyName) {<a name="line.8140"></a>
-<span class="sourceLineNo">8141</span>    return wal.getEarliestMemstoreSeqNum(getRegionInfo().getEncodedNameAsBytes(), familyName);<a name="line.8141"></a>
-<span class="sourceLineNo">8142</span>  }<a name="line.8142"></a>
-<span class="sourceLineNo">8143</span><a name="line.8143"></a>
-<span class="sourceLineNo">8144</span>  @Override<a name="line.8144"></a>
-<span class="sourceLineNo">8145</span>  public CompactionState getCompactionState() {<a name="line.8145"></a>
-<span class="sourceLineNo">8146</span>    boolean hasMajor = majorInProgress.get() &gt; 0, hasMinor = minorInProgress.get() &gt; 0;<a name="line.8146"></a>
-<span class="sourceLineNo">8147</span>    return (hasMajor ? (hasMinor ? CompactionState.MAJOR_AND_MINOR : CompactionState.MAJOR)<a name="line.8147"></a>
-<span class="sourceLineNo">8148</span>        : (hasMinor ? CompactionState.MINOR : CompactionState.NONE));<a name="line.8148"></a>
-<span class="sourceLineNo">8149</span>  }<a name="line.8149"></a>
-<span class="sourceLineNo">8150</span><a name="line.8150"></a>
-<span class="sourceLineNo">8151</span>  public void reportCompactionRequestStart(boolean isMajor){<a name="line.8151"></a>
-<span class="sourceLineNo">8152</span>    (isMajor ? majorInProgress : minorInProgress).incrementAndGet();<a name="line.8152"></a>
-<span class="sourceLineNo">8153</span>  }<a name="line.8153"></a>
-<span class="sourceLineNo">8154</span><a name="line.8154"></a>
-<span class="sourceLineNo">8155</span>  public void reportCompactionRequestEnd(boolean isMajor, int numFiles, long filesSizeCompacted) {<a name="line.8155"></a>
-<span class="sourceLineNo">8156</span>    int newValue = (isMajor ? majorInProgress : minorInProgress).decrementAndGet();<a name="line.8156"></a>
-<span class="sourceLineNo">8157</span><a name="line.8157"></a>
-<span class="sourceLineNo">8158</span>    // metrics<a name="line.8158"></a>
-<span class="sourceLineNo">8159</span>    compactionsFinished.incrementAndGet();<a name="line.8159"></a>
-<span class="sourceLineNo">8160</span>    compactionNumFilesCompacted.addAndGet(numFiles);<a name="line.8160"></a>
-<span class="sourceLineNo">8161</span>    compactionNumBytesCompacted.addAndGet(filesSizeCompacted);<a name="line.8161"></a>
-<span class="sourceLineNo">8162</span><a name="line.8162"></a>
-<span class="sourceLineNo">8163</span>    assert newValue &gt;= 0;<a name="line.8163"></a>
-<span class="sourceLineNo">8164</span>  }<a name="line.8164"></a>
-<span class="sourceLineNo">8165</span><a name="line.8165"></a>
-<span class="sourceLineNo">8166</span>  public void reportCompactionRequestFailure() {<a name="line.8166"></a>
-<span class="sourceLineNo">8167</span>    compactionsFailed.incrementAndGet();<a name="line.8167"></a>
-<span class="sourceLineNo">8168</span>  }<a name="line.8168"></a>
-<span class="sourceLineNo">8169</span><a name="line.8169"></a>
-<span class="sourceLineNo">8170</span>  public void incrementCompactionsQueuedCount() {<a name="line.8170"></a>
-<span class="sourceLineNo">8171</span>    compactionsQueued.incrementAndGet();<a name="line.8171"></a>
-<span class="sourceLineNo">8172</span>  }<a name="line.8172"></a>
-<span class="sourceLineNo">8173</span><a name="line.8173"></a>
-<span class="sourceLineNo">8174</span>  public void decrementCompactionsQueuedCount() {<a name="line.8174"></a>
-<span class="sourceLineNo">8175</span>    compactionsQueued.decrementAndGet();<a name="line.8175"></a>
-<span class="sourceLineNo">8176</span>  }<a name="line.8176"></a>
-<span class="sourceLineNo">8177</span><a name="line.8177"></a>
-<span class="sourceLineNo">8178</span>  public void incrementFlushesQueuedCount() {<a name="line.8178"></a>
-<span class="sourceLineNo">8179</span>    flushesQueued.incrementAndGet();<a name="line.8179"></a>
-<span class="sourceLineNo">8180</span>  }<a name="line.8180"></a>
-<span class="sourceLineNo">8181</span><a name="line.8181"></a>
-<span class="sourceLineNo">8182</span>  @VisibleForTesting<a name="line.8182"></a>
-<span class="sourceLineNo">8183</span>  public long getReadPoint() {<a name="line.8183"></a>
-<span class="sourceLineNo">8184</span>    return getReadPoint(IsolationLevel.READ_COMMITTED);<a name="line.8184"></a>
+<span class="sourceLineNo">8032</span>    long mutationSize = 0;<a name="line.8032"></a>
+<span class="sourceLineNo">8033</span>    for (List&lt;Cell&gt; cells: familyMap.values()) {<a name="line.8033"></a>
+<span class="sourceLineNo">8034</span>      assert cells instanceof RandomAccess;<a name="line.8034"></a>
+<span class="sourceLineNo">8035</span>      int listSize = cells.size();<a name="line.8035"></a>
+<span class="sourceLineNo">8036</span>      for (int i=0; i &lt; listSize; i++) {<a name="line.8036"></a>
+<span class="sourceLineNo">8037</span>        Cell cell = cells.get(i);<a name="line.8037"></a>
+<span class="sourceLineNo">8038</span>        mutationSize += KeyValueUtil.length(cell);<a name="line.8038"></a>
+<span class="sourceLineNo">8039</span>      }<a name="line.8039"></a>
+<span class="sourceLineNo">8040</span>    }<a name="line.8040"></a>
+<span class="sourceLineNo">8041</span><a name="line.8041"></a>
+<span class="sourceLineNo">8042</span>    dataInMemoryWithoutWAL.add(mutationSize);<a name="line.8042"></a>
+<span class="sourceLineNo">8043</span>  }<a name="line.8043"></a>
+<span class="sourceLineNo">8044</span><a name="line.8044"></a>
+<span class="sourceLineNo">8045</span>  private void lock(final Lock lock)<a name="line.8045"></a>
+<span class="sourceLineNo">8046</span>      throws RegionTooBusyException, InterruptedIOException {<a name="line.8046"></a>
+<span class="sourceLineNo">8047</span>    lock(lock, 1);<a name="line.8047"></a>
+<span class="sourceLineNo">8048</span>  }<a name="line.8048"></a>
+<span class="sourceLineNo">8049</span><a name="line.8049"></a>
+<span class="sourceLineNo">8050</span>  /**<a name="line.8050"></a>
+<span class="sourceLineNo">8051</span>   * Try to acquire a lock.  Throw RegionTooBusyException<a name="line.8051"></a>
+<span class="sourceLineNo">8052</span>   * if failed to get the lock in time. Throw InterruptedIOException<a name="line.8052"></a>
+<span class="sourceLineNo">8053</span>   * if interrupted while waiting for the lock.<a name="line.8053"></a>
+<span class="sourceLineNo">8054</span>   */<a name="line.8054"></a>
+<span class="sourceLineNo">8055</span>  private void lock(final Lock lock, final int multiplier)<a name="line.8055"></a>
+<span class="sourceLineNo">8056</span>      throws RegionTooBusyException, InterruptedIOException {<a name="line.8056"></a>
+<span class="sourceLineNo">8057</span>    try {<a name="line.8057"></a>
+<span class="sourceLineNo">8058</span>      final long waitTime = Math.min(maxBusyWaitDuration,<a name="line.8058"></a>
+<span class="sourceLineNo">8059</span>          busyWaitDuration * Math.min(multiplier, maxBusyWaitMultiplier));<a name="line.8059"></a>
+<span class="sourceLineNo">8060</span>      if (!lock.tryLock(waitTime, TimeUnit.MILLISECONDS)) {<a name="line.8060"></a>
+<span class="sourceLineNo">8061</span>        throw new RegionTooBusyException(<a name="line.8061"></a>
+<span class="sourceLineNo">8062</span>            "failed to get a lock in " + waitTime + " ms. " +<a name="line.8062"></a>
+<span class="sourceLineNo">8063</span>                "regionName=" + (this.getRegionInfo() == null ? "unknown" :<a name="line.8063"></a>
+<span class="sourceLineNo">8064</span>                this.getRegionInfo().getRegionNameAsString()) +<a name="line.8064"></a>
+<span class="sourceLineNo">8065</span>                ", server=" + (this.getRegionServerServices() == null ? "unknown" :<a name="line.8065"></a>
+<span class="sourceLineNo">8066</span>                this.getRegionServerServices().getServerName()));<a name="line.8066"></a>
+<span class="sourceLineNo">8067</span>      }<a name="line.8067"></a>
+<span class="sourceLineNo">8068</span>    } catch (InterruptedException ie) {<a name="line.8068"></a>
+<span class="sourceLineNo">8069</span>      LOG.info("Interrupted while waiting for a lock");<a name="line.8069"></a>
+<span class="sourceLineNo">8070</span>      InterruptedIOException iie = new InterruptedIOException();<a name="line.8070"></a>
+<span class="sourceLineNo">8071</span>      iie.initCause(ie);<a name="line.8071"></a>
+<span class="sourceLineNo">8072</span>      throw iie;<a name="line.8072"></a>
+<span class="sourceLineNo">8073</span>    }<a name="line.8073"></a>
+<span class="sourceLineNo">8074</span>  }<a name="line.8074"></a>
+<span class="sourceLineNo">8075</span><a name="line.8075"></a>
+<span class="sourceLineNo">8076</span>  /**<a name="line.8076"></a>
+<span class="sourceLineNo">8077</span>   * Calls sync with the given transaction ID<a name="line.8077"></a>
+<span class="sourceLineNo">8078</span>   * @param txid should sync up to which transaction<a name="line.8078"></a>
+<span class="sourceLineNo">8079</span>   * @throws IOException If anything goes wrong with DFS<a name="line.8079"></a>
+<span class="sourceLineNo">8080</span>   */<a name="line.8080"></a>
+<span class="sourceLineNo">8081</span>  private void sync(long txid, Durability durability) throws IOException {<a name="line.8081"></a>
+<span class="sourceLineNo">8082</span>    if (this.getRegionInfo().isMetaRegion()) {<a name="line.8082"></a>
+<span class="sourceLineNo">8083</span>      this.wal.sync(txid);<a name="line.8083"></a>
+<span class="sourceLineNo">8084</span>    } else {<a name="line.8084"></a>
+<span class="sourceLineNo">8085</span>      switch(durability) {<a name="line.8085"></a>
+<span class="sourceLineNo">8086</span>      case USE_DEFAULT:<a name="line.8086"></a>
+<span class="sourceLineNo">8087</span>        // do what table defaults to<a name="line.8087"></a>
+<span class="sourceLineNo">8088</span>        if (shouldSyncWAL()) {<a name="line.8088"></a>
+<span class="sourceLineNo">8089</span>          this.wal.sync(txid);<a name="line.8089"></a>
+<span class="sourceLineNo">8090</span>        }<a name="line.8090"></a>
+<span class="sourceLineNo">8091</span>        break;<a name="line.8091"></a>
+<span class="sourceLineNo">8092</span>      case SKIP_WAL:<a name="line.8092"></a>
+<span class="sourceLineNo">8093</span>        // nothing do to<a name="line.8093"></a>
+<span class="sourceLineNo">8094</span>        break;<a name="line.8094"></a>
+<span class="sourceLineNo">8095</span>      case ASYNC_WAL:<a name="line.8095"></a>
+<span class="sourceLineNo">8096</span>        // nothing do to<a name="line.8096"></a>
+<span class="sourceLineNo">8097</span>        break;<a name="line.8097"></a>
+<span class="sourceLineNo">8098</span>      case SYNC_WAL:<a name="line.8098"></a>
+<span class="sourceLineNo">8099</span>      case FSYNC_WAL:<a name="line.8099"></a>
+<span class="sourceLineNo">8100</span>        // sync the WAL edit (SYNC and FSYNC treated the same for now)<a name="line.8100"></a>
+<span class="sourceLineNo">8101</span>        this.wal.sync(txid);<a name="line.8101"></a>
+<span class="sourceLineNo">8102</span>        break;<a name="line.8102"></a>
+<span class="sourceLineNo">8103</span>      default:<a name="line.8103"></a>
+<span class="sourceLineNo">8104</span>        throw new RuntimeException("Unknown durability " + durability);<a name="line.8104"></a>
+<span class="sourceLineNo">8105</span>      }<a name="line.8105"></a>
+<span class="sourceLineNo">8106</span>    }<a name="line.8106"></a>
+<span class="sourceLineNo">8107</span>  }<a name="line.8107"></a>
+<span class="sourceLineNo">8108</span><a name="line.8108"></a>
+<span class="sourceLineNo">8109</span>  /**<a name="line.8109"></a>
+<span class="sourceLineNo">8110</span>   * Check whether we should sync the wal from the table's durability settings<a name="line.8110"></a>
+<span class="sourceLineNo">8111</span>   */<a name="line.8111"></a>
+<span class="sourceLineNo">8112</span>  private boolean shouldSyncWAL() {<a name="line.8112"></a>
+<span class="sourceLineNo">8113</span>    return durability.ordinal() &gt;  Durability.ASYNC_WAL.ordinal();<a name="line.8113"></a>
+<span class="sourceLineNo">8114</span>  }<a name="line.8114"></a>
+<span class="sourceLineNo">8115</span><a name="line.8115"></a>
+<span class="sourceLineNo">8116</span>  /**<a name="line.8116"></a>
+<span class="sourceLineNo">8117</span>   * A mocked list implementation - discards all updates.<a name="line.8117"></a>
+<span class="sourceLineNo">8118</span>   */<a name="line.8118"></a>
+<span class="sourceLineNo">8119</span>  private static final List&lt;Cell&gt; MOCKED_LIST = new AbstractList&lt;Cell&gt;() {<a name="line.8119"></a>
+<span class="sourceLineNo">8120</span><a name="line.8120"></a>
+<span class="sourceLineNo">8121</span>    @Override<a name="line.8121"></a>
+<span class="sourceLineNo">8122</span>    public void add(int index, Cell element) {<a name="line.8122"></a>
+<span class="sourceLineNo">8123</span>      // do nothing<a name="line.8123"></a>
+<span class="sourceLineNo">8124</span>    }<a name="line.8124"></a>
+<span class="sourceLineNo">8125</span><a name="line.8125"></a>
+<span class="sourceLineNo">8126</span>    @Override<a name="line.8126"></a>
+<span class="sourceLineNo">8127</span>    public boolean addAll(int index, Collection&lt;? extends Cell&gt; c) {<a name="line.8127"></a>
+<span class="sourceLineNo">8128</span>      return false; // this list is never changed as a result of an update<a name="line.8128"></a>
+<span class="sourceLineNo">8129</span>    }<a name="line.8129"></a>
+<span class="sourceLineNo">8130</span><a name="line.8130"></a>
+<span class="sourceLineNo">8131</span>    @Override<a name="line.8131"></a>
+<span class="sourceLineNo">8132</span>    public KeyValue get(int index) {<a name="line.8132"></a>
+<span class="sourceLineNo">8133</span>      throw new UnsupportedOperationException();<a name="line.8133"></a>
+<span class="sourceLineNo">8134</span>    }<a name="line.8134"></a>
+<span class="sourceLineNo">8135</span><a name="line.8135"></a>
+<span class="sourceLineNo">8136</span>    @Override<a name="line.8136"></a>
+<span class="sourceLineNo">8137</span>    public int size() {<a name="line.8137"></a>
+<span class="sourceLineNo">8138</span>      return 0;<a name="line.8138"></a>
+<span class="sourceLineNo">8139</span>    }<a name="line.8139"></a>
+<span class="sourceLineNo">8140</span>  };<a name="line.8140"></a>
+<span class="sourceLineNo">8141</span><a name="line.8141"></a>
+<span class="sourceLineNo">8142</span>  @Override<a name="line.8142"></a>
+<span class="sourceLineNo">8143</span>  public long getOpenSeqNum() {<a name="line.8143"></a>
+<span class="sourceLineNo">8144</span>    return this.openSeqNum;<a name="line.8144"></a>
+<span class="sourceLineNo">8145</span>  }<a name="line.8145"></a>
+<span class="sourceLineNo">8146</span><a name="line.8146"></a>
+<span class="sourceLineNo">8147</span>  @Override<a name="line.8147"></a>
+<span class="sourceLineNo">8148</span>  public Map&lt;byte[], Long&gt; getMaxStoreSeqId() {<a name="line.8148"></a>
+<span class="sourceLineNo">8149</span>    return this.maxSeqIdInStores;<a name="line.8149"></a>
+<span class="sourceLineNo">8150</span>  }<a name="line.8150"></a>
+<span class="sourceLineNo">8151</span><a name="line.8151"></a>
+<span class="sourceLineNo">8152</span>  @Override<a name="line.8152"></a>
+<span class="sourceLineNo">8153</span>  public long getOldestSeqIdOfStore(byte[] familyName) {<a name="line.8153"></a>
+<span class="sourceLineNo">8154</span>    return wal.getEarliestMemstoreSeqNum(getRegionInfo().getEncodedNameAsBytes(), familyName);<a name="line.8154"></a>
+<span class="sourceLineNo">8155</span>  }<a name="line.8155"></a>
+<span class="sourceLineNo">8156</span><a name="line.8156"></a>
+<span class="sourceLineNo">8157</span>  @Override<a name="line.8157"></a>
+<span class="sourceLineNo">8158</span>  public CompactionState getCompactionState() {<a name="line.8158"></a>
+<span class="sourceLineNo">8159</span>    boolean hasMajor = majorInProgress.get() &gt; 0, hasMinor = minorInProgress.get() &gt; 0;<a name="line.8159"></a>
+<span class="sourceLineNo">8160</span>    return (hasMajor ? (hasMinor ? CompactionState.MAJOR_AND_MINOR : CompactionState.MAJOR)<a name="line.8160"></a>
+<span class="sourceLineNo">8161</span>        : (hasMinor ? CompactionState.MINOR : CompactionState.NONE));<a name="line.8161"></a>
+<span class="sourceLineNo">8162</span>  }<a name="line.8162"></a>
+<span class="sourceLineNo">8163</span><a name="line.8163"></a>
+<span class="sourceLineNo">8164</span>  public void reportCompactionRequestStart(boolean isMajor){<a name="line.8164"></a>
+<span class="sourceLineNo">8165</span>    (isMajor ? majorInProgress : minorInProgress).incrementAndGet();<a name="line.8165"></a>
+<span class="sourceLineNo">8166</span>  }<a name="line.8166"></a>
+<span class="sourceLineNo">8167</span><a name="line.8167"></a>
+<span class="sourceLineNo">8168</span>  public void reportCompactionRequestEnd(boolean isMajor, int numFiles, long filesSizeCompacted) {<a name="line.8168"></a>
+<span class="sourceLineNo">8169</span>    int newValue = (isMajor ? majorInProgress : minorInProgress).decrementAndGet();<a name="line.8169"></a>
+<span class="sourceLineNo">8170</span><a name="line.8170"></a>
+<span class="sourceLineNo">8171</span>    // metrics<a name="line.8171"></a>
+<span class="sourceLineNo">8172</span>    compactionsFinished.incrementAndGet();<a name="line.8172"></a>
+<span class="sourceLineNo">8173</span>    compactionNumFilesCompacted.addAndGet(numFiles);<a name="line.8173"></a>
+<span class="sourceLineNo">8174</span>    compactionNumBytesCompacted.addAndGet(filesSizeCompacted);<a name="line.8174"></a>
+<span class="sourceLineNo">8175</span><a name="line.8175"></a>
+<span class="sourceLineNo">8176</span>    assert newValue &gt;= 0;<a name="line.8176"></a>
+<span class="sourceLineNo">8177</span>  }<a name="line.8177"></a>
+<span class="sourceLineNo">8178</span><a name="line.8178"></a>
+<span class="sourceLineNo">8179</span>  public void reportCompactionRequestFailure() {<a name="line.8179"></a>
+<span class="sourceLineNo">8180</span>    compactionsFailed.incrementAndGet();<a name="line.8180"></a>
+<span class="sourceLineNo">8181</span>  }<a name="line.8181"></a>
+<span class="sourceLineNo">8182</span><a name="line.8182"></a>
+<span class="sourceLineNo">8183</span>  public void incrementCompactionsQueuedCount() {<a name="line.8183"></a>
+<span class="sourceLineNo">8184</span>    compactionsQueued.incrementAndGet();<a name="line.8184"></a>
 <span class="sourceLineNo">8185</span>  }<a name="line.8185"></a>
 <span class="sourceLineNo">8186</span><a name="line.8186"></a>
-<span class="sourceLineNo">8187</span>  /**<a name="line.8187"></a>
-<span class="sourceLineNo">8188</span>   * {@inheritDoc}<a name="line.8188"></a>
-<span class="sourceLineNo">8189</span>   */<a name="line.8189"></a>
-<span class="sourceLineNo">8190</span>  @Override<a name="line.8190"></a>
-<span class="sourceLineNo">8191</span>  public void onConfigurationChange(Configuration conf) {<a name="line.8191"></a>
-<span class="sourceLineNo">8192</span>    // Do nothing for now.<a name="line.8192"></a>
+<span class="sourceLineNo">8187</span>  public void decrementCompactionsQueuedCount() {<a name="line.8187"></a>
+<span class="sourceLineNo">8188</span>    compactionsQueued.decrementAndGet();<a name="line.8188"></a>
+<span class="sourceLineNo">8189</span>  }<a name="line.8189"></a>
+<span class="sourceLineNo">8190</span><a name="line.8190"></a>
+<span class="sourceLineNo">8191</span>  public void incrementFlushesQueuedCount() {<a name="line.8191"></a>
+<span class="sourceLineNo">8192</span>    flushesQueued.incrementAndGet();<a name="line.8192"></a>
 <span class="sourceLineNo">8193</span>  }<a name="line.8193"></a>
 <span class="sourceLineNo">8194</span><a name="line.8194"></a>
-<span class="sourceLineNo">8195</span>  /**<a name="line.8195"></a>
-<span class="sourceLineNo">8196</span>   * {@inheritDoc}<a name="line.8196"></a>
-<span class="sourceLineNo">8197</span>   */<a name="line.8197"></a>
-<span class="sourceLineNo">8198</span>  @Override<a name="line.8198"></a>
-<span class="sourceLineNo">8199</span>  public void registerChildren(ConfigurationManager manager) {<a name="line.8199"></a>
-<span class="sourceLineNo">8200</span>    configurationManager = Optional.of(manager);<a name="line.8200"></a>
-<span class="sourceLineNo">8201</span>    for (Store s : this.stores.values()) {<a name="line.8201"></a>
-<span class="sourceLineNo">8202</span>      configurationManager.get().registerObserver(s);<a name="line.8202"></a>
-<span class="sourceLineNo">8203</span>    }<a name="line.8203"></a>
-<span class="sourceLineNo">8204</span>  }<a name="line.8204"></a>
-<span class="sourceLineNo">8205</span><a name="line.8205"></a>
-<span class="sourceLineNo">8206</span>  /**<a name="line.8206"></a>
-<span class="sourceLineNo">8207</span>   * {@inheritDoc}<a name="line.8207"></a>
-<span class="sourceLineNo">8208</span>   */<a name="line.8208"></a>
-<span class="sourceLineNo">8209</span>  @Override<a name="line.8209"></a>
-<span class="sourceLineNo">8210</span>  public void deregisterChildren(ConfigurationManager manager) {<a name="line.8210"></a>
-<span class="sourceLineNo">8211</span>    for (Store s : this.stores.values()) {<a name="line.8211"></a>
-<span class="sourceLineNo">8212</span>      configurationManager.get().deregisterObserver(s);<a name="line.8212"></a>
-<span class="sourceLineNo">8213</span>    }<a name="line.8213"></a>
-<span class="sourceLineNo">8214</span>  }<a name="line.8214"></a>
-<span class="sourceLineNo">8215</span><a name="line.8215"></a>
-<span class="sourceLineNo">8216</span>  @Override<a name="line.8216"></a>
-<span class="sourceLineNo">8217</span>  public CellComparator getCellComparator() {<a name="line.8217"></a>
-<span class="sourceLineNo">8218</span>    return this.getRegionInfo().isMetaRegion() ? CellComparator.META_COMPARATOR<a name="line.8218"></a>
-<span class="sourceLineNo">8219</span>        : CellComparator.COMPARATOR;<a name="line.8219"></a>
-<span class="sourceLineNo">8220</span>  }<a name="line.8220"></a>
-<span class="sourceLineNo">8221</span><a name="line.8221"></a>
-<span class="sourceLineNo">8222</span>  public long getMemstoreFlushSize() {<a name="line.8222"></a>
-<span class="sourceLineNo">8223</span>    return this.memstoreFlushSize;<a name="line.8223"></a>
-<span class="sourceLineNo">8224</span>  }<a name="line.8224"></a>
-<span class="sourceLineNo">8225</span><a name="line.8225"></a>
-<span class="sourceLineNo">8226</span>  //// method for debugging tests<a name="line.8226"></a>
-<span class="sourceLineNo">8227</span>  void throwException(String title, String regionName) {<a name="line.8227"></a>
-<span class="sourceLineNo">8228</span>    StringBuffer buf = new StringBuffer();<a name="line.8228"></a>
-<span class="sourceLineNo">8229</span>    buf.append(title + ", ");<a name="line.8229"></a>
-<span class="sourceLineNo">8230</span>    buf.append(getRegionInfo().toString());<a name="line.8230"></a>
-<span class="sourceLineNo">8231</span>    buf.append(getRegionInfo().isMetaRegion() ? " meta region " : " ");<a name="line.8231"></a>
-<span class="sourceLineNo">8232</span>    buf.append(getRegionInfo().isMetaTable() ? " meta table " : " ");<a name="line.8232"></a>
-<span class="sourceLineNo">8233</span>    buf.append("stores: ");<a name="line.8233"></a>
-<span class="sourceLineNo">8234</span>    for (Store s : getStores()) {<a name="line.8234"></a>
-<span class="sourceLineNo">8235</span>      buf.append(s.getColumnFamilyDescriptor().getNameAsString());<a name="line.8235"></a>
-<span class="sourceLineNo">8236</span>      buf.append(" size: ");<a name="line.8236"></a>
-<span class="sourceLineNo">8237</span>      buf.append(s.getSizeOfMemStore().getDataSize());<a name="line.8237"></a>
-<span class="sourceLineNo">8238</span>      buf.append(" ");<a name="line.8238"></a>
-<span class="sourceLineNo">8239</span>    }<a name="line.8239"></a>
-<span class="sourceLineNo">8240</span>    buf.append("end-of-stores");<a name="line.8240"></a>
-<span class="sourceLineNo">8241</span>    buf.append(", memstore size ");<a name="line.8241"></a>
-<span class="sourceLineNo">8242</span>    buf.append(getMemstoreSize());<a name="line.8242"></a>
-<span class="sourceLineNo">8243</span>    if (getRegionInfo().getRegionNameAsString().startsWith(regionName)) {<a name="line.8243"></a>
-<span class="sourceLineNo">8244</span>      throw new RuntimeException(buf.toString());<a name="line.8244"></a>
-<span class="sourceLineNo">8245</span>    }<a name="line.8245"></a>
-<span class="sourceLineNo">8246</span>  }<a name="line.8246"></a>
-<span class="sourceLineNo">8247</span>}<a name="line.8247"></a>
+<span class="sourceLineNo">8195</span>  @VisibleForTesting<a name="line.8195"></a>
+<span class="sourceLineNo">8196</span>  public long getReadPoint() {<a name="line.8196"></a>
+<span class="sourceLineNo">8197</span>    return getReadPoint(IsolationLevel.READ_COMMITTED);<a name="line.8197"></a>
+<span class="sourceLineNo">8198</span>  }<a name="line.8198"></a>
+<span class="sourceLineNo">8199</span><a name="line.8199"></a>
+<span class="sourceLineNo">8200</span>  /**<a name="line.8200"></a>
+<span class="sourceLineNo">8201</span>   * {@inheritDoc}<a name="line.8201"></a>
+<span class="sourceLineNo">8202</span>   */<a name="line.8202"></a>
+<span class="sourceLineNo">8203</span>  @Override<a name="line.8203"></a>
+<span class="sourceLineNo">8204</span>  public void onConfigurationChange(Configuration conf) {<a name="line.8204"></a>
+<span class="sourceLineNo">8205</span>    // Do nothing for now.<a name="line.8205"></a>
+<span class="sourceLineNo">8206</span>  }<a name="line.8206"></a>
+<span class="sourceLineNo">8207</span><a name="line.8207"></a>
+<span class="sourceLineNo">8208</span>  /**<a name="line.8208"></a>
+<span class="sourceLineNo">8209</span>   * {@inheritDoc}<a name="line.8209"></a>
+<span class="sourceLineNo">8210</span>   */<a name="line.8210"></a>
+<span class="sourceLineNo">8211</span>  @Override<a name="line.8211"></a>
+<span class="sourceLineNo">8212</span>  public void registerChildren(ConfigurationManager manager) {<a name="line.8212"></a>
+<span class="sourceLineNo">8213</span>    configurationManager = Optional.of(manager);<a name="line.8213"></a>
+<span class="sourceLineNo">8214</span>    for (Store s : this.stores.values()) {<a name="line.8214"></a>
+<span class="sourceLineNo">8215</span>      configurationManager.get().registerObserver(s);<a name="line.8215"></a>
+<span class="sourceLineNo">8216</span>    }<a name="line.8216"></a>
+<span class="sourceLineNo">8217</span>  }<a name="line.8217"></a>
+<span class="sourceLineNo">8218</span><a name="line.8218"></a>
+<span class="sourceLineNo">8219</span>  /**<a name="line.8219"></a>
+<span class="sourceLineNo">8220</span>   * {@inheritDoc}<a name="line.8220"></a>
+<span class="sourceLineNo">8221</span>   */<a name="line.8221"></a>
+<span class="sourceLineNo">8222</span>  @Override<a name="line.8222"></a>
+<span class="sourceLineNo">8223</span>  public void deregisterChildren(ConfigurationManager manager) {<a name="line.8223"></a>
+<span class="sourceLineNo">8224</span>    for (Store s : this.stores.values()) {<a name="line.8224"></a>
+<span class="sourceLineNo">8225</span>      configurationManager.get().deregisterObserver(s);<a name="line.8225"></a>
+<span class="sourceLineNo">8226</span>    }<a name="line.8226"></a>
+<span class="sourceLineNo">8227</span>  }<a name="line.8227"></a>
+<span class="sourceLineNo">8228</span><a name="line.8228"></a>
+<span class="sourceLineNo">8229</span>  @Override<a name="line.8229"></a>
+<span class="sourceLineNo">8230</span>  public CellComparator getCellComparator() {<a name="line.8230"></a>
+<span class="sourceLineNo">8231</span>    return this.getRegionInfo().isMetaRegion() ? CellComparator.META_COMPARATOR<a name="line.8231"></a>
+<span class="sourceLineNo">8232</span>        : CellComparator.COMPARATOR;<a name="line.8232"></a>
+<span class="sourceLineNo">8233</span>  }<a name="line.8233"></a>
+<span class="sourceLineNo">8234</span><a name="line.8234"></a>
+<span class="sourceLineNo">8235</span>  public long getMemstoreFlushSize() {<a name="line.8235"></a>
+<span class="sourceLineNo">8236</span>    return this.memstoreFlushSize;<a name="line.8236"></a>
+<span class="sourceLineNo">8237</span>  }<a name="line.8237"></a>
+<span class="sourceLineNo">8238</span><a name="line.8238"></a>
+<span class="sourceLineNo">8239</span>  //// method for debugging tests<a name="line.8239"></a>
+<span class="sourceLineNo">8240</span>  void throwException(String title, String regionName) {<a name="line.8240"></a>
+<span class="sourceLineNo">8241</span>    StringBuffer buf = new StringBuffer();<a name="line.8241"></a>
+<span class="sourceLineNo">8242</span>    buf.append(title + ", ");<a name="line.8242"></a>
+<span class="sourceLineNo">8243</span>    buf.append(getRegionInfo().toString());<a name="line.8243"></a>
+<span class="sourceLineNo">8244</span>    buf.append(getRegionInfo().isMetaRegion() ? " meta region " : " ");<a name="line.8244"></a>
+<span class="sourceLineNo">8245</span>    buf.append(getRegionInfo().isMetaTable() ? " meta table " : " ");<a name="line.8245"></a>
+<span class="sourceLineNo">8246</span>    buf.append("stores: ");<a name="line.8246"></a>
+<span class="sourceLineNo">8247</span>    for (Store s : getStores()) {<a name="line.8247"></a>
+<span class="sourceLineNo">8248</span>      buf.append(s.getColumnFamilyDescriptor().getNameAsString());<a name="line.8248"></a>
+<span class="sourceLineNo">8249</span>      buf.append(" size: ");<a name="line.8249"></a>
+<span class="sourceLineNo">8250</span>      buf.append(s.getSizeOfMemStore().getDataSize());<a name="line.8250"></a>
+<span class="sourceLineNo">8251</span>      buf.append(" ");<a name="line.8251"></a>
+<span class="sourceLineNo">8252</span>    }<a name="line.8252"></a>
+<span class="sourceLineNo">8253</span>    buf.append("end-of-stores");<a name="line.8253"></a>
+<span class="sourceLineNo">8254</span>    buf.append(", memstore size ");<a name="line.8254"></a>
+<span class="sourceLineNo">8255</span>    buf.append(getMemstoreSize());<a name="line.8255"></a>
+<span class="sourceLineNo">8256</span>    if (getRegionInfo().getRegionNameAsString().startsWith(regionName)) {<a name="line.8256"></a>
+<span class="sourceLineNo">8257</span>      throw new RuntimeException(buf.toString());<a name="line.8257"></a>
+<span class="sourceLineNo">8258</span>    }<a name="line.8258"></a>
+<span class="sourceLineNo">8259</span>  }<a name="line.8259"></a>
+<span class="sourceLineNo">8260</span>}<a name="line.8260"></a>
 
 
 


[08/33] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/Region.Operation.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/Region.Operation.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/Region.Operation.html
index b361c26..53efdb2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/Region.Operation.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/Region.Operation.html
@@ -255,7 +255,7 @@
 <span class="sourceLineNo">247</span>   */<a name="line.247"></a>
 <span class="sourceLineNo">248</span>  enum Operation {<a name="line.248"></a>
 <span class="sourceLineNo">249</span>    ANY, GET, PUT, DELETE, SCAN, APPEND, INCREMENT, SPLIT_REGION, MERGE_REGION, BATCH_MUTATE,<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    REPLAY_BATCH_MUTATE, COMPACT_REGION, REPLAY_EVENT<a name="line.250"></a>
+<span class="sourceLineNo">250</span>    REPLAY_BATCH_MUTATE, COMPACT_REGION, REPLAY_EVENT, SNAPSHOT<a name="line.250"></a>
 <span class="sourceLineNo">251</span>  }<a name="line.251"></a>
 <span class="sourceLineNo">252</span><a name="line.252"></a>
 <span class="sourceLineNo">253</span>  /**<a name="line.253"></a>
@@ -285,487 +285,494 @@
 <span class="sourceLineNo">277</span>   */<a name="line.277"></a>
 <span class="sourceLineNo">278</span>  void closeRegionOperation() throws IOException;<a name="line.278"></a>
 <span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span>  // Row write locks<a name="line.280"></a>
-<span class="sourceLineNo">281</span><a name="line.281"></a>
-<span class="sourceLineNo">282</span>  /**<a name="line.282"></a>
-<span class="sourceLineNo">283</span>   * Row lock held by a given thread.<a name="line.283"></a>
-<span class="sourceLineNo">284</span>   * One thread may acquire multiple locks on the same row simultaneously.<a name="line.284"></a>
-<span class="sourceLineNo">285</span>   * The locks must be released by calling release() from the same thread.<a name="line.285"></a>
-<span class="sourceLineNo">286</span>   */<a name="line.286"></a>
-<span class="sourceLineNo">287</span>  public interface RowLock {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    /**<a name="line.288"></a>
-<span class="sourceLineNo">289</span>     * Release the given lock.  If there are no remaining locks held by the current thread<a name="line.289"></a>
-<span class="sourceLineNo">290</span>     * then unlock the row and allow other threads to acquire the lock.<a name="line.290"></a>
-<span class="sourceLineNo">291</span>     * @throws IllegalArgumentException if called by a different thread than the lock owning<a name="line.291"></a>
-<span class="sourceLineNo">292</span>     *     thread<a name="line.292"></a>
-<span class="sourceLineNo">293</span>     */<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    void release();<a name="line.294"></a>
-<span class="sourceLineNo">295</span>  }<a name="line.295"></a>
-<span class="sourceLineNo">296</span><a name="line.296"></a>
-<span class="sourceLineNo">297</span>  /**<a name="line.297"></a>
-<span class="sourceLineNo">298</span>   *<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   * Get a row lock for the specified row. All locks are reentrant.<a name="line.299"></a>
-<span class="sourceLineNo">300</span>   *<a name="line.300"></a>
-<span class="sourceLineNo">301</span>   * Before calling this function make sure that a region operation has already been<a name="line.301"></a>
-<span class="sourceLineNo">302</span>   * started (the calling thread has already acquired the region-close-guard lock).<a name="line.302"></a>
-<span class="sourceLineNo">303</span>   * <a name="line.303"></a>
-<span class="sourceLineNo">304</span>   * NOTE: the boolean passed here has changed. It used to be a boolean that<a name="line.304"></a>
-<span class="sourceLineNo">305</span>   * stated whether or not to wait on the lock. Now it is whether it an exclusive<a name="line.305"></a>
-<span class="sourceLineNo">306</span>   * lock is requested.<a name="line.306"></a>
-<span class="sourceLineNo">307</span>   * <a name="line.307"></a>
-<span class="sourceLineNo">308</span>   * @param row The row actions will be performed against<a name="line.308"></a>
-<span class="sourceLineNo">309</span>   * @param readLock is the lock reader or writer. True indicates that a non-exclusive<a name="line.309"></a>
-<span class="sourceLineNo">310</span>   * lock is requested<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   * @see #startRegionOperation()<a name="line.311"></a>
-<span class="sourceLineNo">312</span>   * @see #startRegionOperation(Operation)<a name="line.312"></a>
-<span class="sourceLineNo">313</span>   */<a name="line.313"></a>
-<span class="sourceLineNo">314</span>  RowLock getRowLock(byte[] row, boolean readLock) throws IOException;<a name="line.314"></a>
-<span class="sourceLineNo">315</span><a name="line.315"></a>
-<span class="sourceLineNo">316</span>  /**<a name="line.316"></a>
-<span class="sourceLineNo">317</span>   * If the given list of row locks is not null, releases all locks.<a name="line.317"></a>
-<span class="sourceLineNo">318</span>   */<a name="line.318"></a>
-<span class="sourceLineNo">319</span>  void releaseRowLocks(List&lt;RowLock&gt; rowLocks);<a name="line.319"></a>
-<span class="sourceLineNo">320</span><a name="line.320"></a>
-<span class="sourceLineNo">321</span>  ///////////////////////////////////////////////////////////////////////////<a name="line.321"></a>
-<span class="sourceLineNo">322</span>  // Region operations<a name="line.322"></a>
-<span class="sourceLineNo">323</span><a name="line.323"></a>
-<span class="sourceLineNo">324</span>  /**<a name="line.324"></a>
-<span class="sourceLineNo">325</span>   * Perform one or more append operations on a row.<a name="line.325"></a>
-<span class="sourceLineNo">326</span>   * @param append<a name="line.326"></a>
-<span class="sourceLineNo">327</span>   * @param nonceGroup<a name="line.327"></a>
-<span class="sourceLineNo">328</span>   * @param nonce<a name="line.328"></a>
-<span class="sourceLineNo">329</span>   * @return result of the operation<a name="line.329"></a>
-<span class="sourceLineNo">330</span>   * @throws IOException<a name="line.330"></a>
-<span class="sourceLineNo">331</span>   */<a name="line.331"></a>
-<span class="sourceLineNo">332</span>  Result append(Append append, long nonceGroup, long nonce) throws IOException;<a name="line.332"></a>
-<span class="sourceLineNo">333</span><a name="line.333"></a>
-<span class="sourceLineNo">334</span>  /**<a name="line.334"></a>
-<span class="sourceLineNo">335</span>   * Perform a batch of mutations.<a name="line.335"></a>
-<span class="sourceLineNo">336</span>   * &lt;p&gt;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>   * Note this supports only Put and Delete mutations and will ignore other types passed.<a name="line.337"></a>
-<span class="sourceLineNo">338</span>   * @param mutations the list of mutations<a name="line.338"></a>
-<span class="sourceLineNo">339</span>   * @param nonceGroup<a name="line.339"></a>
-<span class="sourceLineNo">340</span>   * @param nonce<a name="line.340"></a>
-<span class="sourceLineNo">341</span>   * @return an array of OperationStatus which internally contains the<a name="line.341"></a>
-<span class="sourceLineNo">342</span>   *         OperationStatusCode and the exceptionMessage if any.<a name="line.342"></a>
-<span class="sourceLineNo">343</span>   * @throws IOException<a name="line.343"></a>
-<span class="sourceLineNo">344</span>   */<a name="line.344"></a>
-<span class="sourceLineNo">345</span>  OperationStatus[] batchMutate(Mutation[] mutations, long nonceGroup, long nonce)<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      throws IOException;<a name="line.346"></a>
-<span class="sourceLineNo">347</span><a name="line.347"></a>
-<span class="sourceLineNo">348</span>  /**<a name="line.348"></a>
-<span class="sourceLineNo">349</span>   * Replay a batch of mutations.<a name="line.349"></a>
-<span class="sourceLineNo">350</span>   * @param mutations mutations to replay.<a name="line.350"></a>
-<span class="sourceLineNo">351</span>   * @param replaySeqId<a name="line.351"></a>
-<span class="sourceLineNo">352</span>   * @return an array of OperationStatus which internally contains the<a name="line.352"></a>
-<span class="sourceLineNo">353</span>   *         OperationStatusCode and the exceptionMessage if any.<a name="line.353"></a>
-<span class="sourceLineNo">354</span>   * @throws IOException<a name="line.354"></a>
-<span class="sourceLineNo">355</span>   */<a name="line.355"></a>
-<span class="sourceLineNo">356</span>   OperationStatus[] batchReplay(MutationReplay[] mutations, long replaySeqId) throws IOException;<a name="line.356"></a>
-<span class="sourceLineNo">357</span><a name="line.357"></a>
-<span class="sourceLineNo">358</span>  /**<a name="line.358"></a>
-<span class="sourceLineNo">359</span>   * Atomically checks if a row/family/qualifier value matches the expected value and if it does,<a name="line.359"></a>
-<span class="sourceLineNo">360</span>   * it performs the mutation. If the passed value is null, the lack of column value<a name="line.360"></a>
-<span class="sourceLineNo">361</span>   * (ie: non-existence) is used. See checkAndRowMutate to do many checkAndPuts at a time on a<a name="line.361"></a>
-<span class="sourceLineNo">362</span>   * single row.<a name="line.362"></a>
-<span class="sourceLineNo">363</span>   * @param row to check<a name="line.363"></a>
-<span class="sourceLineNo">364</span>   * @param family column family to check<a name="line.364"></a>
-<span class="sourceLineNo">365</span>   * @param qualifier column qualifier to check<a name="line.365"></a>
-<span class="sourceLineNo">366</span>   * @param compareOp the comparison operator<a name="line.366"></a>
-<span class="sourceLineNo">367</span>   * @param comparator<a name="line.367"></a>
-<span class="sourceLineNo">368</span>   * @param mutation<a name="line.368"></a>
-<span class="sourceLineNo">369</span>   * @param writeToWAL<a name="line.369"></a>
-<span class="sourceLineNo">370</span>   * @return true if mutation was applied, false otherwise<a name="line.370"></a>
-<span class="sourceLineNo">371</span>   * @throws IOException<a name="line.371"></a>
-<span class="sourceLineNo">372</span>   */<a name="line.372"></a>
-<span class="sourceLineNo">373</span>  boolean checkAndMutate(byte [] row, byte [] family, byte [] qualifier, CompareOp compareOp,<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      ByteArrayComparable comparator, Mutation mutation, boolean writeToWAL) throws IOException;<a name="line.374"></a>
-<span class="sourceLineNo">375</span><a name="line.375"></a>
-<span class="sourceLineNo">376</span>  /**<a name="line.376"></a>
-<span class="sourceLineNo">377</span>   * Atomically checks if a row/family/qualifier value matches the expected values and if it does,<a name="line.377"></a>
-<span class="sourceLineNo">378</span>   * it performs the row mutations. If the passed value is null, the lack of column value<a name="line.378"></a>
-<span class="sourceLineNo">379</span>   * (ie: non-existence) is used. Use to do many mutations on a single row. Use checkAndMutate<a name="line.379"></a>
-<span class="sourceLineNo">380</span>   * to do one checkAndMutate at a time.<a name="line.380"></a>
-<span class="sourceLineNo">381</span>   * @param row to check<a name="line.381"></a>
-<span class="sourceLineNo">382</span>   * @param family column family to check<a name="line.382"></a>
-<span class="sourceLineNo">383</span>   * @param qualifier column qualifier to check<a name="line.383"></a>
-<span class="sourceLineNo">384</span>   * @param compareOp the comparison operator<a name="line.384"></a>
-<span class="sourceLineNo">385</span>   * @param comparator<a name="line.385"></a>
-<span class="sourceLineNo">386</span>   * @param mutations<a name="line.386"></a>
-<span class="sourceLineNo">387</span>   * @param writeToWAL<a name="line.387"></a>
-<span class="sourceLineNo">388</span>   * @return true if mutations were applied, false otherwise<a name="line.388"></a>
-<span class="sourceLineNo">389</span>   * @throws IOException<a name="line.389"></a>
-<span class="sourceLineNo">390</span>   */<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  boolean checkAndRowMutate(byte [] row, byte [] family, byte [] qualifier, CompareOp compareOp,<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      ByteArrayComparable comparator, RowMutations mutations, boolean writeToWAL)<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      throws IOException;<a name="line.393"></a>
-<span class="sourceLineNo">394</span><a name="line.394"></a>
-<span class="sourceLineNo">395</span>  /**<a name="line.395"></a>
-<span class="sourceLineNo">396</span>   * Deletes the specified cells/row.<a name="line.396"></a>
-<span class="sourceLineNo">397</span>   * @param delete<a name="line.397"></a>
-<span class="sourceLineNo">398</span>   * @throws IOException<a name="line.398"></a>
-<span class="sourceLineNo">399</span>   */<a name="line.399"></a>
-<span class="sourceLineNo">400</span>  void delete(Delete delete) throws IOException;<a name="line.400"></a>
+<span class="sourceLineNo">280</span>  /**<a name="line.280"></a>
+<span class="sourceLineNo">281</span>   * Closes the region operation lock. This needs to be called in the finally block corresponding<a name="line.281"></a>
+<span class="sourceLineNo">282</span>   * to the try block of {@link #startRegionOperation(Operation)}<a name="line.282"></a>
+<span class="sourceLineNo">283</span>   * @throws IOException<a name="line.283"></a>
+<span class="sourceLineNo">284</span>   */<a name="line.284"></a>
+<span class="sourceLineNo">285</span>  void closeRegionOperation(Operation op) throws IOException;<a name="line.285"></a>
+<span class="sourceLineNo">286</span><a name="line.286"></a>
+<span class="sourceLineNo">287</span>  // Row write locks<a name="line.287"></a>
+<span class="sourceLineNo">288</span><a name="line.288"></a>
+<span class="sourceLineNo">289</span>  /**<a name="line.289"></a>
+<span class="sourceLineNo">290</span>   * Row lock held by a given thread.<a name="line.290"></a>
+<span class="sourceLineNo">291</span>   * One thread may acquire multiple locks on the same row simultaneously.<a name="line.291"></a>
+<span class="sourceLineNo">292</span>   * The locks must be released by calling release() from the same thread.<a name="line.292"></a>
+<span class="sourceLineNo">293</span>   */<a name="line.293"></a>
+<span class="sourceLineNo">294</span>  public interface RowLock {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    /**<a name="line.295"></a>
+<span class="sourceLineNo">296</span>     * Release the given lock.  If there are no remaining locks held by the current thread<a name="line.296"></a>
+<span class="sourceLineNo">297</span>     * then unlock the row and allow other threads to acquire the lock.<a name="line.297"></a>
+<span class="sourceLineNo">298</span>     * @throws IllegalArgumentException if called by a different thread than the lock owning<a name="line.298"></a>
+<span class="sourceLineNo">299</span>     *     thread<a name="line.299"></a>
+<span class="sourceLineNo">300</span>     */<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    void release();<a name="line.301"></a>
+<span class="sourceLineNo">302</span>  }<a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span>  /**<a name="line.304"></a>
+<span class="sourceLineNo">305</span>   *<a name="line.305"></a>
+<span class="sourceLineNo">306</span>   * Get a row lock for the specified row. All locks are reentrant.<a name="line.306"></a>
+<span class="sourceLineNo">307</span>   *<a name="line.307"></a>
+<span class="sourceLineNo">308</span>   * Before calling this function make sure that a region operation has already been<a name="line.308"></a>
+<span class="sourceLineNo">309</span>   * started (the calling thread has already acquired the region-close-guard lock).<a name="line.309"></a>
+<span class="sourceLineNo">310</span>   * <a name="line.310"></a>
+<span class="sourceLineNo">311</span>   * NOTE: the boolean passed here has changed. It used to be a boolean that<a name="line.311"></a>
+<span class="sourceLineNo">312</span>   * stated whether or not to wait on the lock. Now it is whether it an exclusive<a name="line.312"></a>
+<span class="sourceLineNo">313</span>   * lock is requested.<a name="line.313"></a>
+<span class="sourceLineNo">314</span>   * <a name="line.314"></a>
+<span class="sourceLineNo">315</span>   * @param row The row actions will be performed against<a name="line.315"></a>
+<span class="sourceLineNo">316</span>   * @param readLock is the lock reader or writer. True indicates that a non-exclusive<a name="line.316"></a>
+<span class="sourceLineNo">317</span>   * lock is requested<a name="line.317"></a>
+<span class="sourceLineNo">318</span>   * @see #startRegionOperation()<a name="line.318"></a>
+<span class="sourceLineNo">319</span>   * @see #startRegionOperation(Operation)<a name="line.319"></a>
+<span class="sourceLineNo">320</span>   */<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  RowLock getRowLock(byte[] row, boolean readLock) throws IOException;<a name="line.321"></a>
+<span class="sourceLineNo">322</span><a name="line.322"></a>
+<span class="sourceLineNo">323</span>  /**<a name="line.323"></a>
+<span class="sourceLineNo">324</span>   * If the given list of row locks is not null, releases all locks.<a name="line.324"></a>
+<span class="sourceLineNo">325</span>   */<a name="line.325"></a>
+<span class="sourceLineNo">326</span>  void releaseRowLocks(List&lt;RowLock&gt; rowLocks);<a name="line.326"></a>
+<span class="sourceLineNo">327</span><a name="line.327"></a>
+<span class="sourceLineNo">328</span>  ///////////////////////////////////////////////////////////////////////////<a name="line.328"></a>
+<span class="sourceLineNo">329</span>  // Region operations<a name="line.329"></a>
+<span class="sourceLineNo">330</span><a name="line.330"></a>
+<span class="sourceLineNo">331</span>  /**<a name="line.331"></a>
+<span class="sourceLineNo">332</span>   * Perform one or more append operations on a row.<a name="line.332"></a>
+<span class="sourceLineNo">333</span>   * @param append<a name="line.333"></a>
+<span class="sourceLineNo">334</span>   * @param nonceGroup<a name="line.334"></a>
+<span class="sourceLineNo">335</span>   * @param nonce<a name="line.335"></a>
+<span class="sourceLineNo">336</span>   * @return result of the operation<a name="line.336"></a>
+<span class="sourceLineNo">337</span>   * @throws IOException<a name="line.337"></a>
+<span class="sourceLineNo">338</span>   */<a name="line.338"></a>
+<span class="sourceLineNo">339</span>  Result append(Append append, long nonceGroup, long nonce) throws IOException;<a name="line.339"></a>
+<span class="sourceLineNo">340</span><a name="line.340"></a>
+<span class="sourceLineNo">341</span>  /**<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   * Perform a batch of mutations.<a name="line.342"></a>
+<span class="sourceLineNo">343</span>   * &lt;p&gt;<a name="line.343"></a>
+<span class="sourceLineNo">344</span>   * Note this supports only Put and Delete mutations and will ignore other types passed.<a name="line.344"></a>
+<span class="sourceLineNo">345</span>   * @param mutations the list of mutations<a name="line.345"></a>
+<span class="sourceLineNo">346</span>   * @param nonceGroup<a name="line.346"></a>
+<span class="sourceLineNo">347</span>   * @param nonce<a name="line.347"></a>
+<span class="sourceLineNo">348</span>   * @return an array of OperationStatus which internally contains the<a name="line.348"></a>
+<span class="sourceLineNo">349</span>   *         OperationStatusCode and the exceptionMessage if any.<a name="line.349"></a>
+<span class="sourceLineNo">350</span>   * @throws IOException<a name="line.350"></a>
+<span class="sourceLineNo">351</span>   */<a name="line.351"></a>
+<span class="sourceLineNo">352</span>  OperationStatus[] batchMutate(Mutation[] mutations, long nonceGroup, long nonce)<a name="line.352"></a>
+<span class="sourceLineNo">353</span>      throws IOException;<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>  /**<a name="line.355"></a>
+<span class="sourceLineNo">356</span>   * Replay a batch of mutations.<a name="line.356"></a>
+<span class="sourceLineNo">357</span>   * @param mutations mutations to replay.<a name="line.357"></a>
+<span class="sourceLineNo">358</span>   * @param replaySeqId<a name="line.358"></a>
+<span class="sourceLineNo">359</span>   * @return an array of OperationStatus which internally contains the<a name="line.359"></a>
+<span class="sourceLineNo">360</span>   *         OperationStatusCode and the exceptionMessage if any.<a name="line.360"></a>
+<span class="sourceLineNo">361</span>   * @throws IOException<a name="line.361"></a>
+<span class="sourceLineNo">362</span>   */<a name="line.362"></a>
+<span class="sourceLineNo">363</span>   OperationStatus[] batchReplay(MutationReplay[] mutations, long replaySeqId) throws IOException;<a name="line.363"></a>
+<span class="sourceLineNo">364</span><a name="line.364"></a>
+<span class="sourceLineNo">365</span>  /**<a name="line.365"></a>
+<span class="sourceLineNo">366</span>   * Atomically checks if a row/family/qualifier value matches the expected value and if it does,<a name="line.366"></a>
+<span class="sourceLineNo">367</span>   * it performs the mutation. If the passed value is null, the lack of column value<a name="line.367"></a>
+<span class="sourceLineNo">368</span>   * (ie: non-existence) is used. See checkAndRowMutate to do many checkAndPuts at a time on a<a name="line.368"></a>
+<span class="sourceLineNo">369</span>   * single row.<a name="line.369"></a>
+<span class="sourceLineNo">370</span>   * @param row to check<a name="line.370"></a>
+<span class="sourceLineNo">371</span>   * @param family column family to check<a name="line.371"></a>
+<span class="sourceLineNo">372</span>   * @param qualifier column qualifier to check<a name="line.372"></a>
+<span class="sourceLineNo">373</span>   * @param compareOp the comparison operator<a name="line.373"></a>
+<span class="sourceLineNo">374</span>   * @param comparator<a name="line.374"></a>
+<span class="sourceLineNo">375</span>   * @param mutation<a name="line.375"></a>
+<span class="sourceLineNo">376</span>   * @param writeToWAL<a name="line.376"></a>
+<span class="sourceLineNo">377</span>   * @return true if mutation was applied, false otherwise<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   * @throws IOException<a name="line.378"></a>
+<span class="sourceLineNo">379</span>   */<a name="line.379"></a>
+<span class="sourceLineNo">380</span>  boolean checkAndMutate(byte [] row, byte [] family, byte [] qualifier, CompareOp compareOp,<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      ByteArrayComparable comparator, Mutation mutation, boolean writeToWAL) throws IOException;<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span>  /**<a name="line.383"></a>
+<span class="sourceLineNo">384</span>   * Atomically checks if a row/family/qualifier value matches the expected values and if it does,<a name="line.384"></a>
+<span class="sourceLineNo">385</span>   * it performs the row mutations. If the passed value is null, the lack of column value<a name="line.385"></a>
+<span class="sourceLineNo">386</span>   * (ie: non-existence) is used. Use to do many mutations on a single row. Use checkAndMutate<a name="line.386"></a>
+<span class="sourceLineNo">387</span>   * to do one checkAndMutate at a time.<a name="line.387"></a>
+<span class="sourceLineNo">388</span>   * @param row to check<a name="line.388"></a>
+<span class="sourceLineNo">389</span>   * @param family column family to check<a name="line.389"></a>
+<span class="sourceLineNo">390</span>   * @param qualifier column qualifier to check<a name="line.390"></a>
+<span class="sourceLineNo">391</span>   * @param compareOp the comparison operator<a name="line.391"></a>
+<span class="sourceLineNo">392</span>   * @param comparator<a name="line.392"></a>
+<span class="sourceLineNo">393</span>   * @param mutations<a name="line.393"></a>
+<span class="sourceLineNo">394</span>   * @param writeToWAL<a name="line.394"></a>
+<span class="sourceLineNo">395</span>   * @return true if mutations were applied, false otherwise<a name="line.395"></a>
+<span class="sourceLineNo">396</span>   * @throws IOException<a name="line.396"></a>
+<span class="sourceLineNo">397</span>   */<a name="line.397"></a>
+<span class="sourceLineNo">398</span>  boolean checkAndRowMutate(byte [] row, byte [] family, byte [] qualifier, CompareOp compareOp,<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      ByteArrayComparable comparator, RowMutations mutations, boolean writeToWAL)<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      throws IOException;<a name="line.400"></a>
 <span class="sourceLineNo">401</span><a name="line.401"></a>
 <span class="sourceLineNo">402</span>  /**<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   * Do a get based on the get parameter.<a name="line.403"></a>
-<span class="sourceLineNo">404</span>   * @param get query parameters<a name="line.404"></a>
-<span class="sourceLineNo">405</span>   * @return result of the operation<a name="line.405"></a>
+<span class="sourceLineNo">403</span>   * Deletes the specified cells/row.<a name="line.403"></a>
+<span class="sourceLineNo">404</span>   * @param delete<a name="line.404"></a>
+<span class="sourceLineNo">405</span>   * @throws IOException<a name="line.405"></a>
 <span class="sourceLineNo">406</span>   */<a name="line.406"></a>
-<span class="sourceLineNo">407</span>  Result get(Get get) throws IOException;<a name="line.407"></a>
+<span class="sourceLineNo">407</span>  void delete(Delete delete) throws IOException;<a name="line.407"></a>
 <span class="sourceLineNo">408</span><a name="line.408"></a>
 <span class="sourceLineNo">409</span>  /**<a name="line.409"></a>
 <span class="sourceLineNo">410</span>   * Do a get based on the get parameter.<a name="line.410"></a>
 <span class="sourceLineNo">411</span>   * @param get query parameters<a name="line.411"></a>
-<span class="sourceLineNo">412</span>   * @param withCoprocessor invoke coprocessor or not. We don't want to<a name="line.412"></a>
-<span class="sourceLineNo">413</span>   * always invoke cp.<a name="line.413"></a>
-<span class="sourceLineNo">414</span>   * @return list of cells resulting from the operation<a name="line.414"></a>
-<span class="sourceLineNo">415</span>   */<a name="line.415"></a>
-<span class="sourceLineNo">416</span>  List&lt;Cell&gt; get(Get get, boolean withCoprocessor) throws IOException;<a name="line.416"></a>
-<span class="sourceLineNo">417</span><a name="line.417"></a>
-<span class="sourceLineNo">418</span>  /**<a name="line.418"></a>
-<span class="sourceLineNo">419</span>   * Do a get for duplicate non-idempotent operation.<a name="line.419"></a>
-<span class="sourceLineNo">420</span>   * @param get query parameters.<a name="line.420"></a>
-<span class="sourceLineNo">421</span>   * @param withCoprocessor<a name="line.421"></a>
-<span class="sourceLineNo">422</span>   * @param nonceGroup Nonce group.<a name="line.422"></a>
-<span class="sourceLineNo">423</span>   * @param nonce Nonce.<a name="line.423"></a>
-<span class="sourceLineNo">424</span>   * @return list of cells resulting from the operation<a name="line.424"></a>
-<span class="sourceLineNo">425</span>   * @throws IOException<a name="line.425"></a>
-<span class="sourceLineNo">426</span>   */<a name="line.426"></a>
-<span class="sourceLineNo">427</span>  List&lt;Cell&gt; get(Get get, boolean withCoprocessor, long nonceGroup, long nonce) throws IOException;<a name="line.427"></a>
-<span class="sourceLineNo">428</span><a name="line.428"></a>
-<span class="sourceLineNo">429</span>  /**<a name="line.429"></a>
-<span class="sourceLineNo">430</span>   * Return an iterator that scans over the HRegion, returning the indicated<a name="line.430"></a>
-<span class="sourceLineNo">431</span>   * columns and rows specified by the {@link Scan}.<a name="line.431"></a>
-<span class="sourceLineNo">432</span>   * &lt;p&gt;<a name="line.432"></a>
-<span class="sourceLineNo">433</span>   * This Iterator must be closed by the caller.<a name="line.433"></a>
-<span class="sourceLineNo">434</span>   *<a name="line.434"></a>
-<span class="sourceLineNo">435</span>   * @param scan configured {@link Scan}<a name="line.435"></a>
-<span class="sourceLineNo">436</span>   * @return RegionScanner<a name="line.436"></a>
-<span class="sourceLineNo">437</span>   * @throws IOException read exceptions<a name="line.437"></a>
-<span class="sourceLineNo">438</span>   */<a name="line.438"></a>
-<span class="sourceLineNo">439</span>  RegionScanner getScanner(Scan scan) throws IOException;<a name="line.439"></a>
-<span class="sourceLineNo">440</span><a name="line.440"></a>
-<span class="sourceLineNo">441</span>  /**<a name="line.441"></a>
-<span class="sourceLineNo">442</span>   * Return an iterator that scans over the HRegion, returning the indicated columns and rows<a name="line.442"></a>
-<span class="sourceLineNo">443</span>   * specified by the {@link Scan}. The scanner will also include the additional scanners passed<a name="line.443"></a>
-<span class="sourceLineNo">444</span>   * along with the scanners for the specified Scan instance. Should be careful with the usage to<a name="line.444"></a>
-<span class="sourceLineNo">445</span>   * pass additional scanners only within this Region<a name="line.445"></a>
-<span class="sourceLineNo">446</span>   * &lt;p&gt;<a name="line.446"></a>
-<span class="sourceLineNo">447</span>   * This Iterator must be closed by the caller.<a name="line.447"></a>
-<span class="sourceLineNo">448</span>   *<a name="line.448"></a>
-<span class="sourceLineNo">449</span>   * @param scan configured {@link Scan}<a name="line.449"></a>
-<span class="sourceLineNo">450</span>   * @param additionalScanners Any additional scanners to be used<a name="line.450"></a>
-<span class="sourceLineNo">451</span>   * @return RegionScanner<a name="line.451"></a>
-<span class="sourceLineNo">452</span>   * @throws IOException read exceptions<a name="line.452"></a>
-<span class="sourceLineNo">453</span>   */<a name="line.453"></a>
-<span class="sourceLineNo">454</span>  RegionScanner getScanner(Scan scan, List&lt;KeyValueScanner&gt; additionalScanners) throws IOException;<a name="line.454"></a>
-<span class="sourceLineNo">455</span><a name="line.455"></a>
-<span class="sourceLineNo">456</span>  /** The comparator to be used with the region */<a name="line.456"></a>
-<span class="sourceLineNo">457</span>  CellComparator getCellComparator();<a name="line.457"></a>
-<span class="sourceLineNo">458</span><a name="line.458"></a>
-<span class="sourceLineNo">459</span>  /**<a name="line.459"></a>
-<span class="sourceLineNo">460</span>   * Perform one or more increment operations on a row.<a name="line.460"></a>
-<span class="sourceLineNo">461</span>   * @param increment<a name="line.461"></a>
-<span class="sourceLineNo">462</span>   * @param nonceGroup<a name="line.462"></a>
-<span class="sourceLineNo">463</span>   * @param nonce<a name="line.463"></a>
-<span class="sourceLineNo">464</span>   * @return result of the operation<a name="line.464"></a>
-<span class="sourceLineNo">465</span>   * @throws IOException<a name="line.465"></a>
-<span class="sourceLineNo">466</span>   */<a name="line.466"></a>
-<span class="sourceLineNo">467</span>  Result increment(Increment increment, long nonceGroup, long nonce) throws IOException;<a name="line.467"></a>
-<span class="sourceLineNo">468</span><a name="line.468"></a>
-<span class="sourceLineNo">469</span>  /**<a name="line.469"></a>
-<span class="sourceLineNo">470</span>   * Performs multiple mutations atomically on a single row. Currently<a name="line.470"></a>
-<span class="sourceLineNo">471</span>   * {@link Put} and {@link Delete} are supported.<a name="line.471"></a>
-<span class="sourceLineNo">472</span>   *<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   * @param mutations object that specifies the set of mutations to perform atomically<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   * @throws IOException<a name="line.474"></a>
-<span class="sourceLineNo">475</span>   */<a name="line.475"></a>
-<span class="sourceLineNo">476</span>  void mutateRow(RowMutations mutations) throws IOException;<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>  /**<a name="line.478"></a>
-<span class="sourceLineNo">479</span>   * Perform atomic mutations within the region.<a name="line.479"></a>
-<span class="sourceLineNo">480</span>   *<a name="line.480"></a>
-<span class="sourceLineNo">481</span>   * @param mutations The list of mutations to perform.<a name="line.481"></a>
-<span class="sourceLineNo">482</span>   * &lt;code&gt;mutations&lt;/code&gt; can contain operations for multiple rows.<a name="line.482"></a>
-<span class="sourceLineNo">483</span>   * Caller has to ensure that all rows are contained in this region.<a name="line.483"></a>
-<span class="sourceLineNo">484</span>   * @param rowsToLock Rows to lock<a name="line.484"></a>
-<span class="sourceLineNo">485</span>   * @param nonceGroup Optional nonce group of the operation (client Id)<a name="line.485"></a>
-<span class="sourceLineNo">486</span>   * @param nonce Optional nonce of the operation (unique random id to ensure "more idempotence")<a name="line.486"></a>
-<span class="sourceLineNo">487</span>   * If multiple rows are locked care should be taken that<a name="line.487"></a>
-<span class="sourceLineNo">488</span>   * &lt;code&gt;rowsToLock&lt;/code&gt; is sorted in order to avoid deadlocks.<a name="line.488"></a>
-<span class="sourceLineNo">489</span>   * @throws IOException<a name="line.489"></a>
-<span class="sourceLineNo">490</span>   */<a name="line.490"></a>
-<span class="sourceLineNo">491</span>  void mutateRowsWithLocks(Collection&lt;Mutation&gt; mutations, Collection&lt;byte[]&gt; rowsToLock,<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      long nonceGroup, long nonce) throws IOException;<a name="line.492"></a>
-<span class="sourceLineNo">493</span><a name="line.493"></a>
-<span class="sourceLineNo">494</span>  /**<a name="line.494"></a>
-<span class="sourceLineNo">495</span>   * Performs atomic multiple reads and writes on a given row.<a name="line.495"></a>
-<span class="sourceLineNo">496</span>   *<a name="line.496"></a>
-<span class="sourceLineNo">497</span>   * @param processor The object defines the reads and writes to a row.<a name="line.497"></a>
-<span class="sourceLineNo">498</span>   */<a name="line.498"></a>
-<span class="sourceLineNo">499</span>  void processRowsWithLocks(RowProcessor&lt;?,?&gt; processor) throws IOException;<a name="line.499"></a>
+<span class="sourceLineNo">412</span>   * @return result of the operation<a name="line.412"></a>
+<span class="sourceLineNo">413</span>   */<a name="line.413"></a>
+<span class="sourceLineNo">414</span>  Result get(Get get) throws IOException;<a name="line.414"></a>
+<span class="sourceLineNo">415</span><a name="line.415"></a>
+<span class="sourceLineNo">416</span>  /**<a name="line.416"></a>
+<span class="sourceLineNo">417</span>   * Do a get based on the get parameter.<a name="line.417"></a>
+<span class="sourceLineNo">418</span>   * @param get query parameters<a name="line.418"></a>
+<span class="sourceLineNo">419</span>   * @param withCoprocessor invoke coprocessor or not. We don't want to<a name="line.419"></a>
+<span class="sourceLineNo">420</span>   * always invoke cp.<a name="line.420"></a>
+<span class="sourceLineNo">421</span>   * @return list of cells resulting from the operation<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   */<a name="line.422"></a>
+<span class="sourceLineNo">423</span>  List&lt;Cell&gt; get(Get get, boolean withCoprocessor) throws IOException;<a name="line.423"></a>
+<span class="sourceLineNo">424</span><a name="line.424"></a>
+<span class="sourceLineNo">425</span>  /**<a name="line.425"></a>
+<span class="sourceLineNo">426</span>   * Do a get for duplicate non-idempotent operation.<a name="line.426"></a>
+<span class="sourceLineNo">427</span>   * @param get query parameters.<a name="line.427"></a>
+<span class="sourceLineNo">428</span>   * @param withCoprocessor<a name="line.428"></a>
+<span class="sourceLineNo">429</span>   * @param nonceGroup Nonce group.<a name="line.429"></a>
+<span class="sourceLineNo">430</span>   * @param nonce Nonce.<a name="line.430"></a>
+<span class="sourceLineNo">431</span>   * @return list of cells resulting from the operation<a name="line.431"></a>
+<span class="sourceLineNo">432</span>   * @throws IOException<a name="line.432"></a>
+<span class="sourceLineNo">433</span>   */<a name="line.433"></a>
+<span class="sourceLineNo">434</span>  List&lt;Cell&gt; get(Get get, boolean withCoprocessor, long nonceGroup, long nonce) throws IOException;<a name="line.434"></a>
+<span class="sourceLineNo">435</span><a name="line.435"></a>
+<span class="sourceLineNo">436</span>  /**<a name="line.436"></a>
+<span class="sourceLineNo">437</span>   * Return an iterator that scans over the HRegion, returning the indicated<a name="line.437"></a>
+<span class="sourceLineNo">438</span>   * columns and rows specified by the {@link Scan}.<a name="line.438"></a>
+<span class="sourceLineNo">439</span>   * &lt;p&gt;<a name="line.439"></a>
+<span class="sourceLineNo">440</span>   * This Iterator must be closed by the caller.<a name="line.440"></a>
+<span class="sourceLineNo">441</span>   *<a name="line.441"></a>
+<span class="sourceLineNo">442</span>   * @param scan configured {@link Scan}<a name="line.442"></a>
+<span class="sourceLineNo">443</span>   * @return RegionScanner<a name="line.443"></a>
+<span class="sourceLineNo">444</span>   * @throws IOException read exceptions<a name="line.444"></a>
+<span class="sourceLineNo">445</span>   */<a name="line.445"></a>
+<span class="sourceLineNo">446</span>  RegionScanner getScanner(Scan scan) throws IOException;<a name="line.446"></a>
+<span class="sourceLineNo">447</span><a name="line.447"></a>
+<span class="sourceLineNo">448</span>  /**<a name="line.448"></a>
+<span class="sourceLineNo">449</span>   * Return an iterator that scans over the HRegion, returning the indicated columns and rows<a name="line.449"></a>
+<span class="sourceLineNo">450</span>   * specified by the {@link Scan}. The scanner will also include the additional scanners passed<a name="line.450"></a>
+<span class="sourceLineNo">451</span>   * along with the scanners for the specified Scan instance. Should be careful with the usage to<a name="line.451"></a>
+<span class="sourceLineNo">452</span>   * pass additional scanners only within this Region<a name="line.452"></a>
+<span class="sourceLineNo">453</span>   * &lt;p&gt;<a name="line.453"></a>
+<span class="sourceLineNo">454</span>   * This Iterator must be closed by the caller.<a name="line.454"></a>
+<span class="sourceLineNo">455</span>   *<a name="line.455"></a>
+<span class="sourceLineNo">456</span>   * @param scan configured {@link Scan}<a name="line.456"></a>
+<span class="sourceLineNo">457</span>   * @param additionalScanners Any additional scanners to be used<a name="line.457"></a>
+<span class="sourceLineNo">458</span>   * @return RegionScanner<a name="line.458"></a>
+<span class="sourceLineNo">459</span>   * @throws IOException read exceptions<a name="line.459"></a>
+<span class="sourceLineNo">460</span>   */<a name="line.460"></a>
+<span class="sourceLineNo">461</span>  RegionScanner getScanner(Scan scan, List&lt;KeyValueScanner&gt; additionalScanners) throws IOException;<a name="line.461"></a>
+<span class="sourceLineNo">462</span><a name="line.462"></a>
+<span class="sourceLineNo">463</span>  /** The comparator to be used with the region */<a name="line.463"></a>
+<span class="sourceLineNo">464</span>  CellComparator getCellComparator();<a name="line.464"></a>
+<span class="sourceLineNo">465</span><a name="line.465"></a>
+<span class="sourceLineNo">466</span>  /**<a name="line.466"></a>
+<span class="sourceLineNo">467</span>   * Perform one or more increment operations on a row.<a name="line.467"></a>
+<span class="sourceLineNo">468</span>   * @param increment<a name="line.468"></a>
+<span class="sourceLineNo">469</span>   * @param nonceGroup<a name="line.469"></a>
+<span class="sourceLineNo">470</span>   * @param nonce<a name="line.470"></a>
+<span class="sourceLineNo">471</span>   * @return result of the operation<a name="line.471"></a>
+<span class="sourceLineNo">472</span>   * @throws IOException<a name="line.472"></a>
+<span class="sourceLineNo">473</span>   */<a name="line.473"></a>
+<span class="sourceLineNo">474</span>  Result increment(Increment increment, long nonceGroup, long nonce) throws IOException;<a name="line.474"></a>
+<span class="sourceLineNo">475</span><a name="line.475"></a>
+<span class="sourceLineNo">476</span>  /**<a name="line.476"></a>
+<span class="sourceLineNo">477</span>   * Performs multiple mutations atomically on a single row. Currently<a name="line.477"></a>
+<span class="sourceLineNo">478</span>   * {@link Put} and {@link Delete} are supported.<a name="line.478"></a>
+<span class="sourceLineNo">479</span>   *<a name="line.479"></a>
+<span class="sourceLineNo">480</span>   * @param mutations object that specifies the set of mutations to perform atomically<a name="line.480"></a>
+<span class="sourceLineNo">481</span>   * @throws IOException<a name="line.481"></a>
+<span class="sourceLineNo">482</span>   */<a name="line.482"></a>
+<span class="sourceLineNo">483</span>  void mutateRow(RowMutations mutations) throws IOException;<a name="line.483"></a>
+<span class="sourceLineNo">484</span><a name="line.484"></a>
+<span class="sourceLineNo">485</span>  /**<a name="line.485"></a>
+<span class="sourceLineNo">486</span>   * Perform atomic mutations within the region.<a name="line.486"></a>
+<span class="sourceLineNo">487</span>   *<a name="line.487"></a>
+<span class="sourceLineNo">488</span>   * @param mutations The list of mutations to perform.<a name="line.488"></a>
+<span class="sourceLineNo">489</span>   * &lt;code&gt;mutations&lt;/code&gt; can contain operations for multiple rows.<a name="line.489"></a>
+<span class="sourceLineNo">490</span>   * Caller has to ensure that all rows are contained in this region.<a name="line.490"></a>
+<span class="sourceLineNo">491</span>   * @param rowsToLock Rows to lock<a name="line.491"></a>
+<span class="sourceLineNo">492</span>   * @param nonceGroup Optional nonce group of the operation (client Id)<a name="line.492"></a>
+<span class="sourceLineNo">493</span>   * @param nonce Optional nonce of the operation (unique random id to ensure "more idempotence")<a name="line.493"></a>
+<span class="sourceLineNo">494</span>   * If multiple rows are locked care should be taken that<a name="line.494"></a>
+<span class="sourceLineNo">495</span>   * &lt;code&gt;rowsToLock&lt;/code&gt; is sorted in order to avoid deadlocks.<a name="line.495"></a>
+<span class="sourceLineNo">496</span>   * @throws IOException<a name="line.496"></a>
+<span class="sourceLineNo">497</span>   */<a name="line.497"></a>
+<span class="sourceLineNo">498</span>  void mutateRowsWithLocks(Collection&lt;Mutation&gt; mutations, Collection&lt;byte[]&gt; rowsToLock,<a name="line.498"></a>
+<span class="sourceLineNo">499</span>      long nonceGroup, long nonce) throws IOException;<a name="line.499"></a>
 <span class="sourceLineNo">500</span><a name="line.500"></a>
 <span class="sourceLineNo">501</span>  /**<a name="line.501"></a>
 <span class="sourceLineNo">502</span>   * Performs atomic multiple reads and writes on a given row.<a name="line.502"></a>
 <span class="sourceLineNo">503</span>   *<a name="line.503"></a>
 <span class="sourceLineNo">504</span>   * @param processor The object defines the reads and writes to a row.<a name="line.504"></a>
-<span class="sourceLineNo">505</span>   * @param nonceGroup Optional nonce group of the operation (client Id)<a name="line.505"></a>
-<span class="sourceLineNo">506</span>   * @param nonce Optional nonce of the operation (unique random id to ensure "more idempotence")<a name="line.506"></a>
-<span class="sourceLineNo">507</span>   */<a name="line.507"></a>
-<span class="sourceLineNo">508</span>  void processRowsWithLocks(RowProcessor&lt;?,?&gt; processor, long nonceGroup, long nonce)<a name="line.508"></a>
-<span class="sourceLineNo">509</span>      throws IOException;<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span>  /**<a name="line.511"></a>
-<span class="sourceLineNo">512</span>   * Performs atomic multiple reads and writes on a given row.<a name="line.512"></a>
-<span class="sourceLineNo">513</span>   *<a name="line.513"></a>
-<span class="sourceLineNo">514</span>   * @param processor The object defines the reads and writes to a row.<a name="line.514"></a>
-<span class="sourceLineNo">515</span>   * @param timeout The timeout of the processor.process() execution<a name="line.515"></a>
-<span class="sourceLineNo">516</span>   *                Use a negative number to switch off the time bound<a name="line.516"></a>
-<span class="sourceLineNo">517</span>   * @param nonceGroup Optional nonce group of the operation (client Id)<a name="line.517"></a>
-<span class="sourceLineNo">518</span>   * @param nonce Optional nonce of the operation (unique random id to ensure "more idempotence")<a name="line.518"></a>
-<span class="sourceLineNo">519</span>   */<a name="line.519"></a>
-<span class="sourceLineNo">520</span>  void processRowsWithLocks(RowProcessor&lt;?,?&gt; processor, long timeout, long nonceGroup, long nonce)<a name="line.520"></a>
-<span class="sourceLineNo">521</span>      throws IOException;<a name="line.521"></a>
-<span class="sourceLineNo">522</span><a name="line.522"></a>
-<span class="sourceLineNo">523</span>  /**<a name="line.523"></a>
-<span class="sourceLineNo">524</span>   * Puts some data in the table.<a name="line.524"></a>
-<span class="sourceLineNo">525</span>   * @param put<a name="line.525"></a>
-<span class="sourceLineNo">526</span>   * @throws IOException<a name="line.526"></a>
-<span class="sourceLineNo">527</span>   */<a name="line.527"></a>
-<span class="sourceLineNo">528</span>  void put(Put put) throws IOException;<a name="line.528"></a>
+<span class="sourceLineNo">505</span>   */<a name="line.505"></a>
+<span class="sourceLineNo">506</span>  void processRowsWithLocks(RowProcessor&lt;?,?&gt; processor) throws IOException;<a name="line.506"></a>
+<span class="sourceLineNo">507</span><a name="line.507"></a>
+<span class="sourceLineNo">508</span>  /**<a name="line.508"></a>
+<span class="sourceLineNo">509</span>   * Performs atomic multiple reads and writes on a given row.<a name="line.509"></a>
+<span class="sourceLineNo">510</span>   *<a name="line.510"></a>
+<span class="sourceLineNo">511</span>   * @param processor The object defines the reads and writes to a row.<a name="line.511"></a>
+<span class="sourceLineNo">512</span>   * @param nonceGroup Optional nonce group of the operation (client Id)<a name="line.512"></a>
+<span class="sourceLineNo">513</span>   * @param nonce Optional nonce of the operation (unique random id to ensure "more idempotence")<a name="line.513"></a>
+<span class="sourceLineNo">514</span>   */<a name="line.514"></a>
+<span class="sourceLineNo">515</span>  void processRowsWithLocks(RowProcessor&lt;?,?&gt; processor, long nonceGroup, long nonce)<a name="line.515"></a>
+<span class="sourceLineNo">516</span>      throws IOException;<a name="line.516"></a>
+<span class="sourceLineNo">517</span><a name="line.517"></a>
+<span class="sourceLineNo">518</span>  /**<a name="line.518"></a>
+<span class="sourceLineNo">519</span>   * Performs atomic multiple reads and writes on a given row.<a name="line.519"></a>
+<span class="sourceLineNo">520</span>   *<a name="line.520"></a>
+<span class="sourceLineNo">521</span>   * @param processor The object defines the reads and writes to a row.<a name="line.521"></a>
+<span class="sourceLineNo">522</span>   * @param timeout The timeout of the processor.process() execution<a name="line.522"></a>
+<span class="sourceLineNo">523</span>   *                Use a negative number to switch off the time bound<a name="line.523"></a>
+<span class="sourceLineNo">524</span>   * @param nonceGroup Optional nonce group of the operation (client Id)<a name="line.524"></a>
+<span class="sourceLineNo">525</span>   * @param nonce Optional nonce of the operation (unique random id to ensure "more idempotence")<a name="line.525"></a>
+<span class="sourceLineNo">526</span>   */<a name="line.526"></a>
+<span class="sourceLineNo">527</span>  void processRowsWithLocks(RowProcessor&lt;?,?&gt; processor, long timeout, long nonceGroup, long nonce)<a name="line.527"></a>
+<span class="sourceLineNo">528</span>      throws IOException;<a name="line.528"></a>
 <span class="sourceLineNo">529</span><a name="line.529"></a>
 <span class="sourceLineNo">530</span>  /**<a name="line.530"></a>
-<span class="sourceLineNo">531</span>   * Listener class to enable callers of<a name="line.531"></a>
-<span class="sourceLineNo">532</span>   * bulkLoadHFile() to perform any necessary<a name="line.532"></a>
-<span class="sourceLineNo">533</span>   * pre/post processing of a given bulkload call<a name="line.533"></a>
+<span class="sourceLineNo">531</span>   * Puts some data in the table.<a name="line.531"></a>
+<span class="sourceLineNo">532</span>   * @param put<a name="line.532"></a>
+<span class="sourceLineNo">533</span>   * @throws IOException<a name="line.533"></a>
 <span class="sourceLineNo">534</span>   */<a name="line.534"></a>
-<span class="sourceLineNo">535</span>  interface BulkLoadListener {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    /**<a name="line.536"></a>
-<span class="sourceLineNo">537</span>     * Called before an HFile is actually loaded<a name="line.537"></a>
-<span class="sourceLineNo">538</span>     * @param family family being loaded to<a name="line.538"></a>
-<span class="sourceLineNo">539</span>     * @param srcPath path of HFile<a name="line.539"></a>
-<span class="sourceLineNo">540</span>     * @return final path to be used for actual loading<a name="line.540"></a>
-<span class="sourceLineNo">541</span>     * @throws IOException<a name="line.541"></a>
-<span class="sourceLineNo">542</span>     */<a name="line.542"></a>
-<span class="sourceLineNo">543</span>    String prepareBulkLoad(byte[] family, String srcPath, boolean copyFile)<a name="line.543"></a>
-<span class="sourceLineNo">544</span>        throws IOException;<a name="line.544"></a>
-<span class="sourceLineNo">545</span><a name="line.545"></a>
-<span class="sourceLineNo">546</span>    /**<a name="line.546"></a>
-<span class="sourceLineNo">547</span>     * Called after a successful HFile load<a name="line.547"></a>
-<span class="sourceLineNo">548</span>     * @param family family being loaded to<a name="line.548"></a>
-<span class="sourceLineNo">549</span>     * @param srcPath path of HFile<a name="line.549"></a>
-<span class="sourceLineNo">550</span>     * @throws IOException<a name="line.550"></a>
-<span class="sourceLineNo">551</span>     */<a name="line.551"></a>
-<span class="sourceLineNo">552</span>    void doneBulkLoad(byte[] family, String srcPath) throws IOException;<a name="line.552"></a>
-<span class="sourceLineNo">553</span><a name="line.553"></a>
-<span class="sourceLineNo">554</span>    /**<a name="line.554"></a>
-<span class="sourceLineNo">555</span>     * Called after a failed HFile load<a name="line.555"></a>
-<span class="sourceLineNo">556</span>     * @param family family being loaded to<a name="line.556"></a>
-<span class="sourceLineNo">557</span>     * @param srcPath path of HFile<a name="line.557"></a>
-<span class="sourceLineNo">558</span>     * @throws IOException<a name="line.558"></a>
-<span class="sourceLineNo">559</span>     */<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    void failedBulkLoad(byte[] family, String srcPath) throws IOException;<a name="line.560"></a>
-<span class="sourceLineNo">561</span>  }<a name="line.561"></a>
-<span class="sourceLineNo">562</span><a name="line.562"></a>
-<span class="sourceLineNo">563</span>  /**<a name="line.563"></a>
-<span class="sourceLineNo">564</span>   * Attempts to atomically load a group of hfiles.  This is critical for loading<a name="line.564"></a>
-<span class="sourceLineNo">565</span>   * rows with multiple column families atomically.<a name="line.565"></a>
-<span class="sourceLineNo">566</span>   *<a name="line.566"></a>
-<span class="sourceLineNo">567</span>   * @param familyPaths List of Pair&amp;lt;byte[] column family, String hfilePath&amp;gt;<a name="line.567"></a>
-<span class="sourceLineNo">568</span>   * @param bulkLoadListener Internal hooks enabling massaging/preparation of a<a name="line.568"></a>
-<span class="sourceLineNo">569</span>   * file about to be bulk loaded<a name="line.569"></a>
-<span class="sourceLineNo">570</span>   * @param assignSeqId<a name="line.570"></a>
-<span class="sourceLineNo">571</span>   * @return Map from family to List of store file paths if successful, null if failed recoverably<a name="line.571"></a>
-<span class="sourceLineNo">572</span>   * @throws IOException if failed unrecoverably.<a name="line.572"></a>
-<span class="sourceLineNo">573</span>   */<a name="line.573"></a>
-<span class="sourceLineNo">574</span>  Map&lt;byte[], List&lt;Path&gt;&gt; bulkLoadHFiles(Collection&lt;Pair&lt;byte[], String&gt;&gt; familyPaths,<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      boolean assignSeqId, BulkLoadListener bulkLoadListener) throws IOException;<a name="line.575"></a>
-<span class="sourceLineNo">576</span><a name="line.576"></a>
-<span class="sourceLineNo">577</span>  /**<a name="line.577"></a>
-<span class="sourceLineNo">578</span>   * Attempts to atomically load a group of hfiles.  This is critical for loading<a name="line.578"></a>
-<span class="sourceLineNo">579</span>   * rows with multiple column families atomically.<a name="line.579"></a>
-<span class="sourceLineNo">580</span>   *<a name="line.580"></a>
-<span class="sourceLineNo">581</span>   * @param familyPaths List of Pair&amp;lt;byte[] column family, String hfilePath&amp;gt;<a name="line.581"></a>
-<span class="sourceLineNo">582</span>   * @param assignSeqId<a name="line.582"></a>
-<span class="sourceLineNo">583</span>   * @param bulkLoadListener Internal hooks enabling massaging/preparation of a<a name="line.583"></a>
-<span class="sourceLineNo">584</span>   * file about to be bulk loaded<a name="line.584"></a>
-<span class="sourceLineNo">585</span>   * @param copyFile always copy hfiles if true<a name="line.585"></a>
-<span class="sourceLineNo">586</span>   * @return Map from family to List of store file paths if successful, null if failed recoverably<a name="line.586"></a>
-<span class="sourceLineNo">587</span>   * @throws IOException if failed unrecoverably.<a name="line.587"></a>
-<span class="sourceLineNo">588</span>   */<a name="line.588"></a>
-<span class="sourceLineNo">589</span>  Map&lt;byte[], List&lt;Path&gt;&gt; bulkLoadHFiles(Collection&lt;Pair&lt;byte[], String&gt;&gt; familyPaths,<a name="line.589"></a>
-<span class="sourceLineNo">590</span>      boolean assignSeqId, BulkLoadListener bulkLoadListener, boolean copyFile) throws IOException;<a name="line.590"></a>
-<span class="sourceLineNo">591</span><a name="line.591"></a>
-<span class="sourceLineNo">592</span>  ///////////////////////////////////////////////////////////////////////////<a name="line.592"></a>
-<span class="sourceLineNo">593</span>  // Coprocessors<a name="line.593"></a>
-<span class="sourceLineNo">594</span><a name="line.594"></a>
-<span class="sourceLineNo">595</span>  /** @return the coprocessor host */<a name="line.595"></a>
-<span class="sourceLineNo">596</span>  RegionCoprocessorHost getCoprocessorHost();<a name="line.596"></a>
-<span class="sourceLineNo">597</span><a name="line.597"></a>
-<span class="sourceLineNo">598</span>  /**<a name="line.598"></a>
-<span class="sourceLineNo">599</span>   * Executes a single protocol buffer coprocessor endpoint {@link Service} method using<a name="line.599"></a>
-<span class="sourceLineNo">600</span>   * the registered protocol handlers.  {@link Service} implementations must be registered via the<a name="line.600"></a>
-<span class="sourceLineNo">601</span>   * {@link Region#registerService(com.google.protobuf.Service)}<a name="line.601"></a>
-<span class="sourceLineNo">602</span>   * method before they are available.<a name="line.602"></a>
-<span class="sourceLineNo">603</span>   *<a name="line.603"></a>
-<span class="sourceLineNo">604</span>   * @param controller an {@code RpcContoller} implementation to pass to the invoked service<a name="line.604"></a>
-<span class="sourceLineNo">605</span>   * @param call a {@code CoprocessorServiceCall} instance identifying the service, method,<a name="line.605"></a>
-<span class="sourceLineNo">606</span>   *     and parameters for the method invocation<a name="line.606"></a>
-<span class="sourceLineNo">607</span>   * @return a protocol buffer {@code Message} instance containing the method's result<a name="line.607"></a>
-<span class="sourceLineNo">608</span>   * @throws IOException if no registered service handler is found or an error<a name="line.608"></a>
-<span class="sourceLineNo">609</span>   *     occurs during the invocation<a name="line.609"></a>
-<span class="sourceLineNo">610</span>   * @see org.apache.hadoop.hbase.regionserver.Region#registerService(com.google.protobuf.Service)<a name="line.610"></a>
-<span class="sourceLineNo">611</span>   */<a name="line.611"></a>
-<span class="sourceLineNo">612</span>  com.google.protobuf.Message execService(com.google.protobuf.RpcController controller,<a name="line.612"></a>
-<span class="sourceLineNo">613</span>      CoprocessorServiceCall call)<a name="line.613"></a>
-<span class="sourceLineNo">614</span>  throws IOException;<a name="line.614"></a>
-<span class="sourceLineNo">615</span><a name="line.615"></a>
-<span class="sourceLineNo">616</span>  /**<a name="line.616"></a>
-<span class="sourceLineNo">617</span>   * Registers a new protocol buffer {@link Service} subclass as a coprocessor endpoint to<a name="line.617"></a>
-<span class="sourceLineNo">618</span>   * be available for handling Region#execService(com.google.protobuf.RpcController,<a name="line.618"></a>
-<span class="sourceLineNo">619</span>   *    org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceCall) calls.<a name="line.619"></a>
-<span class="sourceLineNo">620</span>   *<a name="line.620"></a>
-<span class="sourceLineNo">621</span>   * &lt;p&gt;<a name="line.621"></a>
-<span class="sourceLineNo">622</span>   * Only a single instance may be registered per region for a given {@link Service} subclass (the<a name="line.622"></a>
-<span class="sourceLineNo">623</span>   * instances are keyed on {@link com.google.protobuf.Descriptors.ServiceDescriptor#getFullName()}.<a name="line.623"></a>
-<span class="sourceLineNo">624</span>   * After the first registration, subsequent calls with the same service name will fail with<a name="line.624"></a>
-<span class="sourceLineNo">625</span>   * a return value of {@code false}.<a name="line.625"></a>
-<span class="sourceLineNo">626</span>   * &lt;/p&gt;<a name="line.626"></a>
-<span class="sourceLineNo">627</span>   * @param instance the {@code Service} subclass instance to expose as a coprocessor endpoint<a name="line.627"></a>
-<span class="sourceLineNo">628</span>   * @return {@code true} if the registration was successful, {@code false}<a name="line.628"></a>
-<span class="sourceLineNo">629</span>   * otherwise<a name="line.629"></a>
-<span class="sourceLineNo">630</span>   */<a name="line.630"></a>
-<span class="sourceLineNo">631</span>  boolean registerService(com.google.protobuf.Service instance);<a name="line.631"></a>
-<span class="sourceLineNo">632</span><a name="line.632"></a>
-<span class="sourceLineNo">633</span>  ///////////////////////////////////////////////////////////////////////////<a name="line.633"></a>
-<span class="sourceLineNo">634</span>  // RowMutation processor support<a name="line.634"></a>
-<span class="sourceLineNo">635</span><a name="line.635"></a>
-<span class="sourceLineNo">636</span>  /**<a name="line.636"></a>
-<span class="sourceLineNo">637</span>   * Check the collection of families for validity.<a name="line.637"></a>
-<span class="sourceLineNo">638</span>   * @param families<a name="line.638"></a>
-<span class="sourceLineNo">639</span>   * @throws NoSuchColumnFamilyException<a name="line.639"></a>
-<span class="sourceLineNo">640</span>   */<a name="line.640"></a>
-<span class="sourceLineNo">641</span>  void checkFamilies(Collection&lt;byte[]&gt; families) throws NoSuchColumnFamilyException;<a name="line.641"></a>
+<span class="sourceLineNo">535</span>  void put(Put put) throws IOException;<a name="line.535"></a>
+<span class="sourceLineNo">536</span><a name="line.536"></a>
+<span class="sourceLineNo">537</span>  /**<a name="line.537"></a>
+<span class="sourceLineNo">538</span>   * Listener class to enable callers of<a name="line.538"></a>
+<span class="sourceLineNo">539</span>   * bulkLoadHFile() to perform any necessary<a name="line.539"></a>
+<span class="sourceLineNo">540</span>   * pre/post processing of a given bulkload call<a name="line.540"></a>
+<span class="sourceLineNo">541</span>   */<a name="line.541"></a>
+<span class="sourceLineNo">542</span>  interface BulkLoadListener {<a name="line.542"></a>
+<span class="sourceLineNo">543</span>    /**<a name="line.543"></a>
+<span class="sourceLineNo">544</span>     * Called before an HFile is actually loaded<a name="line.544"></a>
+<span class="sourceLineNo">545</span>     * @param family family being loaded to<a name="line.545"></a>
+<span class="sourceLineNo">546</span>     * @param srcPath path of HFile<a name="line.546"></a>
+<span class="sourceLineNo">547</span>     * @return final path to be used for actual loading<a name="line.547"></a>
+<span class="sourceLineNo">548</span>     * @throws IOException<a name="line.548"></a>
+<span class="sourceLineNo">549</span>     */<a name="line.549"></a>
+<span class="sourceLineNo">550</span>    String prepareBulkLoad(byte[] family, String srcPath, boolean copyFile)<a name="line.550"></a>
+<span class="sourceLineNo">551</span>        throws IOException;<a name="line.551"></a>
+<span class="sourceLineNo">552</span><a name="line.552"></a>
+<span class="sourceLineNo">553</span>    /**<a name="line.553"></a>
+<span class="sourceLineNo">554</span>     * Called after a successful HFile load<a name="line.554"></a>
+<span class="sourceLineNo">555</span>     * @param family family being loaded to<a name="line.555"></a>
+<span class="sourceLineNo">556</span>     * @param srcPath path of HFile<a name="line.556"></a>
+<span class="sourceLineNo">557</span>     * @throws IOException<a name="line.557"></a>
+<span class="sourceLineNo">558</span>     */<a name="line.558"></a>
+<span class="sourceLineNo">559</span>    void doneBulkLoad(byte[] family, String srcPath) throws IOException;<a name="line.559"></a>
+<span class="sourceLineNo">560</span><a name="line.560"></a>
+<span class="sourceLineNo">561</span>    /**<a name="line.561"></a>
+<span class="sourceLineNo">562</span>     * Called after a failed HFile load<a name="line.562"></a>
+<span class="sourceLineNo">563</span>     * @param family family being loaded to<a name="line.563"></a>
+<span class="sourceLineNo">564</span>     * @param srcPath path of HFile<a name="line.564"></a>
+<span class="sourceLineNo">565</span>     * @throws IOException<a name="line.565"></a>
+<span class="sourceLineNo">566</span>     */<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    void failedBulkLoad(byte[] family, String srcPath) throws IOException;<a name="line.567"></a>
+<span class="sourceLineNo">568</span>  }<a name="line.568"></a>
+<span class="sourceLineNo">569</span><a name="line.569"></a>
+<span class="sourceLineNo">570</span>  /**<a name="line.570"></a>
+<span class="sourceLineNo">571</span>   * Attempts to atomically load a group of hfiles.  This is critical for loading<a name="line.571"></a>
+<span class="sourceLineNo">572</span>   * rows with multiple column families atomically.<a name="line.572"></a>
+<span class="sourceLineNo">573</span>   *<a name="line.573"></a>
+<span class="sourceLineNo">574</span>   * @param familyPaths List of Pair&amp;lt;byte[] column family, String hfilePath&amp;gt;<a name="line.574"></a>
+<span class="sourceLineNo">575</span>   * @param bulkLoadListener Internal hooks enabling massaging/preparation of a<a name="line.575"></a>
+<span class="sourceLineNo">576</span>   * file about to be bulk loaded<a name="line.576"></a>
+<span class="sourceLineNo">577</span>   * @param assignSeqId<a name="line.577"></a>
+<span class="sourceLineNo">578</span>   * @return Map from family to List of store file paths if successful, null if failed recoverably<a name="line.578"></a>
+<span class="sourceLineNo">579</span>   * @throws IOException if failed unrecoverably.<a name="line.579"></a>
+<span class="sourceLineNo">580</span>   */<a name="line.580"></a>
+<span class="sourceLineNo">581</span>  Map&lt;byte[], List&lt;Path&gt;&gt; bulkLoadHFiles(Collection&lt;Pair&lt;byte[], String&gt;&gt; familyPaths,<a name="line.581"></a>
+<span class="sourceLineNo">582</span>      boolean assignSeqId, BulkLoadListener bulkLoadListener) throws IOException;<a name="line.582"></a>
+<span class="sourceLineNo">583</span><a name="line.583"></a>
+<span class="sourceLineNo">584</span>  /**<a name="line.584"></a>
+<span class="sourceLineNo">585</span>   * Attempts to atomically load a group of hfiles.  This is critical for loading<a name="line.585"></a>
+<span class="sourceLineNo">586</span>   * rows with multiple column families atomically.<a name="line.586"></a>
+<span class="sourceLineNo">587</span>   *<a name="line.587"></a>
+<span class="sourceLineNo">588</span>   * @param familyPaths List of Pair&amp;lt;byte[] column family, String hfilePath&amp;gt;<a name="line.588"></a>
+<span class="sourceLineNo">589</span>   * @param assignSeqId<a name="line.589"></a>
+<span class="sourceLineNo">590</span>   * @param bulkLoadListener Internal hooks enabling massaging/preparation of a<a name="line.590"></a>
+<span class="sourceLineNo">591</span>   * file about to be bulk loaded<a name="line.591"></a>
+<span class="sourceLineNo">592</span>   * @param copyFile always copy hfiles if true<a name="line.592"></a>
+<span class="sourceLineNo">593</span>   * @return Map from family to List of store file paths if successful, null if failed recoverably<a name="line.593"></a>
+<span class="sourceLineNo">594</span>   * @throws IOException if failed unrecoverably.<a name="line.594"></a>
+<span class="sourceLineNo">595</span>   */<a name="line.595"></a>
+<span class="sourceLineNo">596</span>  Map&lt;byte[], List&lt;Path&gt;&gt; bulkLoadHFiles(Collection&lt;Pair&lt;byte[], String&gt;&gt; familyPaths,<a name="line.596"></a>
+<span class="sourceLineNo">597</span>      boolean assignSeqId, BulkLoadListener bulkLoadListener, boolean copyFile) throws IOException;<a name="line.597"></a>
+<span class="sourceLineNo">598</span><a name="line.598"></a>
+<span class="sourceLineNo">599</span>  ///////////////////////////////////////////////////////////////////////////<a name="line.599"></a>
+<span class="sourceLineNo">600</span>  // Coprocessors<a name="line.600"></a>
+<span class="sourceLineNo">601</span><a name="line.601"></a>
+<span class="sourceLineNo">602</span>  /** @return the coprocessor host */<a name="line.602"></a>
+<span class="sourceLineNo">603</span>  RegionCoprocessorHost getCoprocessorHost();<a name="line.603"></a>
+<span class="sourceLineNo">604</span><a name="line.604"></a>
+<span class="sourceLineNo">605</span>  /**<a name="line.605"></a>
+<span class="sourceLineNo">606</span>   * Executes a single protocol buffer coprocessor endpoint {@link Service} method using<a name="line.606"></a>
+<span class="sourceLineNo">607</span>   * the registered protocol handlers.  {@link Service} implementations must be registered via the<a name="line.607"></a>
+<span class="sourceLineNo">608</span>   * {@link Region#registerService(com.google.protobuf.Service)}<a name="line.608"></a>
+<span class="sourceLineNo">609</span>   * method before they are available.<a name="line.609"></a>
+<span class="sourceLineNo">610</span>   *<a name="line.610"></a>
+<span class="sourceLineNo">611</span>   * @param controller an {@code RpcContoller} implementation to pass to the invoked service<a name="line.611"></a>
+<span class="sourceLineNo">612</span>   * @param call a {@code CoprocessorServiceCall} instance identifying the service, method,<a name="line.612"></a>
+<span class="sourceLineNo">613</span>   *     and parameters for the method invocation<a name="line.613"></a>
+<span class="sourceLineNo">614</span>   * @return a protocol buffer {@code Message} instance containing the method's result<a name="line.614"></a>
+<span class="sourceLineNo">615</span>   * @throws IOException if no registered service handler is found or an error<a name="line.615"></a>
+<span class="sourceLineNo">616</span>   *     occurs during the invocation<a name="line.616"></a>
+<span class="sourceLineNo">617</span>   * @see org.apache.hadoop.hbase.regionserver.Region#registerService(com.google.protobuf.Service)<a name="line.617"></a>
+<span class="sourceLineNo">618</span>   */<a name="line.618"></a>
+<span class="sourceLineNo">619</span>  com.google.protobuf.Message execService(com.google.protobuf.RpcController controller,<a name="line.619"></a>
+<span class="sourceLineNo">620</span>      CoprocessorServiceCall call)<a name="line.620"></a>
+<span class="sourceLineNo">621</span>  throws IOException;<a name="line.621"></a>
+<span class="sourceLineNo">622</span><a name="line.622"></a>
+<span class="sourceLineNo">623</span>  /**<a name="line.623"></a>
+<span class="sourceLineNo">624</span>   * Registers a new protocol buffer {@link Service} subclass as a coprocessor endpoint to<a name="line.624"></a>
+<span class="sourceLineNo">625</span>   * be available for handling Region#execService(com.google.protobuf.RpcController,<a name="line.625"></a>
+<span class="sourceLineNo">626</span>   *    org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceCall) calls.<a name="line.626"></a>
+<span class="sourceLineNo">627</span>   *<a name="line.627"></a>
+<span class="sourceLineNo">628</span>   * &lt;p&gt;<a name="line.628"></a>
+<span class="sourceLineNo">629</span>   * Only a single instance may be registered per region for a given {@link Service} subclass (the<a name="line.629"></a>
+<span class="sourceLineNo">630</span>   * instances are keyed on {@link com.google.protobuf.Descriptors.ServiceDescriptor#getFullName()}.<a name="line.630"></a>
+<span class="sourceLineNo">631</span>   * After the first registration, subsequent calls with the same service name will fail with<a name="line.631"></a>
+<span class="sourceLineNo">632</span>   * a return value of {@code false}.<a name="line.632"></a>
+<span class="sourceLineNo">633</span>   * &lt;/p&gt;<a name="line.633"></a>
+<span class="sourceLineNo">634</span>   * @param instance the {@code Service} subclass instance to expose as a coprocessor endpoint<a name="line.634"></a>
+<span class="sourceLineNo">635</span>   * @return {@code true} if the registration was successful, {@code false}<a name="line.635"></a>
+<span class="sourceLineNo">636</span>   * otherwise<a name="line.636"></a>
+<span class="sourceLineNo">637</span>   */<a name="line.637"></a>
+<span class="sourceLineNo">638</span>  boolean registerService(com.google.protobuf.Service instance);<a name="line.638"></a>
+<span class="sourceLineNo">639</span><a name="line.639"></a>
+<span class="sourceLineNo">640</span>  ///////////////////////////////////////////////////////////////////////////<a name="line.640"></a>
+<span class="sourceLineNo">641</span>  // RowMutation processor support<a name="line.641"></a>
 <span class="sourceLineNo">642</span><a name="line.642"></a>
 <span class="sourceLineNo">643</span>  /**<a name="line.643"></a>
-<span class="sourceLineNo">644</span>   * Check the collection of families for valid timestamps<a name="line.644"></a>
-<span class="sourceLineNo">645</span>   * @param familyMap<a name="line.645"></a>
-<span class="sourceLineNo">646</span>   * @param now current timestamp<a name="line.646"></a>
-<span class="sourceLineNo">647</span>   * @throws FailedSanityCheckException<a name="line.647"></a>
-<span class="sourceLineNo">648</span>   */<a name="line.648"></a>
-<span class="sourceLineNo">649</span>  void checkTimestamps(Map&lt;byte[], List&lt;Cell&gt;&gt; familyMap, long now)<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      throws FailedSanityCheckException;<a name="line.650"></a>
-<span class="sourceLineNo">651</span><a name="line.651"></a>
-<span class="sourceLineNo">652</span>  /**<a name="line.652"></a>
-<span class="sourceLineNo">653</span>   * Prepare a delete for a row mutation processor<a name="line.653"></a>
-<span class="sourceLineNo">654</span>   * @param delete The passed delete is modified by this method. WARNING!<a name="line.654"></a>
-<span class="sourceLineNo">655</span>   * @throws IOException<a name="line.655"></a>
-<span class="sourceLineNo">656</span>   */<a name="line.656"></a>
-<span class="sourceLineNo">657</span>  void prepareDelete(Delete delete) throws IOException;<a name="line.657"></a>
+<span class="sourceLineNo">644</span>   * Check the collection of families for validity.<a name="line.644"></a>
+<span class="sourceLineNo">645</span>   * @param families<a name="line.645"></a>
+<span class="sourceLineNo">646</span>   * @throws NoSuchColumnFamilyException<a name="line.646"></a>
+<span class="sourceLineNo">647</span>   */<a name="line.647"></a>
+<span class="sourceLineNo">648</span>  void checkFamilies(Collection&lt;byte[]&gt; families) throws NoSuchColumnFamilyException;<a name="line.648"></a>
+<span class="sourceLineNo">649</span><a name="line.649"></a>
+<span class="sourceLineNo">650</span>  /**<a name="line.650"></a>
+<span class="sourceLineNo">651</span>   * Check the collection of families for valid timestamps<a name="line.651"></a>
+<span class="sourceLineNo">652</span>   * @param familyMap<a name="line.652"></a>
+<span class="sourceLineNo">653</span>   * @param now current timestamp<a name="line.653"></a>
+<span class="sourceLineNo">654</span>   * @throws FailedSanityCheckException<a name="line.654"></a>
+<span class="sourceLineNo">655</span>   */<a name="line.655"></a>
+<span class="sourceLineNo">656</span>  void checkTimestamps(Map&lt;byte[], List&lt;Cell&gt;&gt; familyMap, long now)<a name="line.656"></a>
+<span class="sourceLineNo">657</span>      throws FailedSanityCheckException;<a name="line.657"></a>
 <span class="sourceLineNo">658</span><a name="line.658"></a>
 <span class="sourceLineNo">659</span>  /**<a name="line.659"></a>
-<span class="sourceLineNo">660</span>   * Set up correct timestamps in the KVs in Delete object.<a name="line.660"></a>
-<span class="sourceLineNo">661</span>   * &lt;p&gt;Caller should have the row and region locks.<a name="line.661"></a>
-<span class="sourceLineNo">662</span>   * @param mutation<a name="line.662"></a>
-<span class="sourceLineNo">663</span>   * @param familyCellMap<a name="line.663"></a>
-<span class="sourceLineNo">664</span>   * @param now<a name="line.664"></a>
-<span class="sourceLineNo">665</span>   * @throws IOException<a name="line.665"></a>
-<span class="sourceLineNo">666</span>   */<a name="line.666"></a>
-<span class="sourceLineNo">667</span>  void prepareDeleteTimestamps(Mutation mutation, Map&lt;byte[], List&lt;Cell&gt;&gt; familyCellMap,<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      byte[] now) throws IOException;<a name="line.668"></a>
-<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span>  /**<a name="line.670"></a>
-<span class="sourceLineNo">671</span>   * Replace any cell timestamps set to {@link org.apache.hadoop.hbase.HConstants#LATEST_TIMESTAMP}<a name="line.671"></a>
-<span class="sourceLineNo">672</span>   * provided current timestamp.<a name="line.672"></a>
-<span class="sourceLineNo">673</span>   * @param values<a name="line.673"></a>
-<span class="sourceLineNo">674</span>   * @param now<a name="line.674"></a>
-<span class="sourceLineNo">675</span>   */<a name="line.675"></a>
-<span class="sourceLineNo">676</span>  void updateCellTimestamps(final Iterable&lt;List&lt;Cell&gt;&gt; values, final byte[] now)<a name="line.676"></a>
-<span class="sourceLineNo">677</span>      throws IOException;<a name="line.677"></a>
-<span class="sourceLineNo">678</span><a name="line.678"></a>
-<span class="sourceLineNo">679</span>  ///////////////////////////////////////////////////////////////////////////<a name="line.679"></a>
-<span class="sourceLineNo">680</span>  // Flushes, compactions, splits, etc.<a name="line.680"></a>
-<span class="sourceLineNo">681</span>  // Wizards only, please<a name="line.681"></a>
-<span class="sourceLineNo">682</span><a name="line.682"></a>
-<span class="sourceLineNo">683</span>  interface FlushResult {<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    enum Result {<a name="line.684"></a>
-<span class="sourceLineNo">685</span>      FLUSHED_NO_COMPACTION_NEEDED,<a name="line.685"></a>
-<span class="sourceLineNo">686</span>      FLUSHED_COMPACTION_NEEDED,<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      // Special case where a flush didn't run because there's nothing in the memstores. Used when<a name="line.687"></a>
-<span class="sourceLineNo">688</span>      // bulk loading to know when we can still load even if a flush didn't happen.<a name="line.688"></a>
-<span class="sourceLineNo">689</span>      CANNOT_FLUSH_MEMSTORE_EMPTY,<a name="line.689"></a>
-<span class="sourceLineNo">690</span>      CANNOT_FLUSH<a name="line.690"></a>
-<span class="sourceLineNo">691</span>    }<a name="line.691"></a>
-<span class="sourceLineNo">692</span><a name="line.692"></a>
-<span class="sourceLineNo">693</span>    /** @return the detailed result code */<a name="line.693"></a>
-<span class="sourceLineNo">694</span>    Result getResult();<a name="line.694"></a>
-<span class="sourceLineNo">695</span><a name="line.695"></a>
-<span class="sourceLineNo">696</span>    /** @return true if the memstores were flushed, else false */<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    boolean isFlushSucceeded();<a name="line.697"></a>
-<span class="sourceLineNo">698</span><a name="line.698"></a>
-<span class="sourceLineNo">699</span>    /** @return True if the flush requested a compaction, else false */<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    boolean isCompactionNeeded();<a name="line.700"></a>
-<span class="sourceLineNo">701</span>  }<a name="line.701"></a>
+<span class="sourceLineNo">660</span>   * Prepare a delete for a row mutation processor<a name="line.660"></a>
+<span class="sourceLineNo">661</span>   * @param delete The passed delete is modified by this method. WARNING!<a name="line.661"></a>
+<span class="sourceLineNo">662</span>   * @throws IOException<a name="line.662"></a>
+<span class="sourceLineNo">663</span>   */<a name="line.663"></a>
+<span class="sourceLineNo">664</span>  void prepareDelete(Delete delete) throws IOException;<a name="line.664"></a>
+<span class="sourceLineNo">665</span><a name="line.665"></a>
+<span class="sourceLineNo">666</span>  /**<a name="line.666"></a>
+<span class="sourceLineNo">667</span>   * Set up correct timestamps in the KVs in Delete object.<a name="line.667"></a>
+<span class="sourceLineNo">668</span>   * &lt;p&gt;Caller should have the row and region locks.<a name="line.668"></a>
+<span class="sourceLineNo">669</span>   * @param mutation<a name="line.669"></a>
+<span class="sourceLineNo">670</span>   * @param familyCellMap<a name="line.670"></a>
+<span class="sourceLineNo">671</span>   * @param now<a name="line.671"></a>
+<span class="sourceLineNo">672</span>   * @throws IOException<a name="line.672"></a>
+<span class="sourceLineNo">673</span>   */<a name="line.673"></a>
+<span class="sourceLineNo">674</span>  void prepareDeleteTimestamps(Mutation mutation, Map&lt;byte[], List&lt;Cell&gt;&gt; familyCellMap,<a name="line.674"></a>
+<span class="sourceLineNo">675</span>      byte[] now) throws IOException;<a name="line.675"></a>
+<span class="sourceLineNo">676</span><a name="line.676"></a>
+<span class="sourceLineNo">677</span>  /**<a name="line.677"></a>
+<span class="sourceLineNo">678</span>   * Replace any cell timestamps set to {@link org.apache.hadoop.hbase.HConstants#LATEST_TIMESTAMP}<a name="line.678"></a>
+<span class="sourceLineNo">679</span>   * provided current timestamp.<a name="line.679"></a>
+<span class="sourceLineNo">680</span>   * @param values<a name="line.680"></a>
+<span class="sourceLineNo">681</span>   * @param now<a name="line.681"></a>
+<span class="sourceLineNo">682</span>   */<a name="line.682"></a>
+<span class="sourceLineNo">683</span>  void updateCellTimestamps(final Iterable&lt;List&lt;Cell&gt;&gt; values, final byte[] now)<a name="line.683"></a>
+<span class="sourceLineNo">684</span>      throws IOException;<a name="line.684"></a>
+<span class="sourceLineNo">685</span><a name="line.685"></a>
+<span class="sourceLineNo">686</span>  ///////////////////////////////////////////////////////////////////////////<a name="line.686"></a>
+<span class="sourceLineNo">687</span>  // Flushes, compactions, splits, etc.<a name="line.687"></a>
+<span class="sourceLineNo">688</span>  // Wizards only, please<a name="line.688"></a>
+<span class="sourceLineNo">689</span><a name="line.689"></a>
+<span class="sourceLineNo">690</span>  interface FlushResult {<a name="line.690"></a>
+<span class="sourceLineNo">691</span>    enum Result {<a name="line.691"></a>
+<span class="sourceLineNo">692</span>      FLUSHED_NO_COMPACTION_NEEDED,<a name="line.692"></a>
+<span class="sourceLineNo">693</span>      FLUSHED_COMPACTION_NEEDED,<a name="line.693"></a>
+<span class="sourceLineNo">694</span>      // Special case where a flush didn't run because there's nothing in the memstores. Used when<a name="line.694"></a>
+<span class="sourceLineNo">695</span>      // bulk loading to know when we can still load even if a flush didn't happen.<a name="line.695"></a>
+<span class="sourceLineNo">696</span>      CANNOT_FLUSH_MEMSTORE_EMPTY,<a name="line.696"></a>
+<span class="sourceLineNo">697</span>      CANNOT_FLUSH<a name="line.697"></a>
+<span class="sourceLineNo">698</span>    }<a name="line.698"></a>
+<span class="sourceLineNo">699</span><a name="line.699"></a>
+<span class="sourceLineNo">700</span>    /** @return the detailed result code */<a name="line.700"></a>
+<span class="sourceLineNo">701</span>    Result getResult();<a name="line.701"></a>
 <span class="sourceLineNo">702</span><a name="line.702"></a>
-<span class="sourceLineNo">703</span>  /**<a name="line.703"></a>
-<span class="sourceLineNo">704</span>   * Flush the cache.<a name="line.704"></a>
-<span class="sourceLineNo">705</span>   *<a name="line.705"></a>
-<span class="sourceLineNo">706</span>   * &lt;p&gt;When this method is called the cache will be flushed unless:<a name="line.706"></a>
-<span class="sourceLineNo">707</span>   * &lt;ol&gt;<a name="line.707"></a>
-<span class="sourceLineNo">708</span>   *   &lt;li&gt;the cache is empty&lt;/li&gt;<a name="line.708"></a>
-<span class="sourceLineNo">709</span>   *   &lt;li&gt;the region is closed.&lt;/li&gt;<a name="line.709"></a>
-<span class="sourceLineNo">710</span>   *   &lt;li&gt;a flush is already in progress&lt;/li&gt;<a name="line.710"></a>
-<span class="sourceLineNo">711</span>   *   &lt;li&gt;writes are disabled&lt;/li&gt;<a name="line.711"></a>
-<span class="sourceLineNo">712</span>   * &lt;/ol&gt;<a name="line.712"></a>
-<span class="sourceLineNo">713</span>   *<a name="line.713"></a>
-<span class="sourceLineNo">714</span>   * &lt;p&gt;This method may block for some time, so it should not be called from a<a name="line.714"></a>
-<span class="sourceLineNo">715</span>   * time-sensitive thread.<a name="line.715"></a>
-<span class="sourceLineNo">716</span>   * @param force whether we want to force a flush of all stores<a name="line.716"></a>
-<span class="sourceLineNo">717</span>   * @return FlushResult indicating whether the flush was successful or not and if<a name="line.717"></a>
-<span class="sourceLineNo">718</span>   * the region needs compacting<a name="line.718"></a>
-<span class="sourceLineNo">719</span>   *<a name="line.719"></a>
-<span class="sourceLineNo">720</span>   * @throws IOException general io exceptions<a name="line.720"></a>
-<span class="sourceLineNo">721</span>   * because a snapshot was not properly persisted.<a name="line.721"></a>
-<span class="sourceLineNo">722</span>   */<a name="line.722"></a>
-<span class="sourceLineNo">723</span>  FlushResult flush(boolean force) throws IOException;<a name="line.723"></a>
-<span class="sourceLineNo">724</span><a name="line.724"></a>
-<span class="sourceLineNo">725</span>  /**<a name="line.725"></a>
-<span class="sourceLineNo">726</span>   * Synchronously compact all stores in the region.<a name="line.726"></a>
-<span class="sourceLineNo">727</span>   * &lt;p&gt;This operation could block for a long time, so don't call it from a<a name="line.727"></a>
-<span class="sourceLineNo">728</span>   * time-sensitive thread.<a name="line.728"></a>
-<span class="sourceLineNo">729</span>   * &lt;p&gt;Note that no locks are taken to prevent possible conflicts between<a name="line.729"></a>
-<span class="sourceLineNo">730</span>   * compaction and splitting activities. The regionserver does not normally compact<a name="line.730"></a>
-<span class="sourceLineNo">731</span>   * and split in parallel. However by calling this method you may introduce<a name="line.731"></a>
-<span class="sourceLineNo">732</span>   * unexpected and unhandled concurrency. Don't do this unless you know what<a name="line.732"></a>
-<span class="sourceLineNo">733</span>   * you are doing.<a name="line.733"></a>
-<span class="sourceLineNo">734</span>   *<a name="line.734"></a>
-<span class="sourceLineNo">735</span>   * @param majorCompaction True to force a major compaction regardless of thresholds<a name="line.735"></a>
-<span class="sourceLineNo">736</span>   * @throws IOException<a name="line.736"></a>
-<span class="sourceLineNo">737</span>   */<a name="line.737"></a>
-<span class="sourceLineNo">738</span>  void compact(final boolean majorCompaction) throws IOException;<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span>  /**<a name="line.740"></a>
-<span class="sourceLineNo">741</span>   * Trigger major compaction on all stores in the region.<a name="line.741"></a>
-<span class="sourceLineNo">742</span>   * &lt;p&gt;<a name="line.742"></a>
-<span class="sourceLineNo">743</span>   * Compaction will be performed asynchronously to this call by the RegionServer's<a name="line.743"></a>
-<span class="sourceLineNo">744</span>   * CompactSplitThread. See also {@link Store#triggerMajorCompaction()}<a name="line.744"></a>
-<span class="sourceLineNo">745</span>   * @throws IOException<a name="line.745"></a>
-<span class="sourceLineNo">746</span>   */<a name="line.746"></a>
-<span class="sourceLineNo">747</span>  void triggerMajorCompaction() throws IOException;<a name="line.747"></a>
-<span class="sourceLineNo">748</span><a name="line.748"></a>
-<span class="sourceLineNo">749</span>  /**<a name="line.749"></a>
-<span class="sourceLineNo">750</span>   * @return if a given region is in compaction now.<a name="line.750"></a>
-<span class="sourceLineNo">751</span>   */<a name="line.751"></a>
-<span class="sourceLineNo">752</span>  CompactionState getCompactionState();<a name="line.752"></a>
-<span class="sourceLineNo">753</span><a name="line.753"></a>
-<span class="sourceLineNo">754</span>  /** Wait for all current flushes and compactions of the region to complete */<a name="line.754"></a>
-<span class="sourceLineNo">755</sp

<TRUNCATED>

[02/33] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/hbase-archetypes/hbase-archetype-builder/license.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-archetype-builder/license.html b/hbase-archetypes/hbase-archetype-builder/license.html
index 08dc97b..4bff358 100644
--- a/hbase-archetypes/hbase-archetype-builder/license.html
+++ b/hbase-archetypes/hbase-archetype-builder/license.html
@@ -111,7 +111,209 @@
 <h2><a name="Project_Licenses"></a>Project Licenses</h2><a name="Project_Licenses"></a>
 <div class="section">
 <h3><a name="Apache_License_Version_2.0"></a>Apache License, Version 2.0</h3><a name="Apache_License_Version_2.0"></a>
-<p>Can't read the url [https://www.apache.org/licenses/LICENSE-2.0.txt] : Read timed out</p></div></div>
+<div class="source"><pre class="prettyprint">
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      &quot;License&quot; shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      &quot;Licensor&quot; shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      &quot;Legal Entity&quot; shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      &quot;control&quot; means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      &quot;You&quot; (or &quot;Your&quot;) shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      &quot;Source&quot; form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      &quot;Object&quot; form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      &quot;Work&quot; shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      &quot;Derivative Works&quot; shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      &quot;Contribution&quot; shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, &quot;submitted&quot;
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as &quot;Not a Contribution.&quot;
+
+      &quot;Contributor&quot; shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a &quot;NOTICE&quot; text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an &quot;AS IS&quot; BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets &quot;[]&quot;
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same &quot;printed page&quot; as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an &quot;AS IS&quot; BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+</pre></div></div></div>
                   </div>
           </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/license.html
----------------------------------------------------------------------
diff --git a/license.html b/license.html
index 441eec3..6490837 100644
--- a/license.html
+++ b/license.html
@@ -281,7 +281,209 @@
 <h2><a name="Project_Licenses"></a>Project Licenses</h2><a name="Project_Licenses"></a>
 <div class="section">
 <h3><a name="Apache_License_Version_2.0"></a>Apache License, Version 2.0</h3><a name="Apache_License_Version_2.0"></a>
-<p>Can't read the url [https://www.apache.org/licenses/LICENSE-2.0.txt] : Read timed out</p></div></div>
+<div class="source"><pre class="prettyprint">
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      &quot;License&quot; shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      &quot;Licensor&quot; shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      &quot;Legal Entity&quot; shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      &quot;control&quot; means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      &quot;You&quot; (or &quot;Your&quot;) shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      &quot;Source&quot; form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      &quot;Object&quot; form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      &quot;Work&quot; shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      &quot;Derivative Works&quot; shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      &quot;Contribution&quot; shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, &quot;submitted&quot;
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as &quot;Not a Contribution.&quot;
+
+      &quot;Contributor&quot; shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a &quot;NOTICE&quot; text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an &quot;AS IS&quot; BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets &quot;[]&quot;
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same &quot;printed page&quot; as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an &quot;AS IS&quot; BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+</pre></div></div></div>
                   </div>
           </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/testdevapidocs/allclasses-frame.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/allclasses-frame.html b/testdevapidocs/allclasses-frame.html
index 24dc1aa..2410551 100644
--- a/testdevapidocs/allclasses-frame.html
+++ b/testdevapidocs/allclasses-frame.html
@@ -1577,6 +1577,7 @@
 <li><a href="org/apache/hadoop/hbase/quotas/TestRegionServerSpaceQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas" target="classFrame">TestRegionServerSpaceQuotaManager</a></li>
 <li><a href="org/apache/hadoop/hbase/util/TestRegionSizeCalculator.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">TestRegionSizeCalculator</a></li>
 <li><a href="org/apache/hadoop/hbase/quotas/TestRegionSizeUse.html" title="class in org.apache.hadoop.hbase.quotas" target="classFrame">TestRegionSizeUse</a></li>
+<li><a href="org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html" title="class in org.apache.hadoop.hbase.snapshot" target="classFrame">TestRegionSnapshotTask</a></li>
 <li><a href="org/apache/hadoop/hbase/util/TestRegionSplitCalculator.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">TestRegionSplitCalculator</a></li>
 <li><a href="org/apache/hadoop/hbase/util/TestRegionSplitCalculator.SimpleRange.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">TestRegionSplitCalculator.SimpleRange</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/TestRegionSplitPolicy.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">TestRegionSplitPolicy</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/testdevapidocs/allclasses-noframe.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/allclasses-noframe.html b/testdevapidocs/allclasses-noframe.html
index ae47edc..38d8b5f 100644
--- a/testdevapidocs/allclasses-noframe.html
+++ b/testdevapidocs/allclasses-noframe.html
@@ -1577,6 +1577,7 @@
 <li><a href="org/apache/hadoop/hbase/quotas/TestRegionServerSpaceQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">TestRegionServerSpaceQuotaManager</a></li>
 <li><a href="org/apache/hadoop/hbase/util/TestRegionSizeCalculator.html" title="class in org.apache.hadoop.hbase.util">TestRegionSizeCalculator</a></li>
 <li><a href="org/apache/hadoop/hbase/quotas/TestRegionSizeUse.html" title="class in org.apache.hadoop.hbase.quotas">TestRegionSizeUse</a></li>
+<li><a href="org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html" title="class in org.apache.hadoop.hbase.snapshot">TestRegionSnapshotTask</a></li>
 <li><a href="org/apache/hadoop/hbase/util/TestRegionSplitCalculator.html" title="class in org.apache.hadoop.hbase.util">TestRegionSplitCalculator</a></li>
 <li><a href="org/apache/hadoop/hbase/util/TestRegionSplitCalculator.SimpleRange.html" title="class in org.apache.hadoop.hbase.util">TestRegionSplitCalculator.SimpleRange</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/TestRegionSplitPolicy.html" title="class in org.apache.hadoop.hbase.regionserver">TestRegionSplitPolicy</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/testdevapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/index-all.html b/testdevapidocs/index-all.html
index a21838e..da3df44 100644
--- a/testdevapidocs/index-all.html
+++ b/testdevapidocs/index-all.html
@@ -692,6 +692,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestRegionStates.html#addRegionNode-org.apache.hadoop.hbase.master.assignment.RegionStates-org.apache.hadoop.hbase.TableName-long-">addRegionNode(RegionStates, TableName, long)</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestRegionStates.html" title="class in org.apache.hadoop.hbase.master.assignment">TestRegionStates</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html#addRegionToSnapshot-org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.snapshot.SnapshotManifest-">addRegionToSnapshot(SnapshotProtos.SnapshotDescription, HRegion, SnapshotManifest)</a></span> - Method in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html" title="class in org.apache.hadoop.hbase.snapshot">TestRegionSnapshotTask</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/SnapshotTestingUtils.SnapshotMock.SnapshotBuilder.html#addRegionV1--">addRegionV1()</a></span> - Method in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/SnapshotTestingUtils.SnapshotMock.SnapshotBuilder.html" title="class in org.apache.hadoop.hbase.snapshot">SnapshotTestingUtils.SnapshotMock.SnapshotBuilder</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/SnapshotTestingUtils.SnapshotMock.SnapshotBuilder.html#addRegionV2--">addRegionV2()</a></span> - Method in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/SnapshotTestingUtils.SnapshotMock.SnapshotBuilder.html" title="class in org.apache.hadoop.hbase.snapshot">SnapshotTestingUtils.SnapshotMock.SnapshotBuilder</a></dt>
@@ -5365,6 +5367,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/SnapshotTestingUtils.SnapshotMock.SnapshotBuilder.html#conf">conf</a></span> - Variable in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/SnapshotTestingUtils.SnapshotMock.SnapshotBuilder.html" title="class in org.apache.hadoop.hbase.snapshot">SnapshotTestingUtils.SnapshotMock.SnapshotBuilder</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html#conf">conf</a></span> - Static variable in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html" title="class in org.apache.hadoop.hbase.snapshot">TestRegionSnapshotTask</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/TestRestoreSnapshotHelper.html#conf">conf</a></span> - Variable in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/TestRestoreSnapshotHelper.html" title="class in org.apache.hadoop.hbase.snapshot">TestRestoreSnapshotHelper</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/TestSnapshotManifest.html#conf">conf</a></span> - Variable in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/TestSnapshotManifest.html" title="class in org.apache.hadoop.hbase.snapshot">TestSnapshotManifest</a></dt>
@@ -6938,6 +6942,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestRegionServerReportForDuty.MyRegionServer.html#createRegionServerStatusStub-boolean-">createRegionServerStatusStub(boolean)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestRegionServerReportForDuty.MyRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">TestRegionServerReportForDuty.MyRegionServer</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html#createRegionVisitorWithDelay-org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription-org.apache.hadoop.fs.Path-">createRegionVisitorWithDelay(SnapshotProtos.SnapshotDescription, Path)</a></span> - Method in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html" title="class in org.apache.hadoop.hbase.snapshot">TestRegionSnapshotTask</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/TestNamespace.html#createRemoveTest--">createRemoveTest()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TestNamespace.html" title="class in org.apache.hadoop.hbase">TestNamespace</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestAsyncProcess.html#createReplicaAp-int-int-int-">createReplicaAp(int, int, int)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestAsyncProcess.html" title="class in org.apache.hadoop.hbase.client">TestAsyncProcess</a></dt>
@@ -11672,6 +11678,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/TestExportSnapshotNoCluster.html#fs">fs</a></span> - Static variable in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/TestExportSnapshotNoCluster.html" title="class in org.apache.hadoop.hbase.snapshot">TestExportSnapshotNoCluster</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html#fs">fs</a></span> - Static variable in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html" title="class in org.apache.hadoop.hbase.snapshot">TestRegionSnapshotTask</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/TestRestoreSnapshotHelper.html#fs">fs</a></span> - Variable in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/TestRestoreSnapshotHelper.html" title="class in org.apache.hadoop.hbase.snapshot">TestRestoreSnapshotHelper</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/TestSnapshotDescriptionUtils.html#fs">fs</a></span> - Static variable in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/TestSnapshotDescriptionUtils.html" title="class in org.apache.hadoop.hbase.snapshot">TestSnapshotDescriptionUtils</a></dt>
@@ -20014,6 +20022,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/TestMobRestoreSnapshotHelper.html#LOG">LOG</a></span> - Variable in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/TestMobRestoreSnapshotHelper.html" title="class in org.apache.hadoop.hbase.snapshot">TestMobRestoreSnapshotHelper</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html#LOG">LOG</a></span> - Variable in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html" title="class in org.apache.hadoop.hbase.snapshot">TestRegionSnapshotTask</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/TestRestoreFlushSnapshotFromClient.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/TestRestoreFlushSnapshotFromClient.html" title="class in org.apache.hadoop.hbase.snapshot">TestRestoreFlushSnapshotFromClient</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/TestRestoreSnapshotHelper.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/TestRestoreSnapshotHelper.html" title="class in org.apache.hadoop.hbase.snapshot">TestRestoreSnapshotHelper</a></dt>
@@ -29003,6 +29013,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/SnapshotTestingUtils.SnapshotMock.SnapshotBuilder.html#rootDir">rootDir</a></span> - Variable in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/SnapshotTestingUtils.SnapshotMock.SnapshotBuilder.html" title="class in org.apache.hadoop.hbase.snapshot">SnapshotTestingUtils.SnapshotMock.SnapshotBuilder</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html#rootDir">rootDir</a></span> - Static variable in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html" title="class in org.apache.hadoop.hbase.snapshot">TestRegionSnapshotTask</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/TestRestoreSnapshotHelper.html#rootDir">rootDir</a></span> - Variable in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/TestRestoreSnapshotHelper.html" title="class in org.apache.hadoop.hbase.snapshot">TestRestoreSnapshotHelper</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/TestSnapshotManifest.html#rootDir">rootDir</a></span> - Variable in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/TestSnapshotManifest.html" title="class in org.apache.hadoop.hbase.snapshot">TestSnapshotManifest</a></dt>
@@ -32786,6 +32798,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/TestMobSecureExportSnapshot.html#setUpBeforeClass--">setUpBeforeClass()</a></span> - Static method in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/TestMobSecureExportSnapshot.html" title="class in org.apache.hadoop.hbase.snapshot">TestMobSecureExportSnapshot</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html#setupBeforeClass--">setupBeforeClass()</a></span> - Static method in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html" title="class in org.apache.hadoop.hbase.snapshot">TestRegionSnapshotTask</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/TestSecureExportSnapshot.html#setUpBeforeClass--">setUpBeforeClass()</a></span> - Static method in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/TestSecureExportSnapshot.html" title="class in org.apache.hadoop.hbase.snapshot">TestSecureExportSnapshot</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/TestFullLogReconstruction.html#setUpBeforeClass--">setUpBeforeClass()</a></span> - Static method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TestFullLogReconstruction.html" title="class in org.apache.hadoop.hbase">TestFullLogReconstruction</a></dt>
@@ -33192,6 +33206,8 @@
 <div class="block">Creates a table with given table name and specified number of column
  families if the table does not already exist.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html#setupTable-org.apache.hadoop.hbase.TableName-">setupTable(TableName)</a></span> - Method in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html" title="class in org.apache.hadoop.hbase.snapshot">TestRegionSnapshotTask</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html#setupTable-org.apache.hadoop.hbase.TableName-">setupTable(TableName)</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/BaseTestHBaseFsck.html" title="class in org.apache.hadoop.hbase.util">BaseTestHBaseFsck</a></dt>
 <dd>
 <div class="block">Setup a clean table before we start mucking with it.</div>
@@ -36768,6 +36784,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html#tearDown--">tearDown()</a></span> - Method in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html" title="class in org.apache.hadoop.hbase.snapshot">TestFlushSnapshotFromClient</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html#tearDown--">tearDown()</a></span> - Static method in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html" title="class in org.apache.hadoop.hbase.snapshot">TestRegionSnapshotTask</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/TestRestoreFlushSnapshotFromClient.html#tearDown--">tearDown()</a></span> - Method in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/TestRestoreFlushSnapshotFromClient.html" title="class in org.apache.hadoop.hbase.snapshot">TestRestoreFlushSnapshotFromClient</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/TestRestoreSnapshotHelper.html#tearDown--">tearDown()</a></span> - Method in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/TestRestoreSnapshotHelper.html" title="class in org.apache.hadoop.hbase.snapshot">TestRestoreSnapshotHelper</a></dt>
@@ -38280,6 +38298,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/TestExportSnapshotNoCluster.html#TEST_UTIL">TEST_UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/TestExportSnapshotNoCluster.html" title="class in org.apache.hadoop.hbase.snapshot">TestExportSnapshotNoCluster</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html#TEST_UTIL">TEST_UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html" title="class in org.apache.hadoop.hbase.snapshot">TestRegionSnapshotTask</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/TestRestoreSnapshotHelper.html#TEST_UTIL">TEST_UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/TestRestoreSnapshotHelper.html" title="class in org.apache.hadoop.hbase.snapshot">TestRestoreSnapshotHelper</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/TestSnapshotClientRetries.html#TEST_UTIL">TEST_UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/TestSnapshotClientRetries.html" title="class in org.apache.hadoop.hbase.snapshot">TestSnapshotClientRetries</a></dt>
@@ -38629,6 +38649,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/replication/TestReplicationAdmin.html#testAddPeerWithUnDeletedQueues--">testAddPeerWithUnDeletedQueues()</a></span> - Method in class org.apache.hadoop.hbase.client.replication.<a href="org/apache/hadoop/hbase/client/replication/TestReplicationAdmin.html" title="class in org.apache.hadoop.hbase.client.replication">TestReplicationAdmin</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html#testAddRegionWithCompactions--">testAddRegionWithCompactions()</a></span> - Method in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html" title="class in org.apache.hadoop.hbase.snapshot">TestRegionSnapshotTask</a></dt>
+<dd>
+<div class="block">Tests adding a region to the snapshot manifest while compactions are running on the region.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/replication/TestReplicationAdmin.html#testAddRemovePeer--">testAddRemovePeer()</a></span> - Method in class org.apache.hadoop.hbase.client.replication.<a href="org/apache/hadoop/hbase/client/replication/TestReplicationAdmin.html" title="class in org.apache.hadoop.hbase.client.replication">TestReplicationAdmin</a></dt>
 <dd>
 <div class="block">Simple testing of adding and removing peers, basically shows that
@@ -51497,6 +51521,12 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/quotas/TestRegionSizeUse.html#TestRegionSizeUse--">TestRegionSizeUse()</a></span> - Constructor for class org.apache.hadoop.hbase.quotas.<a href="org/apache/hadoop/hbase/quotas/TestRegionSizeUse.html" title="class in org.apache.hadoop.hbase.quotas">TestRegionSizeUse</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html" title="class in org.apache.hadoop.hbase.snapshot"><span class="typeNameLink">TestRegionSnapshotTask</span></a> - Class in <a href="org/apache/hadoop/hbase/snapshot/package-summary.html">org.apache.hadoop.hbase.snapshot</a></dt>
+<dd>
+<div class="block">Testing the region snapshot task on a cluster.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html#TestRegionSnapshotTask--">TestRegionSnapshotTask()</a></span> - Constructor for class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html" title="class in org.apache.hadoop.hbase.snapshot">TestRegionSnapshotTask</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestSerialReplication.html#testRegionSplit--">testRegionSplit()</a></span> - Method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestSerialReplication.html" title="class in org.apache.hadoop.hbase.replication">TestSerialReplication</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/util/TestRegionSplitCalculator.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">TestRegionSplitCalculator</span></a> - Class in <a href="org/apache/hadoop/hbase/util/package-summary.html">org.apache.hadoop.hbase.util</a></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/testdevapidocs/org/apache/hadoop/hbase/TestIOFencing.BlockCompactionsInCompletionHStore.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/TestIOFencing.BlockCompactionsInCompletionHStore.html b/testdevapidocs/org/apache/hadoop/hbase/TestIOFencing.BlockCompactionsInCompletionHStore.html
index 1b3fc02..433961d 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/TestIOFencing.BlockCompactionsInCompletionHStore.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/TestIOFencing.BlockCompactionsInCompletionHStore.html
@@ -206,7 +206,7 @@ extends org.apache.hadoop.hbase.regionserver.HStore</pre>
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.regionserver.HStore</h3>
-<code>add, add, addChangedReaderObserver, areWritesEnabled, assertBulkLoadHFileOk, bulkLoadHFile, bulkLoadHFile, cancelRequestedCompaction, canSplit, close, closeAndArchiveCompactedFiles, compact, compact, compactRecentForTestingAssumingDefaultPolicy, createCacheConf, createFlushContext, createScanner, createStoreEngine, createWriterInTmp, createWriterInTmp, createWriterInTmp, deleteChangedReaderObserver, deregisterChildren, determineTTLFromFamily, flushCache, getAvgStoreFileAge, getBlockingFileCount, getBytesPerChecksum, getCacheConfig, getChecksumType, getCloseCheckInterval, getColumnFamilyDescriptor, getColumnFamilyName, getCompactedCellsCount, getCompactedCellsSize, getCompactedFiles, getCompactedFilesCount, getCompactionCheckMultiplier, getCompactionPressure, getCompactionProgress, getCompactPriority, getComparator, getCoprocessorHost, getDataBlockEncoder, getFileSystem, getFlushableSize, getFlushedCellsCount, getFlushedCellsSize, getFlushedOutputFileSize, getHFilesSize, getHRe
 gion, getLastCompactSize, getMajorCompactedCellsCount, getMajorCompactedCellsSize, getMaxMemstoreTS, getMaxSequenceId, getMaxStoreFileAge, getMemstoreFlushSize, getMemStoreSize, getMinStoreFileAge, getNumHFiles, getNumReferenceFiles, getOffPeakHours, getRegionFileSystem, getRegionInfo, getScanInfo, getScanner, getScanners, getScanners, getSize, getSizeOfMemStore, getSizeOfSnapshot, getSizeToFlush, getSmallestReadPoint, getSnapshotSize, getSplitPoint, getStoreEngine, getStorefiles, getStorefilesCount, getStorefilesIndexSize, getStorefilesSize, getStoreFileTtl, getStoreHomedir, getStoreHomedir, getStoreSizeUncompressed, getTableName, getTotalStaticBloomSize, getTotalStaticIndexSize, hasReferences, hasTooManyStoreFiles, heapSize, isMajorCompaction, isPrimaryReplicaStore, isSloppyMemstore, needsCompaction, onConfigurationChange, preBulkLoadHFile, preFlushSeqIDEstimation, recreateScanners, refreshStoreFiles, refreshStoreFiles, registerChildren, replayCompactionMarker, requestCompaction, 
 requestCompaction, requestCompaction, startReplayingFromWAL, stopReplayingFromWAL, throttleCompaction, timeOfOldestEdit, toString, triggerMajorCompaction, upsert</code></li>
+<code>add, add, addChangedReaderObserver, areWritesEnabled, assertBulkLoadHFileOk, bulkLoadHFile, bulkLoadHFile, cancelRequestedCompaction, canSplit, close, closeAndArchiveCompactedFiles, compact, compact, compactRecentForTestingAssumingDefaultPolicy, createCacheConf, createFlushContext, createScanner, createStoreEngine, createWriterInTmp, createWriterInTmp, createWriterInTmp, deleteChangedReaderObserver, deregisterChildren, determineTTLFromFamily, flushCache, getAvgStoreFileAge, getBlockingFileCount, getBytesPerChecksum, getCacheConfig, getChecksumType, getCloseCheckInterval, getColumnFamilyDescriptor, getColumnFamilyName, getCompactedCellsCount, getCompactedCellsSize, getCompactedFiles, getCompactedFilesCount, getCompactionCheckMultiplier, getCompactionPressure, getCompactionProgress, getCompactPriority, getComparator, getCoprocessorHost, getDataBlockEncoder, getFileSystem, getFlushableSize, getFlushedCellsCount, getFlushedCellsSize, getFlushedOutputFileSize, getHFilesSize, getHRe
 gion, getLastCompactSize, getMajorCompactedCellsCount, getMajorCompactedCellsSize, getMaxMemstoreTS, getMaxSequenceId, getMaxStoreFileAge, getMemstoreFlushSize, getMemStoreSize, getMinStoreFileAge, getNumHFiles, getNumReferenceFiles, getOffPeakHours, getRegionFileSystem, getRegionInfo, getScanInfo, getScanner, getScanners, getScanners, getSize, getSizeOfMemStore, getSizeOfSnapshot, getSizeToFlush, getSmallestReadPoint, getSnapshotSize, getSplitPoint, getStoreEngine, getStorefiles, getStorefilesCount, getStorefilesIndexSize, getStorefilesSize, getStoreFileTtl, getStoreHomedir, getStoreHomedir, getStoreSizeUncompressed, getTableName, getTotalStaticBloomSize, getTotalStaticIndexSize, hasReferences, hasTooManyStoreFiles, heapSize, isMajorCompaction, isPrimaryReplicaStore, isSloppyMemstore, needsCompaction, onConfigurationChange, postSnapshotOperation, preBulkLoadHFile, preFlushSeqIDEstimation, preSnapshotOperation, recreateScanners, refreshStoreFiles, refreshStoreFiles, registerChildren
 , replayCompactionMarker, requestCompaction, requestCompaction, requestCompaction, startReplayingFromWAL, stopReplayingFromWAL, throttleCompaction, timeOfOldestEdit, toString, triggerMajorCompaction, upsert</code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
index 4f7a6bb..91dea2e 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
@@ -3696,21 +3696,25 @@
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestSnapshotClientRetries.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/snapshot/TestSnapshotClientRetries.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestRegionSnapshotTask.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
+<td class="colLast"><span class="typeNameLabel">TestSnapshotClientRetries.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/snapshot/TestSnapshotClientRetries.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>protected static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestRestoreSnapshotHelper.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/snapshot/TestRestoreSnapshotHelper.html#TEST_UTIL">TEST_UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestFlushSnapshotFromClient.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestSnapshotDescriptionUtils.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/snapshot/TestSnapshotDescriptionUtils.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestRestoreFlushSnapshotFromClient.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/snapshot/TestRestoreFlushSnapshotFromClient.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
index b89116f..e6bc9ca 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -158,8 +158,8 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">TestCacheOnWrite.CacheOnWriteType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TagUsage.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">TagUsage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">TestCacheOnWrite.CacheOnWriteType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
index b57a0ed..f89cd0f 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -542,14 +542,14 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ScanPerformanceEvaluation.ScanCounter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ScanPerformanceEvaluation.ScanCounter</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HBaseClusterManager.CommandProvider.Operation.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HBaseClusterManager.CommandProvider.Operation</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/IntegrationTestRegionReplicaPerf.Stat.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">IntegrationTestRegionReplicaPerf.Stat</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RESTApiClusterManager.RoleCommand.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.RoleCommand</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ResourceChecker.Phase.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ResourceChecker.Phase</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HBaseClusterManager.CommandProvider.Operation.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HBaseClusterManager.CommandProvider.Operation</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RESTApiClusterManager.Service.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.Service</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/IntegrationTestDDLMasterFailover.ACTION.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">IntegrationTestDDLMasterFailover.ACTION</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ScanPerformanceEvaluation.ScanCounter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ScanPerformanceEvaluation.ScanCounter</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Counter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">PerformanceEvaluation.Counter</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RESTApiClusterManager.Service.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.Service</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RESTApiClusterManager.RoleCommand.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.RoleCommand</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClusterManager.ServiceType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClusterManager.ServiceType</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestStore.MyStore.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestStore.MyStore.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestStore.MyStore.html
index ccb6a9d..9e0d549 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestStore.MyStore.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestStore.MyStore.html
@@ -220,7 +220,7 @@ extends org.apache.hadoop.hbase.regionserver.HStore</pre>
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.regionserver.HStore</h3>
-<code>add, add, addChangedReaderObserver, areWritesEnabled, assertBulkLoadHFileOk, bulkLoadHFile, bulkLoadHFile, cancelRequestedCompaction, canSplit, close, closeAndArchiveCompactedFiles, compact, compact, compactRecentForTestingAssumingDefaultPolicy, completeCompaction, createCacheConf, createFlushContext, createScanner, createStoreEngine, createWriterInTmp, createWriterInTmp, createWriterInTmp, deleteChangedReaderObserver, deregisterChildren, determineTTLFromFamily, flushCache, getAvgStoreFileAge, getBlockingFileCount, getBytesPerChecksum, getCacheConfig, getChecksumType, getCloseCheckInterval, getColumnFamilyDescriptor, getColumnFamilyName, getCompactedCellsCount, getCompactedCellsSize, getCompactedFiles, getCompactedFilesCount, getCompactionCheckMultiplier, getCompactionPressure, getCompactionProgress, getCompactPriority, getComparator, getCoprocessorHost, getDataBlockEncoder, getFileSystem, getFlushableSize, getFlushedCellsCount, getFlushedCellsSize, getFlushedOutputFileSize, g
 etHFilesSize, getHRegion, getLastCompactSize, getMajorCompactedCellsCount, getMajorCompactedCellsSize, getMaxMemstoreTS, getMaxSequenceId, getMaxStoreFileAge, getMemstoreFlushSize, getMemStoreSize, getMinStoreFileAge, getNumHFiles, getNumReferenceFiles, getOffPeakHours, getRegionFileSystem, getRegionInfo, getScanInfo, getScanner, getScanners, getSize, getSizeOfMemStore, getSizeOfSnapshot, getSizeToFlush, getSnapshotSize, getSplitPoint, getStoreEngine, getStorefiles, getStorefilesCount, getStorefilesIndexSize, getStorefilesSize, getStoreFileTtl, getStoreHomedir, getStoreHomedir, getStoreSizeUncompressed, getTableName, getTotalStaticBloomSize, getTotalStaticIndexSize, hasReferences, hasTooManyStoreFiles, heapSize, isMajorCompaction, isPrimaryReplicaStore, isSloppyMemstore, moveFileIntoPlace, needsCompaction, onConfigurationChange, preBulkLoadHFile, preFlushSeqIDEstimation, recreateScanners, refreshStoreFiles, refreshStoreFiles, registerChildren, replaceStoreFiles, replayCompactionMark
 er, requestCompaction, requestCompaction, requestCompaction, setDataBlockEncoderInTest, setScanInfo, snapshot, startReplayingFromWAL, stopReplayingFromWAL, throttleCompaction, timeOfOldestEdit, toString, triggerMajorCompaction, upsert, versionsToReturn</code></li>
+<code>add, add, addChangedReaderObserver, areWritesEnabled, assertBulkLoadHFileOk, bulkLoadHFile, bulkLoadHFile, cancelRequestedCompaction, canSplit, close, closeAndArchiveCompactedFiles, compact, compact, compactRecentForTestingAssumingDefaultPolicy, completeCompaction, createCacheConf, createFlushContext, createScanner, createStoreEngine, createWriterInTmp, createWriterInTmp, createWriterInTmp, deleteChangedReaderObserver, deregisterChildren, determineTTLFromFamily, flushCache, getAvgStoreFileAge, getBlockingFileCount, getBytesPerChecksum, getCacheConfig, getChecksumType, getCloseCheckInterval, getColumnFamilyDescriptor, getColumnFamilyName, getCompactedCellsCount, getCompactedCellsSize, getCompactedFiles, getCompactedFilesCount, getCompactionCheckMultiplier, getCompactionPressure, getCompactionProgress, getCompactPriority, getComparator, getCoprocessorHost, getDataBlockEncoder, getFileSystem, getFlushableSize, getFlushedCellsCount, getFlushedCellsSize, getFlushedOutputFileSize, g
 etHFilesSize, getHRegion, getLastCompactSize, getMajorCompactedCellsCount, getMajorCompactedCellsSize, getMaxMemstoreTS, getMaxSequenceId, getMaxStoreFileAge, getMemstoreFlushSize, getMemStoreSize, getMinStoreFileAge, getNumHFiles, getNumReferenceFiles, getOffPeakHours, getRegionFileSystem, getRegionInfo, getScanInfo, getScanner, getScanners, getSize, getSizeOfMemStore, getSizeOfSnapshot, getSizeToFlush, getSnapshotSize, getSplitPoint, getStoreEngine, getStorefiles, getStorefilesCount, getStorefilesIndexSize, getStorefilesSize, getStoreFileTtl, getStoreHomedir, getStoreHomedir, getStoreSizeUncompressed, getTableName, getTotalStaticBloomSize, getTotalStaticIndexSize, hasReferences, hasTooManyStoreFiles, heapSize, isMajorCompaction, isPrimaryReplicaStore, isSloppyMemstore, moveFileIntoPlace, needsCompaction, onConfigurationChange, postSnapshotOperation, preBulkLoadHFile, preFlushSeqIDEstimation, preSnapshotOperation, recreateScanners, refreshStoreFiles, refreshStoreFiles, registerChil
 dren, replaceStoreFiles, replayCompactionMarker, requestCompaction, requestCompaction, requestCompaction, setDataBlockEncoderInTest, setScanInfo, snapshot, startReplayingFromWAL, stopReplayingFromWAL, throttleCompaction, timeOfOldestEdit, toString, triggerMajorCompaction, upsert, versionsToReturn</code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
index 7336b92..4e21ac3 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -624,11 +624,11 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestCacheOnWriteInSchema.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestCacheOnWriteInSchema.CacheOnWriteType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestMultiLogThreshold.ActionType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestMultiLogThreshold.ActionType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionServerReadRequestMetrics.Metric.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestRegionServerReadRequestMetrics.Metric</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestAtomicOperation.TestStep.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestAtomicOperation.TestStep</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DataBlockEncodingTool.Manipulation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DataBlockEncodingTool.Manipulation</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionServerReadRequestMetrics.Metric.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestRegionServerReadRequestMetrics.Metric</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestCacheOnWriteInSchema.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestCacheOnWriteInSchema.CacheOnWriteType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/testdevapidocs/org/apache/hadoop/hbase/snapshot/TestMobSecureExportSnapshot.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/snapshot/TestMobSecureExportSnapshot.html b/testdevapidocs/org/apache/hadoop/hbase/snapshot/TestMobSecureExportSnapshot.html
index f40335d..8a5120f 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/snapshot/TestMobSecureExportSnapshot.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/snapshot/TestMobSecureExportSnapshot.html
@@ -50,7 +50,7 @@ var activeTableTab = "activeTableTab";
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/snapshot/TestMobRestoreSnapshotHelper.html" title="class in org.apache.hadoop.hbase.snapshot"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/snapshot/TestRestoreFlushSnapshotFromClient.html" title="class in org.apache.hadoop.hbase.snapshot"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html" title="class in org.apache.hadoop.hbase.snapshot"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/snapshot/TestMobSecureExportSnapshot.html" target="_top">Frames</a></li>
@@ -287,7 +287,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/snapshot/TestMobExportSn
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/snapshot/TestMobRestoreSnapshotHelper.html" title="class in org.apache.hadoop.hbase.snapshot"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/snapshot/TestRestoreFlushSnapshotFromClient.html" title="class in org.apache.hadoop.hbase.snapshot"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/snapshot/TestRegionSnapshotTask.html" title="class in org.apache.hadoop.hbase.snapshot"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/snapshot/TestMobSecureExportSnapshot.html" target="_top">Frames</a></li>


[18/33] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html
index f6a717e..a701ece 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html
@@ -7930,329 +7930,342 @@
 <span class="sourceLineNo">7922</span>      case DELETE:<a name="line.7922"></a>
 <span class="sourceLineNo">7923</span>      case BATCH_MUTATE:<a name="line.7923"></a>
 <span class="sourceLineNo">7924</span>      case COMPACT_REGION:<a name="line.7924"></a>
-<span class="sourceLineNo">7925</span>        // when a region is in recovering state, no read, split or merge is allowed<a name="line.7925"></a>
-<span class="sourceLineNo">7926</span>        if (isRecovering() &amp;&amp; (this.disallowWritesInRecovering ||<a name="line.7926"></a>
-<span class="sourceLineNo">7927</span>              (op != Operation.PUT &amp;&amp; op != Operation.DELETE &amp;&amp; op != Operation.BATCH_MUTATE))) {<a name="line.7927"></a>
-<span class="sourceLineNo">7928</span>          throw new RegionInRecoveryException(getRegionInfo().getRegionNameAsString() +<a name="line.7928"></a>
-<span class="sourceLineNo">7929</span>            " is recovering; cannot take reads");<a name="line.7929"></a>
-<span class="sourceLineNo">7930</span>        }<a name="line.7930"></a>
-<span class="sourceLineNo">7931</span>        break;<a name="line.7931"></a>
-<span class="sourceLineNo">7932</span>      default:<a name="line.7932"></a>
-<span class="sourceLineNo">7933</span>        break;<a name="line.7933"></a>
-<span class="sourceLineNo">7934</span>    }<a name="line.7934"></a>
-<span class="sourceLineNo">7935</span>    if (op == Operation.MERGE_REGION || op == Operation.SPLIT_REGION<a name="line.7935"></a>
-<span class="sourceLineNo">7936</span>        || op == Operation.COMPACT_REGION) {<a name="line.7936"></a>
-<span class="sourceLineNo">7937</span>      // split, merge or compact region doesn't need to check the closing/closed state or lock the<a name="line.7937"></a>
-<span class="sourceLineNo">7938</span>      // region<a name="line.7938"></a>
-<span class="sourceLineNo">7939</span>      return;<a name="line.7939"></a>
-<span class="sourceLineNo">7940</span>    }<a name="line.7940"></a>
-<span class="sourceLineNo">7941</span>    if (this.closing.get()) {<a name="line.7941"></a>
-<span class="sourceLineNo">7942</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.7942"></a>
-<span class="sourceLineNo">7943</span>    }<a name="line.7943"></a>
-<span class="sourceLineNo">7944</span>    lock(lock.readLock());<a name="line.7944"></a>
-<span class="sourceLineNo">7945</span>    if (this.closed.get()) {<a name="line.7945"></a>
-<span class="sourceLineNo">7946</span>      lock.readLock().unlock();<a name="line.7946"></a>
-<span class="sourceLineNo">7947</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.7947"></a>
-<span class="sourceLineNo">7948</span>    }<a name="line.7948"></a>
-<span class="sourceLineNo">7949</span>    try {<a name="line.7949"></a>
-<span class="sourceLineNo">7950</span>      if (coprocessorHost != null) {<a name="line.7950"></a>
-<span class="sourceLineNo">7951</span>        coprocessorHost.postStartRegionOperation(op);<a name="line.7951"></a>
-<span class="sourceLineNo">7952</span>      }<a name="line.7952"></a>
-<span class="sourceLineNo">7953</span>    } catch (Exception e) {<a name="line.7953"></a>
-<span class="sourceLineNo">7954</span>      lock.readLock().unlock();<a name="line.7954"></a>
-<span class="sourceLineNo">7955</span>      throw new IOException(e);<a name="line.7955"></a>
-<span class="sourceLineNo">7956</span>    }<a name="line.7956"></a>
-<span class="sourceLineNo">7957</span>  }<a name="line.7957"></a>
-<span class="sourceLineNo">7958</span><a name="line.7958"></a>
-<span class="sourceLineNo">7959</span>  @Override<a name="line.7959"></a>
-<span class="sourceLineNo">7960</span>  public void closeRegionOperation() throws IOException {<a name="line.7960"></a>
-<span class="sourceLineNo">7961</span>    closeRegionOperation(Operation.ANY);<a name="line.7961"></a>
-<span class="sourceLineNo">7962</span>  }<a name="line.7962"></a>
-<span class="sourceLineNo">7963</span><a name="line.7963"></a>
-<span class="sourceLineNo">7964</span>  /**<a name="line.7964"></a>
-<span class="sourceLineNo">7965</span>   * Closes the lock. This needs to be called in the finally block corresponding<a name="line.7965"></a>
-<span class="sourceLineNo">7966</span>   * to the try block of {@link #startRegionOperation(Operation)}<a name="line.7966"></a>
-<span class="sourceLineNo">7967</span>   * @throws IOException<a name="line.7967"></a>
-<span class="sourceLineNo">7968</span>   */<a name="line.7968"></a>
-<span class="sourceLineNo">7969</span>  public void closeRegionOperation(Operation operation) throws IOException {<a name="line.7969"></a>
-<span class="sourceLineNo">7970</span>    lock.readLock().unlock();<a name="line.7970"></a>
-<span class="sourceLineNo">7971</span>    if (coprocessorHost != null) {<a name="line.7971"></a>
-<span class="sourceLineNo">7972</span>      coprocessorHost.postCloseRegionOperation(operation);<a name="line.7972"></a>
-<span class="sourceLineNo">7973</span>    }<a name="line.7973"></a>
-<span class="sourceLineNo">7974</span>  }<a name="line.7974"></a>
-<span class="sourceLineNo">7975</span><a name="line.7975"></a>
-<span class="sourceLineNo">7976</span>  /**<a name="line.7976"></a>
-<span class="sourceLineNo">7977</span>   * This method needs to be called before any public call that reads or<a name="line.7977"></a>
-<span class="sourceLineNo">7978</span>   * modifies stores in bulk. It has to be called just before a try.<a name="line.7978"></a>
-<span class="sourceLineNo">7979</span>   * #closeBulkRegionOperation needs to be called in the try's finally block<a name="line.7979"></a>
-<span class="sourceLineNo">7980</span>   * Acquires a writelock and checks if the region is closing or closed.<a name="line.7980"></a>
-<span class="sourceLineNo">7981</span>   * @throws NotServingRegionException when the region is closing or closed<a name="line.7981"></a>
-<span class="sourceLineNo">7982</span>   * @throws RegionTooBusyException if failed to get the lock in time<a name="line.7982"></a>
-<span class="sourceLineNo">7983</span>   * @throws InterruptedIOException if interrupted while waiting for a lock<a name="line.7983"></a>
-<span class="sourceLineNo">7984</span>   */<a name="line.7984"></a>
-<span class="sourceLineNo">7985</span>  private void startBulkRegionOperation(boolean writeLockNeeded)<a name="line.7985"></a>
-<span class="sourceLineNo">7986</span>      throws NotServingRegionException, RegionTooBusyException, InterruptedIOException {<a name="line.7986"></a>
-<span class="sourceLineNo">7987</span>    if (this.closing.get()) {<a name="line.7987"></a>
-<span class="sourceLineNo">7988</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.7988"></a>
-<span class="sourceLineNo">7989</span>    }<a name="line.7989"></a>
-<span class="sourceLineNo">7990</span>    if (writeLockNeeded) lock(lock.writeLock());<a name="line.7990"></a>
-<span class="sourceLineNo">7991</span>    else lock(lock.readLock());<a name="line.7991"></a>
-<span class="sourceLineNo">7992</span>    if (this.closed.get()) {<a name="line.7992"></a>
-<span class="sourceLineNo">7993</span>      if (writeLockNeeded) lock.writeLock().unlock();<a name="line.7993"></a>
-<span class="sourceLineNo">7994</span>      else lock.readLock().unlock();<a name="line.7994"></a>
-<span class="sourceLineNo">7995</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.7995"></a>
-<span class="sourceLineNo">7996</span>    }<a name="line.7996"></a>
-<span class="sourceLineNo">7997</span>  }<a name="line.7997"></a>
-<span class="sourceLineNo">7998</span><a name="line.7998"></a>
-<span class="sourceLineNo">7999</span>  /**<a name="line.7999"></a>
-<span class="sourceLineNo">8000</span>   * Closes the lock. This needs to be called in the finally block corresponding<a name="line.8000"></a>
-<span class="sourceLineNo">8001</span>   * to the try block of #startRegionOperation<a name="line.8001"></a>
-<span class="sourceLineNo">8002</span>   */<a name="line.8002"></a>
-<span class="sourceLineNo">8003</span>  private void closeBulkRegionOperation(){<a name="line.8003"></a>
-<span class="sourceLineNo">8004</span>    if (lock.writeLock().isHeldByCurrentThread()) lock.writeLock().unlock();<a name="line.8004"></a>
-<span class="sourceLineNo">8005</span>    else lock.readLock().unlock();<a name="line.8005"></a>
-<span class="sourceLineNo">8006</span>  }<a name="line.8006"></a>
-<span class="sourceLineNo">8007</span><a name="line.8007"></a>
-<span class="sourceLineNo">8008</span>  /**<a name="line.8008"></a>
-<span class="sourceLineNo">8009</span>   * Update LongAdders for number of puts without wal and the size of possible data loss.<a name="line.8009"></a>
-<span class="sourceLineNo">8010</span>   * These information are exposed by the region server metrics.<a name="line.8010"></a>
-<span class="sourceLineNo">8011</span>   */<a name="line.8011"></a>
-<span class="sourceLineNo">8012</span>  private void recordMutationWithoutWal(final Map&lt;byte [], List&lt;Cell&gt;&gt; familyMap) {<a name="line.8012"></a>
-<span class="sourceLineNo">8013</span>    numMutationsWithoutWAL.increment();<a name="line.8013"></a>
-<span class="sourceLineNo">8014</span>    if (numMutationsWithoutWAL.sum() &lt;= 1) {<a name="line.8014"></a>
-<span class="sourceLineNo">8015</span>      LOG.info("writing data to region " + this +<a name="line.8015"></a>
-<span class="sourceLineNo">8016</span>               " with WAL disabled. Data may be lost in the event of a crash.");<a name="line.8016"></a>
-<span class="sourceLineNo">8017</span>    }<a name="line.8017"></a>
-<span class="sourceLineNo">8018</span><a name="line.8018"></a>
-<span class="sourceLineNo">8019</span>    long mutationSize = 0;<a name="line.8019"></a>
-<span class="sourceLineNo">8020</span>    for (List&lt;Cell&gt; cells: familyMap.values()) {<a name="line.8020"></a>
-<span class="sourceLineNo">8021</span>      assert cells instanceof RandomAccess;<a name="line.8021"></a>
-<span class="sourceLineNo">8022</span>      int listSize = cells.size();<a name="line.8022"></a>
-<span class="sourceLineNo">8023</span>      for (int i=0; i &lt; listSize; i++) {<a name="line.8023"></a>
-<span class="sourceLineNo">8024</span>        Cell cell = cells.get(i);<a name="line.8024"></a>
-<span class="sourceLineNo">8025</span>        mutationSize += KeyValueUtil.length(cell);<a name="line.8025"></a>
-<span class="sourceLineNo">8026</span>      }<a name="line.8026"></a>
-<span class="sourceLineNo">8027</span>    }<a name="line.8027"></a>
-<span class="sourceLineNo">8028</span><a name="line.8028"></a>
-<span class="sourceLineNo">8029</span>    dataInMemoryWithoutWAL.add(mutationSize);<a name="line.8029"></a>
-<span class="sourceLineNo">8030</span>  }<a name="line.8030"></a>
+<span class="sourceLineNo">7925</span>      case SNAPSHOT:<a name="line.7925"></a>
+<span class="sourceLineNo">7926</span>        // when a region is in recovering state, no read, split, merge or snapshot is allowed<a name="line.7926"></a>
+<span class="sourceLineNo">7927</span>        if (isRecovering() &amp;&amp; (this.disallowWritesInRecovering ||<a name="line.7927"></a>
+<span class="sourceLineNo">7928</span>              (op != Operation.PUT &amp;&amp; op != Operation.DELETE &amp;&amp; op != Operation.BATCH_MUTATE))) {<a name="line.7928"></a>
+<span class="sourceLineNo">7929</span>          throw new RegionInRecoveryException(getRegionInfo().getRegionNameAsString() +<a name="line.7929"></a>
+<span class="sourceLineNo">7930</span>            " is recovering; cannot take reads");<a name="line.7930"></a>
+<span class="sourceLineNo">7931</span>        }<a name="line.7931"></a>
+<span class="sourceLineNo">7932</span>        break;<a name="line.7932"></a>
+<span class="sourceLineNo">7933</span>      default:<a name="line.7933"></a>
+<span class="sourceLineNo">7934</span>        break;<a name="line.7934"></a>
+<span class="sourceLineNo">7935</span>    }<a name="line.7935"></a>
+<span class="sourceLineNo">7936</span>    if (op == Operation.MERGE_REGION || op == Operation.SPLIT_REGION<a name="line.7936"></a>
+<span class="sourceLineNo">7937</span>        || op == Operation.COMPACT_REGION) {<a name="line.7937"></a>
+<span class="sourceLineNo">7938</span>      // split, merge or compact region doesn't need to check the closing/closed state or lock the<a name="line.7938"></a>
+<span class="sourceLineNo">7939</span>      // region<a name="line.7939"></a>
+<span class="sourceLineNo">7940</span>      return;<a name="line.7940"></a>
+<span class="sourceLineNo">7941</span>    }<a name="line.7941"></a>
+<span class="sourceLineNo">7942</span>    if (this.closing.get()) {<a name="line.7942"></a>
+<span class="sourceLineNo">7943</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.7943"></a>
+<span class="sourceLineNo">7944</span>    }<a name="line.7944"></a>
+<span class="sourceLineNo">7945</span>    lock(lock.readLock());<a name="line.7945"></a>
+<span class="sourceLineNo">7946</span>    if (this.closed.get()) {<a name="line.7946"></a>
+<span class="sourceLineNo">7947</span>      lock.readLock().unlock();<a name="line.7947"></a>
+<span class="sourceLineNo">7948</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.7948"></a>
+<span class="sourceLineNo">7949</span>    }<a name="line.7949"></a>
+<span class="sourceLineNo">7950</span>    // The unit for snapshot is a region. So, all stores for this region must be<a name="line.7950"></a>
+<span class="sourceLineNo">7951</span>    // prepared for snapshot operation before proceeding.<a name="line.7951"></a>
+<span class="sourceLineNo">7952</span>    if (op == Operation.SNAPSHOT) {<a name="line.7952"></a>
+<span class="sourceLineNo">7953</span>      for (Store store : stores.values()) {<a name="line.7953"></a>
+<span class="sourceLineNo">7954</span>        if (store instanceof HStore) {<a name="line.7954"></a>
+<span class="sourceLineNo">7955</span>          ((HStore)store).preSnapshotOperation();<a name="line.7955"></a>
+<span class="sourceLineNo">7956</span>        }<a name="line.7956"></a>
+<span class="sourceLineNo">7957</span>      }<a name="line.7957"></a>
+<span class="sourceLineNo">7958</span>    }<a name="line.7958"></a>
+<span class="sourceLineNo">7959</span>    try {<a name="line.7959"></a>
+<span class="sourceLineNo">7960</span>      if (coprocessorHost != null) {<a name="line.7960"></a>
+<span class="sourceLineNo">7961</span>        coprocessorHost.postStartRegionOperation(op);<a name="line.7961"></a>
+<span class="sourceLineNo">7962</span>      }<a name="line.7962"></a>
+<span class="sourceLineNo">7963</span>    } catch (Exception e) {<a name="line.7963"></a>
+<span class="sourceLineNo">7964</span>      lock.readLock().unlock();<a name="line.7964"></a>
+<span class="sourceLineNo">7965</span>      throw new IOException(e);<a name="line.7965"></a>
+<span class="sourceLineNo">7966</span>    }<a name="line.7966"></a>
+<span class="sourceLineNo">7967</span>  }<a name="line.7967"></a>
+<span class="sourceLineNo">7968</span><a name="line.7968"></a>
+<span class="sourceLineNo">7969</span>  @Override<a name="line.7969"></a>
+<span class="sourceLineNo">7970</span>  public void closeRegionOperation() throws IOException {<a name="line.7970"></a>
+<span class="sourceLineNo">7971</span>    closeRegionOperation(Operation.ANY);<a name="line.7971"></a>
+<span class="sourceLineNo">7972</span>  }<a name="line.7972"></a>
+<span class="sourceLineNo">7973</span><a name="line.7973"></a>
+<span class="sourceLineNo">7974</span>  @Override<a name="line.7974"></a>
+<span class="sourceLineNo">7975</span>  public void closeRegionOperation(Operation operation) throws IOException {<a name="line.7975"></a>
+<span class="sourceLineNo">7976</span>    if (operation == Operation.SNAPSHOT) {<a name="line.7976"></a>
+<span class="sourceLineNo">7977</span>      for (Store store: stores.values()) {<a name="line.7977"></a>
+<span class="sourceLineNo">7978</span>        if (store instanceof HStore) {<a name="line.7978"></a>
+<span class="sourceLineNo">7979</span>          ((HStore)store).postSnapshotOperation();<a name="line.7979"></a>
+<span class="sourceLineNo">7980</span>        }<a name="line.7980"></a>
+<span class="sourceLineNo">7981</span>      }<a name="line.7981"></a>
+<span class="sourceLineNo">7982</span>    }<a name="line.7982"></a>
+<span class="sourceLineNo">7983</span>    lock.readLock().unlock();<a name="line.7983"></a>
+<span class="sourceLineNo">7984</span>    if (coprocessorHost != null) {<a name="line.7984"></a>
+<span class="sourceLineNo">7985</span>      coprocessorHost.postCloseRegionOperation(operation);<a name="line.7985"></a>
+<span class="sourceLineNo">7986</span>    }<a name="line.7986"></a>
+<span class="sourceLineNo">7987</span>  }<a name="line.7987"></a>
+<span class="sourceLineNo">7988</span><a name="line.7988"></a>
+<span class="sourceLineNo">7989</span>  /**<a name="line.7989"></a>
+<span class="sourceLineNo">7990</span>   * This method needs to be called before any public call that reads or<a name="line.7990"></a>
+<span class="sourceLineNo">7991</span>   * modifies stores in bulk. It has to be called just before a try.<a name="line.7991"></a>
+<span class="sourceLineNo">7992</span>   * #closeBulkRegionOperation needs to be called in the try's finally block<a name="line.7992"></a>
+<span class="sourceLineNo">7993</span>   * Acquires a writelock and checks if the region is closing or closed.<a name="line.7993"></a>
+<span class="sourceLineNo">7994</span>   * @throws NotServingRegionException when the region is closing or closed<a name="line.7994"></a>
+<span class="sourceLineNo">7995</span>   * @throws RegionTooBusyException if failed to get the lock in time<a name="line.7995"></a>
+<span class="sourceLineNo">7996</span>   * @throws InterruptedIOException if interrupted while waiting for a lock<a name="line.7996"></a>
+<span class="sourceLineNo">7997</span>   */<a name="line.7997"></a>
+<span class="sourceLineNo">7998</span>  private void startBulkRegionOperation(boolean writeLockNeeded)<a name="line.7998"></a>
+<span class="sourceLineNo">7999</span>      throws NotServingRegionException, RegionTooBusyException, InterruptedIOException {<a name="line.7999"></a>
+<span class="sourceLineNo">8000</span>    if (this.closing.get()) {<a name="line.8000"></a>
+<span class="sourceLineNo">8001</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.8001"></a>
+<span class="sourceLineNo">8002</span>    }<a name="line.8002"></a>
+<span class="sourceLineNo">8003</span>    if (writeLockNeeded) lock(lock.writeLock());<a name="line.8003"></a>
+<span class="sourceLineNo">8004</span>    else lock(lock.readLock());<a name="line.8004"></a>
+<span class="sourceLineNo">8005</span>    if (this.closed.get()) {<a name="line.8005"></a>
+<span class="sourceLineNo">8006</span>      if (writeLockNeeded) lock.writeLock().unlock();<a name="line.8006"></a>
+<span class="sourceLineNo">8007</span>      else lock.readLock().unlock();<a name="line.8007"></a>
+<span class="sourceLineNo">8008</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.8008"></a>
+<span class="sourceLineNo">8009</span>    }<a name="line.8009"></a>
+<span class="sourceLineNo">8010</span>  }<a name="line.8010"></a>
+<span class="sourceLineNo">8011</span><a name="line.8011"></a>
+<span class="sourceLineNo">8012</span>  /**<a name="line.8012"></a>
+<span class="sourceLineNo">8013</span>   * Closes the lock. This needs to be called in the finally block corresponding<a name="line.8013"></a>
+<span class="sourceLineNo">8014</span>   * to the try block of #startRegionOperation<a name="line.8014"></a>
+<span class="sourceLineNo">8015</span>   */<a name="line.8015"></a>
+<span class="sourceLineNo">8016</span>  private void closeBulkRegionOperation(){<a name="line.8016"></a>
+<span class="sourceLineNo">8017</span>    if (lock.writeLock().isHeldByCurrentThread()) lock.writeLock().unlock();<a name="line.8017"></a>
+<span class="sourceLineNo">8018</span>    else lock.readLock().unlock();<a name="line.8018"></a>
+<span class="sourceLineNo">8019</span>  }<a name="line.8019"></a>
+<span class="sourceLineNo">8020</span><a name="line.8020"></a>
+<span class="sourceLineNo">8021</span>  /**<a name="line.8021"></a>
+<span class="sourceLineNo">8022</span>   * Update LongAdders for number of puts without wal and the size of possible data loss.<a name="line.8022"></a>
+<span class="sourceLineNo">8023</span>   * These information are exposed by the region server metrics.<a name="line.8023"></a>
+<span class="sourceLineNo">8024</span>   */<a name="line.8024"></a>
+<span class="sourceLineNo">8025</span>  private void recordMutationWithoutWal(final Map&lt;byte [], List&lt;Cell&gt;&gt; familyMap) {<a name="line.8025"></a>
+<span class="sourceLineNo">8026</span>    numMutationsWithoutWAL.increment();<a name="line.8026"></a>
+<span class="sourceLineNo">8027</span>    if (numMutationsWithoutWAL.sum() &lt;= 1) {<a name="line.8027"></a>
+<span class="sourceLineNo">8028</span>      LOG.info("writing data to region " + this +<a name="line.8028"></a>
+<span class="sourceLineNo">8029</span>               " with WAL disabled. Data may be lost in the event of a crash.");<a name="line.8029"></a>
+<span class="sourceLineNo">8030</span>    }<a name="line.8030"></a>
 <span class="sourceLineNo">8031</span><a name="line.8031"></a>
-<span class="sourceLineNo">8032</span>  private void lock(final Lock lock)<a name="line.8032"></a>
-<span class="sourceLineNo">8033</span>      throws RegionTooBusyException, InterruptedIOException {<a name="line.8033"></a>
-<span class="sourceLineNo">8034</span>    lock(lock, 1);<a name="line.8034"></a>
-<span class="sourceLineNo">8035</span>  }<a name="line.8035"></a>
-<span class="sourceLineNo">8036</span><a name="line.8036"></a>
-<span class="sourceLineNo">8037</span>  /**<a name="line.8037"></a>
-<span class="sourceLineNo">8038</span>   * Try to acquire a lock.  Throw RegionTooBusyException<a name="line.8038"></a>
-<span class="sourceLineNo">8039</span>   * if failed to get the lock in time. Throw InterruptedIOException<a name="line.8039"></a>
-<span class="sourceLineNo">8040</span>   * if interrupted while waiting for the lock.<a name="line.8040"></a>
-<span class="sourceLineNo">8041</span>   */<a name="line.8041"></a>
-<span class="sourceLineNo">8042</span>  private void lock(final Lock lock, final int multiplier)<a name="line.8042"></a>
-<span class="sourceLineNo">8043</span>      throws RegionTooBusyException, InterruptedIOException {<a name="line.8043"></a>
-<span class="sourceLineNo">8044</span>    try {<a name="line.8044"></a>
-<span class="sourceLineNo">8045</span>      final long waitTime = Math.min(maxBusyWaitDuration,<a name="line.8045"></a>
-<span class="sourceLineNo">8046</span>          busyWaitDuration * Math.min(multiplier, maxBusyWaitMultiplier));<a name="line.8046"></a>
-<span class="sourceLineNo">8047</span>      if (!lock.tryLock(waitTime, TimeUnit.MILLISECONDS)) {<a name="line.8047"></a>
-<span class="sourceLineNo">8048</span>        throw new RegionTooBusyException(<a name="line.8048"></a>
-<span class="sourceLineNo">8049</span>            "failed to get a lock in " + waitTime + " ms. " +<a name="line.8049"></a>
-<span class="sourceLineNo">8050</span>                "regionName=" + (this.getRegionInfo() == null ? "unknown" :<a name="line.8050"></a>
-<span class="sourceLineNo">8051</span>                this.getRegionInfo().getRegionNameAsString()) +<a name="line.8051"></a>
-<span class="sourceLineNo">8052</span>                ", server=" + (this.getRegionServerServices() == null ? "unknown" :<a name="line.8052"></a>
-<span class="sourceLineNo">8053</span>                this.getRegionServerServices().getServerName()));<a name="line.8053"></a>
-<span class="sourceLineNo">8054</span>      }<a name="line.8054"></a>
-<span class="sourceLineNo">8055</span>    } catch (InterruptedException ie) {<a name="line.8055"></a>
-<span class="sourceLineNo">8056</span>      LOG.info("Interrupted while waiting for a lock");<a name="line.8056"></a>
-<span class="sourceLineNo">8057</span>      InterruptedIOException iie = new InterruptedIOException();<a name="line.8057"></a>
-<span class="sourceLineNo">8058</span>      iie.initCause(ie);<a name="line.8058"></a>
-<span class="sourceLineNo">8059</span>      throw iie;<a name="line.8059"></a>
-<span class="sourceLineNo">8060</span>    }<a name="line.8060"></a>
-<span class="sourceLineNo">8061</span>  }<a name="line.8061"></a>
-<span class="sourceLineNo">8062</span><a name="line.8062"></a>
-<span class="sourceLineNo">8063</span>  /**<a name="line.8063"></a>
-<span class="sourceLineNo">8064</span>   * Calls sync with the given transaction ID<a name="line.8064"></a>
-<span class="sourceLineNo">8065</span>   * @param txid should sync up to which transaction<a name="line.8065"></a>
-<span class="sourceLineNo">8066</span>   * @throws IOException If anything goes wrong with DFS<a name="line.8066"></a>
-<span class="sourceLineNo">8067</span>   */<a name="line.8067"></a>
-<span class="sourceLineNo">8068</span>  private void sync(long txid, Durability durability) throws IOException {<a name="line.8068"></a>
-<span class="sourceLineNo">8069</span>    if (this.getRegionInfo().isMetaRegion()) {<a name="line.8069"></a>
-<span class="sourceLineNo">8070</span>      this.wal.sync(txid);<a name="line.8070"></a>
-<span class="sourceLineNo">8071</span>    } else {<a name="line.8071"></a>
-<span class="sourceLineNo">8072</span>      switch(durability) {<a name="line.8072"></a>
-<span class="sourceLineNo">8073</span>      case USE_DEFAULT:<a name="line.8073"></a>
-<span class="sourceLineNo">8074</span>        // do what table defaults to<a name="line.8074"></a>
-<span class="sourceLineNo">8075</span>        if (shouldSyncWAL()) {<a name="line.8075"></a>
-<span class="sourceLineNo">8076</span>          this.wal.sync(txid);<a name="line.8076"></a>
-<span class="sourceLineNo">8077</span>        }<a name="line.8077"></a>
-<span class="sourceLineNo">8078</span>        break;<a name="line.8078"></a>
-<span class="sourceLineNo">8079</span>      case SKIP_WAL:<a name="line.8079"></a>
-<span class="sourceLineNo">8080</span>        // nothing do to<a name="line.8080"></a>
-<span class="sourceLineNo">8081</span>        break;<a name="line.8081"></a>
-<span class="sourceLineNo">8082</span>      case ASYNC_WAL:<a name="line.8082"></a>
-<span class="sourceLineNo">8083</span>        // nothing do to<a name="line.8083"></a>
-<span class="sourceLineNo">8084</span>        break;<a name="line.8084"></a>
-<span class="sourceLineNo">8085</span>      case SYNC_WAL:<a name="line.8085"></a>
-<span class="sourceLineNo">8086</span>      case FSYNC_WAL:<a name="line.8086"></a>
-<span class="sourceLineNo">8087</span>        // sync the WAL edit (SYNC and FSYNC treated the same for now)<a name="line.8087"></a>
-<span class="sourceLineNo">8088</span>        this.wal.sync(txid);<a name="line.8088"></a>
-<span class="sourceLineNo">8089</span>        break;<a name="line.8089"></a>
-<span class="sourceLineNo">8090</span>      default:<a name="line.8090"></a>
-<span class="sourceLineNo">8091</span>        throw new RuntimeException("Unknown durability " + durability);<a name="line.8091"></a>
-<span class="sourceLineNo">8092</span>      }<a name="line.8092"></a>
-<span class="sourceLineNo">8093</span>    }<a name="line.8093"></a>
-<span class="sourceLineNo">8094</span>  }<a name="line.8094"></a>
-<span class="sourceLineNo">8095</span><a name="line.8095"></a>
-<span class="sourceLineNo">8096</span>  /**<a name="line.8096"></a>
-<span class="sourceLineNo">8097</span>   * Check whether we should sync the wal from the table's durability settings<a name="line.8097"></a>
-<span class="sourceLineNo">8098</span>   */<a name="line.8098"></a>
-<span class="sourceLineNo">8099</span>  private boolean shouldSyncWAL() {<a name="line.8099"></a>
-<span class="sourceLineNo">8100</span>    return durability.ordinal() &gt;  Durability.ASYNC_WAL.ordinal();<a name="line.8100"></a>
-<span class="sourceLineNo">8101</span>  }<a name="line.8101"></a>
-<span class="sourceLineNo">8102</span><a name="line.8102"></a>
-<span class="sourceLineNo">8103</span>  /**<a name="line.8103"></a>
-<span class="sourceLineNo">8104</span>   * A mocked list implementation - discards all updates.<a name="line.8104"></a>
-<span class="sourceLineNo">8105</span>   */<a name="line.8105"></a>
-<span class="sourceLineNo">8106</span>  private static final List&lt;Cell&gt; MOCKED_LIST = new AbstractList&lt;Cell&gt;() {<a name="line.8106"></a>
-<span class="sourceLineNo">8107</span><a name="line.8107"></a>
-<span class="sourceLineNo">8108</span>    @Override<a name="line.8108"></a>
-<span class="sourceLineNo">8109</span>    public void add(int index, Cell element) {<a name="line.8109"></a>
-<span class="sourceLineNo">8110</span>      // do nothing<a name="line.8110"></a>
-<span class="sourceLineNo">8111</span>    }<a name="line.8111"></a>
-<span class="sourceLineNo">8112</span><a name="line.8112"></a>
-<span class="sourceLineNo">8113</span>    @Override<a name="line.8113"></a>
-<span class="sourceLineNo">8114</span>    public boolean addAll(int index, Collection&lt;? extends Cell&gt; c) {<a name="line.8114"></a>
-<span class="sourceLineNo">8115</span>      return false; // this list is never changed as a result of an update<a name="line.8115"></a>
-<span class="sourceLineNo">8116</span>    }<a name="line.8116"></a>
-<span class="sourceLineNo">8117</span><a name="line.8117"></a>
-<span class="sourceLineNo">8118</span>    @Override<a name="line.8118"></a>
-<span class="sourceLineNo">8119</span>    public KeyValue get(int index) {<a name="line.8119"></a>
-<span class="sourceLineNo">8120</span>      throw new UnsupportedOperationException();<a name="line.8120"></a>
-<span class="sourceLineNo">8121</span>    }<a name="line.8121"></a>
-<span class="sourceLineNo">8122</span><a name="line.8122"></a>
-<span class="sourceLineNo">8123</span>    @Override<a name="line.8123"></a>
-<span class="sourceLineNo">8124</span>    public int size() {<a name="line.8124"></a>
-<span class="sourceLineNo">8125</span>      return 0;<a name="line.8125"></a>
-<span class="sourceLineNo">8126</span>    }<a name="line.8126"></a>
-<span class="sourceLineNo">8127</span>  };<a name="line.8127"></a>
-<span class="sourceLineNo">8128</span><a name="line.8128"></a>
-<span class="sourceLineNo">8129</span>  @Override<a name="line.8129"></a>
-<span class="sourceLineNo">8130</span>  public long getOpenSeqNum() {<a name="line.8130"></a>
-<span class="sourceLineNo">8131</span>    return this.openSeqNum;<a name="line.8131"></a>
-<span class="sourceLineNo">8132</span>  }<a name="line.8132"></a>
-<span class="sourceLineNo">8133</span><a name="line.8133"></a>
-<span class="sourceLineNo">8134</span>  @Override<a name="line.8134"></a>
-<span class="sourceLineNo">8135</span>  public Map&lt;byte[], Long&gt; getMaxStoreSeqId() {<a name="line.8135"></a>
-<span class="sourceLineNo">8136</span>    return this.maxSeqIdInStores;<a name="line.8136"></a>
-<span class="sourceLineNo">8137</span>  }<a name="line.8137"></a>
-<span class="sourceLineNo">8138</span><a name="line.8138"></a>
-<span class="sourceLineNo">8139</span>  @Override<a name="line.8139"></a>
-<span class="sourceLineNo">8140</span>  public long getOldestSeqIdOfStore(byte[] familyName) {<a name="line.8140"></a>
-<span class="sourceLineNo">8141</span>    return wal.getEarliestMemstoreSeqNum(getRegionInfo().getEncodedNameAsBytes(), familyName);<a name="line.8141"></a>
-<span class="sourceLineNo">8142</span>  }<a name="line.8142"></a>
-<span class="sourceLineNo">8143</span><a name="line.8143"></a>
-<span class="sourceLineNo">8144</span>  @Override<a name="line.8144"></a>
-<span class="sourceLineNo">8145</span>  public CompactionState getCompactionState() {<a name="line.8145"></a>
-<span class="sourceLineNo">8146</span>    boolean hasMajor = majorInProgress.get() &gt; 0, hasMinor = minorInProgress.get() &gt; 0;<a name="line.8146"></a>
-<span class="sourceLineNo">8147</span>    return (hasMajor ? (hasMinor ? CompactionState.MAJOR_AND_MINOR : CompactionState.MAJOR)<a name="line.8147"></a>
-<span class="sourceLineNo">8148</span>        : (hasMinor ? CompactionState.MINOR : CompactionState.NONE));<a name="line.8148"></a>
-<span class="sourceLineNo">8149</span>  }<a name="line.8149"></a>
-<span class="sourceLineNo">8150</span><a name="line.8150"></a>
-<span class="sourceLineNo">8151</span>  public void reportCompactionRequestStart(boolean isMajor){<a name="line.8151"></a>
-<span class="sourceLineNo">8152</span>    (isMajor ? majorInProgress : minorInProgress).incrementAndGet();<a name="line.8152"></a>
-<span class="sourceLineNo">8153</span>  }<a name="line.8153"></a>
-<span class="sourceLineNo">8154</span><a name="line.8154"></a>
-<span class="sourceLineNo">8155</span>  public void reportCompactionRequestEnd(boolean isMajor, int numFiles, long filesSizeCompacted) {<a name="line.8155"></a>
-<span class="sourceLineNo">8156</span>    int newValue = (isMajor ? majorInProgress : minorInProgress).decrementAndGet();<a name="line.8156"></a>
-<span class="sourceLineNo">8157</span><a name="line.8157"></a>
-<span class="sourceLineNo">8158</span>    // metrics<a name="line.8158"></a>
-<span class="sourceLineNo">8159</span>    compactionsFinished.incrementAndGet();<a name="line.8159"></a>
-<span class="sourceLineNo">8160</span>    compactionNumFilesCompacted.addAndGet(numFiles);<a name="line.8160"></a>
-<span class="sourceLineNo">8161</span>    compactionNumBytesCompacted.addAndGet(filesSizeCompacted);<a name="line.8161"></a>
-<span class="sourceLineNo">8162</span><a name="line.8162"></a>
-<span class="sourceLineNo">8163</span>    assert newValue &gt;= 0;<a name="line.8163"></a>
-<span class="sourceLineNo">8164</span>  }<a name="line.8164"></a>
-<span class="sourceLineNo">8165</span><a name="line.8165"></a>
-<span class="sourceLineNo">8166</span>  public void reportCompactionRequestFailure() {<a name="line.8166"></a>
-<span class="sourceLineNo">8167</span>    compactionsFailed.incrementAndGet();<a name="line.8167"></a>
-<span class="sourceLineNo">8168</span>  }<a name="line.8168"></a>
-<span class="sourceLineNo">8169</span><a name="line.8169"></a>
-<span class="sourceLineNo">8170</span>  public void incrementCompactionsQueuedCount() {<a name="line.8170"></a>
-<span class="sourceLineNo">8171</span>    compactionsQueued.incrementAndGet();<a name="line.8171"></a>
-<span class="sourceLineNo">8172</span>  }<a name="line.8172"></a>
-<span class="sourceLineNo">8173</span><a name="line.8173"></a>
-<span class="sourceLineNo">8174</span>  public void decrementCompactionsQueuedCount() {<a name="line.8174"></a>
-<span class="sourceLineNo">8175</span>    compactionsQueued.decrementAndGet();<a name="line.8175"></a>
-<span class="sourceLineNo">8176</span>  }<a name="line.8176"></a>
-<span class="sourceLineNo">8177</span><a name="line.8177"></a>
-<span class="sourceLineNo">8178</span>  public void incrementFlushesQueuedCount() {<a name="line.8178"></a>
-<span class="sourceLineNo">8179</span>    flushesQueued.incrementAndGet();<a name="line.8179"></a>
-<span class="sourceLineNo">8180</span>  }<a name="line.8180"></a>
-<span class="sourceLineNo">8181</span><a name="line.8181"></a>
-<span class="sourceLineNo">8182</span>  @VisibleForTesting<a name="line.8182"></a>
-<span class="sourceLineNo">8183</span>  public long getReadPoint() {<a name="line.8183"></a>
-<span class="sourceLineNo">8184</span>    return getReadPoint(IsolationLevel.READ_COMMITTED);<a name="line.8184"></a>
+<span class="sourceLineNo">8032</span>    long mutationSize = 0;<a name="line.8032"></a>
+<span class="sourceLineNo">8033</span>    for (List&lt;Cell&gt; cells: familyMap.values()) {<a name="line.8033"></a>
+<span class="sourceLineNo">8034</span>      assert cells instanceof RandomAccess;<a name="line.8034"></a>
+<span class="sourceLineNo">8035</span>      int listSize = cells.size();<a name="line.8035"></a>
+<span class="sourceLineNo">8036</span>      for (int i=0; i &lt; listSize; i++) {<a name="line.8036"></a>
+<span class="sourceLineNo">8037</span>        Cell cell = cells.get(i);<a name="line.8037"></a>
+<span class="sourceLineNo">8038</span>        mutationSize += KeyValueUtil.length(cell);<a name="line.8038"></a>
+<span class="sourceLineNo">8039</span>      }<a name="line.8039"></a>
+<span class="sourceLineNo">8040</span>    }<a name="line.8040"></a>
+<span class="sourceLineNo">8041</span><a name="line.8041"></a>
+<span class="sourceLineNo">8042</span>    dataInMemoryWithoutWAL.add(mutationSize);<a name="line.8042"></a>
+<span class="sourceLineNo">8043</span>  }<a name="line.8043"></a>
+<span class="sourceLineNo">8044</span><a name="line.8044"></a>
+<span class="sourceLineNo">8045</span>  private void lock(final Lock lock)<a name="line.8045"></a>
+<span class="sourceLineNo">8046</span>      throws RegionTooBusyException, InterruptedIOException {<a name="line.8046"></a>
+<span class="sourceLineNo">8047</span>    lock(lock, 1);<a name="line.8047"></a>
+<span class="sourceLineNo">8048</span>  }<a name="line.8048"></a>
+<span class="sourceLineNo">8049</span><a name="line.8049"></a>
+<span class="sourceLineNo">8050</span>  /**<a name="line.8050"></a>
+<span class="sourceLineNo">8051</span>   * Try to acquire a lock.  Throw RegionTooBusyException<a name="line.8051"></a>
+<span class="sourceLineNo">8052</span>   * if failed to get the lock in time. Throw InterruptedIOException<a name="line.8052"></a>
+<span class="sourceLineNo">8053</span>   * if interrupted while waiting for the lock.<a name="line.8053"></a>
+<span class="sourceLineNo">8054</span>   */<a name="line.8054"></a>
+<span class="sourceLineNo">8055</span>  private void lock(final Lock lock, final int multiplier)<a name="line.8055"></a>
+<span class="sourceLineNo">8056</span>      throws RegionTooBusyException, InterruptedIOException {<a name="line.8056"></a>
+<span class="sourceLineNo">8057</span>    try {<a name="line.8057"></a>
+<span class="sourceLineNo">8058</span>      final long waitTime = Math.min(maxBusyWaitDuration,<a name="line.8058"></a>
+<span class="sourceLineNo">8059</span>          busyWaitDuration * Math.min(multiplier, maxBusyWaitMultiplier));<a name="line.8059"></a>
+<span class="sourceLineNo">8060</span>      if (!lock.tryLock(waitTime, TimeUnit.MILLISECONDS)) {<a name="line.8060"></a>
+<span class="sourceLineNo">8061</span>        throw new RegionTooBusyException(<a name="line.8061"></a>
+<span class="sourceLineNo">8062</span>            "failed to get a lock in " + waitTime + " ms. " +<a name="line.8062"></a>
+<span class="sourceLineNo">8063</span>                "regionName=" + (this.getRegionInfo() == null ? "unknown" :<a name="line.8063"></a>
+<span class="sourceLineNo">8064</span>                this.getRegionInfo().getRegionNameAsString()) +<a name="line.8064"></a>
+<span class="sourceLineNo">8065</span>                ", server=" + (this.getRegionServerServices() == null ? "unknown" :<a name="line.8065"></a>
+<span class="sourceLineNo">8066</span>                this.getRegionServerServices().getServerName()));<a name="line.8066"></a>
+<span class="sourceLineNo">8067</span>      }<a name="line.8067"></a>
+<span class="sourceLineNo">8068</span>    } catch (InterruptedException ie) {<a name="line.8068"></a>
+<span class="sourceLineNo">8069</span>      LOG.info("Interrupted while waiting for a lock");<a name="line.8069"></a>
+<span class="sourceLineNo">8070</span>      InterruptedIOException iie = new InterruptedIOException();<a name="line.8070"></a>
+<span class="sourceLineNo">8071</span>      iie.initCause(ie);<a name="line.8071"></a>
+<span class="sourceLineNo">8072</span>      throw iie;<a name="line.8072"></a>
+<span class="sourceLineNo">8073</span>    }<a name="line.8073"></a>
+<span class="sourceLineNo">8074</span>  }<a name="line.8074"></a>
+<span class="sourceLineNo">8075</span><a name="line.8075"></a>
+<span class="sourceLineNo">8076</span>  /**<a name="line.8076"></a>
+<span class="sourceLineNo">8077</span>   * Calls sync with the given transaction ID<a name="line.8077"></a>
+<span class="sourceLineNo">8078</span>   * @param txid should sync up to which transaction<a name="line.8078"></a>
+<span class="sourceLineNo">8079</span>   * @throws IOException If anything goes wrong with DFS<a name="line.8079"></a>
+<span class="sourceLineNo">8080</span>   */<a name="line.8080"></a>
+<span class="sourceLineNo">8081</span>  private void sync(long txid, Durability durability) throws IOException {<a name="line.8081"></a>
+<span class="sourceLineNo">8082</span>    if (this.getRegionInfo().isMetaRegion()) {<a name="line.8082"></a>
+<span class="sourceLineNo">8083</span>      this.wal.sync(txid);<a name="line.8083"></a>
+<span class="sourceLineNo">8084</span>    } else {<a name="line.8084"></a>
+<span class="sourceLineNo">8085</span>      switch(durability) {<a name="line.8085"></a>
+<span class="sourceLineNo">8086</span>      case USE_DEFAULT:<a name="line.8086"></a>
+<span class="sourceLineNo">8087</span>        // do what table defaults to<a name="line.8087"></a>
+<span class="sourceLineNo">8088</span>        if (shouldSyncWAL()) {<a name="line.8088"></a>
+<span class="sourceLineNo">8089</span>          this.wal.sync(txid);<a name="line.8089"></a>
+<span class="sourceLineNo">8090</span>        }<a name="line.8090"></a>
+<span class="sourceLineNo">8091</span>        break;<a name="line.8091"></a>
+<span class="sourceLineNo">8092</span>      case SKIP_WAL:<a name="line.8092"></a>
+<span class="sourceLineNo">8093</span>        // nothing do to<a name="line.8093"></a>
+<span class="sourceLineNo">8094</span>        break;<a name="line.8094"></a>
+<span class="sourceLineNo">8095</span>      case ASYNC_WAL:<a name="line.8095"></a>
+<span class="sourceLineNo">8096</span>        // nothing do to<a name="line.8096"></a>
+<span class="sourceLineNo">8097</span>        break;<a name="line.8097"></a>
+<span class="sourceLineNo">8098</span>      case SYNC_WAL:<a name="line.8098"></a>
+<span class="sourceLineNo">8099</span>      case FSYNC_WAL:<a name="line.8099"></a>
+<span class="sourceLineNo">8100</span>        // sync the WAL edit (SYNC and FSYNC treated the same for now)<a name="line.8100"></a>
+<span class="sourceLineNo">8101</span>        this.wal.sync(txid);<a name="line.8101"></a>
+<span class="sourceLineNo">8102</span>        break;<a name="line.8102"></a>
+<span class="sourceLineNo">8103</span>      default:<a name="line.8103"></a>
+<span class="sourceLineNo">8104</span>        throw new RuntimeException("Unknown durability " + durability);<a name="line.8104"></a>
+<span class="sourceLineNo">8105</span>      }<a name="line.8105"></a>
+<span class="sourceLineNo">8106</span>    }<a name="line.8106"></a>
+<span class="sourceLineNo">8107</span>  }<a name="line.8107"></a>
+<span class="sourceLineNo">8108</span><a name="line.8108"></a>
+<span class="sourceLineNo">8109</span>  /**<a name="line.8109"></a>
+<span class="sourceLineNo">8110</span>   * Check whether we should sync the wal from the table's durability settings<a name="line.8110"></a>
+<span class="sourceLineNo">8111</span>   */<a name="line.8111"></a>
+<span class="sourceLineNo">8112</span>  private boolean shouldSyncWAL() {<a name="line.8112"></a>
+<span class="sourceLineNo">8113</span>    return durability.ordinal() &gt;  Durability.ASYNC_WAL.ordinal();<a name="line.8113"></a>
+<span class="sourceLineNo">8114</span>  }<a name="line.8114"></a>
+<span class="sourceLineNo">8115</span><a name="line.8115"></a>
+<span class="sourceLineNo">8116</span>  /**<a name="line.8116"></a>
+<span class="sourceLineNo">8117</span>   * A mocked list implementation - discards all updates.<a name="line.8117"></a>
+<span class="sourceLineNo">8118</span>   */<a name="line.8118"></a>
+<span class="sourceLineNo">8119</span>  private static final List&lt;Cell&gt; MOCKED_LIST = new AbstractList&lt;Cell&gt;() {<a name="line.8119"></a>
+<span class="sourceLineNo">8120</span><a name="line.8120"></a>
+<span class="sourceLineNo">8121</span>    @Override<a name="line.8121"></a>
+<span class="sourceLineNo">8122</span>    public void add(int index, Cell element) {<a name="line.8122"></a>
+<span class="sourceLineNo">8123</span>      // do nothing<a name="line.8123"></a>
+<span class="sourceLineNo">8124</span>    }<a name="line.8124"></a>
+<span class="sourceLineNo">8125</span><a name="line.8125"></a>
+<span class="sourceLineNo">8126</span>    @Override<a name="line.8126"></a>
+<span class="sourceLineNo">8127</span>    public boolean addAll(int index, Collection&lt;? extends Cell&gt; c) {<a name="line.8127"></a>
+<span class="sourceLineNo">8128</span>      return false; // this list is never changed as a result of an update<a name="line.8128"></a>
+<span class="sourceLineNo">8129</span>    }<a name="line.8129"></a>
+<span class="sourceLineNo">8130</span><a name="line.8130"></a>
+<span class="sourceLineNo">8131</span>    @Override<a name="line.8131"></a>
+<span class="sourceLineNo">8132</span>    public KeyValue get(int index) {<a name="line.8132"></a>
+<span class="sourceLineNo">8133</span>      throw new UnsupportedOperationException();<a name="line.8133"></a>
+<span class="sourceLineNo">8134</span>    }<a name="line.8134"></a>
+<span class="sourceLineNo">8135</span><a name="line.8135"></a>
+<span class="sourceLineNo">8136</span>    @Override<a name="line.8136"></a>
+<span class="sourceLineNo">8137</span>    public int size() {<a name="line.8137"></a>
+<span class="sourceLineNo">8138</span>      return 0;<a name="line.8138"></a>
+<span class="sourceLineNo">8139</span>    }<a name="line.8139"></a>
+<span class="sourceLineNo">8140</span>  };<a name="line.8140"></a>
+<span class="sourceLineNo">8141</span><a name="line.8141"></a>
+<span class="sourceLineNo">8142</span>  @Override<a name="line.8142"></a>
+<span class="sourceLineNo">8143</span>  public long getOpenSeqNum() {<a name="line.8143"></a>
+<span class="sourceLineNo">8144</span>    return this.openSeqNum;<a name="line.8144"></a>
+<span class="sourceLineNo">8145</span>  }<a name="line.8145"></a>
+<span class="sourceLineNo">8146</span><a name="line.8146"></a>
+<span class="sourceLineNo">8147</span>  @Override<a name="line.8147"></a>
+<span class="sourceLineNo">8148</span>  public Map&lt;byte[], Long&gt; getMaxStoreSeqId() {<a name="line.8148"></a>
+<span class="sourceLineNo">8149</span>    return this.maxSeqIdInStores;<a name="line.8149"></a>
+<span class="sourceLineNo">8150</span>  }<a name="line.8150"></a>
+<span class="sourceLineNo">8151</span><a name="line.8151"></a>
+<span class="sourceLineNo">8152</span>  @Override<a name="line.8152"></a>
+<span class="sourceLineNo">8153</span>  public long getOldestSeqIdOfStore(byte[] familyName) {<a name="line.8153"></a>
+<span class="sourceLineNo">8154</span>    return wal.getEarliestMemstoreSeqNum(getRegionInfo().getEncodedNameAsBytes(), familyName);<a name="line.8154"></a>
+<span class="sourceLineNo">8155</span>  }<a name="line.8155"></a>
+<span class="sourceLineNo">8156</span><a name="line.8156"></a>
+<span class="sourceLineNo">8157</span>  @Override<a name="line.8157"></a>
+<span class="sourceLineNo">8158</span>  public CompactionState getCompactionState() {<a name="line.8158"></a>
+<span class="sourceLineNo">8159</span>    boolean hasMajor = majorInProgress.get() &gt; 0, hasMinor = minorInProgress.get() &gt; 0;<a name="line.8159"></a>
+<span class="sourceLineNo">8160</span>    return (hasMajor ? (hasMinor ? CompactionState.MAJOR_AND_MINOR : CompactionState.MAJOR)<a name="line.8160"></a>
+<span class="sourceLineNo">8161</span>        : (hasMinor ? CompactionState.MINOR : CompactionState.NONE));<a name="line.8161"></a>
+<span class="sourceLineNo">8162</span>  }<a name="line.8162"></a>
+<span class="sourceLineNo">8163</span><a name="line.8163"></a>
+<span class="sourceLineNo">8164</span>  public void reportCompactionRequestStart(boolean isMajor){<a name="line.8164"></a>
+<span class="sourceLineNo">8165</span>    (isMajor ? majorInProgress : minorInProgress).incrementAndGet();<a name="line.8165"></a>
+<span class="sourceLineNo">8166</span>  }<a name="line.8166"></a>
+<span class="sourceLineNo">8167</span><a name="line.8167"></a>
+<span class="sourceLineNo">8168</span>  public void reportCompactionRequestEnd(boolean isMajor, int numFiles, long filesSizeCompacted) {<a name="line.8168"></a>
+<span class="sourceLineNo">8169</span>    int newValue = (isMajor ? majorInProgress : minorInProgress).decrementAndGet();<a name="line.8169"></a>
+<span class="sourceLineNo">8170</span><a name="line.8170"></a>
+<span class="sourceLineNo">8171</span>    // metrics<a name="line.8171"></a>
+<span class="sourceLineNo">8172</span>    compactionsFinished.incrementAndGet();<a name="line.8172"></a>
+<span class="sourceLineNo">8173</span>    compactionNumFilesCompacted.addAndGet(numFiles);<a name="line.8173"></a>
+<span class="sourceLineNo">8174</span>    compactionNumBytesCompacted.addAndGet(filesSizeCompacted);<a name="line.8174"></a>
+<span class="sourceLineNo">8175</span><a name="line.8175"></a>
+<span class="sourceLineNo">8176</span>    assert newValue &gt;= 0;<a name="line.8176"></a>
+<span class="sourceLineNo">8177</span>  }<a name="line.8177"></a>
+<span class="sourceLineNo">8178</span><a name="line.8178"></a>
+<span class="sourceLineNo">8179</span>  public void reportCompactionRequestFailure() {<a name="line.8179"></a>
+<span class="sourceLineNo">8180</span>    compactionsFailed.incrementAndGet();<a name="line.8180"></a>
+<span class="sourceLineNo">8181</span>  }<a name="line.8181"></a>
+<span class="sourceLineNo">8182</span><a name="line.8182"></a>
+<span class="sourceLineNo">8183</span>  public void incrementCompactionsQueuedCount() {<a name="line.8183"></a>
+<span class="sourceLineNo">8184</span>    compactionsQueued.incrementAndGet();<a name="line.8184"></a>
 <span class="sourceLineNo">8185</span>  }<a name="line.8185"></a>
 <span class="sourceLineNo">8186</span><a name="line.8186"></a>
-<span class="sourceLineNo">8187</span>  /**<a name="line.8187"></a>
-<span class="sourceLineNo">8188</span>   * {@inheritDoc}<a name="line.8188"></a>
-<span class="sourceLineNo">8189</span>   */<a name="line.8189"></a>
-<span class="sourceLineNo">8190</span>  @Override<a name="line.8190"></a>
-<span class="sourceLineNo">8191</span>  public void onConfigurationChange(Configuration conf) {<a name="line.8191"></a>
-<span class="sourceLineNo">8192</span>    // Do nothing for now.<a name="line.8192"></a>
+<span class="sourceLineNo">8187</span>  public void decrementCompactionsQueuedCount() {<a name="line.8187"></a>
+<span class="sourceLineNo">8188</span>    compactionsQueued.decrementAndGet();<a name="line.8188"></a>
+<span class="sourceLineNo">8189</span>  }<a name="line.8189"></a>
+<span class="sourceLineNo">8190</span><a name="line.8190"></a>
+<span class="sourceLineNo">8191</span>  public void incrementFlushesQueuedCount() {<a name="line.8191"></a>
+<span class="sourceLineNo">8192</span>    flushesQueued.incrementAndGet();<a name="line.8192"></a>
 <span class="sourceLineNo">8193</span>  }<a name="line.8193"></a>
 <span class="sourceLineNo">8194</span><a name="line.8194"></a>
-<span class="sourceLineNo">8195</span>  /**<a name="line.8195"></a>
-<span class="sourceLineNo">8196</span>   * {@inheritDoc}<a name="line.8196"></a>
-<span class="sourceLineNo">8197</span>   */<a name="line.8197"></a>
-<span class="sourceLineNo">8198</span>  @Override<a name="line.8198"></a>
-<span class="sourceLineNo">8199</span>  public void registerChildren(ConfigurationManager manager) {<a name="line.8199"></a>
-<span class="sourceLineNo">8200</span>    configurationManager = Optional.of(manager);<a name="line.8200"></a>
-<span class="sourceLineNo">8201</span>    for (Store s : this.stores.values()) {<a name="line.8201"></a>
-<span class="sourceLineNo">8202</span>      configurationManager.get().registerObserver(s);<a name="line.8202"></a>
-<span class="sourceLineNo">8203</span>    }<a name="line.8203"></a>
-<span class="sourceLineNo">8204</span>  }<a name="line.8204"></a>
-<span class="sourceLineNo">8205</span><a name="line.8205"></a>
-<span class="sourceLineNo">8206</span>  /**<a name="line.8206"></a>
-<span class="sourceLineNo">8207</span>   * {@inheritDoc}<a name="line.8207"></a>
-<span class="sourceLineNo">8208</span>   */<a name="line.8208"></a>
-<span class="sourceLineNo">8209</span>  @Override<a name="line.8209"></a>
-<span class="sourceLineNo">8210</span>  public void deregisterChildren(ConfigurationManager manager) {<a name="line.8210"></a>
-<span class="sourceLineNo">8211</span>    for (Store s : this.stores.values()) {<a name="line.8211"></a>
-<span class="sourceLineNo">8212</span>      configurationManager.get().deregisterObserver(s);<a name="line.8212"></a>
-<span class="sourceLineNo">8213</span>    }<a name="line.8213"></a>
-<span class="sourceLineNo">8214</span>  }<a name="line.8214"></a>
-<span class="sourceLineNo">8215</span><a name="line.8215"></a>
-<span class="sourceLineNo">8216</span>  @Override<a name="line.8216"></a>
-<span class="sourceLineNo">8217</span>  public CellComparator getCellComparator() {<a name="line.8217"></a>
-<span class="sourceLineNo">8218</span>    return this.getRegionInfo().isMetaRegion() ? CellComparator.META_COMPARATOR<a name="line.8218"></a>
-<span class="sourceLineNo">8219</span>        : CellComparator.COMPARATOR;<a name="line.8219"></a>
-<span class="sourceLineNo">8220</span>  }<a name="line.8220"></a>
-<span class="sourceLineNo">8221</span><a name="line.8221"></a>
-<span class="sourceLineNo">8222</span>  public long getMemstoreFlushSize() {<a name="line.8222"></a>
-<span class="sourceLineNo">8223</span>    return this.memstoreFlushSize;<a name="line.8223"></a>
-<span class="sourceLineNo">8224</span>  }<a name="line.8224"></a>
-<span class="sourceLineNo">8225</span><a name="line.8225"></a>
-<span class="sourceLineNo">8226</span>  //// method for debugging tests<a name="line.8226"></a>
-<span class="sourceLineNo">8227</span>  void throwException(String title, String regionName) {<a name="line.8227"></a>
-<span class="sourceLineNo">8228</span>    StringBuffer buf = new StringBuffer();<a name="line.8228"></a>
-<span class="sourceLineNo">8229</span>    buf.append(title + ", ");<a name="line.8229"></a>
-<span class="sourceLineNo">8230</span>    buf.append(getRegionInfo().toString());<a name="line.8230"></a>
-<span class="sourceLineNo">8231</span>    buf.append(getRegionInfo().isMetaRegion() ? " meta region " : " ");<a name="line.8231"></a>
-<span class="sourceLineNo">8232</span>    buf.append(getRegionInfo().isMetaTable() ? " meta table " : " ");<a name="line.8232"></a>
-<span class="sourceLineNo">8233</span>    buf.append("stores: ");<a name="line.8233"></a>
-<span class="sourceLineNo">8234</span>    for (Store s : getStores()) {<a name="line.8234"></a>
-<span class="sourceLineNo">8235</span>      buf.append(s.getColumnFamilyDescriptor().getNameAsString());<a name="line.8235"></a>
-<span class="sourceLineNo">8236</span>      buf.append(" size: ");<a name="line.8236"></a>
-<span class="sourceLineNo">8237</span>      buf.append(s.getSizeOfMemStore().getDataSize());<a name="line.8237"></a>
-<span class="sourceLineNo">8238</span>      buf.append(" ");<a name="line.8238"></a>
-<span class="sourceLineNo">8239</span>    }<a name="line.8239"></a>
-<span class="sourceLineNo">8240</span>    buf.append("end-of-stores");<a name="line.8240"></a>
-<span class="sourceLineNo">8241</span>    buf.append(", memstore size ");<a name="line.8241"></a>
-<span class="sourceLineNo">8242</span>    buf.append(getMemstoreSize());<a name="line.8242"></a>
-<span class="sourceLineNo">8243</span>    if (getRegionInfo().getRegionNameAsString().startsWith(regionName)) {<a name="line.8243"></a>
-<span class="sourceLineNo">8244</span>      throw new RuntimeException(buf.toString());<a name="line.8244"></a>
-<span class="sourceLineNo">8245</span>    }<a name="line.8245"></a>
-<span class="sourceLineNo">8246</span>  }<a name="line.8246"></a>
-<span class="sourceLineNo">8247</span>}<a name="line.8247"></a>
+<span class="sourceLineNo">8195</span>  @VisibleForTesting<a name="line.8195"></a>
+<span class="sourceLineNo">8196</span>  public long getReadPoint() {<a name="line.8196"></a>
+<span class="sourceLineNo">8197</span>    return getReadPoint(IsolationLevel.READ_COMMITTED);<a name="line.8197"></a>
+<span class="sourceLineNo">8198</span>  }<a name="line.8198"></a>
+<span class="sourceLineNo">8199</span><a name="line.8199"></a>
+<span class="sourceLineNo">8200</span>  /**<a name="line.8200"></a>
+<span class="sourceLineNo">8201</span>   * {@inheritDoc}<a name="line.8201"></a>
+<span class="sourceLineNo">8202</span>   */<a name="line.8202"></a>
+<span class="sourceLineNo">8203</span>  @Override<a name="line.8203"></a>
+<span class="sourceLineNo">8204</span>  public void onConfigurationChange(Configuration conf) {<a name="line.8204"></a>
+<span class="sourceLineNo">8205</span>    // Do nothing for now.<a name="line.8205"></a>
+<span class="sourceLineNo">8206</span>  }<a name="line.8206"></a>
+<span class="sourceLineNo">8207</span><a name="line.8207"></a>
+<span class="sourceLineNo">8208</span>  /**<a name="line.8208"></a>
+<span class="sourceLineNo">8209</span>   * {@inheritDoc}<a name="line.8209"></a>
+<span class="sourceLineNo">8210</span>   */<a name="line.8210"></a>
+<span class="sourceLineNo">8211</span>  @Override<a name="line.8211"></a>
+<span class="sourceLineNo">8212</span>  public void registerChildren(ConfigurationManager manager) {<a name="line.8212"></a>
+<span class="sourceLineNo">8213</span>    configurationManager = Optional.of(manager);<a name="line.8213"></a>
+<span class="sourceLineNo">8214</span>    for (Store s : this.stores.values()) {<a name="line.8214"></a>
+<span class="sourceLineNo">8215</span>      configurationManager.get().registerObserver(s);<a name="line.8215"></a>
+<span class="sourceLineNo">8216</span>    }<a name="line.8216"></a>
+<span class="sourceLineNo">8217</span>  }<a name="line.8217"></a>
+<span class="sourceLineNo">8218</span><a name="line.8218"></a>
+<span class="sourceLineNo">8219</span>  /**<a name="line.8219"></a>
+<span class="sourceLineNo">8220</span>   * {@inheritDoc}<a name="line.8220"></a>
+<span class="sourceLineNo">8221</span>   */<a name="line.8221"></a>
+<span class="sourceLineNo">8222</span>  @Override<a name="line.8222"></a>
+<span class="sourceLineNo">8223</span>  public void deregisterChildren(ConfigurationManager manager) {<a name="line.8223"></a>
+<span class="sourceLineNo">8224</span>    for (Store s : this.stores.values()) {<a name="line.8224"></a>
+<span class="sourceLineNo">8225</span>      configurationManager.get().deregisterObserver(s);<a name="line.8225"></a>
+<span class="sourceLineNo">8226</span>    }<a name="line.8226"></a>
+<span class="sourceLineNo">8227</span>  }<a name="line.8227"></a>
+<span class="sourceLineNo">8228</span><a name="line.8228"></a>
+<span class="sourceLineNo">8229</span>  @Override<a name="line.8229"></a>
+<span class="sourceLineNo">8230</span>  public CellComparator getCellComparator() {<a name="line.8230"></a>
+<span class="sourceLineNo">8231</span>    return this.getRegionInfo().isMetaRegion() ? CellComparator.META_COMPARATOR<a name="line.8231"></a>
+<span class="sourceLineNo">8232</span>        : CellComparator.COMPARATOR;<a name="line.8232"></a>
+<span class="sourceLineNo">8233</span>  }<a name="line.8233"></a>
+<span class="sourceLineNo">8234</span><a name="line.8234"></a>
+<span class="sourceLineNo">8235</span>  public long getMemstoreFlushSize() {<a name="line.8235"></a>
+<span class="sourceLineNo">8236</span>    return this.memstoreFlushSize;<a name="line.8236"></a>
+<span class="sourceLineNo">8237</span>  }<a name="line.8237"></a>
+<span class="sourceLineNo">8238</span><a name="line.8238"></a>
+<span class="sourceLineNo">8239</span>  //// method for debugging tests<a name="line.8239"></a>
+<span class="sourceLineNo">8240</span>  void throwException(String title, String regionName) {<a name="line.8240"></a>
+<span class="sourceLineNo">8241</span>    StringBuffer buf = new StringBuffer();<a name="line.8241"></a>
+<span class="sourceLineNo">8242</span>    buf.append(title + ", ");<a name="line.8242"></a>
+<span class="sourceLineNo">8243</span>    buf.append(getRegionInfo().toString());<a name="line.8243"></a>
+<span class="sourceLineNo">8244</span>    buf.append(getRegionInfo().isMetaRegion() ? " meta region " : " ");<a name="line.8244"></a>
+<span class="sourceLineNo">8245</span>    buf.append(getRegionInfo().isMetaTable() ? " meta table " : " ");<a name="line.8245"></a>
+<span class="sourceLineNo">8246</span>    buf.append("stores: ");<a name="line.8246"></a>
+<span class="sourceLineNo">8247</span>    for (Store s : getStores()) {<a name="line.8247"></a>
+<span class="sourceLineNo">8248</span>      buf.append(s.getColumnFamilyDescriptor().getNameAsString());<a name="line.8248"></a>
+<span class="sourceLineNo">8249</span>      buf.append(" size: ");<a name="line.8249"></a>
+<span class="sourceLineNo">8250</span>      buf.append(s.getSizeOfMemStore().getDataSize());<a name="line.8250"></a>
+<span class="sourceLineNo">8251</span>      buf.append(" ");<a name="line.8251"></a>
+<span class="sourceLineNo">8252</span>    }<a name="line.8252"></a>
+<span class="sourceLineNo">8253</span>    buf.append("end-of-stores");<a name="line.8253"></a>
+<span class="sourceLineNo">8254</span>    buf.append(", memstore size ");<a name="line.8254"></a>
+<span class="sourceLineNo">8255</span>    buf.append(getMemstoreSize());<a name="line.8255"></a>
+<span class="sourceLineNo">8256</span>    if (getRegionInfo().getRegionNameAsString().startsWith(regionName)) {<a name="line.8256"></a>
+<span class="sourceLineNo">8257</span>      throw new RuntimeException(buf.toString());<a name="line.8257"></a>
+<span class="sourceLineNo">8258</span>    }<a name="line.8258"></a>
+<span class="sourceLineNo">8259</span>  }<a name="line.8259"></a>
+<span class="sourceLineNo">8260</span>}<a name="line.8260"></a>
 
 
 


[03/33] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html b/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html
index 3255174..bfaacbc 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/snapshot/SnapshotManifest.html
@@ -55,516 +55,538 @@
 <span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.regionserver.Store;<a name="line.47"></a>
 <span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.regionserver.StoreFile;<a name="line.48"></a>
 <span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.regionserver.StoreFileInfo;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.CodedInputStream;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.InvalidProtocolBufferException;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDataManifest;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.util.FSTableDescriptors;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.59"></a>
-<span class="sourceLineNo">060</span><a name="line.60"></a>
-<span class="sourceLineNo">061</span>/**<a name="line.61"></a>
-<span class="sourceLineNo">062</span> * Utility class to help read/write the Snapshot Manifest.<a name="line.62"></a>
-<span class="sourceLineNo">063</span> *<a name="line.63"></a>
-<span class="sourceLineNo">064</span> * The snapshot format is transparent for the users of this class,<a name="line.64"></a>
-<span class="sourceLineNo">065</span> * once the snapshot is written, it will never be modified.<a name="line.65"></a>
-<span class="sourceLineNo">066</span> * On open() the snapshot will be loaded to the current in-memory format.<a name="line.66"></a>
-<span class="sourceLineNo">067</span> */<a name="line.67"></a>
-<span class="sourceLineNo">068</span>@InterfaceAudience.Private<a name="line.68"></a>
-<span class="sourceLineNo">069</span>public final class SnapshotManifest {<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  private static final Log LOG = LogFactory.getLog(SnapshotManifest.class);<a name="line.70"></a>
-<span class="sourceLineNo">071</span><a name="line.71"></a>
-<span class="sourceLineNo">072</span>  public static final String SNAPSHOT_MANIFEST_SIZE_LIMIT_CONF_KEY = "snapshot.manifest.size.limit";<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>  public static final String DATA_MANIFEST_NAME = "data.manifest";<a name="line.74"></a>
-<span class="sourceLineNo">075</span><a name="line.75"></a>
-<span class="sourceLineNo">076</span>  private List&lt;SnapshotRegionManifest&gt; regionManifests;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  private SnapshotDescription desc;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  private HTableDescriptor htd;<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span>  private final ForeignExceptionSnare monitor;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  private final Configuration conf;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  private final Path workingDir;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  private final FileSystem fs;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>  private int manifestSizeLimit;<a name="line.84"></a>
-<span class="sourceLineNo">085</span><a name="line.85"></a>
-<span class="sourceLineNo">086</span>  private SnapshotManifest(final Configuration conf, final FileSystem fs,<a name="line.86"></a>
-<span class="sourceLineNo">087</span>      final Path workingDir, final SnapshotDescription desc,<a name="line.87"></a>
-<span class="sourceLineNo">088</span>      final ForeignExceptionSnare monitor) {<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    this.monitor = monitor;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    this.desc = desc;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    this.workingDir = workingDir;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    this.conf = conf;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    this.fs = fs;<a name="line.93"></a>
-<span class="sourceLineNo">094</span><a name="line.94"></a>
-<span class="sourceLineNo">095</span>    this.manifestSizeLimit = conf.getInt(SNAPSHOT_MANIFEST_SIZE_LIMIT_CONF_KEY, 64 * 1024 * 1024);<a name="line.95"></a>
-<span class="sourceLineNo">096</span>  }<a name="line.96"></a>
-<span class="sourceLineNo">097</span><a name="line.97"></a>
-<span class="sourceLineNo">098</span>  /**<a name="line.98"></a>
-<span class="sourceLineNo">099</span>   * Return a SnapshotManifest instance, used for writing a snapshot.<a name="line.99"></a>
-<span class="sourceLineNo">100</span>   *<a name="line.100"></a>
-<span class="sourceLineNo">101</span>   * There are two usage pattern:<a name="line.101"></a>
-<span class="sourceLineNo">102</span>   *  - The Master will create a manifest, add the descriptor, offline regions<a name="line.102"></a>
-<span class="sourceLineNo">103</span>   *    and consolidate the snapshot by writing all the pending stuff on-disk.<a name="line.103"></a>
-<span class="sourceLineNo">104</span>   *      manifest = SnapshotManifest.create(...)<a name="line.104"></a>
-<span class="sourceLineNo">105</span>   *      manifest.addRegion(tableDir, hri)<a name="line.105"></a>
-<span class="sourceLineNo">106</span>   *      manifest.consolidate()<a name="line.106"></a>
-<span class="sourceLineNo">107</span>   *  - The RegionServer will create a single region manifest<a name="line.107"></a>
-<span class="sourceLineNo">108</span>   *      manifest = SnapshotManifest.create(...)<a name="line.108"></a>
-<span class="sourceLineNo">109</span>   *      manifest.addRegion(region)<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   */<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  public static SnapshotManifest create(final Configuration conf, final FileSystem fs,<a name="line.111"></a>
-<span class="sourceLineNo">112</span>      final Path workingDir, final SnapshotDescription desc,<a name="line.112"></a>
-<span class="sourceLineNo">113</span>      final ForeignExceptionSnare monitor) {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    return new SnapshotManifest(conf, fs, workingDir, desc, monitor);<a name="line.114"></a>
-<span class="sourceLineNo">115</span>  }<a name="line.115"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.shaded.com.google.common.annotations.VisibleForTesting;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.CodedInputStream;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.shaded.com.google.protobuf.InvalidProtocolBufferException;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDataManifest;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.util.FSTableDescriptors;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.60"></a>
+<span class="sourceLineNo">061</span><a name="line.61"></a>
+<span class="sourceLineNo">062</span>/**<a name="line.62"></a>
+<span class="sourceLineNo">063</span> * Utility class to help read/write the Snapshot Manifest.<a name="line.63"></a>
+<span class="sourceLineNo">064</span> *<a name="line.64"></a>
+<span class="sourceLineNo">065</span> * The snapshot format is transparent for the users of this class,<a name="line.65"></a>
+<span class="sourceLineNo">066</span> * once the snapshot is written, it will never be modified.<a name="line.66"></a>
+<span class="sourceLineNo">067</span> * On open() the snapshot will be loaded to the current in-memory format.<a name="line.67"></a>
+<span class="sourceLineNo">068</span> */<a name="line.68"></a>
+<span class="sourceLineNo">069</span>@InterfaceAudience.Private<a name="line.69"></a>
+<span class="sourceLineNo">070</span>public final class SnapshotManifest {<a name="line.70"></a>
+<span class="sourceLineNo">071</span>  private static final Log LOG = LogFactory.getLog(SnapshotManifest.class);<a name="line.71"></a>
+<span class="sourceLineNo">072</span><a name="line.72"></a>
+<span class="sourceLineNo">073</span>  public static final String SNAPSHOT_MANIFEST_SIZE_LIMIT_CONF_KEY = "snapshot.manifest.size.limit";<a name="line.73"></a>
+<span class="sourceLineNo">074</span><a name="line.74"></a>
+<span class="sourceLineNo">075</span>  public static final String DATA_MANIFEST_NAME = "data.manifest";<a name="line.75"></a>
+<span class="sourceLineNo">076</span><a name="line.76"></a>
+<span class="sourceLineNo">077</span>  private List&lt;SnapshotRegionManifest&gt; regionManifests;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  private SnapshotDescription desc;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  private HTableDescriptor htd;<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span>  private final ForeignExceptionSnare monitor;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  private final Configuration conf;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>  private final Path workingDir;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  private final FileSystem fs;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>  private int manifestSizeLimit;<a name="line.85"></a>
+<span class="sourceLineNo">086</span><a name="line.86"></a>
+<span class="sourceLineNo">087</span>  private SnapshotManifest(final Configuration conf, final FileSystem fs,<a name="line.87"></a>
+<span class="sourceLineNo">088</span>      final Path workingDir, final SnapshotDescription desc,<a name="line.88"></a>
+<span class="sourceLineNo">089</span>      final ForeignExceptionSnare monitor) {<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    this.monitor = monitor;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    this.desc = desc;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    this.workingDir = workingDir;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    this.conf = conf;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    this.fs = fs;<a name="line.94"></a>
+<span class="sourceLineNo">095</span><a name="line.95"></a>
+<span class="sourceLineNo">096</span>    this.manifestSizeLimit = conf.getInt(SNAPSHOT_MANIFEST_SIZE_LIMIT_CONF_KEY, 64 * 1024 * 1024);<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  }<a name="line.97"></a>
+<span class="sourceLineNo">098</span><a name="line.98"></a>
+<span class="sourceLineNo">099</span>  /**<a name="line.99"></a>
+<span class="sourceLineNo">100</span>   * Return a SnapshotManifest instance, used for writing a snapshot.<a name="line.100"></a>
+<span class="sourceLineNo">101</span>   *<a name="line.101"></a>
+<span class="sourceLineNo">102</span>   * There are two usage pattern:<a name="line.102"></a>
+<span class="sourceLineNo">103</span>   *  - The Master will create a manifest, add the descriptor, offline regions<a name="line.103"></a>
+<span class="sourceLineNo">104</span>   *    and consolidate the snapshot by writing all the pending stuff on-disk.<a name="line.104"></a>
+<span class="sourceLineNo">105</span>   *      manifest = SnapshotManifest.create(...)<a name="line.105"></a>
+<span class="sourceLineNo">106</span>   *      manifest.addRegion(tableDir, hri)<a name="line.106"></a>
+<span class="sourceLineNo">107</span>   *      manifest.consolidate()<a name="line.107"></a>
+<span class="sourceLineNo">108</span>   *  - The RegionServer will create a single region manifest<a name="line.108"></a>
+<span class="sourceLineNo">109</span>   *      manifest = SnapshotManifest.create(...)<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   *      manifest.addRegion(region)<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   */<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  public static SnapshotManifest create(final Configuration conf, final FileSystem fs,<a name="line.112"></a>
+<span class="sourceLineNo">113</span>      final Path workingDir, final SnapshotDescription desc,<a name="line.113"></a>
+<span class="sourceLineNo">114</span>      final ForeignExceptionSnare monitor) {<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    return new SnapshotManifest(conf, fs, workingDir, desc, monitor);<a name="line.115"></a>
 <span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span>  /**<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   * Return a SnapshotManifest instance with the information already loaded in-memory.<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   *    SnapshotManifest manifest = SnapshotManifest.open(...)<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   *    HTableDescriptor htd = manifest.getTableDescriptor()<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   *    for (SnapshotRegionManifest regionManifest: manifest.getRegionManifests())<a name="line.121"></a>
-<span class="sourceLineNo">122</span>   *      hri = regionManifest.getRegionInfo()<a name="line.122"></a>
-<span class="sourceLineNo">123</span>   *      for (regionManifest.getFamilyFiles())<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   *        ...<a name="line.124"></a>
-<span class="sourceLineNo">125</span>   */<a name="line.125"></a>
-<span class="sourceLineNo">126</span>  public static SnapshotManifest open(final Configuration conf, final FileSystem fs,<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      final Path workingDir, final SnapshotDescription desc) throws IOException {<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    SnapshotManifest manifest = new SnapshotManifest(conf, fs, workingDir, desc, null);<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    manifest.load();<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    return manifest;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  }<a name="line.131"></a>
-<span class="sourceLineNo">132</span><a name="line.132"></a>
-<span class="sourceLineNo">133</span><a name="line.133"></a>
-<span class="sourceLineNo">134</span>  /**<a name="line.134"></a>
-<span class="sourceLineNo">135</span>   * Add the table descriptor to the snapshot manifest<a name="line.135"></a>
-<span class="sourceLineNo">136</span>   */<a name="line.136"></a>
-<span class="sourceLineNo">137</span>  public void addTableDescriptor(final HTableDescriptor htd) throws IOException {<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    this.htd = htd;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  }<a name="line.139"></a>
-<span class="sourceLineNo">140</span><a name="line.140"></a>
-<span class="sourceLineNo">141</span>  interface RegionVisitor&lt;TRegion, TFamily&gt; {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    TRegion regionOpen(final HRegionInfo regionInfo) throws IOException;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    void regionClose(final TRegion region) throws IOException;<a name="line.143"></a>
-<span class="sourceLineNo">144</span><a name="line.144"></a>
-<span class="sourceLineNo">145</span>    TFamily familyOpen(final TRegion region, final byte[] familyName) throws IOException;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    void familyClose(final TRegion region, final TFamily family) throws IOException;<a name="line.146"></a>
-<span class="sourceLineNo">147</span><a name="line.147"></a>
-<span class="sourceLineNo">148</span>    void storeFile(final TRegion region, final TFamily family, final StoreFileInfo storeFile)<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      throws IOException;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  }<a name="line.150"></a>
-<span class="sourceLineNo">151</span><a name="line.151"></a>
-<span class="sourceLineNo">152</span>  private RegionVisitor createRegionVisitor(final SnapshotDescription desc) throws IOException {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    switch (getSnapshotFormat(desc)) {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      case SnapshotManifestV1.DESCRIPTOR_VERSION:<a name="line.154"></a>
-<span class="sourceLineNo">155</span>        return new SnapshotManifestV1.ManifestBuilder(conf, fs, workingDir);<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      case SnapshotManifestV2.DESCRIPTOR_VERSION:<a name="line.156"></a>
-<span class="sourceLineNo">157</span>        return new SnapshotManifestV2.ManifestBuilder(conf, fs, workingDir);<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      default:<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      throw new CorruptedSnapshotException("Invalid Snapshot version: " + desc.getVersion(),<a name="line.159"></a>
-<span class="sourceLineNo">160</span>        ProtobufUtil.createSnapshotDesc(desc));<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    }<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  }<a name="line.162"></a>
-<span class="sourceLineNo">163</span><a name="line.163"></a>
-<span class="sourceLineNo">164</span>  public void addMobRegion(HRegionInfo regionInfo) throws IOException {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    // 0. Get the ManifestBuilder/RegionVisitor<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    RegionVisitor visitor = createRegionVisitor(desc);<a name="line.166"></a>
-<span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span>    // 1. dump region meta info into the snapshot directory<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    LOG.debug("Storing mob region '" + regionInfo + "' region-info for snapshot.");<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    Object regionData = visitor.regionOpen(regionInfo);<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    monitor.rethrowException();<a name="line.171"></a>
-<span class="sourceLineNo">172</span><a name="line.172"></a>
-<span class="sourceLineNo">173</span>    // 2. iterate through all the stores in the region<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    LOG.debug("Creating references for mob files");<a name="line.174"></a>
-<span class="sourceLineNo">175</span><a name="line.175"></a>
-<span class="sourceLineNo">176</span>    Path mobRegionPath = MobUtils.getMobRegionPath(conf, regionInfo.getTable());<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    for (HColumnDescriptor hcd : htd.getColumnFamilies()) {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      // 2.1. build the snapshot reference for the store if it's a mob store<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      if (!hcd.isMobEnabled()) {<a name="line.179"></a>
-<span class="sourceLineNo">180</span>        continue;<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      }<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      Object familyData = visitor.familyOpen(regionData, hcd.getName());<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      monitor.rethrowException();<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span>      Path storePath = MobUtils.getMobFamilyPath(mobRegionPath, hcd.getNameAsString());<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      List&lt;StoreFileInfo&gt; storeFiles = getStoreFiles(storePath);<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      if (storeFiles == null) {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>        if (LOG.isDebugEnabled()) {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>          LOG.debug("No mob files under family: " + hcd.getNameAsString());<a name="line.189"></a>
-<span class="sourceLineNo">190</span>        }<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        continue;<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      }<a name="line.192"></a>
-<span class="sourceLineNo">193</span><a name="line.193"></a>
-<span class="sourceLineNo">194</span>      addReferenceFiles(visitor, regionData, familyData, storeFiles, true);<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>      visitor.familyClose(regionData, familyData);<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    }<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    visitor.regionClose(regionData);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>  }<a name="line.199"></a>
-<span class="sourceLineNo">200</span><a name="line.200"></a>
-<span class="sourceLineNo">201</span>  /**<a name="line.201"></a>
-<span class="sourceLineNo">202</span>   * Creates a 'manifest' for the specified region, by reading directly from the HRegion object.<a name="line.202"></a>
-<span class="sourceLineNo">203</span>   * This is used by the "online snapshot" when the table is enabled.<a name="line.203"></a>
-<span class="sourceLineNo">204</span>   */<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  public void addRegion(final HRegion region) throws IOException {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    // 0. Get the ManifestBuilder/RegionVisitor<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    RegionVisitor visitor = createRegionVisitor(desc);<a name="line.207"></a>
+<span class="sourceLineNo">117</span>  }<a name="line.117"></a>
+<span class="sourceLineNo">118</span><a name="line.118"></a>
+<span class="sourceLineNo">119</span>  /**<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   * Return a SnapshotManifest instance with the information already loaded in-memory.<a name="line.120"></a>
+<span class="sourceLineNo">121</span>   *    SnapshotManifest manifest = SnapshotManifest.open(...)<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   *    HTableDescriptor htd = manifest.getTableDescriptor()<a name="line.122"></a>
+<span class="sourceLineNo">123</span>   *    for (SnapshotRegionManifest regionManifest: manifest.getRegionManifests())<a name="line.123"></a>
+<span class="sourceLineNo">124</span>   *      hri = regionManifest.getRegionInfo()<a name="line.124"></a>
+<span class="sourceLineNo">125</span>   *      for (regionManifest.getFamilyFiles())<a name="line.125"></a>
+<span class="sourceLineNo">126</span>   *        ...<a name="line.126"></a>
+<span class="sourceLineNo">127</span>   */<a name="line.127"></a>
+<span class="sourceLineNo">128</span>  public static SnapshotManifest open(final Configuration conf, final FileSystem fs,<a name="line.128"></a>
+<span class="sourceLineNo">129</span>      final Path workingDir, final SnapshotDescription desc) throws IOException {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    SnapshotManifest manifest = new SnapshotManifest(conf, fs, workingDir, desc, null);<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    manifest.load();<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    return manifest;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>  }<a name="line.133"></a>
+<span class="sourceLineNo">134</span><a name="line.134"></a>
+<span class="sourceLineNo">135</span><a name="line.135"></a>
+<span class="sourceLineNo">136</span>  /**<a name="line.136"></a>
+<span class="sourceLineNo">137</span>   * Add the table descriptor to the snapshot manifest<a name="line.137"></a>
+<span class="sourceLineNo">138</span>   */<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  public void addTableDescriptor(final HTableDescriptor htd) throws IOException {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    this.htd = htd;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  }<a name="line.141"></a>
+<span class="sourceLineNo">142</span><a name="line.142"></a>
+<span class="sourceLineNo">143</span>  interface RegionVisitor&lt;TRegion, TFamily&gt; {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    TRegion regionOpen(final HRegionInfo regionInfo) throws IOException;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    void regionClose(final TRegion region) throws IOException;<a name="line.145"></a>
+<span class="sourceLineNo">146</span><a name="line.146"></a>
+<span class="sourceLineNo">147</span>    TFamily familyOpen(final TRegion region, final byte[] familyName) throws IOException;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    void familyClose(final TRegion region, final TFamily family) throws IOException;<a name="line.148"></a>
+<span class="sourceLineNo">149</span><a name="line.149"></a>
+<span class="sourceLineNo">150</span>    void storeFile(final TRegion region, final TFamily family, final StoreFileInfo storeFile)<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      throws IOException;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>  }<a name="line.152"></a>
+<span class="sourceLineNo">153</span><a name="line.153"></a>
+<span class="sourceLineNo">154</span>  private RegionVisitor createRegionVisitor(final SnapshotDescription desc) throws IOException {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    switch (getSnapshotFormat(desc)) {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      case SnapshotManifestV1.DESCRIPTOR_VERSION:<a name="line.156"></a>
+<span class="sourceLineNo">157</span>        return new SnapshotManifestV1.ManifestBuilder(conf, fs, workingDir);<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      case SnapshotManifestV2.DESCRIPTOR_VERSION:<a name="line.158"></a>
+<span class="sourceLineNo">159</span>        return new SnapshotManifestV2.ManifestBuilder(conf, fs, workingDir);<a name="line.159"></a>
+<span class="sourceLineNo">160</span>      default:<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      throw new CorruptedSnapshotException("Invalid Snapshot version: " + desc.getVersion(),<a name="line.161"></a>
+<span class="sourceLineNo">162</span>        ProtobufUtil.createSnapshotDesc(desc));<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    }<a name="line.163"></a>
+<span class="sourceLineNo">164</span>  }<a name="line.164"></a>
+<span class="sourceLineNo">165</span><a name="line.165"></a>
+<span class="sourceLineNo">166</span>  public void addMobRegion(HRegionInfo regionInfo) throws IOException {<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    // Get the ManifestBuilder/RegionVisitor<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    RegionVisitor visitor = createRegionVisitor(desc);<a name="line.168"></a>
+<span class="sourceLineNo">169</span><a name="line.169"></a>
+<span class="sourceLineNo">170</span>    // Visit the region and add it to the manifest<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    addMobRegion(regionInfo, visitor);<a name="line.171"></a>
+<span class="sourceLineNo">172</span>  }<a name="line.172"></a>
+<span class="sourceLineNo">173</span><a name="line.173"></a>
+<span class="sourceLineNo">174</span>  @VisibleForTesting<a name="line.174"></a>
+<span class="sourceLineNo">175</span>  protected void addMobRegion(HRegionInfo regionInfo, RegionVisitor visitor) throws IOException {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    // 1. dump region meta info into the snapshot directory<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    LOG.debug("Storing mob region '" + regionInfo + "' region-info for snapshot.");<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    Object regionData = visitor.regionOpen(regionInfo);<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    monitor.rethrowException();<a name="line.179"></a>
+<span class="sourceLineNo">180</span><a name="line.180"></a>
+<span class="sourceLineNo">181</span>    // 2. iterate through all the stores in the region<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    LOG.debug("Creating references for mob files");<a name="line.182"></a>
+<span class="sourceLineNo">183</span><a name="line.183"></a>
+<span class="sourceLineNo">184</span>    Path mobRegionPath = MobUtils.getMobRegionPath(conf, regionInfo.getTable());<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    for (HColumnDescriptor hcd : htd.getColumnFamilies()) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      // 2.1. build the snapshot reference for the store if it's a mob store<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      if (!hcd.isMobEnabled()) {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>        continue;<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      }<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      Object familyData = visitor.familyOpen(regionData, hcd.getName());<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      monitor.rethrowException();<a name="line.191"></a>
+<span class="sourceLineNo">192</span><a name="line.192"></a>
+<span class="sourceLineNo">193</span>      Path storePath = MobUtils.getMobFamilyPath(mobRegionPath, hcd.getNameAsString());<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      List&lt;StoreFileInfo&gt; storeFiles = getStoreFiles(storePath);<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      if (storeFiles == null) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        if (LOG.isDebugEnabled()) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>          LOG.debug("No mob files under family: " + hcd.getNameAsString());<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        }<a name="line.198"></a>
+<span class="sourceLineNo">199</span>        continue;<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      }<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span>      addReferenceFiles(visitor, regionData, familyData, storeFiles, true);<a name="line.202"></a>
+<span class="sourceLineNo">203</span><a name="line.203"></a>
+<span class="sourceLineNo">204</span>      visitor.familyClose(regionData, familyData);<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    }<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    visitor.regionClose(regionData);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>  }<a name="line.207"></a>
 <span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span>    // 1. dump region meta info into the snapshot directory<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    LOG.debug("Storing '" + region + "' region-info for snapshot.");<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    Object regionData = visitor.regionOpen(region.getRegionInfo());<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    monitor.rethrowException();<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>    // 2. iterate through all the stores in the region<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    LOG.debug("Creating references for hfiles");<a name="line.215"></a>
+<span class="sourceLineNo">209</span>  /**<a name="line.209"></a>
+<span class="sourceLineNo">210</span>   * Creates a 'manifest' for the specified region, by reading directly from the HRegion object.<a name="line.210"></a>
+<span class="sourceLineNo">211</span>   * This is used by the "online snapshot" when the table is enabled.<a name="line.211"></a>
+<span class="sourceLineNo">212</span>   */<a name="line.212"></a>
+<span class="sourceLineNo">213</span>  public void addRegion(final HRegion region) throws IOException {<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    // Get the ManifestBuilder/RegionVisitor<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    RegionVisitor visitor = createRegionVisitor(desc);<a name="line.215"></a>
 <span class="sourceLineNo">216</span><a name="line.216"></a>
-<span class="sourceLineNo">217</span>    for (Store store : region.getStores()) {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      // 2.1. build the snapshot reference for the store<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      Object familyData = visitor.familyOpen(regionData, store.getColumnFamilyDescriptor().getName());<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      monitor.rethrowException();<a name="line.220"></a>
-<span class="sourceLineNo">221</span><a name="line.221"></a>
-<span class="sourceLineNo">222</span>      List&lt;StoreFile&gt; storeFiles = new ArrayList&lt;&gt;(store.getStorefiles());<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      if (LOG.isDebugEnabled()) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>        LOG.debug("Adding snapshot references for " + storeFiles  + " hfiles");<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      }<a name="line.225"></a>
-<span class="sourceLineNo">226</span><a name="line.226"></a>
-<span class="sourceLineNo">227</span>      // 2.2. iterate through all the store's files and create "references".<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      for (int i = 0, sz = storeFiles.size(); i &lt; sz; i++) {<a name="line.228"></a>
-<span class="sourceLineNo">229</span>        StoreFile storeFile = storeFiles.get(i);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>        monitor.rethrowException();<a name="line.230"></a>
-<span class="sourceLineNo">231</span><a name="line.231"></a>
-<span class="sourceLineNo">232</span>        // create "reference" to this store file.<a name="line.232"></a>
-<span class="sourceLineNo">233</span>        LOG.debug("Adding reference for file (" + (i+1) + "/" + sz + "): " + storeFile.getPath());<a name="line.233"></a>
-<span class="sourceLineNo">234</span>        visitor.storeFile(regionData, familyData, storeFile.getFileInfo());<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      }<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      visitor.familyClose(regionData, familyData);<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    }<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    visitor.regionClose(regionData);<a name="line.238"></a>
-<span class="sourceLineNo">239</span>  }<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span>  /**<a name="line.241"></a>
-<span class="sourceLineNo">242</span>   * Creates a 'manifest' for the specified region, by reading directly from the disk.<a name="line.242"></a>
-<span class="sourceLineNo">243</span>   * This is used by the "offline snapshot" when the table is disabled.<a name="line.243"></a>
-<span class="sourceLineNo">244</span>   */<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  public void addRegion(final Path tableDir, final HRegionInfo regionInfo) throws IOException {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    // 0. Get the ManifestBuilder/RegionVisitor<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    RegionVisitor visitor = createRegionVisitor(desc);<a name="line.247"></a>
-<span class="sourceLineNo">248</span><a name="line.248"></a>
-<span class="sourceLineNo">249</span>    boolean isMobRegion = MobUtils.isMobRegionInfo(regionInfo);<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    try {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      Path baseDir = tableDir;<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      // Open the RegionFS<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      if (isMobRegion) {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>        baseDir = FSUtils.getTableDir(MobUtils.getMobHome(conf), regionInfo.getTable());<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      }<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      HRegionFileSystem regionFs = HRegionFileSystem.openRegionFromFileSystem(conf, fs,<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        baseDir, regionInfo, true);<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      monitor.rethrowException();<a name="line.258"></a>
-<span class="sourceLineNo">259</span><a name="line.259"></a>
-<span class="sourceLineNo">260</span>      // 1. dump region meta info into the snapshot directory<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      LOG.debug("Storing region-info for snapshot.");<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      Object regionData = visitor.regionOpen(regionInfo);<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      monitor.rethrowException();<a name="line.263"></a>
-<span class="sourceLineNo">264</span><a name="line.264"></a>
-<span class="sourceLineNo">265</span>      // 2. iterate through all the stores in the region<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      LOG.debug("Creating references for hfiles");<a name="line.266"></a>
+<span class="sourceLineNo">217</span>    // Visit the region and add it to the manifest<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    addRegion(region, visitor);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>  }<a name="line.219"></a>
+<span class="sourceLineNo">220</span><a name="line.220"></a>
+<span class="sourceLineNo">221</span>  @VisibleForTesting<a name="line.221"></a>
+<span class="sourceLineNo">222</span>  protected void addRegion(final HRegion region, RegionVisitor visitor) throws IOException {<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    // 1. dump region meta info into the snapshot directory<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    LOG.debug("Storing '" + region + "' region-info for snapshot.");<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    Object regionData = visitor.regionOpen(region.getRegionInfo());<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    monitor.rethrowException();<a name="line.226"></a>
+<span class="sourceLineNo">227</span><a name="line.227"></a>
+<span class="sourceLineNo">228</span>    // 2. iterate through all the stores in the region<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    LOG.debug("Creating references for hfiles");<a name="line.229"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span>    for (Store store : region.getStores()) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      // 2.1. build the snapshot reference for the store<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      Object familyData = visitor.familyOpen(regionData,<a name="line.233"></a>
+<span class="sourceLineNo">234</span>          store.getColumnFamilyDescriptor().getName());<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      monitor.rethrowException();<a name="line.235"></a>
+<span class="sourceLineNo">236</span><a name="line.236"></a>
+<span class="sourceLineNo">237</span>      List&lt;StoreFile&gt; storeFiles = new ArrayList&lt;&gt;(store.getStorefiles());<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      if (LOG.isDebugEnabled()) {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>        LOG.debug("Adding snapshot references for " + storeFiles  + " hfiles");<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      }<a name="line.240"></a>
+<span class="sourceLineNo">241</span><a name="line.241"></a>
+<span class="sourceLineNo">242</span>      // 2.2. iterate through all the store's files and create "references".<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      for (int i = 0, sz = storeFiles.size(); i &lt; sz; i++) {<a name="line.243"></a>
+<span class="sourceLineNo">244</span>        StoreFile storeFile = storeFiles.get(i);<a name="line.244"></a>
+<span class="sourceLineNo">245</span>        monitor.rethrowException();<a name="line.245"></a>
+<span class="sourceLineNo">246</span><a name="line.246"></a>
+<span class="sourceLineNo">247</span>        // create "reference" to this store file.<a name="line.247"></a>
+<span class="sourceLineNo">248</span>        LOG.debug("Adding reference for file (" + (i+1) + "/" + sz + "): " + storeFile.getPath());<a name="line.248"></a>
+<span class="sourceLineNo">249</span>        visitor.storeFile(regionData, familyData, storeFile.getFileInfo());<a name="line.249"></a>
+<span class="sourceLineNo">250</span>      }<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      visitor.familyClose(regionData, familyData);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    }<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    visitor.regionClose(regionData);<a name="line.253"></a>
+<span class="sourceLineNo">254</span>  }<a name="line.254"></a>
+<span class="sourceLineNo">255</span><a name="line.255"></a>
+<span class="sourceLineNo">256</span>  /**<a name="line.256"></a>
+<span class="sourceLineNo">257</span>   * Creates a 'manifest' for the specified region, by reading directly from the disk.<a name="line.257"></a>
+<span class="sourceLineNo">258</span>   * This is used by the "offline snapshot" when the table is disabled.<a name="line.258"></a>
+<span class="sourceLineNo">259</span>   */<a name="line.259"></a>
+<span class="sourceLineNo">260</span>  public void addRegion(final Path tableDir, final HRegionInfo regionInfo) throws IOException {<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    // Get the ManifestBuilder/RegionVisitor<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    RegionVisitor visitor = createRegionVisitor(desc);<a name="line.262"></a>
+<span class="sourceLineNo">263</span><a name="line.263"></a>
+<span class="sourceLineNo">264</span>    // Visit the region and add it to the manifest<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    addRegion(tableDir, regionInfo, visitor);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>  }<a name="line.266"></a>
 <span class="sourceLineNo">267</span><a name="line.267"></a>
-<span class="sourceLineNo">268</span>      // This ensures that we have an atomic view of the directory as long as we have &lt; ls limit<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      // (batch size of the files in a directory) on the namenode. Otherwise, we get back the files<a name="line.269"></a>
-<span class="sourceLineNo">270</span>      // in batches and may miss files being added/deleted. This could be more robust (iteratively<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      // checking to see if we have all the files until we are sure), but the limit is currently<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      // 1000 files/batch, far more than the number of store files under a single column family.<a name="line.272"></a>
-<span class="sourceLineNo">273</span>      Collection&lt;String&gt; familyNames = regionFs.getFamilies();<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      if (familyNames != null) {<a name="line.274"></a>
-<span class="sourceLineNo">275</span>        for (String familyName: familyNames) {<a name="line.275"></a>
-<span class="sourceLineNo">276</span>          Object familyData = visitor.familyOpen(regionData, Bytes.toBytes(familyName));<a name="line.276"></a>
-<span class="sourceLineNo">277</span>          monitor.rethrowException();<a name="line.277"></a>
-<span class="sourceLineNo">278</span><a name="line.278"></a>
-<span class="sourceLineNo">279</span>          Collection&lt;StoreFileInfo&gt; storeFiles = regionFs.getStoreFiles(familyName);<a name="line.279"></a>
-<span class="sourceLineNo">280</span>          if (storeFiles == null) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>            if (LOG.isDebugEnabled()) {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>              LOG.debug("No files under family: " + familyName);<a name="line.282"></a>
-<span class="sourceLineNo">283</span>            }<a name="line.283"></a>
-<span class="sourceLineNo">284</span>            continue;<a name="line.284"></a>
-<span class="sourceLineNo">285</span>          }<a name="line.285"></a>
+<span class="sourceLineNo">268</span>  @VisibleForTesting<a name="line.268"></a>
+<span class="sourceLineNo">269</span>  protected void addRegion(final Path tableDir, final HRegionInfo regionInfo, RegionVisitor visitor)<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      throws IOException {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    boolean isMobRegion = MobUtils.isMobRegionInfo(regionInfo);<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    try {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      Path baseDir = tableDir;<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      // Open the RegionFS<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      if (isMobRegion) {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>        baseDir = FSUtils.getTableDir(MobUtils.getMobHome(conf), regionInfo.getTable());<a name="line.276"></a>
+<span class="sourceLineNo">277</span>      }<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      HRegionFileSystem regionFs = HRegionFileSystem.openRegionFromFileSystem(conf, fs,<a name="line.278"></a>
+<span class="sourceLineNo">279</span>        baseDir, regionInfo, true);<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      monitor.rethrowException();<a name="line.280"></a>
+<span class="sourceLineNo">281</span><a name="line.281"></a>
+<span class="sourceLineNo">282</span>      // 1. dump region meta info into the snapshot directory<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      LOG.debug("Storing region-info for snapshot.");<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      Object regionData = visitor.regionOpen(regionInfo);<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      monitor.rethrowException();<a name="line.285"></a>
 <span class="sourceLineNo">286</span><a name="line.286"></a>
-<span class="sourceLineNo">287</span>          // 2.1. build the snapshot reference for the store<a name="line.287"></a>
-<span class="sourceLineNo">288</span>          // iterate through all the store's files and create "references".<a name="line.288"></a>
-<span class="sourceLineNo">289</span>          addReferenceFiles(visitor, regionData, familyData, storeFiles, false);<a name="line.289"></a>
-<span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span>          visitor.familyClose(regionData, familyData);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>        }<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      }<a name="line.293"></a>
-<span class="sourceLineNo">294</span>      visitor.regionClose(regionData);<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    } catch (IOException e) {<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      // the mob directory might not be created yet, so do nothing when it is a mob region<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      if (!isMobRegion) {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        throw e;<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      }<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    }<a name="line.300"></a>
-<span class="sourceLineNo">301</span>  }<a name="line.301"></a>
-<span class="sourceLineNo">302</span><a name="line.302"></a>
-<span class="sourceLineNo">303</span>  private List&lt;StoreFileInfo&gt; getStoreFiles(Path storeDir) throws IOException {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    FileStatus[] stats = FSUtils.listStatus(fs, storeDir);<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    if (stats == null) return null;<a name="line.305"></a>
-<span class="sourceLineNo">306</span><a name="line.306"></a>
-<span class="sourceLineNo">307</span>    ArrayList&lt;StoreFileInfo&gt; storeFiles = new ArrayList&lt;&gt;(stats.length);<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    for (int i = 0; i &lt; stats.length; ++i) {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      storeFiles.add(new StoreFileInfo(conf, fs, stats[i]));<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    }<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    return storeFiles;<a name="line.311"></a>
-<span class="sourceLineNo">312</span>  }<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>  private void addReferenceFiles(RegionVisitor visitor, Object regionData, Object familyData,<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      Collection&lt;StoreFileInfo&gt; storeFiles, boolean isMob) throws IOException {<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    final String fileType = isMob ? "mob file" : "hfile";<a name="line.316"></a>
-<span class="sourceLineNo">317</span><a name="line.317"></a>
-<span class="sourceLineNo">318</span>    if (LOG.isDebugEnabled()) {<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      LOG.debug(String.format("Adding snapshot references for %s %ss", storeFiles, fileType));<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    }<a name="line.320"></a>
-<span class="sourceLineNo">321</span><a name="line.321"></a>
-<span class="sourceLineNo">322</span>    int i = 0;<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    int sz = storeFiles.size();<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    for (StoreFileInfo storeFile: storeFiles) {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>      monitor.rethrowException();<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span>      LOG.debug(String.format("Adding reference for %s (%d/%d): %s",<a name="line.327"></a>
-<span class="sourceLineNo">328</span>          fileType, ++i, sz, storeFile.getPath()));<a name="line.328"></a>
-<span class="sourceLineNo">329</span><a name="line.329"></a>
-<span class="sourceLineNo">330</span>      // create "reference" to this store file.<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      visitor.storeFile(regionData, familyData, storeFile);<a name="line.331"></a>
+<span class="sourceLineNo">287</span>      // 2. iterate through all the stores in the region<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      LOG.debug("Creating references for hfiles");<a name="line.288"></a>
+<span class="sourceLineNo">289</span><a name="line.289"></a>
+<span class="sourceLineNo">290</span>      // This ensures that we have an atomic view of the directory as long as we have &lt; ls limit<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      // (batch size of the files in a directory) on the namenode. Otherwise, we get back the files<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      // in batches and may miss files being added/deleted. This could be more robust (iteratively<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      // checking to see if we have all the files until we are sure), but the limit is currently<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      // 1000 files/batch, far more than the number of store files under a single column family.<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      Collection&lt;String&gt; familyNames = regionFs.getFamilies();<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      if (familyNames != null) {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>        for (String familyName: familyNames) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>          Object familyData = visitor.familyOpen(regionData, Bytes.toBytes(familyName));<a name="line.298"></a>
+<span class="sourceLineNo">299</span>          monitor.rethrowException();<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span>          Collection&lt;StoreFileInfo&gt; storeFiles = regionFs.getStoreFiles(familyName);<a name="line.301"></a>
+<span class="sourceLineNo">302</span>          if (storeFiles == null) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>            if (LOG.isDebugEnabled()) {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>              LOG.debug("No files under family: " + familyName);<a name="line.304"></a>
+<span class="sourceLineNo">305</span>            }<a name="line.305"></a>
+<span class="sourceLineNo">306</span>            continue;<a name="line.306"></a>
+<span class="sourceLineNo">307</span>          }<a name="line.307"></a>
+<span class="sourceLineNo">308</span><a name="line.308"></a>
+<span class="sourceLineNo">309</span>          // 2.1. build the snapshot reference for the store<a name="line.309"></a>
+<span class="sourceLineNo">310</span>          // iterate through all the store's files and create "references".<a name="line.310"></a>
+<span class="sourceLineNo">311</span>          addReferenceFiles(visitor, regionData, familyData, storeFiles, false);<a name="line.311"></a>
+<span class="sourceLineNo">312</span><a name="line.312"></a>
+<span class="sourceLineNo">313</span>          visitor.familyClose(regionData, familyData);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>        }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      }<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      visitor.regionClose(regionData);<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    } catch (IOException e) {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      // the mob directory might not be created yet, so do nothing when it is a mob region<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      if (!isMobRegion) {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>        throw e;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      }<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    }<a name="line.322"></a>
+<span class="sourceLineNo">323</span>  }<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>  private List&lt;StoreFileInfo&gt; getStoreFiles(Path storeDir) throws IOException {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    FileStatus[] stats = FSUtils.listStatus(fs, storeDir);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    if (stats == null) return null;<a name="line.327"></a>
+<span class="sourceLineNo">328</span><a name="line.328"></a>
+<span class="sourceLineNo">329</span>    ArrayList&lt;StoreFileInfo&gt; storeFiles = new ArrayList&lt;&gt;(stats.length);<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    for (int i = 0; i &lt; stats.length; ++i) {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      storeFiles.add(new StoreFileInfo(conf, fs, stats[i]));<a name="line.331"></a>
 <span class="sourceLineNo">332</span>    }<a name="line.332"></a>
-<span class="sourceLineNo">333</span>  }<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span>  /**<a name="line.335"></a>
-<span class="sourceLineNo">336</span>   * Load the information in the SnapshotManifest. Called by SnapshotManifest.open()<a name="line.336"></a>
-<span class="sourceLineNo">337</span>   *<a name="line.337"></a>
-<span class="sourceLineNo">338</span>   * If the format is v2 and there is no data-manifest, means that we are loading an<a name="line.338"></a>
-<span class="sourceLineNo">339</span>   * in-progress snapshot. Since we support rolling-upgrades, we loook for v1 and v2<a name="line.339"></a>
-<span class="sourceLineNo">340</span>   * regions format.<a name="line.340"></a>
-<span class="sourceLineNo">341</span>   */<a name="line.341"></a>
-<span class="sourceLineNo">342</span>  private void load() throws IOException {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>    switch (getSnapshotFormat(desc)) {<a name="line.343"></a>
-<span class="sourceLineNo">344</span>      case SnapshotManifestV1.DESCRIPTOR_VERSION: {<a name="line.344"></a>
-<span class="sourceLineNo">345</span>        this.htd = FSTableDescriptors.getTableDescriptorFromFs(fs, workingDir);<a name="line.345"></a>
-<span class="sourceLineNo">346</span>        ThreadPoolExecutor tpool = createExecutor("SnapshotManifestLoader");<a name="line.346"></a>
-<span class="sourceLineNo">347</span>        try {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>          this.regionManifests =<a name="line.348"></a>
-<span class="sourceLineNo">349</span>            SnapshotManifestV1.loadRegionManifests(conf, tpool, fs, workingDir, desc);<a name="line.349"></a>
-<span class="sourceLineNo">350</span>        } finally {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>          tpool.shutdown();<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        }<a name="line.352"></a>
-<span class="sourceLineNo">353</span>        break;<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      }<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      case SnapshotManifestV2.DESCRIPTOR_VERSION: {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>        SnapshotDataManifest dataManifest = readDataManifest();<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        if (dataManifest != null) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>          htd = ProtobufUtil.convertToHTableDesc(dataManifest.getTableSchema());<a name="line.358"></a>
-<span class="sourceLineNo">359</span>          regionManifests = dataManifest.getRegionManifestsList();<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        } else {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>          // Compatibility, load the v1 regions<a name="line.361"></a>
-<span class="sourceLineNo">362</span>          // This happens only when the snapshot is in-progress and the cache wants to refresh.<a name="line.362"></a>
-<span class="sourceLineNo">363</span>          List&lt;SnapshotRegionManifest&gt; v1Regions, v2Regions;<a name="line.363"></a>
-<span class="sourceLineNo">364</span>          ThreadPoolExecutor tpool = createExecutor("SnapshotManifestLoader");<a name="line.364"></a>
-<span class="sourceLineNo">365</span>          try {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>            v1Regions = SnapshotManifestV1.loadRegionManifests(conf, tpool, fs, workingDir, desc);<a name="line.366"></a>
-<span class="sourceLineNo">367</span>            v2Regions = SnapshotManifestV2.loadRegionManifests(conf, tpool, fs, workingDir, desc,<a name="line.367"></a>
-<span class="sourceLineNo">368</span>                manifestSizeLimit);<a name="line.368"></a>
-<span class="sourceLineNo">369</span>          } catch (InvalidProtocolBufferException e) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>            throw new CorruptedSnapshotException("unable to parse region manifest " +<a name="line.370"></a>
-<span class="sourceLineNo">371</span>                e.getMessage(), e);<a name="line.371"></a>
-<span class="sourceLineNo">372</span>          } finally {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>            tpool.shutdown();<a name="line.373"></a>
-<span class="sourceLineNo">374</span>          }<a name="line.374"></a>
-<span class="sourceLineNo">375</span>          if (v1Regions != null &amp;&amp; v2Regions != null) {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>            regionManifests = new ArrayList&lt;&gt;(v1Regions.size() + v2Regions.size());<a name="line.376"></a>
-<span class="sourceLineNo">377</span>            regionManifests.addAll(v1Regions);<a name="line.377"></a>
-<span class="sourceLineNo">378</span>            regionManifests.addAll(v2Regions);<a name="line.378"></a>
-<span class="sourceLineNo">379</span>          } else if (v1Regions != null) {<a name="line.379"></a>
-<span class="sourceLineNo">380</span>            regionManifests = v1Regions;<a name="line.380"></a>
-<span class="sourceLineNo">381</span>          } else /* if (v2Regions != null) */ {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>            regionManifests = v2Regions;<a name="line.382"></a>
-<span class="sourceLineNo">383</span>          }<a name="line.383"></a>
-<span class="sourceLineNo">384</span>        }<a name="line.384"></a>
-<span class="sourceLineNo">385</span>        break;<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      }<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      default:<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      throw new CorruptedSnapshotException("Invalid Snapshot version: " + desc.getVersion(),<a name="line.388"></a>
-<span class="sourceLineNo">389</span>        ProtobufUtil.createSnapshotDesc(desc));<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    }<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  }<a name="line.391"></a>
-<span class="sourceLineNo">392</span><a name="line.392"></a>
-<span class="sourceLineNo">393</span>  /**<a name="line.393"></a>
-<span class="sourceLineNo">394</span>   * Get the current snapshot working dir<a name="line.394"></a>
-<span class="sourceLineNo">395</span>   */<a name="line.395"></a>
-<span class="sourceLineNo">396</span>  public Path getSnapshotDir() {<a name="line.396"></a>
-<span class="sourceLineNo">397</span>    return this.workingDir;<a name="line.397"></a>
-<span class="sourceLineNo">398</span>  }<a name="line.398"></a>
-<span class="sourceLineNo">399</span><a name="line.399"></a>
-<span class="sourceLineNo">400</span>  /**<a name="line.400"></a>
-<span class="sourceLineNo">401</span>   * Get the SnapshotDescription<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   */<a name="line.402"></a>
-<span class="sourceLineNo">403</span>  public SnapshotDescription getSnapshotDescription() {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    return this.desc;<a name="line.404"></a>
-<span class="sourceLineNo">405</span>  }<a name="line.405"></a>
-<span class="sourceLineNo">406</span><a name="line.406"></a>
-<span class="sourceLineNo">407</span>  /**<a name="line.407"></a>
-<span class="sourceLineNo">408</span>   * Get the table descriptor from the Snapshot<a name="line.408"></a>
-<span class="sourceLineNo">409</span>   */<a name="line.409"></a>
-<span class="sourceLineNo">410</span>  public HTableDescriptor getTableDescriptor() {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    return this.htd;<a name="line.411"></a>
-<span class="sourceLineNo">412</span>  }<a name="line.412"></a>
-<span class="sourceLineNo">413</span><a name="line.413"></a>
-<span class="sourceLineNo">414</span>  /**<a name="line.414"></a>
-<span class="sourceLineNo">415</span>   * Get all the Region Manifest from the snapshot<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   */<a name="line.416"></a>
-<span class="sourceLineNo">417</span>  public List&lt;SnapshotRegionManifest&gt; getRegionManifests() {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    return this.regionManifests;<a name="line.418"></a>
-<span class="sourceLineNo">419</span>  }<a name="line.419"></a>
-<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span>  /**<a name="line.421"></a>
-<span class="sourceLineNo">422</span>   * Get all the Region Manifest from the snapshot.<a name="line.422"></a>
-<span class="sourceLineNo">423</span>   * This is an helper to get a map with the region encoded name<a name="line.423"></a>
+<span class="sourceLineNo">333</span>    return storeFiles;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>  }<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span>  private void addReferenceFiles(RegionVisitor visitor, Object regionData, Object familyData,<a name="line.336"></a>
+<span class="sourceLineNo">337</span>      Collection&lt;StoreFileInfo&gt; storeFiles, boolean isMob) throws IOException {<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    final String fileType = isMob ? "mob file" : "hfile";<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span>    if (LOG.isDebugEnabled()) {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      LOG.debug(String.format("Adding snapshot references for %s %ss", storeFiles, fileType));<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    }<a name="line.342"></a>
+<span class="sourceLineNo">343</span><a name="line.343"></a>
+<span class="sourceLineNo">344</span>    int i = 0;<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    int sz = storeFiles.size();<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    for (StoreFileInfo storeFile: storeFiles) {<a name="line.346"></a>
+<span class="sourceLineNo">347</span>      monitor.rethrowException();<a name="line.347"></a>
+<span class="sourceLineNo">348</span><a name="line.348"></a>
+<span class="sourceLineNo">349</span>      LOG.debug(String.format("Adding reference for %s (%d/%d): %s",<a name="line.349"></a>
+<span class="sourceLineNo">350</span>          fileType, ++i, sz, storeFile.getPath()));<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span>      // create "reference" to this store file.<a name="line.352"></a>
+<span class="sourceLineNo">353</span>      visitor.storeFile(regionData, familyData, storeFile);<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    }<a name="line.354"></a>
+<span class="sourceLineNo">355</span>  }<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>  /**<a name="line.357"></a>
+<span class="sourceLineNo">358</span>   * Load the information in the SnapshotManifest. Called by SnapshotManifest.open()<a name="line.358"></a>
+<span class="sourceLineNo">359</span>   *<a name="line.359"></a>
+<span class="sourceLineNo">360</span>   * If the format is v2 and there is no data-manifest, means that we are loading an<a name="line.360"></a>
+<span class="sourceLineNo">361</span>   * in-progress snapshot. Since we support rolling-upgrades, we loook for v1 and v2<a name="line.361"></a>
+<span class="sourceLineNo">362</span>   * regions format.<a name="line.362"></a>
+<span class="sourceLineNo">363</span>   */<a name="line.363"></a>
+<span class="sourceLineNo">364</span>  private void load() throws IOException {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    switch (getSnapshotFormat(desc)) {<a name="line.365"></a>
+<span class="sourceLineNo">366</span>      case SnapshotManifestV1.DESCRIPTOR_VERSION: {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>        this.htd = FSTableDescriptors.getTableDescriptorFromFs(fs, workingDir);<a name="line.367"></a>
+<span class="sourceLineNo">368</span>        ThreadPoolExecutor tpool = createExecutor("SnapshotManifestLoader");<a name="line.368"></a>
+<span class="sourceLineNo">369</span>        try {<a name="line.369"></a>
+<span class="sourceLineNo">370</span>          this.regionManifests =<a name="line.370"></a>
+<span class="sourceLineNo">371</span>            SnapshotManifestV1.loadRegionManifests(conf, tpool, fs, workingDir, desc);<a name="line.371"></a>
+<span class="sourceLineNo">372</span>        } finally {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>          tpool.shutdown();<a name="line.373"></a>
+<span class="sourceLineNo">374</span>        }<a name="line.374"></a>
+<span class="sourceLineNo">375</span>        break;<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      }<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      case SnapshotManifestV2.DESCRIPTOR_VERSION: {<a name="line.377"></a>
+<span class="sourceLineNo">378</span>        SnapshotDataManifest dataManifest = readDataManifest();<a name="line.378"></a>
+<span class="sourceLineNo">379</span>        if (dataManifest != null) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>          htd = ProtobufUtil.convertToHTableDesc(dataManifest.getTableSchema());<a name="line.380"></a>
+<span class="sourceLineNo">381</span>          regionManifests = dataManifest.getRegionManifestsList();<a name="line.381"></a>
+<span class="sourceLineNo">382</span>        } else {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>          // Compatibility, load the v1 regions<a name="line.383"></a>
+<span class="sourceLineNo">384</span>          // This happens only when the snapshot is in-progress and the cache wants to refresh.<a name="line.384"></a>
+<span class="sourceLineNo">385</span>          List&lt;SnapshotRegionManifest&gt; v1Regions, v2Regions;<a name="line.385"></a>
+<span class="sourceLineNo">386</span>          ThreadPoolExecutor tpool = createExecutor("SnapshotManifestLoader");<a name="line.386"></a>
+<span class="sourceLineNo">387</span>          try {<a name="line.387"></a>
+<span class="sourceLineNo">388</span>            v1Regions = SnapshotManifestV1.loadRegionManifests(conf, tpool, fs, workingDir, desc);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>            v2Regions = SnapshotManifestV2.loadRegionManifests(conf, tpool, fs, workingDir, desc,<a name="line.389"></a>
+<span class="sourceLineNo">390</span>                manifestSizeLimit);<a name="line.390"></a>
+<span class="sourceLineNo">391</span>          } catch (InvalidProtocolBufferException e) {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>            throw new CorruptedSnapshotException("unable to parse region manifest " +<a name="line.392"></a>
+<span class="sourceLineNo">393</span>                e.getMessage(), e);<a name="line.393"></a>
+<span class="sourceLineNo">394</span>          } finally {<a name="line.394"></a>
+<span class="sourceLineNo">395</span>            tpool.shutdown();<a name="line.395"></a>
+<span class="sourceLineNo">396</span>          }<a name="line.396"></a>
+<span class="sourceLineNo">397</span>          if (v1Regions != null &amp;&amp; v2Regions != null) {<a name="line.397"></a>
+<span class="sourceLineNo">398</span>            regionManifests = new ArrayList&lt;&gt;(v1Regions.size() + v2Regions.size());<a name="line.398"></a>
+<span class="sourceLineNo">399</span>            regionManifests.addAll(v1Regions);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>            regionManifests.addAll(v2Regions);<a name="line.400"></a>
+<span class="sourceLineNo">401</span>          } else if (v1Regions != null) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>            regionManifests = v1Regions;<a name="line.402"></a>
+<span class="sourceLineNo">403</span>          } else /* if (v2Regions != null) */ {<a name="line.403"></a>
+<span class="sourceLineNo">404</span>            regionManifests = v2Regions;<a name="line.404"></a>
+<span class="sourceLineNo">405</span>          }<a name="line.405"></a>
+<span class="sourceLineNo">406</span>        }<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        break;<a name="line.407"></a>
+<span class="sourceLineNo">408</span>      }<a name="line.408"></a>
+<span class="sourceLineNo">409</span>      default:<a name="line.409"></a>
+<span class="sourceLineNo">410</span>      throw new CorruptedSnapshotException("Invalid Snapshot version: " + desc.getVersion(),<a name="line.410"></a>
+<span class="sourceLineNo">411</span>        ProtobufUtil.createSnapshotDesc(desc));<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    }<a name="line.412"></a>
+<span class="sourceLineNo">413</span>  }<a name="line.413"></a>
+<span class="sourceLineNo">414</span><a name="line.414"></a>
+<span class="sourceLineNo">415</span>  /**<a name="line.415"></a>
+<span class="sourceLineNo">416</span>   * Get the current snapshot working dir<a name="line.416"></a>
+<span class="sourceLineNo">417</span>   */<a name="line.417"></a>
+<span class="sourceLineNo">418</span>  public Path getSnapshotDir() {<a name="line.418"></a>
+<span class="sourceLineNo">419</span>    return this.workingDir;<a name="line.419"></a>
+<span class="sourceLineNo">420</span>  }<a name="line.420"></a>
+<span class="sourceLineNo">421</span><a name="line.421"></a>
+<span class="sourceLineNo">422</span>  /**<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   * Get the SnapshotDescription<a name="line.423"></a>
 <span class="sourceLineNo">424</span>   */<a name="line.424"></a>
-<span class="sourceLineNo">425</span>  public Map&lt;String, SnapshotRegionManifest&gt; getRegionManifestsMap() {<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    if (regionManifests == null || regionManifests.isEmpty()) return null;<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span>    HashMap&lt;String, SnapshotRegionManifest&gt; regionsMap = new HashMap&lt;&gt;(regionManifests.size());<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    for (SnapshotRegionManifest manifest: regionManifests) {<a name="line.429"></a>
-<span class="sourceLineNo">430</span>      String regionName = getRegionNameFromManifest(manifest);<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      regionsMap.put(regionName, manifest);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    }<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    return regionsMap;<a name="line.433"></a>
+<span class="sourceLineNo">425</span>  public SnapshotDescription getSnapshotDescription() {<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    return this.desc;<a name="line.426"></a>
+<span class="sourceLineNo">427</span>  }<a name="line.427"></a>
+<span class="sourceLineNo">428</span><a name="line.428"></a>
+<span class="sourceLineNo">429</span>  /**<a name="line.429"></a>
+<span class="sourceLineNo">430</span>   * Get the table descriptor from the Snapshot<a name="line.430"></a>
+<span class="sourceLineNo">431</span>   */<a name="line.431"></a>
+<span class="sourceLineNo">432</span>  public HTableDescriptor getTableDescriptor() {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    return this.htd;<a name="line.433"></a>
 <span class="sourceLineNo">434</span>  }<a name="line.434"></a>
 <span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span>  public void consolidate() throws IOException {<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    if (getSnapshotFormat(desc) == SnapshotManifestV1.DESCRIPTOR_VERSION) {<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      Path rootDir = FSUtils.getRootDir(conf);<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      LOG.info("Using old Snapshot Format");<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      // write a copy of descriptor to the snapshot directory<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      new FSTableDescriptors(conf, fs, rootDir)<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        .createTableDescriptorForTableDirectory(workingDir, htd, false);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    } else {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      LOG.debug("Convert to Single Snapshot Manifest");<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      convertToV2SingleManifest();<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    }<a name="line.446"></a>
-<span class="sourceLineNo">447</span>  }<a name="line.447"></a>
-<span class="sourceLineNo">448</span><a name="line.448"></a>
-<span class="sourceLineNo">449</span>  /*<a name="line.449"></a>
-<span class="sourceLineNo">450</span>   * In case of rolling-upgrade, we try to read all the formats and build<a name="line.450"></a>
-<span class="sourceLineNo">451</span>   * the snapshot with the latest format.<a name="line.451"></a>
-<span class="sourceLineNo">452</span>   */<a name="line.452"></a>
-<span class="sourceLineNo">453</span>  private void convertToV2SingleManifest() throws IOException {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    // Try to load v1 and v2 regions<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    List&lt;SnapshotRegionManifest&gt; v1Regions, v2Regions;<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    ThreadPoolExecutor tpool = createExecutor("SnapshotManifestLoader");<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    try {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      v1Regions = SnapshotManifestV1.loadRegionManifests(conf, tpool, fs, workingDir, desc);<a name="line.458"></a>
-<span class="sourceLineNo">459</span>      v2Regions = SnapshotManifestV2.loadRegionManifests(conf, tpool, fs, workingDir, desc,<a name="line.459"></a>
-<span class="sourceLineNo">460</span>          manifestSizeLimit);<a name="line.460"></a>
-<span class="sourceLineNo">461</span>    } finally {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      tpool.shutdown();<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    }<a name="line.463"></a>
-<span class="sourceLineNo">464</span><a name="line.464"></a>
-<span class="sourceLineNo">465</span>    SnapshotDataManifest.Builder dataManifestBuilder = SnapshotDataManifest.newBuilder();<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    dataManifestBuilder.setTableSchema(ProtobufUtil.convertToTableSchema(htd));<a name="line.466"></a>
-<span class="sourceLineNo">467</span><a name="line.467"></a>
-<span class="sourceLineNo">468</span>    if (v1Regions != null &amp;&amp; v1Regions.size() &gt; 0) {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      dataManifestBuilder.addAllRegionManifests(v1Regions);<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    }<a name="line.470"></a>
-<span class="sourceLineNo">471</span>    if (v2Regions != null &amp;&amp; v2Regions.size() &gt; 0) {<a name="line.471"></a>
-<span class="sourceLineNo">472</span>      dataManifestBuilder.addAllRegionManifests(v2Regions);<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    }<a name="line.473"></a>
-<span class="sourceLineNo">474</span><a name="line.474"></a>
-<span class="sourceLineNo">475</span>    // Write the v2 Data Manifest.<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    // Once the data-manifest is written, the snapshot can be considered complete.<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    // Currently snapshots are written in a "temporary" directory and later<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    // moved to the "complated" snapshot directory.<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    SnapshotDataManifest dataManifest = dataManifestBuilder.build();<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    writeDataManifest(dataManifest);<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    this.regionManifests = dataManifest.getRegionManifestsList();<a name="line.481"></a>
-<span class="sourceLineNo">482</span><a name="line.482"></a>
-<span class="sourceLineNo">483</span>    // Remove the region manifests. Everything is now in the data-manifest.<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    // The delete operation is "relaxed", unless we get an exception we keep going.<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    // The extra files in the snapshot directory will not give any problem,<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    // since they have the same content as the data manifest, and even by re-reading<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    // them we will get the same information.<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    if (v1Regions != null &amp;&amp; v1Regions.size() &gt; 0) {<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      for (SnapshotRegionManifest regionManifest: v1Regions) {<a name="line.489"></a>
-<span class="sourceLineNo">490</span>        SnapshotManifestV1.deleteRegionManifest(fs, workingDir, regionManifest);<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      }<a name="line.491"></a>
+<span class="sourceLineNo">436</span>  /**<a name="line.436"></a>
+<span class="sourceLineNo">437</span>   * Get all the Region Manifest from the snapshot<a name="line.437"></a>
+<span class="sourceLineNo">438</span>   */<a name="line.438"></a>
+<span class="sourceLineNo">439</span>  public List&lt;SnapshotRegionManifest&gt; getRegionManifests() {<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    return this.regionManifests;<a name="line.440"></a>
+<span class="sourceLineNo">441</span>  }<a name="line.441"></a>
+<span class="sourceLineNo">442</span><a name="line.442"></a>
+<span class="sourceLineNo">443</span>  /**<a name="line.443"></a>
+<span class="sourceLineNo">444</span>   * Get all the Region Manifest from the snapshot.<a name="line.444"></a>
+<span class="sourceLineNo">445</span>   * This is an helper to get a map with the region encoded name<a name="line.445"></a>
+<span class="sourceLineNo">446</span>   */<a name="line.446"></a>
+<span class="sourceLineNo">447</span>  public Map&lt;String, SnapshotRegionManifest&gt; getRegionManifestsMap() {<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    if (regionManifests == null || regionManifests.isEmpty()) return null;<a name="line.448"></a>
+<span class="sourceLineNo">449</span><a name="line.449"></a>
+<span class="sourceLineNo">450</span>    HashMap&lt;String, SnapshotRegionManifest&gt; regionsMap = new HashMap&lt;&gt;(regionManifests.size());<a name="line.450"></a>
+<span class="sourceLineNo">451</span>    for (SnapshotRegionManifest manifest: regionManifests) {<a name="line.451"></a>
+<span class="sourceLineNo">452</span>      String regionName = getRegionNameFromManifest(manifest);<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      regionsMap.put(regionName, manifest);<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    }<a name="line.454"></a>
+<span class="sourceLineNo">455</span>    return regionsMap;<a name="line.455"></a>
+<span class="sourceLineNo">456</span>  }<a name="line.456"></a>
+<span class="sourceLineNo">457</span><a name="line.457"></a>
+<span class="sourceLineNo">458</span>  public void consolidate() throws IOException {<a name="line.458"></a>
+<span class="sourceLineNo">459</span>    if (getSnapshotFormat(desc) == SnapshotManifestV1.DESCRIPTOR_VERSION) {<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      Path rootDir = FSUtils.getRootDir(conf);<a name="line.460"></a>
+<span class="sourceLineNo">461</span>      LOG.info("Using old Snapshot Format");<a name="line.461"></a>
+<span class="sourceLineNo">462</span>      // write a copy of descriptor to the snapshot directory<a name="line.462"></a>
+<span class="sourceLineNo">463</span>      new FSTableDescriptors(conf, fs, rootDir)<a name="line.463"></a>
+<span class="sourceLineNo">464</span>        .createTableDescriptorForTableDirectory(workingDir, htd, false);<a name="line.464"></a>
+<span class="sourceLineNo">465</span>    } else {<a name="line.465"></a>
+<span class="sourceLineNo">466</span>      LOG.debug("Convert to Single Snapshot Manifest");<a name="line.466"></a>
+<span class="sourceLineNo">467</span>      convertToV2SingleManifest();<a name="line.467"></a>
+<span class="sourceLineNo">468</span>    }<a name="line.468"></a>
+<span class="sourceLineNo">469</span>  }<a name="line.469"></a>
+<span class="sourceLineNo">470</span><a name="line.470"></a>
+<span class="sourceLineNo">471</span>  /*<a name="line.471"></a>
+<span class="sourceLineNo">472</span>   * In case of rolling-upgrade, we try to read all the formats and build<a name="line.472"></a>
+<span class="sourceLineNo">473</span>   * the snapshot with the latest format.<a name="line.473"></a>
+<span class="sourceLineNo">474</span>   */<a name="line.474"></a>
+<span class="sourceLineNo">475</span>  private void convertToV2SingleManifest() throws IOException {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    // Try to load v1 and v2 regions<a name="line.476"></a>
+<span class="sourceLineNo">477</span>    List&lt;SnapshotRegionManifest&gt; v1Regions, v2Regions;<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    ThreadPoolExecutor tpool = createExecutor("SnapshotManifestLoader");<a name="line.478"></a>
+<span class="sourceLineNo">479</span>    try {<a name="line.479"></a>
+<span class="sourceLineNo">480</span>      v1Regions = SnapshotManifestV1.loadRegionManifests(conf, tpool, fs, workingDir, desc);<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      v2Regions = SnapshotManifestV2.loadRegionManifests(conf, tpool, fs, workingDir, desc,<a name="line.481"></a>
+<span class="sourceLineNo">482</span>          manifestSizeLimit);<a name="line.482"></a>
+<span class="sourceLineNo">483</span>    } finally {<a name="line.483"></a>
+<span class="sourceLineNo">484</span>      tpool.shutdown();<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    }<a name="line.485"></a>
+<span class="sourceLineNo">486</span><a name="line.486"></a>
+<span class="sourceLineNo">487</span>    SnapshotDataManifest.Builder dataManifestBuilder = SnapshotDataManifest.newBuilder();<a name="line.487"></a>
+<span class="sourceLineNo">488</span>    dataManifestBuilder.setTableSchema(ProtobufUtil.convertToTableSchema(htd));<a name="line.488"></a>
+<span class="sourceLineNo">489</span><a name="line.489"></a>
+<span class="source

<TRUNCATED>

[07/33] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/Region.RowLock.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/Region.RowLock.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/Region.RowLock.html
index b361c26..53efdb2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/Region.RowLock.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/Region.RowLock.html
@@ -255,7 +255,7 @@
 <span class="sourceLineNo">247</span>   */<a name="line.247"></a>
 <span class="sourceLineNo">248</span>  enum Operation {<a name="line.248"></a>
 <span class="sourceLineNo">249</span>    ANY, GET, PUT, DELETE, SCAN, APPEND, INCREMENT, SPLIT_REGION, MERGE_REGION, BATCH_MUTATE,<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    REPLAY_BATCH_MUTATE, COMPACT_REGION, REPLAY_EVENT<a name="line.250"></a>
+<span class="sourceLineNo">250</span>    REPLAY_BATCH_MUTATE, COMPACT_REGION, REPLAY_EVENT, SNAPSHOT<a name="line.250"></a>
 <span class="sourceLineNo">251</span>  }<a name="line.251"></a>
 <span class="sourceLineNo">252</span><a name="line.252"></a>
 <span class="sourceLineNo">253</span>  /**<a name="line.253"></a>
@@ -285,487 +285,494 @@
 <span class="sourceLineNo">277</span>   */<a name="line.277"></a>
 <span class="sourceLineNo">278</span>  void closeRegionOperation() throws IOException;<a name="line.278"></a>
 <span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span>  // Row write locks<a name="line.280"></a>
-<span class="sourceLineNo">281</span><a name="line.281"></a>
-<span class="sourceLineNo">282</span>  /**<a name="line.282"></a>
-<span class="sourceLineNo">283</span>   * Row lock held by a given thread.<a name="line.283"></a>
-<span class="sourceLineNo">284</span>   * One thread may acquire multiple locks on the same row simultaneously.<a name="line.284"></a>
-<span class="sourceLineNo">285</span>   * The locks must be released by calling release() from the same thread.<a name="line.285"></a>
-<span class="sourceLineNo">286</span>   */<a name="line.286"></a>
-<span class="sourceLineNo">287</span>  public interface RowLock {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    /**<a name="line.288"></a>
-<span class="sourceLineNo">289</span>     * Release the given lock.  If there are no remaining locks held by the current thread<a name="line.289"></a>
-<span class="sourceLineNo">290</span>     * then unlock the row and allow other threads to acquire the lock.<a name="line.290"></a>
-<span class="sourceLineNo">291</span>     * @throws IllegalArgumentException if called by a different thread than the lock owning<a name="line.291"></a>
-<span class="sourceLineNo">292</span>     *     thread<a name="line.292"></a>
-<span class="sourceLineNo">293</span>     */<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    void release();<a name="line.294"></a>
-<span class="sourceLineNo">295</span>  }<a name="line.295"></a>
-<span class="sourceLineNo">296</span><a name="line.296"></a>
-<span class="sourceLineNo">297</span>  /**<a name="line.297"></a>
-<span class="sourceLineNo">298</span>   *<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   * Get a row lock for the specified row. All locks are reentrant.<a name="line.299"></a>
-<span class="sourceLineNo">300</span>   *<a name="line.300"></a>
-<span class="sourceLineNo">301</span>   * Before calling this function make sure that a region operation has already been<a name="line.301"></a>
-<span class="sourceLineNo">302</span>   * started (the calling thread has already acquired the region-close-guard lock).<a name="line.302"></a>
-<span class="sourceLineNo">303</span>   * <a name="line.303"></a>
-<span class="sourceLineNo">304</span>   * NOTE: the boolean passed here has changed. It used to be a boolean that<a name="line.304"></a>
-<span class="sourceLineNo">305</span>   * stated whether or not to wait on the lock. Now it is whether it an exclusive<a name="line.305"></a>
-<span class="sourceLineNo">306</span>   * lock is requested.<a name="line.306"></a>
-<span class="sourceLineNo">307</span>   * <a name="line.307"></a>
-<span class="sourceLineNo">308</span>   * @param row The row actions will be performed against<a name="line.308"></a>
-<span class="sourceLineNo">309</span>   * @param readLock is the lock reader or writer. True indicates that a non-exclusive<a name="line.309"></a>
-<span class="sourceLineNo">310</span>   * lock is requested<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   * @see #startRegionOperation()<a name="line.311"></a>
-<span class="sourceLineNo">312</span>   * @see #startRegionOperation(Operation)<a name="line.312"></a>
-<span class="sourceLineNo">313</span>   */<a name="line.313"></a>
-<span class="sourceLineNo">314</span>  RowLock getRowLock(byte[] row, boolean readLock) throws IOException;<a name="line.314"></a>
-<span class="sourceLineNo">315</span><a name="line.315"></a>
-<span class="sourceLineNo">316</span>  /**<a name="line.316"></a>
-<span class="sourceLineNo">317</span>   * If the given list of row locks is not null, releases all locks.<a name="line.317"></a>
-<span class="sourceLineNo">318</span>   */<a name="line.318"></a>
-<span class="sourceLineNo">319</span>  void releaseRowLocks(List&lt;RowLock&gt; rowLocks);<a name="line.319"></a>
-<span class="sourceLineNo">320</span><a name="line.320"></a>
-<span class="sourceLineNo">321</span>  ///////////////////////////////////////////////////////////////////////////<a name="line.321"></a>
-<span class="sourceLineNo">322</span>  // Region operations<a name="line.322"></a>
-<span class="sourceLineNo">323</span><a name="line.323"></a>
-<span class="sourceLineNo">324</span>  /**<a name="line.324"></a>
-<span class="sourceLineNo">325</span>   * Perform one or more append operations on a row.<a name="line.325"></a>
-<span class="sourceLineNo">326</span>   * @param append<a name="line.326"></a>
-<span class="sourceLineNo">327</span>   * @param nonceGroup<a name="line.327"></a>
-<span class="sourceLineNo">328</span>   * @param nonce<a name="line.328"></a>
-<span class="sourceLineNo">329</span>   * @return result of the operation<a name="line.329"></a>
-<span class="sourceLineNo">330</span>   * @throws IOException<a name="line.330"></a>
-<span class="sourceLineNo">331</span>   */<a name="line.331"></a>
-<span class="sourceLineNo">332</span>  Result append(Append append, long nonceGroup, long nonce) throws IOException;<a name="line.332"></a>
-<span class="sourceLineNo">333</span><a name="line.333"></a>
-<span class="sourceLineNo">334</span>  /**<a name="line.334"></a>
-<span class="sourceLineNo">335</span>   * Perform a batch of mutations.<a name="line.335"></a>
-<span class="sourceLineNo">336</span>   * &lt;p&gt;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>   * Note this supports only Put and Delete mutations and will ignore other types passed.<a name="line.337"></a>
-<span class="sourceLineNo">338</span>   * @param mutations the list of mutations<a name="line.338"></a>
-<span class="sourceLineNo">339</span>   * @param nonceGroup<a name="line.339"></a>
-<span class="sourceLineNo">340</span>   * @param nonce<a name="line.340"></a>
-<span class="sourceLineNo">341</span>   * @return an array of OperationStatus which internally contains the<a name="line.341"></a>
-<span class="sourceLineNo">342</span>   *         OperationStatusCode and the exceptionMessage if any.<a name="line.342"></a>
-<span class="sourceLineNo">343</span>   * @throws IOException<a name="line.343"></a>
-<span class="sourceLineNo">344</span>   */<a name="line.344"></a>
-<span class="sourceLineNo">345</span>  OperationStatus[] batchMutate(Mutation[] mutations, long nonceGroup, long nonce)<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      throws IOException;<a name="line.346"></a>
-<span class="sourceLineNo">347</span><a name="line.347"></a>
-<span class="sourceLineNo">348</span>  /**<a name="line.348"></a>
-<span class="sourceLineNo">349</span>   * Replay a batch of mutations.<a name="line.349"></a>
-<span class="sourceLineNo">350</span>   * @param mutations mutations to replay.<a name="line.350"></a>
-<span class="sourceLineNo">351</span>   * @param replaySeqId<a name="line.351"></a>
-<span class="sourceLineNo">352</span>   * @return an array of OperationStatus which internally contains the<a name="line.352"></a>
-<span class="sourceLineNo">353</span>   *         OperationStatusCode and the exceptionMessage if any.<a name="line.353"></a>
-<span class="sourceLineNo">354</span>   * @throws IOException<a name="line.354"></a>
-<span class="sourceLineNo">355</span>   */<a name="line.355"></a>
-<span class="sourceLineNo">356</span>   OperationStatus[] batchReplay(MutationReplay[] mutations, long replaySeqId) throws IOException;<a name="line.356"></a>
-<span class="sourceLineNo">357</span><a name="line.357"></a>
-<span class="sourceLineNo">358</span>  /**<a name="line.358"></a>
-<span class="sourceLineNo">359</span>   * Atomically checks if a row/family/qualifier value matches the expected value and if it does,<a name="line.359"></a>
-<span class="sourceLineNo">360</span>   * it performs the mutation. If the passed value is null, the lack of column value<a name="line.360"></a>
-<span class="sourceLineNo">361</span>   * (ie: non-existence) is used. See checkAndRowMutate to do many checkAndPuts at a time on a<a name="line.361"></a>
-<span class="sourceLineNo">362</span>   * single row.<a name="line.362"></a>
-<span class="sourceLineNo">363</span>   * @param row to check<a name="line.363"></a>
-<span class="sourceLineNo">364</span>   * @param family column family to check<a name="line.364"></a>
-<span class="sourceLineNo">365</span>   * @param qualifier column qualifier to check<a name="line.365"></a>
-<span class="sourceLineNo">366</span>   * @param compareOp the comparison operator<a name="line.366"></a>
-<span class="sourceLineNo">367</span>   * @param comparator<a name="line.367"></a>
-<span class="sourceLineNo">368</span>   * @param mutation<a name="line.368"></a>
-<span class="sourceLineNo">369</span>   * @param writeToWAL<a name="line.369"></a>
-<span class="sourceLineNo">370</span>   * @return true if mutation was applied, false otherwise<a name="line.370"></a>
-<span class="sourceLineNo">371</span>   * @throws IOException<a name="line.371"></a>
-<span class="sourceLineNo">372</span>   */<a name="line.372"></a>
-<span class="sourceLineNo">373</span>  boolean checkAndMutate(byte [] row, byte [] family, byte [] qualifier, CompareOp compareOp,<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      ByteArrayComparable comparator, Mutation mutation, boolean writeToWAL) throws IOException;<a name="line.374"></a>
-<span class="sourceLineNo">375</span><a name="line.375"></a>
-<span class="sourceLineNo">376</span>  /**<a name="line.376"></a>
-<span class="sourceLineNo">377</span>   * Atomically checks if a row/family/qualifier value matches the expected values and if it does,<a name="line.377"></a>
-<span class="sourceLineNo">378</span>   * it performs the row mutations. If the passed value is null, the lack of column value<a name="line.378"></a>
-<span class="sourceLineNo">379</span>   * (ie: non-existence) is used. Use to do many mutations on a single row. Use checkAndMutate<a name="line.379"></a>
-<span class="sourceLineNo">380</span>   * to do one checkAndMutate at a time.<a name="line.380"></a>
-<span class="sourceLineNo">381</span>   * @param row to check<a name="line.381"></a>
-<span class="sourceLineNo">382</span>   * @param family column family to check<a name="line.382"></a>
-<span class="sourceLineNo">383</span>   * @param qualifier column qualifier to check<a name="line.383"></a>
-<span class="sourceLineNo">384</span>   * @param compareOp the comparison operator<a name="line.384"></a>
-<span class="sourceLineNo">385</span>   * @param comparator<a name="line.385"></a>
-<span class="sourceLineNo">386</span>   * @param mutations<a name="line.386"></a>
-<span class="sourceLineNo">387</span>   * @param writeToWAL<a name="line.387"></a>
-<span class="sourceLineNo">388</span>   * @return true if mutations were applied, false otherwise<a name="line.388"></a>
-<span class="sourceLineNo">389</span>   * @throws IOException<a name="line.389"></a>
-<span class="sourceLineNo">390</span>   */<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  boolean checkAndRowMutate(byte [] row, byte [] family, byte [] qualifier, CompareOp compareOp,<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      ByteArrayComparable comparator, RowMutations mutations, boolean writeToWAL)<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      throws IOException;<a name="line.393"></a>
-<span class="sourceLineNo">394</span><a name="line.394"></a>
-<span class="sourceLineNo">395</span>  /**<a name="line.395"></a>
-<span class="sourceLineNo">396</span>   * Deletes the specified cells/row.<a name="line.396"></a>
-<span class="sourceLineNo">397</span>   * @param delete<a name="line.397"></a>
-<span class="sourceLineNo">398</span>   * @throws IOException<a name="line.398"></a>
-<span class="sourceLineNo">399</span>   */<a name="line.399"></a>
-<span class="sourceLineNo">400</span>  void delete(Delete delete) throws IOException;<a name="line.400"></a>
+<span class="sourceLineNo">280</span>  /**<a name="line.280"></a>
+<span class="sourceLineNo">281</span>   * Closes the region operation lock. This needs to be called in the finally block corresponding<a name="line.281"></a>
+<span class="sourceLineNo">282</span>   * to the try block of {@link #startRegionOperation(Operation)}<a name="line.282"></a>
+<span class="sourceLineNo">283</span>   * @throws IOException<a name="line.283"></a>
+<span class="sourceLineNo">284</span>   */<a name="line.284"></a>
+<span class="sourceLineNo">285</span>  void closeRegionOperation(Operation op) throws IOException;<a name="line.285"></a>
+<span class="sourceLineNo">286</span><a name="line.286"></a>
+<span class="sourceLineNo">287</span>  // Row write locks<a name="line.287"></a>
+<span class="sourceLineNo">288</span><a name="line.288"></a>
+<span class="sourceLineNo">289</span>  /**<a name="line.289"></a>
+<span class="sourceLineNo">290</span>   * Row lock held by a given thread.<a name="line.290"></a>
+<span class="sourceLineNo">291</span>   * One thread may acquire multiple locks on the same row simultaneously.<a name="line.291"></a>
+<span class="sourceLineNo">292</span>   * The locks must be released by calling release() from the same thread.<a name="line.292"></a>
+<span class="sourceLineNo">293</span>   */<a name="line.293"></a>
+<span class="sourceLineNo">294</span>  public interface RowLock {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    /**<a name="line.295"></a>
+<span class="sourceLineNo">296</span>     * Release the given lock.  If there are no remaining locks held by the current thread<a name="line.296"></a>
+<span class="sourceLineNo">297</span>     * then unlock the row and allow other threads to acquire the lock.<a name="line.297"></a>
+<span class="sourceLineNo">298</span>     * @throws IllegalArgumentException if called by a different thread than the lock owning<a name="line.298"></a>
+<span class="sourceLineNo">299</span>     *     thread<a name="line.299"></a>
+<span class="sourceLineNo">300</span>     */<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    void release();<a name="line.301"></a>
+<span class="sourceLineNo">302</span>  }<a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span>  /**<a name="line.304"></a>
+<span class="sourceLineNo">305</span>   *<a name="line.305"></a>
+<span class="sourceLineNo">306</span>   * Get a row lock for the specified row. All locks are reentrant.<a name="line.306"></a>
+<span class="sourceLineNo">307</span>   *<a name="line.307"></a>
+<span class="sourceLineNo">308</span>   * Before calling this function make sure that a region operation has already been<a name="line.308"></a>
+<span class="sourceLineNo">309</span>   * started (the calling thread has already acquired the region-close-guard lock).<a name="line.309"></a>
+<span class="sourceLineNo">310</span>   * <a name="line.310"></a>
+<span class="sourceLineNo">311</span>   * NOTE: the boolean passed here has changed. It used to be a boolean that<a name="line.311"></a>
+<span class="sourceLineNo">312</span>   * stated whether or not to wait on the lock. Now it is whether it an exclusive<a name="line.312"></a>
+<span class="sourceLineNo">313</span>   * lock is requested.<a name="line.313"></a>
+<span class="sourceLineNo">314</span>   * <a name="line.314"></a>
+<span class="sourceLineNo">315</span>   * @param row The row actions will be performed against<a name="line.315"></a>
+<span class="sourceLineNo">316</span>   * @param readLock is the lock reader or writer. True indicates that a non-exclusive<a name="line.316"></a>
+<span class="sourceLineNo">317</span>   * lock is requested<a name="line.317"></a>
+<span class="sourceLineNo">318</span>   * @see #startRegionOperation()<a name="line.318"></a>
+<span class="sourceLineNo">319</span>   * @see #startRegionOperation(Operation)<a name="line.319"></a>
+<span class="sourceLineNo">320</span>   */<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  RowLock getRowLock(byte[] row, boolean readLock) throws IOException;<a name="line.321"></a>
+<span class="sourceLineNo">322</span><a name="line.322"></a>
+<span class="sourceLineNo">323</span>  /**<a name="line.323"></a>
+<span class="sourceLineNo">324</span>   * If the given list of row locks is not null, releases all locks.<a name="line.324"></a>
+<span class="sourceLineNo">325</span>   */<a name="line.325"></a>
+<span class="sourceLineNo">326</span>  void releaseRowLocks(List&lt;RowLock&gt; rowLocks);<a name="line.326"></a>
+<span class="sourceLineNo">327</span><a name="line.327"></a>
+<span class="sourceLineNo">328</span>  ///////////////////////////////////////////////////////////////////////////<a name="line.328"></a>
+<span class="sourceLineNo">329</span>  // Region operations<a name="line.329"></a>
+<span class="sourceLineNo">330</span><a name="line.330"></a>
+<span class="sourceLineNo">331</span>  /**<a name="line.331"></a>
+<span class="sourceLineNo">332</span>   * Perform one or more append operations on a row.<a name="line.332"></a>
+<span class="sourceLineNo">333</span>   * @param append<a name="line.333"></a>
+<span class="sourceLineNo">334</span>   * @param nonceGroup<a name="line.334"></a>
+<span class="sourceLineNo">335</span>   * @param nonce<a name="line.335"></a>
+<span class="sourceLineNo">336</span>   * @return result of the operation<a name="line.336"></a>
+<span class="sourceLineNo">337</span>   * @throws IOException<a name="line.337"></a>
+<span class="sourceLineNo">338</span>   */<a name="line.338"></a>
+<span class="sourceLineNo">339</span>  Result append(Append append, long nonceGroup, long nonce) throws IOException;<a name="line.339"></a>
+<span class="sourceLineNo">340</span><a name="line.340"></a>
+<span class="sourceLineNo">341</span>  /**<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   * Perform a batch of mutations.<a name="line.342"></a>
+<span class="sourceLineNo">343</span>   * &lt;p&gt;<a name="line.343"></a>
+<span class="sourceLineNo">344</span>   * Note this supports only Put and Delete mutations and will ignore other types passed.<a name="line.344"></a>
+<span class="sourceLineNo">345</span>   * @param mutations the list of mutations<a name="line.345"></a>
+<span class="sourceLineNo">346</span>   * @param nonceGroup<a name="line.346"></a>
+<span class="sourceLineNo">347</span>   * @param nonce<a name="line.347"></a>
+<span class="sourceLineNo">348</span>   * @return an array of OperationStatus which internally contains the<a name="line.348"></a>
+<span class="sourceLineNo">349</span>   *         OperationStatusCode and the exceptionMessage if any.<a name="line.349"></a>
+<span class="sourceLineNo">350</span>   * @throws IOException<a name="line.350"></a>
+<span class="sourceLineNo">351</span>   */<a name="line.351"></a>
+<span class="sourceLineNo">352</span>  OperationStatus[] batchMutate(Mutation[] mutations, long nonceGroup, long nonce)<a name="line.352"></a>
+<span class="sourceLineNo">353</span>      throws IOException;<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>  /**<a name="line.355"></a>
+<span class="sourceLineNo">356</span>   * Replay a batch of mutations.<a name="line.356"></a>
+<span class="sourceLineNo">357</span>   * @param mutations mutations to replay.<a name="line.357"></a>
+<span class="sourceLineNo">358</span>   * @param replaySeqId<a name="line.358"></a>
+<span class="sourceLineNo">359</span>   * @return an array of OperationStatus which internally contains the<a name="line.359"></a>
+<span class="sourceLineNo">360</span>   *         OperationStatusCode and the exceptionMessage if any.<a name="line.360"></a>
+<span class="sourceLineNo">361</span>   * @throws IOException<a name="line.361"></a>
+<span class="sourceLineNo">362</span>   */<a name="line.362"></a>
+<span class="sourceLineNo">363</span>   OperationStatus[] batchReplay(MutationReplay[] mutations, long replaySeqId) throws IOException;<a name="line.363"></a>
+<span class="sourceLineNo">364</span><a name="line.364"></a>
+<span class="sourceLineNo">365</span>  /**<a name="line.365"></a>
+<span class="sourceLineNo">366</span>   * Atomically checks if a row/family/qualifier value matches the expected value and if it does,<a name="line.366"></a>
+<span class="sourceLineNo">367</span>   * it performs the mutation. If the passed value is null, the lack of column value<a name="line.367"></a>
+<span class="sourceLineNo">368</span>   * (ie: non-existence) is used. See checkAndRowMutate to do many checkAndPuts at a time on a<a name="line.368"></a>
+<span class="sourceLineNo">369</span>   * single row.<a name="line.369"></a>
+<span class="sourceLineNo">370</span>   * @param row to check<a name="line.370"></a>
+<span class="sourceLineNo">371</span>   * @param family column family to check<a name="line.371"></a>
+<span class="sourceLineNo">372</span>   * @param qualifier column qualifier to check<a name="line.372"></a>
+<span class="sourceLineNo">373</span>   * @param compareOp the comparison operator<a name="line.373"></a>
+<span class="sourceLineNo">374</span>   * @param comparator<a name="line.374"></a>
+<span class="sourceLineNo">375</span>   * @param mutation<a name="line.375"></a>
+<span class="sourceLineNo">376</span>   * @param writeToWAL<a name="line.376"></a>
+<span class="sourceLineNo">377</span>   * @return true if mutation was applied, false otherwise<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   * @throws IOException<a name="line.378"></a>
+<span class="sourceLineNo">379</span>   */<a name="line.379"></a>
+<span class="sourceLineNo">380</span>  boolean checkAndMutate(byte [] row, byte [] family, byte [] qualifier, CompareOp compareOp,<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      ByteArrayComparable comparator, Mutation mutation, boolean writeToWAL) throws IOException;<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span>  /**<a name="line.383"></a>
+<span class="sourceLineNo">384</span>   * Atomically checks if a row/family/qualifier value matches the expected values and if it does,<a name="line.384"></a>
+<span class="sourceLineNo">385</span>   * it performs the row mutations. If the passed value is null, the lack of column value<a name="line.385"></a>
+<span class="sourceLineNo">386</span>   * (ie: non-existence) is used. Use to do many mutations on a single row. Use checkAndMutate<a name="line.386"></a>
+<span class="sourceLineNo">387</span>   * to do one checkAndMutate at a time.<a name="line.387"></a>
+<span class="sourceLineNo">388</span>   * @param row to check<a name="line.388"></a>
+<span class="sourceLineNo">389</span>   * @param family column family to check<a name="line.389"></a>
+<span class="sourceLineNo">390</span>   * @param qualifier column qualifier to check<a name="line.390"></a>
+<span class="sourceLineNo">391</span>   * @param compareOp the comparison operator<a name="line.391"></a>
+<span class="sourceLineNo">392</span>   * @param comparator<a name="line.392"></a>
+<span class="sourceLineNo">393</span>   * @param mutations<a name="line.393"></a>
+<span class="sourceLineNo">394</span>   * @param writeToWAL<a name="line.394"></a>
+<span class="sourceLineNo">395</span>   * @return true if mutations were applied, false otherwise<a name="line.395"></a>
+<span class="sourceLineNo">396</span>   * @throws IOException<a name="line.396"></a>
+<span class="sourceLineNo">397</span>   */<a name="line.397"></a>
+<span class="sourceLineNo">398</span>  boolean checkAndRowMutate(byte [] row, byte [] family, byte [] qualifier, CompareOp compareOp,<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      ByteArrayComparable comparator, RowMutations mutations, boolean writeToWAL)<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      throws IOException;<a name="line.400"></a>
 <span class="sourceLineNo">401</span><a name="line.401"></a>
 <span class="sourceLineNo">402</span>  /**<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   * Do a get based on the get parameter.<a name="line.403"></a>
-<span class="sourceLineNo">404</span>   * @param get query parameters<a name="line.404"></a>
-<span class="sourceLineNo">405</span>   * @return result of the operation<a name="line.405"></a>
+<span class="sourceLineNo">403</span>   * Deletes the specified cells/row.<a name="line.403"></a>
+<span class="sourceLineNo">404</span>   * @param delete<a name="line.404"></a>
+<span class="sourceLineNo">405</span>   * @throws IOException<a name="line.405"></a>
 <span class="sourceLineNo">406</span>   */<a name="line.406"></a>
-<span class="sourceLineNo">407</span>  Result get(Get get) throws IOException;<a name="line.407"></a>
+<span class="sourceLineNo">407</span>  void delete(Delete delete) throws IOException;<a name="line.407"></a>
 <span class="sourceLineNo">408</span><a name="line.408"></a>
 <span class="sourceLineNo">409</span>  /**<a name="line.409"></a>
 <span class="sourceLineNo">410</span>   * Do a get based on the get parameter.<a name="line.410"></a>
 <span class="sourceLineNo">411</span>   * @param get query parameters<a name="line.411"></a>
-<span class="sourceLineNo">412</span>   * @param withCoprocessor invoke coprocessor or not. We don't want to<a name="line.412"></a>
-<span class="sourceLineNo">413</span>   * always invoke cp.<a name="line.413"></a>
-<span class="sourceLineNo">414</span>   * @return list of cells resulting from the operation<a name="line.414"></a>
-<span class="sourceLineNo">415</span>   */<a name="line.415"></a>
-<span class="sourceLineNo">416</span>  List&lt;Cell&gt; get(Get get, boolean withCoprocessor) throws IOException;<a name="line.416"></a>
-<span class="sourceLineNo">417</span><a name="line.417"></a>
-<span class="sourceLineNo">418</span>  /**<a name="line.418"></a>
-<span class="sourceLineNo">419</span>   * Do a get for duplicate non-idempotent operation.<a name="line.419"></a>
-<span class="sourceLineNo">420</span>   * @param get query parameters.<a name="line.420"></a>
-<span class="sourceLineNo">421</span>   * @param withCoprocessor<a name="line.421"></a>
-<span class="sourceLineNo">422</span>   * @param nonceGroup Nonce group.<a name="line.422"></a>
-<span class="sourceLineNo">423</span>   * @param nonce Nonce.<a name="line.423"></a>
-<span class="sourceLineNo">424</span>   * @return list of cells resulting from the operation<a name="line.424"></a>
-<span class="sourceLineNo">425</span>   * @throws IOException<a name="line.425"></a>
-<span class="sourceLineNo">426</span>   */<a name="line.426"></a>
-<span class="sourceLineNo">427</span>  List&lt;Cell&gt; get(Get get, boolean withCoprocessor, long nonceGroup, long nonce) throws IOException;<a name="line.427"></a>
-<span class="sourceLineNo">428</span><a name="line.428"></a>
-<span class="sourceLineNo">429</span>  /**<a name="line.429"></a>
-<span class="sourceLineNo">430</span>   * Return an iterator that scans over the HRegion, returning the indicated<a name="line.430"></a>
-<span class="sourceLineNo">431</span>   * columns and rows specified by the {@link Scan}.<a name="line.431"></a>
-<span class="sourceLineNo">432</span>   * &lt;p&gt;<a name="line.432"></a>
-<span class="sourceLineNo">433</span>   * This Iterator must be closed by the caller.<a name="line.433"></a>
-<span class="sourceLineNo">434</span>   *<a name="line.434"></a>
-<span class="sourceLineNo">435</span>   * @param scan configured {@link Scan}<a name="line.435"></a>
-<span class="sourceLineNo">436</span>   * @return RegionScanner<a name="line.436"></a>
-<span class="sourceLineNo">437</span>   * @throws IOException read exceptions<a name="line.437"></a>
-<span class="sourceLineNo">438</span>   */<a name="line.438"></a>
-<span class="sourceLineNo">439</span>  RegionScanner getScanner(Scan scan) throws IOException;<a name="line.439"></a>
-<span class="sourceLineNo">440</span><a name="line.440"></a>
-<span class="sourceLineNo">441</span>  /**<a name="line.441"></a>
-<span class="sourceLineNo">442</span>   * Return an iterator that scans over the HRegion, returning the indicated columns and rows<a name="line.442"></a>
-<span class="sourceLineNo">443</span>   * specified by the {@link Scan}. The scanner will also include the additional scanners passed<a name="line.443"></a>
-<span class="sourceLineNo">444</span>   * along with the scanners for the specified Scan instance. Should be careful with the usage to<a name="line.444"></a>
-<span class="sourceLineNo">445</span>   * pass additional scanners only within this Region<a name="line.445"></a>
-<span class="sourceLineNo">446</span>   * &lt;p&gt;<a name="line.446"></a>
-<span class="sourceLineNo">447</span>   * This Iterator must be closed by the caller.<a name="line.447"></a>
-<span class="sourceLineNo">448</span>   *<a name="line.448"></a>
-<span class="sourceLineNo">449</span>   * @param scan configured {@link Scan}<a name="line.449"></a>
-<span class="sourceLineNo">450</span>   * @param additionalScanners Any additional scanners to be used<a name="line.450"></a>
-<span class="sourceLineNo">451</span>   * @return RegionScanner<a name="line.451"></a>
-<span class="sourceLineNo">452</span>   * @throws IOException read exceptions<a name="line.452"></a>
-<span class="sourceLineNo">453</span>   */<a name="line.453"></a>
-<span class="sourceLineNo">454</span>  RegionScanner getScanner(Scan scan, List&lt;KeyValueScanner&gt; additionalScanners) throws IOException;<a name="line.454"></a>
-<span class="sourceLineNo">455</span><a name="line.455"></a>
-<span class="sourceLineNo">456</span>  /** The comparator to be used with the region */<a name="line.456"></a>
-<span class="sourceLineNo">457</span>  CellComparator getCellComparator();<a name="line.457"></a>
-<span class="sourceLineNo">458</span><a name="line.458"></a>
-<span class="sourceLineNo">459</span>  /**<a name="line.459"></a>
-<span class="sourceLineNo">460</span>   * Perform one or more increment operations on a row.<a name="line.460"></a>
-<span class="sourceLineNo">461</span>   * @param increment<a name="line.461"></a>
-<span class="sourceLineNo">462</span>   * @param nonceGroup<a name="line.462"></a>
-<span class="sourceLineNo">463</span>   * @param nonce<a name="line.463"></a>
-<span class="sourceLineNo">464</span>   * @return result of the operation<a name="line.464"></a>
-<span class="sourceLineNo">465</span>   * @throws IOException<a name="line.465"></a>
-<span class="sourceLineNo">466</span>   */<a name="line.466"></a>
-<span class="sourceLineNo">467</span>  Result increment(Increment increment, long nonceGroup, long nonce) throws IOException;<a name="line.467"></a>
-<span class="sourceLineNo">468</span><a name="line.468"></a>
-<span class="sourceLineNo">469</span>  /**<a name="line.469"></a>
-<span class="sourceLineNo">470</span>   * Performs multiple mutations atomically on a single row. Currently<a name="line.470"></a>
-<span class="sourceLineNo">471</span>   * {@link Put} and {@link Delete} are supported.<a name="line.471"></a>
-<span class="sourceLineNo">472</span>   *<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   * @param mutations object that specifies the set of mutations to perform atomically<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   * @throws IOException<a name="line.474"></a>
-<span class="sourceLineNo">475</span>   */<a name="line.475"></a>
-<span class="sourceLineNo">476</span>  void mutateRow(RowMutations mutations) throws IOException;<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>  /**<a name="line.478"></a>
-<span class="sourceLineNo">479</span>   * Perform atomic mutations within the region.<a name="line.479"></a>
-<span class="sourceLineNo">480</span>   *<a name="line.480"></a>
-<span class="sourceLineNo">481</span>   * @param mutations The list of mutations to perform.<a name="line.481"></a>
-<span class="sourceLineNo">482</span>   * &lt;code&gt;mutations&lt;/code&gt; can contain operations for multiple rows.<a name="line.482"></a>
-<span class="sourceLineNo">483</span>   * Caller has to ensure that all rows are contained in this region.<a name="line.483"></a>
-<span class="sourceLineNo">484</span>   * @param rowsToLock Rows to lock<a name="line.484"></a>
-<span class="sourceLineNo">485</span>   * @param nonceGroup Optional nonce group of the operation (client Id)<a name="line.485"></a>
-<span class="sourceLineNo">486</span>   * @param nonce Optional nonce of the operation (unique random id to ensure "more idempotence")<a name="line.486"></a>
-<span class="sourceLineNo">487</span>   * If multiple rows are locked care should be taken that<a name="line.487"></a>
-<span class="sourceLineNo">488</span>   * &lt;code&gt;rowsToLock&lt;/code&gt; is sorted in order to avoid deadlocks.<a name="line.488"></a>
-<span class="sourceLineNo">489</span>   * @throws IOException<a name="line.489"></a>
-<span class="sourceLineNo">490</span>   */<a name="line.490"></a>
-<span class="sourceLineNo">491</span>  void mutateRowsWithLocks(Collection&lt;Mutation&gt; mutations, Collection&lt;byte[]&gt; rowsToLock,<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      long nonceGroup, long nonce) throws IOException;<a name="line.492"></a>
-<span class="sourceLineNo">493</span><a name="line.493"></a>
-<span class="sourceLineNo">494</span>  /**<a name="line.494"></a>
-<span class="sourceLineNo">495</span>   * Performs atomic multiple reads and writes on a given row.<a name="line.495"></a>
-<span class="sourceLineNo">496</span>   *<a name="line.496"></a>
-<span class="sourceLineNo">497</span>   * @param processor The object defines the reads and writes to a row.<a name="line.497"></a>
-<span class="sourceLineNo">498</span>   */<a name="line.498"></a>
-<span class="sourceLineNo">499</span>  void processRowsWithLocks(RowProcessor&lt;?,?&gt; processor) throws IOException;<a name="line.499"></a>
+<span class="sourceLineNo">412</span>   * @return result of the operation<a name="line.412"></a>
+<span class="sourceLineNo">413</span>   */<a name="line.413"></a>
+<span class="sourceLineNo">414</span>  Result get(Get get) throws IOException;<a name="line.414"></a>
+<span class="sourceLineNo">415</span><a name="line.415"></a>
+<span class="sourceLineNo">416</span>  /**<a name="line.416"></a>
+<span class="sourceLineNo">417</span>   * Do a get based on the get parameter.<a name="line.417"></a>
+<span class="sourceLineNo">418</span>   * @param get query parameters<a name="line.418"></a>
+<span class="sourceLineNo">419</span>   * @param withCoprocessor invoke coprocessor or not. We don't want to<a name="line.419"></a>
+<span class="sourceLineNo">420</span>   * always invoke cp.<a name="line.420"></a>
+<span class="sourceLineNo">421</span>   * @return list of cells resulting from the operation<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   */<a name="line.422"></a>
+<span class="sourceLineNo">423</span>  List&lt;Cell&gt; get(Get get, boolean withCoprocessor) throws IOException;<a name="line.423"></a>
+<span class="sourceLineNo">424</span><a name="line.424"></a>
+<span class="sourceLineNo">425</span>  /**<a name="line.425"></a>
+<span class="sourceLineNo">426</span>   * Do a get for duplicate non-idempotent operation.<a name="line.426"></a>
+<span class="sourceLineNo">427</span>   * @param get query parameters.<a name="line.427"></a>
+<span class="sourceLineNo">428</span>   * @param withCoprocessor<a name="line.428"></a>
+<span class="sourceLineNo">429</span>   * @param nonceGroup Nonce group.<a name="line.429"></a>
+<span class="sourceLineNo">430</span>   * @param nonce Nonce.<a name="line.430"></a>
+<span class="sourceLineNo">431</span>   * @return list of cells resulting from the operation<a name="line.431"></a>
+<span class="sourceLineNo">432</span>   * @throws IOException<a name="line.432"></a>
+<span class="sourceLineNo">433</span>   */<a name="line.433"></a>
+<span class="sourceLineNo">434</span>  List&lt;Cell&gt; get(Get get, boolean withCoprocessor, long nonceGroup, long nonce) throws IOException;<a name="line.434"></a>
+<span class="sourceLineNo">435</span><a name="line.435"></a>
+<span class="sourceLineNo">436</span>  /**<a name="line.436"></a>
+<span class="sourceLineNo">437</span>   * Return an iterator that scans over the HRegion, returning the indicated<a name="line.437"></a>
+<span class="sourceLineNo">438</span>   * columns and rows specified by the {@link Scan}.<a name="line.438"></a>
+<span class="sourceLineNo">439</span>   * &lt;p&gt;<a name="line.439"></a>
+<span class="sourceLineNo">440</span>   * This Iterator must be closed by the caller.<a name="line.440"></a>
+<span class="sourceLineNo">441</span>   *<a name="line.441"></a>
+<span class="sourceLineNo">442</span>   * @param scan configured {@link Scan}<a name="line.442"></a>
+<span class="sourceLineNo">443</span>   * @return RegionScanner<a name="line.443"></a>
+<span class="sourceLineNo">444</span>   * @throws IOException read exceptions<a name="line.444"></a>
+<span class="sourceLineNo">445</span>   */<a name="line.445"></a>
+<span class="sourceLineNo">446</span>  RegionScanner getScanner(Scan scan) throws IOException;<a name="line.446"></a>
+<span class="sourceLineNo">447</span><a name="line.447"></a>
+<span class="sourceLineNo">448</span>  /**<a name="line.448"></a>
+<span class="sourceLineNo">449</span>   * Return an iterator that scans over the HRegion, returning the indicated columns and rows<a name="line.449"></a>
+<span class="sourceLineNo">450</span>   * specified by the {@link Scan}. The scanner will also include the additional scanners passed<a name="line.450"></a>
+<span class="sourceLineNo">451</span>   * along with the scanners for the specified Scan instance. Should be careful with the usage to<a name="line.451"></a>
+<span class="sourceLineNo">452</span>   * pass additional scanners only within this Region<a name="line.452"></a>
+<span class="sourceLineNo">453</span>   * &lt;p&gt;<a name="line.453"></a>
+<span class="sourceLineNo">454</span>   * This Iterator must be closed by the caller.<a name="line.454"></a>
+<span class="sourceLineNo">455</span>   *<a name="line.455"></a>
+<span class="sourceLineNo">456</span>   * @param scan configured {@link Scan}<a name="line.456"></a>
+<span class="sourceLineNo">457</span>   * @param additionalScanners Any additional scanners to be used<a name="line.457"></a>
+<span class="sourceLineNo">458</span>   * @return RegionScanner<a name="line.458"></a>
+<span class="sourceLineNo">459</span>   * @throws IOException read exceptions<a name="line.459"></a>
+<span class="sourceLineNo">460</span>   */<a name="line.460"></a>
+<span class="sourceLineNo">461</span>  RegionScanner getScanner(Scan scan, List&lt;KeyValueScanner&gt; additionalScanners) throws IOException;<a name="line.461"></a>
+<span class="sourceLineNo">462</span><a name="line.462"></a>
+<span class="sourceLineNo">463</span>  /** The comparator to be used with the region */<a name="line.463"></a>
+<span class="sourceLineNo">464</span>  CellComparator getCellComparator();<a name="line.464"></a>
+<span class="sourceLineNo">465</span><a name="line.465"></a>
+<span class="sourceLineNo">466</span>  /**<a name="line.466"></a>
+<span class="sourceLineNo">467</span>   * Perform one or more increment operations on a row.<a name="line.467"></a>
+<span class="sourceLineNo">468</span>   * @param increment<a name="line.468"></a>
+<span class="sourceLineNo">469</span>   * @param nonceGroup<a name="line.469"></a>
+<span class="sourceLineNo">470</span>   * @param nonce<a name="line.470"></a>
+<span class="sourceLineNo">471</span>   * @return result of the operation<a name="line.471"></a>
+<span class="sourceLineNo">472</span>   * @throws IOException<a name="line.472"></a>
+<span class="sourceLineNo">473</span>   */<a name="line.473"></a>
+<span class="sourceLineNo">474</span>  Result increment(Increment increment, long nonceGroup, long nonce) throws IOException;<a name="line.474"></a>
+<span class="sourceLineNo">475</span><a name="line.475"></a>
+<span class="sourceLineNo">476</span>  /**<a name="line.476"></a>
+<span class="sourceLineNo">477</span>   * Performs multiple mutations atomically on a single row. Currently<a name="line.477"></a>
+<span class="sourceLineNo">478</span>   * {@link Put} and {@link Delete} are supported.<a name="line.478"></a>
+<span class="sourceLineNo">479</span>   *<a name="line.479"></a>
+<span class="sourceLineNo">480</span>   * @param mutations object that specifies the set of mutations to perform atomically<a name="line.480"></a>
+<span class="sourceLineNo">481</span>   * @throws IOException<a name="line.481"></a>
+<span class="sourceLineNo">482</span>   */<a name="line.482"></a>
+<span class="sourceLineNo">483</span>  void mutateRow(RowMutations mutations) throws IOException;<a name="line.483"></a>
+<span class="sourceLineNo">484</span><a name="line.484"></a>
+<span class="sourceLineNo">485</span>  /**<a name="line.485"></a>
+<span class="sourceLineNo">486</span>   * Perform atomic mutations within the region.<a name="line.486"></a>
+<span class="sourceLineNo">487</span>   *<a name="line.487"></a>
+<span class="sourceLineNo">488</span>   * @param mutations The list of mutations to perform.<a name="line.488"></a>
+<span class="sourceLineNo">489</span>   * &lt;code&gt;mutations&lt;/code&gt; can contain operations for multiple rows.<a name="line.489"></a>
+<span class="sourceLineNo">490</span>   * Caller has to ensure that all rows are contained in this region.<a name="line.490"></a>
+<span class="sourceLineNo">491</span>   * @param rowsToLock Rows to lock<a name="line.491"></a>
+<span class="sourceLineNo">492</span>   * @param nonceGroup Optional nonce group of the operation (client Id)<a name="line.492"></a>
+<span class="sourceLineNo">493</span>   * @param nonce Optional nonce of the operation (unique random id to ensure "more idempotence")<a name="line.493"></a>
+<span class="sourceLineNo">494</span>   * If multiple rows are locked care should be taken that<a name="line.494"></a>
+<span class="sourceLineNo">495</span>   * &lt;code&gt;rowsToLock&lt;/code&gt; is sorted in order to avoid deadlocks.<a name="line.495"></a>
+<span class="sourceLineNo">496</span>   * @throws IOException<a name="line.496"></a>
+<span class="sourceLineNo">497</span>   */<a name="line.497"></a>
+<span class="sourceLineNo">498</span>  void mutateRowsWithLocks(Collection&lt;Mutation&gt; mutations, Collection&lt;byte[]&gt; rowsToLock,<a name="line.498"></a>
+<span class="sourceLineNo">499</span>      long nonceGroup, long nonce) throws IOException;<a name="line.499"></a>
 <span class="sourceLineNo">500</span><a name="line.500"></a>
 <span class="sourceLineNo">501</span>  /**<a name="line.501"></a>
 <span class="sourceLineNo">502</span>   * Performs atomic multiple reads and writes on a given row.<a name="line.502"></a>
 <span class="sourceLineNo">503</span>   *<a name="line.503"></a>
 <span class="sourceLineNo">504</span>   * @param processor The object defines the reads and writes to a row.<a name="line.504"></a>
-<span class="sourceLineNo">505</span>   * @param nonceGroup Optional nonce group of the operation (client Id)<a name="line.505"></a>
-<span class="sourceLineNo">506</span>   * @param nonce Optional nonce of the operation (unique random id to ensure "more idempotence")<a name="line.506"></a>
-<span class="sourceLineNo">507</span>   */<a name="line.507"></a>
-<span class="sourceLineNo">508</span>  void processRowsWithLocks(RowProcessor&lt;?,?&gt; processor, long nonceGroup, long nonce)<a name="line.508"></a>
-<span class="sourceLineNo">509</span>      throws IOException;<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span>  /**<a name="line.511"></a>
-<span class="sourceLineNo">512</span>   * Performs atomic multiple reads and writes on a given row.<a name="line.512"></a>
-<span class="sourceLineNo">513</span>   *<a name="line.513"></a>
-<span class="sourceLineNo">514</span>   * @param processor The object defines the reads and writes to a row.<a name="line.514"></a>
-<span class="sourceLineNo">515</span>   * @param timeout The timeout of the processor.process() execution<a name="line.515"></a>
-<span class="sourceLineNo">516</span>   *                Use a negative number to switch off the time bound<a name="line.516"></a>
-<span class="sourceLineNo">517</span>   * @param nonceGroup Optional nonce group of the operation (client Id)<a name="line.517"></a>
-<span class="sourceLineNo">518</span>   * @param nonce Optional nonce of the operation (unique random id to ensure "more idempotence")<a name="line.518"></a>
-<span class="sourceLineNo">519</span>   */<a name="line.519"></a>
-<span class="sourceLineNo">520</span>  void processRowsWithLocks(RowProcessor&lt;?,?&gt; processor, long timeout, long nonceGroup, long nonce)<a name="line.520"></a>
-<span class="sourceLineNo">521</span>      throws IOException;<a name="line.521"></a>
-<span class="sourceLineNo">522</span><a name="line.522"></a>
-<span class="sourceLineNo">523</span>  /**<a name="line.523"></a>
-<span class="sourceLineNo">524</span>   * Puts some data in the table.<a name="line.524"></a>
-<span class="sourceLineNo">525</span>   * @param put<a name="line.525"></a>
-<span class="sourceLineNo">526</span>   * @throws IOException<a name="line.526"></a>
-<span class="sourceLineNo">527</span>   */<a name="line.527"></a>
-<span class="sourceLineNo">528</span>  void put(Put put) throws IOException;<a name="line.528"></a>
+<span class="sourceLineNo">505</span>   */<a name="line.505"></a>
+<span class="sourceLineNo">506</span>  void processRowsWithLocks(RowProcessor&lt;?,?&gt; processor) throws IOException;<a name="line.506"></a>
+<span class="sourceLineNo">507</span><a name="line.507"></a>
+<span class="sourceLineNo">508</span>  /**<a name="line.508"></a>
+<span class="sourceLineNo">509</span>   * Performs atomic multiple reads and writes on a given row.<a name="line.509"></a>
+<span class="sourceLineNo">510</span>   *<a name="line.510"></a>
+<span class="sourceLineNo">511</span>   * @param processor The object defines the reads and writes to a row.<a name="line.511"></a>
+<span class="sourceLineNo">512</span>   * @param nonceGroup Optional nonce group of the operation (client Id)<a name="line.512"></a>
+<span class="sourceLineNo">513</span>   * @param nonce Optional nonce of the operation (unique random id to ensure "more idempotence")<a name="line.513"></a>
+<span class="sourceLineNo">514</span>   */<a name="line.514"></a>
+<span class="sourceLineNo">515</span>  void processRowsWithLocks(RowProcessor&lt;?,?&gt; processor, long nonceGroup, long nonce)<a name="line.515"></a>
+<span class="sourceLineNo">516</span>      throws IOException;<a name="line.516"></a>
+<span class="sourceLineNo">517</span><a name="line.517"></a>
+<span class="sourceLineNo">518</span>  /**<a name="line.518"></a>
+<span class="sourceLineNo">519</span>   * Performs atomic multiple reads and writes on a given row.<a name="line.519"></a>
+<span class="sourceLineNo">520</span>   *<a name="line.520"></a>
+<span class="sourceLineNo">521</span>   * @param processor The object defines the reads and writes to a row.<a name="line.521"></a>
+<span class="sourceLineNo">522</span>   * @param timeout The timeout of the processor.process() execution<a name="line.522"></a>
+<span class="sourceLineNo">523</span>   *                Use a negative number to switch off the time bound<a name="line.523"></a>
+<span class="sourceLineNo">524</span>   * @param nonceGroup Optional nonce group of the operation (client Id)<a name="line.524"></a>
+<span class="sourceLineNo">525</span>   * @param nonce Optional nonce of the operation (unique random id to ensure "more idempotence")<a name="line.525"></a>
+<span class="sourceLineNo">526</span>   */<a name="line.526"></a>
+<span class="sourceLineNo">527</span>  void processRowsWithLocks(RowProcessor&lt;?,?&gt; processor, long timeout, long nonceGroup, long nonce)<a name="line.527"></a>
+<span class="sourceLineNo">528</span>      throws IOException;<a name="line.528"></a>
 <span class="sourceLineNo">529</span><a name="line.529"></a>
 <span class="sourceLineNo">530</span>  /**<a name="line.530"></a>
-<span class="sourceLineNo">531</span>   * Listener class to enable callers of<a name="line.531"></a>
-<span class="sourceLineNo">532</span>   * bulkLoadHFile() to perform any necessary<a name="line.532"></a>
-<span class="sourceLineNo">533</span>   * pre/post processing of a given bulkload call<a name="line.533"></a>
+<span class="sourceLineNo">531</span>   * Puts some data in the table.<a name="line.531"></a>
+<span class="sourceLineNo">532</span>   * @param put<a name="line.532"></a>
+<span class="sourceLineNo">533</span>   * @throws IOException<a name="line.533"></a>
 <span class="sourceLineNo">534</span>   */<a name="line.534"></a>
-<span class="sourceLineNo">535</span>  interface BulkLoadListener {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    /**<a name="line.536"></a>
-<span class="sourceLineNo">537</span>     * Called before an HFile is actually loaded<a name="line.537"></a>
-<span class="sourceLineNo">538</span>     * @param family family being loaded to<a name="line.538"></a>
-<span class="sourceLineNo">539</span>     * @param srcPath path of HFile<a name="line.539"></a>
-<span class="sourceLineNo">540</span>     * @return final path to be used for actual loading<a name="line.540"></a>
-<span class="sourceLineNo">541</span>     * @throws IOException<a name="line.541"></a>
-<span class="sourceLineNo">542</span>     */<a name="line.542"></a>
-<span class="sourceLineNo">543</span>    String prepareBulkLoad(byte[] family, String srcPath, boolean copyFile)<a name="line.543"></a>
-<span class="sourceLineNo">544</span>        throws IOException;<a name="line.544"></a>
-<span class="sourceLineNo">545</span><a name="line.545"></a>
-<span class="sourceLineNo">546</span>    /**<a name="line.546"></a>
-<span class="sourceLineNo">547</span>     * Called after a successful HFile load<a name="line.547"></a>
-<span class="sourceLineNo">548</span>     * @param family family being loaded to<a name="line.548"></a>
-<span class="sourceLineNo">549</span>     * @param srcPath path of HFile<a name="line.549"></a>
-<span class="sourceLineNo">550</span>     * @throws IOException<a name="line.550"></a>
-<span class="sourceLineNo">551</span>     */<a name="line.551"></a>
-<span class="sourceLineNo">552</span>    void doneBulkLoad(byte[] family, String srcPath) throws IOException;<a name="line.552"></a>
-<span class="sourceLineNo">553</span><a name="line.553"></a>
-<span class="sourceLineNo">554</span>    /**<a name="line.554"></a>
-<span class="sourceLineNo">555</span>     * Called after a failed HFile load<a name="line.555"></a>
-<span class="sourceLineNo">556</span>     * @param family family being loaded to<a name="line.556"></a>
-<span class="sourceLineNo">557</span>     * @param srcPath path of HFile<a name="line.557"></a>
-<span class="sourceLineNo">558</span>     * @throws IOException<a name="line.558"></a>
-<span class="sourceLineNo">559</span>     */<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    void failedBulkLoad(byte[] family, String srcPath) throws IOException;<a name="line.560"></a>
-<span class="sourceLineNo">561</span>  }<a name="line.561"></a>
-<span class="sourceLineNo">562</span><a name="line.562"></a>
-<span class="sourceLineNo">563</span>  /**<a name="line.563"></a>
-<span class="sourceLineNo">564</span>   * Attempts to atomically load a group of hfiles.  This is critical for loading<a name="line.564"></a>
-<span class="sourceLineNo">565</span>   * rows with multiple column families atomically.<a name="line.565"></a>
-<span class="sourceLineNo">566</span>   *<a name="line.566"></a>
-<span class="sourceLineNo">567</span>   * @param familyPaths List of Pair&amp;lt;byte[] column family, String hfilePath&amp;gt;<a name="line.567"></a>
-<span class="sourceLineNo">568</span>   * @param bulkLoadListener Internal hooks enabling massaging/preparation of a<a name="line.568"></a>
-<span class="sourceLineNo">569</span>   * file about to be bulk loaded<a name="line.569"></a>
-<span class="sourceLineNo">570</span>   * @param assignSeqId<a name="line.570"></a>
-<span class="sourceLineNo">571</span>   * @return Map from family to List of store file paths if successful, null if failed recoverably<a name="line.571"></a>
-<span class="sourceLineNo">572</span>   * @throws IOException if failed unrecoverably.<a name="line.572"></a>
-<span class="sourceLineNo">573</span>   */<a name="line.573"></a>
-<span class="sourceLineNo">574</span>  Map&lt;byte[], List&lt;Path&gt;&gt; bulkLoadHFiles(Collection&lt;Pair&lt;byte[], String&gt;&gt; familyPaths,<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      boolean assignSeqId, BulkLoadListener bulkLoadListener) throws IOException;<a name="line.575"></a>
-<span class="sourceLineNo">576</span><a name="line.576"></a>
-<span class="sourceLineNo">577</span>  /**<a name="line.577"></a>
-<span class="sourceLineNo">578</span>   * Attempts to atomically load a group of hfiles.  This is critical for loading<a name="line.578"></a>
-<span class="sourceLineNo">579</span>   * rows with multiple column families atomically.<a name="line.579"></a>
-<span class="sourceLineNo">580</span>   *<a name="line.580"></a>
-<span class="sourceLineNo">581</span>   * @param familyPaths List of Pair&amp;lt;byte[] column family, String hfilePath&amp;gt;<a name="line.581"></a>
-<span class="sourceLineNo">582</span>   * @param assignSeqId<a name="line.582"></a>
-<span class="sourceLineNo">583</span>   * @param bulkLoadListener Internal hooks enabling massaging/preparation of a<a name="line.583"></a>
-<span class="sourceLineNo">584</span>   * file about to be bulk loaded<a name="line.584"></a>
-<span class="sourceLineNo">585</span>   * @param copyFile always copy hfiles if true<a name="line.585"></a>
-<span class="sourceLineNo">586</span>   * @return Map from family to List of store file paths if successful, null if failed recoverably<a name="line.586"></a>
-<span class="sourceLineNo">587</span>   * @throws IOException if failed unrecoverably.<a name="line.587"></a>
-<span class="sourceLineNo">588</span>   */<a name="line.588"></a>
-<span class="sourceLineNo">589</span>  Map&lt;byte[], List&lt;Path&gt;&gt; bulkLoadHFiles(Collection&lt;Pair&lt;byte[], String&gt;&gt; familyPaths,<a name="line.589"></a>
-<span class="sourceLineNo">590</span>      boolean assignSeqId, BulkLoadListener bulkLoadListener, boolean copyFile) throws IOException;<a name="line.590"></a>
-<span class="sourceLineNo">591</span><a name="line.591"></a>
-<span class="sourceLineNo">592</span>  ///////////////////////////////////////////////////////////////////////////<a name="line.592"></a>
-<span class="sourceLineNo">593</span>  // Coprocessors<a name="line.593"></a>
-<span class="sourceLineNo">594</span><a name="line.594"></a>
-<span class="sourceLineNo">595</span>  /** @return the coprocessor host */<a name="line.595"></a>
-<span class="sourceLineNo">596</span>  RegionCoprocessorHost getCoprocessorHost();<a name="line.596"></a>
-<span class="sourceLineNo">597</span><a name="line.597"></a>
-<span class="sourceLineNo">598</span>  /**<a name="line.598"></a>
-<span class="sourceLineNo">599</span>   * Executes a single protocol buffer coprocessor endpoint {@link Service} method using<a name="line.599"></a>
-<span class="sourceLineNo">600</span>   * the registered protocol handlers.  {@link Service} implementations must be registered via the<a name="line.600"></a>
-<span class="sourceLineNo">601</span>   * {@link Region#registerService(com.google.protobuf.Service)}<a name="line.601"></a>
-<span class="sourceLineNo">602</span>   * method before they are available.<a name="line.602"></a>
-<span class="sourceLineNo">603</span>   *<a name="line.603"></a>
-<span class="sourceLineNo">604</span>   * @param controller an {@code RpcContoller} implementation to pass to the invoked service<a name="line.604"></a>
-<span class="sourceLineNo">605</span>   * @param call a {@code CoprocessorServiceCall} instance identifying the service, method,<a name="line.605"></a>
-<span class="sourceLineNo">606</span>   *     and parameters for the method invocation<a name="line.606"></a>
-<span class="sourceLineNo">607</span>   * @return a protocol buffer {@code Message} instance containing the method's result<a name="line.607"></a>
-<span class="sourceLineNo">608</span>   * @throws IOException if no registered service handler is found or an error<a name="line.608"></a>
-<span class="sourceLineNo">609</span>   *     occurs during the invocation<a name="line.609"></a>
-<span class="sourceLineNo">610</span>   * @see org.apache.hadoop.hbase.regionserver.Region#registerService(com.google.protobuf.Service)<a name="line.610"></a>
-<span class="sourceLineNo">611</span>   */<a name="line.611"></a>
-<span class="sourceLineNo">612</span>  com.google.protobuf.Message execService(com.google.protobuf.RpcController controller,<a name="line.612"></a>
-<span class="sourceLineNo">613</span>      CoprocessorServiceCall call)<a name="line.613"></a>
-<span class="sourceLineNo">614</span>  throws IOException;<a name="line.614"></a>
-<span class="sourceLineNo">615</span><a name="line.615"></a>
-<span class="sourceLineNo">616</span>  /**<a name="line.616"></a>
-<span class="sourceLineNo">617</span>   * Registers a new protocol buffer {@link Service} subclass as a coprocessor endpoint to<a name="line.617"></a>
-<span class="sourceLineNo">618</span>   * be available for handling Region#execService(com.google.protobuf.RpcController,<a name="line.618"></a>
-<span class="sourceLineNo">619</span>   *    org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceCall) calls.<a name="line.619"></a>
-<span class="sourceLineNo">620</span>   *<a name="line.620"></a>
-<span class="sourceLineNo">621</span>   * &lt;p&gt;<a name="line.621"></a>
-<span class="sourceLineNo">622</span>   * Only a single instance may be registered per region for a given {@link Service} subclass (the<a name="line.622"></a>
-<span class="sourceLineNo">623</span>   * instances are keyed on {@link com.google.protobuf.Descriptors.ServiceDescriptor#getFullName()}.<a name="line.623"></a>
-<span class="sourceLineNo">624</span>   * After the first registration, subsequent calls with the same service name will fail with<a name="line.624"></a>
-<span class="sourceLineNo">625</span>   * a return value of {@code false}.<a name="line.625"></a>
-<span class="sourceLineNo">626</span>   * &lt;/p&gt;<a name="line.626"></a>
-<span class="sourceLineNo">627</span>   * @param instance the {@code Service} subclass instance to expose as a coprocessor endpoint<a name="line.627"></a>
-<span class="sourceLineNo">628</span>   * @return {@code true} if the registration was successful, {@code false}<a name="line.628"></a>
-<span class="sourceLineNo">629</span>   * otherwise<a name="line.629"></a>
-<span class="sourceLineNo">630</span>   */<a name="line.630"></a>
-<span class="sourceLineNo">631</span>  boolean registerService(com.google.protobuf.Service instance);<a name="line.631"></a>
-<span class="sourceLineNo">632</span><a name="line.632"></a>
-<span class="sourceLineNo">633</span>  ///////////////////////////////////////////////////////////////////////////<a name="line.633"></a>
-<span class="sourceLineNo">634</span>  // RowMutation processor support<a name="line.634"></a>
-<span class="sourceLineNo">635</span><a name="line.635"></a>
-<span class="sourceLineNo">636</span>  /**<a name="line.636"></a>
-<span class="sourceLineNo">637</span>   * Check the collection of families for validity.<a name="line.637"></a>
-<span class="sourceLineNo">638</span>   * @param families<a name="line.638"></a>
-<span class="sourceLineNo">639</span>   * @throws NoSuchColumnFamilyException<a name="line.639"></a>
-<span class="sourceLineNo">640</span>   */<a name="line.640"></a>
-<span class="sourceLineNo">641</span>  void checkFamilies(Collection&lt;byte[]&gt; families) throws NoSuchColumnFamilyException;<a name="line.641"></a>
+<span class="sourceLineNo">535</span>  void put(Put put) throws IOException;<a name="line.535"></a>
+<span class="sourceLineNo">536</span><a name="line.536"></a>
+<span class="sourceLineNo">537</span>  /**<a name="line.537"></a>
+<span class="sourceLineNo">538</span>   * Listener class to enable callers of<a name="line.538"></a>
+<span class="sourceLineNo">539</span>   * bulkLoadHFile() to perform any necessary<a name="line.539"></a>
+<span class="sourceLineNo">540</span>   * pre/post processing of a given bulkload call<a name="line.540"></a>
+<span class="sourceLineNo">541</span>   */<a name="line.541"></a>
+<span class="sourceLineNo">542</span>  interface BulkLoadListener {<a name="line.542"></a>
+<span class="sourceLineNo">543</span>    /**<a name="line.543"></a>
+<span class="sourceLineNo">544</span>     * Called before an HFile is actually loaded<a name="line.544"></a>
+<span class="sourceLineNo">545</span>     * @param family family being loaded to<a name="line.545"></a>
+<span class="sourceLineNo">546</span>     * @param srcPath path of HFile<a name="line.546"></a>
+<span class="sourceLineNo">547</span>     * @return final path to be used for actual loading<a name="line.547"></a>
+<span class="sourceLineNo">548</span>     * @throws IOException<a name="line.548"></a>
+<span class="sourceLineNo">549</span>     */<a name="line.549"></a>
+<span class="sourceLineNo">550</span>    String prepareBulkLoad(byte[] family, String srcPath, boolean copyFile)<a name="line.550"></a>
+<span class="sourceLineNo">551</span>        throws IOException;<a name="line.551"></a>
+<span class="sourceLineNo">552</span><a name="line.552"></a>
+<span class="sourceLineNo">553</span>    /**<a name="line.553"></a>
+<span class="sourceLineNo">554</span>     * Called after a successful HFile load<a name="line.554"></a>
+<span class="sourceLineNo">555</span>     * @param family family being loaded to<a name="line.555"></a>
+<span class="sourceLineNo">556</span>     * @param srcPath path of HFile<a name="line.556"></a>
+<span class="sourceLineNo">557</span>     * @throws IOException<a name="line.557"></a>
+<span class="sourceLineNo">558</span>     */<a name="line.558"></a>
+<span class="sourceLineNo">559</span>    void doneBulkLoad(byte[] family, String srcPath) throws IOException;<a name="line.559"></a>
+<span class="sourceLineNo">560</span><a name="line.560"></a>
+<span class="sourceLineNo">561</span>    /**<a name="line.561"></a>
+<span class="sourceLineNo">562</span>     * Called after a failed HFile load<a name="line.562"></a>
+<span class="sourceLineNo">563</span>     * @param family family being loaded to<a name="line.563"></a>
+<span class="sourceLineNo">564</span>     * @param srcPath path of HFile<a name="line.564"></a>
+<span class="sourceLineNo">565</span>     * @throws IOException<a name="line.565"></a>
+<span class="sourceLineNo">566</span>     */<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    void failedBulkLoad(byte[] family, String srcPath) throws IOException;<a name="line.567"></a>
+<span class="sourceLineNo">568</span>  }<a name="line.568"></a>
+<span class="sourceLineNo">569</span><a name="line.569"></a>
+<span class="sourceLineNo">570</span>  /**<a name="line.570"></a>
+<span class="sourceLineNo">571</span>   * Attempts to atomically load a group of hfiles.  This is critical for loading<a name="line.571"></a>
+<span class="sourceLineNo">572</span>   * rows with multiple column families atomically.<a name="line.572"></a>
+<span class="sourceLineNo">573</span>   *<a name="line.573"></a>
+<span class="sourceLineNo">574</span>   * @param familyPaths List of Pair&amp;lt;byte[] column family, String hfilePath&amp;gt;<a name="line.574"></a>
+<span class="sourceLineNo">575</span>   * @param bulkLoadListener Internal hooks enabling massaging/preparation of a<a name="line.575"></a>
+<span class="sourceLineNo">576</span>   * file about to be bulk loaded<a name="line.576"></a>
+<span class="sourceLineNo">577</span>   * @param assignSeqId<a name="line.577"></a>
+<span class="sourceLineNo">578</span>   * @return Map from family to List of store file paths if successful, null if failed recoverably<a name="line.578"></a>
+<span class="sourceLineNo">579</span>   * @throws IOException if failed unrecoverably.<a name="line.579"></a>
+<span class="sourceLineNo">580</span>   */<a name="line.580"></a>
+<span class="sourceLineNo">581</span>  Map&lt;byte[], List&lt;Path&gt;&gt; bulkLoadHFiles(Collection&lt;Pair&lt;byte[], String&gt;&gt; familyPaths,<a name="line.581"></a>
+<span class="sourceLineNo">582</span>      boolean assignSeqId, BulkLoadListener bulkLoadListener) throws IOException;<a name="line.582"></a>
+<span class="sourceLineNo">583</span><a name="line.583"></a>
+<span class="sourceLineNo">584</span>  /**<a name="line.584"></a>
+<span class="sourceLineNo">585</span>   * Attempts to atomically load a group of hfiles.  This is critical for loading<a name="line.585"></a>
+<span class="sourceLineNo">586</span>   * rows with multiple column families atomically.<a name="line.586"></a>
+<span class="sourceLineNo">587</span>   *<a name="line.587"></a>
+<span class="sourceLineNo">588</span>   * @param familyPaths List of Pair&amp;lt;byte[] column family, String hfilePath&amp;gt;<a name="line.588"></a>
+<span class="sourceLineNo">589</span>   * @param assignSeqId<a name="line.589"></a>
+<span class="sourceLineNo">590</span>   * @param bulkLoadListener Internal hooks enabling massaging/preparation of a<a name="line.590"></a>
+<span class="sourceLineNo">591</span>   * file about to be bulk loaded<a name="line.591"></a>
+<span class="sourceLineNo">592</span>   * @param copyFile always copy hfiles if true<a name="line.592"></a>
+<span class="sourceLineNo">593</span>   * @return Map from family to List of store file paths if successful, null if failed recoverably<a name="line.593"></a>
+<span class="sourceLineNo">594</span>   * @throws IOException if failed unrecoverably.<a name="line.594"></a>
+<span class="sourceLineNo">595</span>   */<a name="line.595"></a>
+<span class="sourceLineNo">596</span>  Map&lt;byte[], List&lt;Path&gt;&gt; bulkLoadHFiles(Collection&lt;Pair&lt;byte[], String&gt;&gt; familyPaths,<a name="line.596"></a>
+<span class="sourceLineNo">597</span>      boolean assignSeqId, BulkLoadListener bulkLoadListener, boolean copyFile) throws IOException;<a name="line.597"></a>
+<span class="sourceLineNo">598</span><a name="line.598"></a>
+<span class="sourceLineNo">599</span>  ///////////////////////////////////////////////////////////////////////////<a name="line.599"></a>
+<span class="sourceLineNo">600</span>  // Coprocessors<a name="line.600"></a>
+<span class="sourceLineNo">601</span><a name="line.601"></a>
+<span class="sourceLineNo">602</span>  /** @return the coprocessor host */<a name="line.602"></a>
+<span class="sourceLineNo">603</span>  RegionCoprocessorHost getCoprocessorHost();<a name="line.603"></a>
+<span class="sourceLineNo">604</span><a name="line.604"></a>
+<span class="sourceLineNo">605</span>  /**<a name="line.605"></a>
+<span class="sourceLineNo">606</span>   * Executes a single protocol buffer coprocessor endpoint {@link Service} method using<a name="line.606"></a>
+<span class="sourceLineNo">607</span>   * the registered protocol handlers.  {@link Service} implementations must be registered via the<a name="line.607"></a>
+<span class="sourceLineNo">608</span>   * {@link Region#registerService(com.google.protobuf.Service)}<a name="line.608"></a>
+<span class="sourceLineNo">609</span>   * method before they are available.<a name="line.609"></a>
+<span class="sourceLineNo">610</span>   *<a name="line.610"></a>
+<span class="sourceLineNo">611</span>   * @param controller an {@code RpcContoller} implementation to pass to the invoked service<a name="line.611"></a>
+<span class="sourceLineNo">612</span>   * @param call a {@code CoprocessorServiceCall} instance identifying the service, method,<a name="line.612"></a>
+<span class="sourceLineNo">613</span>   *     and parameters for the method invocation<a name="line.613"></a>
+<span class="sourceLineNo">614</span>   * @return a protocol buffer {@code Message} instance containing the method's result<a name="line.614"></a>
+<span class="sourceLineNo">615</span>   * @throws IOException if no registered service handler is found or an error<a name="line.615"></a>
+<span class="sourceLineNo">616</span>   *     occurs during the invocation<a name="line.616"></a>
+<span class="sourceLineNo">617</span>   * @see org.apache.hadoop.hbase.regionserver.Region#registerService(com.google.protobuf.Service)<a name="line.617"></a>
+<span class="sourceLineNo">618</span>   */<a name="line.618"></a>
+<span class="sourceLineNo">619</span>  com.google.protobuf.Message execService(com.google.protobuf.RpcController controller,<a name="line.619"></a>
+<span class="sourceLineNo">620</span>      CoprocessorServiceCall call)<a name="line.620"></a>
+<span class="sourceLineNo">621</span>  throws IOException;<a name="line.621"></a>
+<span class="sourceLineNo">622</span><a name="line.622"></a>
+<span class="sourceLineNo">623</span>  /**<a name="line.623"></a>
+<span class="sourceLineNo">624</span>   * Registers a new protocol buffer {@link Service} subclass as a coprocessor endpoint to<a name="line.624"></a>
+<span class="sourceLineNo">625</span>   * be available for handling Region#execService(com.google.protobuf.RpcController,<a name="line.625"></a>
+<span class="sourceLineNo">626</span>   *    org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceCall) calls.<a name="line.626"></a>
+<span class="sourceLineNo">627</span>   *<a name="line.627"></a>
+<span class="sourceLineNo">628</span>   * &lt;p&gt;<a name="line.628"></a>
+<span class="sourceLineNo">629</span>   * Only a single instance may be registered per region for a given {@link Service} subclass (the<a name="line.629"></a>
+<span class="sourceLineNo">630</span>   * instances are keyed on {@link com.google.protobuf.Descriptors.ServiceDescriptor#getFullName()}.<a name="line.630"></a>
+<span class="sourceLineNo">631</span>   * After the first registration, subsequent calls with the same service name will fail with<a name="line.631"></a>
+<span class="sourceLineNo">632</span>   * a return value of {@code false}.<a name="line.632"></a>
+<span class="sourceLineNo">633</span>   * &lt;/p&gt;<a name="line.633"></a>
+<span class="sourceLineNo">634</span>   * @param instance the {@code Service} subclass instance to expose as a coprocessor endpoint<a name="line.634"></a>
+<span class="sourceLineNo">635</span>   * @return {@code true} if the registration was successful, {@code false}<a name="line.635"></a>
+<span class="sourceLineNo">636</span>   * otherwise<a name="line.636"></a>
+<span class="sourceLineNo">637</span>   */<a name="line.637"></a>
+<span class="sourceLineNo">638</span>  boolean registerService(com.google.protobuf.Service instance);<a name="line.638"></a>
+<span class="sourceLineNo">639</span><a name="line.639"></a>
+<span class="sourceLineNo">640</span>  ///////////////////////////////////////////////////////////////////////////<a name="line.640"></a>
+<span class="sourceLineNo">641</span>  // RowMutation processor support<a name="line.641"></a>
 <span class="sourceLineNo">642</span><a name="line.642"></a>
 <span class="sourceLineNo">643</span>  /**<a name="line.643"></a>
-<span class="sourceLineNo">644</span>   * Check the collection of families for valid timestamps<a name="line.644"></a>
-<span class="sourceLineNo">645</span>   * @param familyMap<a name="line.645"></a>
-<span class="sourceLineNo">646</span>   * @param now current timestamp<a name="line.646"></a>
-<span class="sourceLineNo">647</span>   * @throws FailedSanityCheckException<a name="line.647"></a>
-<span class="sourceLineNo">648</span>   */<a name="line.648"></a>
-<span class="sourceLineNo">649</span>  void checkTimestamps(Map&lt;byte[], List&lt;Cell&gt;&gt; familyMap, long now)<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      throws FailedSanityCheckException;<a name="line.650"></a>
-<span class="sourceLineNo">651</span><a name="line.651"></a>
-<span class="sourceLineNo">652</span>  /**<a name="line.652"></a>
-<span class="sourceLineNo">653</span>   * Prepare a delete for a row mutation processor<a name="line.653"></a>
-<span class="sourceLineNo">654</span>   * @param delete The passed delete is modified by this method. WARNING!<a name="line.654"></a>
-<span class="sourceLineNo">655</span>   * @throws IOException<a name="line.655"></a>
-<span class="sourceLineNo">656</span>   */<a name="line.656"></a>
-<span class="sourceLineNo">657</span>  void prepareDelete(Delete delete) throws IOException;<a name="line.657"></a>
+<span class="sourceLineNo">644</span>   * Check the collection of families for validity.<a name="line.644"></a>
+<span class="sourceLineNo">645</span>   * @param families<a name="line.645"></a>
+<span class="sourceLineNo">646</span>   * @throws NoSuchColumnFamilyException<a name="line.646"></a>
+<span class="sourceLineNo">647</span>   */<a name="line.647"></a>
+<span class="sourceLineNo">648</span>  void checkFamilies(Collection&lt;byte[]&gt; families) throws NoSuchColumnFamilyException;<a name="line.648"></a>
+<span class="sourceLineNo">649</span><a name="line.649"></a>
+<span class="sourceLineNo">650</span>  /**<a name="line.650"></a>
+<span class="sourceLineNo">651</span>   * Check the collection of families for valid timestamps<a name="line.651"></a>
+<span class="sourceLineNo">652</span>   * @param familyMap<a name="line.652"></a>
+<span class="sourceLineNo">653</span>   * @param now current timestamp<a name="line.653"></a>
+<span class="sourceLineNo">654</span>   * @throws FailedSanityCheckException<a name="line.654"></a>
+<span class="sourceLineNo">655</span>   */<a name="line.655"></a>
+<span class="sourceLineNo">656</span>  void checkTimestamps(Map&lt;byte[], List&lt;Cell&gt;&gt; familyMap, long now)<a name="line.656"></a>
+<span class="sourceLineNo">657</span>      throws FailedSanityCheckException;<a name="line.657"></a>
 <span class="sourceLineNo">658</span><a name="line.658"></a>
 <span class="sourceLineNo">659</span>  /**<a name="line.659"></a>
-<span class="sourceLineNo">660</span>   * Set up correct timestamps in the KVs in Delete object.<a name="line.660"></a>
-<span class="sourceLineNo">661</span>   * &lt;p&gt;Caller should have the row and region locks.<a name="line.661"></a>
-<span class="sourceLineNo">662</span>   * @param mutation<a name="line.662"></a>
-<span class="sourceLineNo">663</span>   * @param familyCellMap<a name="line.663"></a>
-<span class="sourceLineNo">664</span>   * @param now<a name="line.664"></a>
-<span class="sourceLineNo">665</span>   * @throws IOException<a name="line.665"></a>
-<span class="sourceLineNo">666</span>   */<a name="line.666"></a>
-<span class="sourceLineNo">667</span>  void prepareDeleteTimestamps(Mutation mutation, Map&lt;byte[], List&lt;Cell&gt;&gt; familyCellMap,<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      byte[] now) throws IOException;<a name="line.668"></a>
-<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span>  /**<a name="line.670"></a>
-<span class="sourceLineNo">671</span>   * Replace any cell timestamps set to {@link org.apache.hadoop.hbase.HConstants#LATEST_TIMESTAMP}<a name="line.671"></a>
-<span class="sourceLineNo">672</span>   * provided current timestamp.<a name="line.672"></a>
-<span class="sourceLineNo">673</span>   * @param values<a name="line.673"></a>
-<span class="sourceLineNo">674</span>   * @param now<a name="line.674"></a>
-<span class="sourceLineNo">675</span>   */<a name="line.675"></a>
-<span class="sourceLineNo">676</span>  void updateCellTimestamps(final Iterable&lt;List&lt;Cell&gt;&gt; values, final byte[] now)<a name="line.676"></a>
-<span class="sourceLineNo">677</span>      throws IOException;<a name="line.677"></a>
-<span class="sourceLineNo">678</span><a name="line.678"></a>
-<span class="sourceLineNo">679</span>  ///////////////////////////////////////////////////////////////////////////<a name="line.679"></a>
-<span class="sourceLineNo">680</span>  // Flushes, compactions, splits, etc.<a name="line.680"></a>
-<span class="sourceLineNo">681</span>  // Wizards only, please<a name="line.681"></a>
-<span class="sourceLineNo">682</span><a name="line.682"></a>
-<span class="sourceLineNo">683</span>  interface FlushResult {<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    enum Result {<a name="line.684"></a>
-<span class="sourceLineNo">685</span>      FLUSHED_NO_COMPACTION_NEEDED,<a name="line.685"></a>
-<span class="sourceLineNo">686</span>      FLUSHED_COMPACTION_NEEDED,<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      // Special case where a flush didn't run because there's nothing in the memstores. Used when<a name="line.687"></a>
-<span class="sourceLineNo">688</span>      // bulk loading to know when we can still load even if a flush didn't happen.<a name="line.688"></a>
-<span class="sourceLineNo">689</span>      CANNOT_FLUSH_MEMSTORE_EMPTY,<a name="line.689"></a>
-<span class="sourceLineNo">690</span>      CANNOT_FLUSH<a name="line.690"></a>
-<span class="sourceLineNo">691</span>    }<a name="line.691"></a>
-<span class="sourceLineNo">692</span><a name="line.692"></a>
-<span class="sourceLineNo">693</span>    /** @return the detailed result code */<a name="line.693"></a>
-<span class="sourceLineNo">694</span>    Result getResult();<a name="line.694"></a>
-<span class="sourceLineNo">695</span><a name="line.695"></a>
-<span class="sourceLineNo">696</span>    /** @return true if the memstores were flushed, else false */<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    boolean isFlushSucceeded();<a name="line.697"></a>
-<span class="sourceLineNo">698</span><a name="line.698"></a>
-<span class="sourceLineNo">699</span>    /** @return True if the flush requested a compaction, else false */<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    boolean isCompactionNeeded();<a name="line.700"></a>
-<span class="sourceLineNo">701</span>  }<a name="line.701"></a>
+<span class="sourceLineNo">660</span>   * Prepare a delete for a row mutation processor<a name="line.660"></a>
+<span class="sourceLineNo">661</span>   * @param delete The passed delete is modified by this method. WARNING!<a name="line.661"></a>
+<span class="sourceLineNo">662</span>   * @throws IOException<a name="line.662"></a>
+<span class="sourceLineNo">663</span>   */<a name="line.663"></a>
+<span class="sourceLineNo">664</span>  void prepareDelete(Delete delete) throws IOException;<a name="line.664"></a>
+<span class="sourceLineNo">665</span><a name="line.665"></a>
+<span class="sourceLineNo">666</span>  /**<a name="line.666"></a>
+<span class="sourceLineNo">667</span>   * Set up correct timestamps in the KVs in Delete object.<a name="line.667"></a>
+<span class="sourceLineNo">668</span>   * &lt;p&gt;Caller should have the row and region locks.<a name="line.668"></a>
+<span class="sourceLineNo">669</span>   * @param mutation<a name="line.669"></a>
+<span class="sourceLineNo">670</span>   * @param familyCellMap<a name="line.670"></a>
+<span class="sourceLineNo">671</span>   * @param now<a name="line.671"></a>
+<span class="sourceLineNo">672</span>   * @throws IOException<a name="line.672"></a>
+<span class="sourceLineNo">673</span>   */<a name="line.673"></a>
+<span class="sourceLineNo">674</span>  void prepareDeleteTimestamps(Mutation mutation, Map&lt;byte[], List&lt;Cell&gt;&gt; familyCellMap,<a name="line.674"></a>
+<span class="sourceLineNo">675</span>      byte[] now) throws IOException;<a name="line.675"></a>
+<span class="sourceLineNo">676</span><a name="line.676"></a>
+<span class="sourceLineNo">677</span>  /**<a name="line.677"></a>
+<span class="sourceLineNo">678</span>   * Replace any cell timestamps set to {@link org.apache.hadoop.hbase.HConstants#LATEST_TIMESTAMP}<a name="line.678"></a>
+<span class="sourceLineNo">679</span>   * provided current timestamp.<a name="line.679"></a>
+<span class="sourceLineNo">680</span>   * @param values<a name="line.680"></a>
+<span class="sourceLineNo">681</span>   * @param now<a name="line.681"></a>
+<span class="sourceLineNo">682</span>   */<a name="line.682"></a>
+<span class="sourceLineNo">683</span>  void updateCellTimestamps(final Iterable&lt;List&lt;Cell&gt;&gt; values, final byte[] now)<a name="line.683"></a>
+<span class="sourceLineNo">684</span>      throws IOException;<a name="line.684"></a>
+<span class="sourceLineNo">685</span><a name="line.685"></a>
+<span class="sourceLineNo">686</span>  ///////////////////////////////////////////////////////////////////////////<a name="line.686"></a>
+<span class="sourceLineNo">687</span>  // Flushes, compactions, splits, etc.<a name="line.687"></a>
+<span class="sourceLineNo">688</span>  // Wizards only, please<a name="line.688"></a>
+<span class="sourceLineNo">689</span><a name="line.689"></a>
+<span class="sourceLineNo">690</span>  interface FlushResult {<a name="line.690"></a>
+<span class="sourceLineNo">691</span>    enum Result {<a name="line.691"></a>
+<span class="sourceLineNo">692</span>      FLUSHED_NO_COMPACTION_NEEDED,<a name="line.692"></a>
+<span class="sourceLineNo">693</span>      FLUSHED_COMPACTION_NEEDED,<a name="line.693"></a>
+<span class="sourceLineNo">694</span>      // Special case where a flush didn't run because there's nothing in the memstores. Used when<a name="line.694"></a>
+<span class="sourceLineNo">695</span>      // bulk loading to know when we can still load even if a flush didn't happen.<a name="line.695"></a>
+<span class="sourceLineNo">696</span>      CANNOT_FLUSH_MEMSTORE_EMPTY,<a name="line.696"></a>
+<span class="sourceLineNo">697</span>      CANNOT_FLUSH<a name="line.697"></a>
+<span class="sourceLineNo">698</span>    }<a name="line.698"></a>
+<span class="sourceLineNo">699</span><a name="line.699"></a>
+<span class="sourceLineNo">700</span>    /** @return the detailed result code */<a name="line.700"></a>
+<span class="sourceLineNo">701</span>    Result getResult();<a name="line.701"></a>
 <span class="sourceLineNo">702</span><a name="line.702"></a>
-<span class="sourceLineNo">703</span>  /**<a name="line.703"></a>
-<span class="sourceLineNo">704</span>   * Flush the cache.<a name="line.704"></a>
-<span class="sourceLineNo">705</span>   *<a name="line.705"></a>
-<span class="sourceLineNo">706</span>   * &lt;p&gt;When this method is called the cache will be flushed unless:<a name="line.706"></a>
-<span class="sourceLineNo">707</span>   * &lt;ol&gt;<a name="line.707"></a>
-<span class="sourceLineNo">708</span>   *   &lt;li&gt;the cache is empty&lt;/li&gt;<a name="line.708"></a>
-<span class="sourceLineNo">709</span>   *   &lt;li&gt;the region is closed.&lt;/li&gt;<a name="line.709"></a>
-<span class="sourceLineNo">710</span>   *   &lt;li&gt;a flush is already in progress&lt;/li&gt;<a name="line.710"></a>
-<span class="sourceLineNo">711</span>   *   &lt;li&gt;writes are disabled&lt;/li&gt;<a name="line.711"></a>
-<span class="sourceLineNo">712</span>   * &lt;/ol&gt;<a name="line.712"></a>
-<span class="sourceLineNo">713</span>   *<a name="line.713"></a>
-<span class="sourceLineNo">714</span>   * &lt;p&gt;This method may block for some time, so it should not be called from a<a name="line.714"></a>
-<span class="sourceLineNo">715</span>   * time-sensitive thread.<a name="line.715"></a>
-<span class="sourceLineNo">716</span>   * @param force whether we want to force a flush of all stores<a name="line.716"></a>
-<span class="sourceLineNo">717</span>   * @return FlushResult indicating whether the flush was successful or not and if<a name="line.717"></a>
-<span class="sourceLineNo">718</span>   * the region needs compacting<a name="line.718"></a>
-<span class="sourceLineNo">719</span>   *<a name="line.719"></a>
-<span class="sourceLineNo">720</span>   * @throws IOException general io exceptions<a name="line.720"></a>
-<span class="sourceLineNo">721</span>   * because a snapshot was not properly persisted.<a name="line.721"></a>
-<span class="sourceLineNo">722</span>   */<a name="line.722"></a>
-<span class="sourceLineNo">723</span>  FlushResult flush(boolean force) throws IOException;<a name="line.723"></a>
-<span class="sourceLineNo">724</span><a name="line.724"></a>
-<span class="sourceLineNo">725</span>  /**<a name="line.725"></a>
-<span class="sourceLineNo">726</span>   * Synchronously compact all stores in the region.<a name="line.726"></a>
-<span class="sourceLineNo">727</span>   * &lt;p&gt;This operation could block for a long time, so don't call it from a<a name="line.727"></a>
-<span class="sourceLineNo">728</span>   * time-sensitive thread.<a name="line.728"></a>
-<span class="sourceLineNo">729</span>   * &lt;p&gt;Note that no locks are taken to prevent possible conflicts between<a name="line.729"></a>
-<span class="sourceLineNo">730</span>   * compaction and splitting activities. The regionserver does not normally compact<a name="line.730"></a>
-<span class="sourceLineNo">731</span>   * and split in parallel. However by calling this method you may introduce<a name="line.731"></a>
-<span class="sourceLineNo">732</span>   * unexpected and unhandled concurrency. Don't do this unless you know what<a name="line.732"></a>
-<span class="sourceLineNo">733</span>   * you are doing.<a name="line.733"></a>
-<span class="sourceLineNo">734</span>   *<a name="line.734"></a>
-<span class="sourceLineNo">735</span>   * @param majorCompaction True to force a major compaction regardless of thresholds<a name="line.735"></a>
-<span class="sourceLineNo">736</span>   * @throws IOException<a name="line.736"></a>
-<span class="sourceLineNo">737</span>   */<a name="line.737"></a>
-<span class="sourceLineNo">738</span>  void compact(final boolean majorCompaction) throws IOException;<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span>  /**<a name="line.740"></a>
-<span class="sourceLineNo">741</span>   * Trigger major compaction on all stores in the region.<a name="line.741"></a>
-<span class="sourceLineNo">742</span>   * &lt;p&gt;<a name="line.742"></a>
-<span class="sourceLineNo">743</span>   * Compaction will be performed asynchronously to this call by the RegionServer's<a name="line.743"></a>
-<span class="sourceLineNo">744</span>   * CompactSplitThread. See also {@link Store#triggerMajorCompaction()}<a name="line.744"></a>
-<span class="sourceLineNo">745</span>   * @throws IOException<a name="line.745"></a>
-<span class="sourceLineNo">746</span>   */<a name="line.746"></a>
-<span class="sourceLineNo">747</span>  void triggerMajorCompaction() throws IOException;<a name="line.747"></a>
-<span class="sourceLineNo">748</span><a name="line.748"></a>
-<span class="sourceLineNo">749</span>  /**<a name="line.749"></a>
-<span class="sourceLineNo">750</span>   * @return if a given region is in compaction now.<a name="line.750"></a>
-<span class="sourceLineNo">751</span>   */<a name="line.751"></a>
-<span class="sourceLineNo">752</span>  CompactionState getCompactionState();<a name="line.752"></a>
-<span class="sourceLineNo">753</span><a name="line.753"></a>
-<span class="sourceLineNo">754</span>  /** Wait for all current flushes and compactions of the region to complete */<a name="line.754"></a>
-<span class="sourceLineNo">755</span>  void 

<TRUNCATED>

[31/33] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/book.html
----------------------------------------------------------------------
diff --git a/book.html b/book.html
index 212e336..cdc90c7 100644
--- a/book.html
+++ b/book.html
@@ -31617,45 +31617,28 @@ When you are satisfied with your changes, follow the procedure in
 <div class="sect2">
 <h3 id="website_publish"><a class="anchor" href="#website_publish"></a>A.3. Publishing the HBase Website and Documentation</h3>
 <div class="paragraph">
-<p>HBase uses the ASF&#8217;s <code>gitpubsub</code> mechanism.
-. After generating the website and documentation
-artifacts using <code>mvn clean site site:stage</code>, check out the <code>asf-site</code> repository.</p>
-</div>
-<div class="olist arabic">
-<ol class="arabic">
-<li>
-<p>Remove previously-generated content using the following command:</p>
-<div class="listingblock">
-<div class="content">
-<pre>rm -rf rm -rf *apidocs* *book* *.html *.pdf* css js</pre>
+<p>HBase uses the ASF&#8217;s <code>gitpubsub</code> mechanism. A Jenkins job runs the
+<code>dev-support/jenkins-scripts/generate-hbase-website.sh</code> script, which runs the
+<code>mvn clean site site:stage</code> against the <code>master</code> branch of the <code>hbase</code>
+repository and commits the built artifacts to the <code>asf-site</code> branch of the
+<code>hbase-site</code> repository. When the commit is pushed, the website is redeployed
+automatically. If the script encounters an error, an email is sent to the
+developer mailing list. You can run the script manually or examine it to see the
+steps involved.</p>
 </div>
 </div>
-<div class="admonitionblock warning">
-<table>
-<tr>
-<td class="icon">
-<i class="fa icon-warning" title="Warning"></i>
-</td>
-<td class="content">
-Do not remove the <code>0.94/</code> directory. To regenerate them, you must check out
-the 0.94 branch and run <code>mvn clean site site:stage</code> from there, and then copy the
-artifacts to the 0.94/ directory of the <code>asf-site</code> branch.
-</td>
-</tr>
-</table>
-</div>
-</li>
-<li>
-<p>Copy the contents of <code>target/staging</code> to the branch.</p>
-</li>
-<li>
-<p>Add and commit your changes, and submit a patch for review.</p>
-</li>
-</ol>
+<div class="sect2">
+<h3 id="website_check_links"><a class="anchor" href="#website_check_links"></a>A.4. Checking the HBase Website for Broken Links</h3>
+<div class="paragraph">
+<p>A Jenkins job runs periodically to check HBase website for broken links, using
+the <code>dev-support/jenkins-scripts/check-website-links.sh</code> script. This script
+uses a tool called <code>linklint</code> to check for bad links and create a report. If
+broken links are found, an email is sent to the developer mailing list. You can
+run the script manually or examine it to see the steps involved.</p>
 </div>
 </div>
 <div class="sect2">
-<h3 id="_hbase_reference_guide_style_guide_and_cheat_sheet"><a class="anchor" href="#_hbase_reference_guide_style_guide_and_cheat_sheet"></a>A.4. HBase Reference Guide Style Guide and Cheat Sheet</h3>
+<h3 id="_hbase_reference_guide_style_guide_and_cheat_sheet"><a class="anchor" href="#_hbase_reference_guide_style_guide_and_cheat_sheet"></a>A.5. HBase Reference Guide Style Guide and Cheat Sheet</h3>
 <div class="paragraph">
 <p>The HBase Reference Guide is written in Asciidoc and built using <a href="http://asciidoctor.org">AsciiDoctor</a>.
 The following cheat sheet is included for your reference. More nuanced and comprehensive documentation
@@ -32056,7 +32039,7 @@ Nothing between the slashes will show up.
 </table>
 </div>
 <div class="sect2">
-<h3 id="_auto_generated_content"><a class="anchor" href="#_auto_generated_content"></a>A.5. Auto-Generated Content</h3>
+<h3 id="_auto_generated_content"><a class="anchor" href="#_auto_generated_content"></a>A.6. Auto-Generated Content</h3>
 <div class="paragraph">
 <p>Some parts of the HBase Reference Guide, most notably <a href="#config.files">config.files</a>,
 are generated automatically, so that this area of the documentation stays in
@@ -32076,7 +32059,7 @@ from HBase source files in the future.</p>
 </div>
 </div>
 <div class="sect2">
-<h3 id="_images_in_the_hbase_reference_guide"><a class="anchor" href="#_images_in_the_hbase_reference_guide"></a>A.6. Images in the HBase Reference Guide</h3>
+<h3 id="_images_in_the_hbase_reference_guide"><a class="anchor" href="#_images_in_the_hbase_reference_guide"></a>A.7. Images in the HBase Reference Guide</h3>
 <div class="paragraph">
 <p>You can include images in the HBase Reference Guide. It is important to include
 an image title if possible, and alternate text always. This allows screen readers
@@ -32111,7 +32094,7 @@ committed, it should go into the above directory.</p>
 </div>
 </div>
 <div class="sect2">
-<h3 id="_adding_a_new_chapter_to_the_hbase_reference_guide"><a class="anchor" href="#_adding_a_new_chapter_to_the_hbase_reference_guide"></a>A.7. Adding a New Chapter to the HBase Reference Guide</h3>
+<h3 id="_adding_a_new_chapter_to_the_hbase_reference_guide"><a class="anchor" href="#_adding_a_new_chapter_to_the_hbase_reference_guide"></a>A.8. Adding a New Chapter to the HBase Reference Guide</h3>
 <div class="paragraph">
 <p>If you want to add a new chapter to the HBase Reference Guide, the easiest way
 is to copy an existing chapter file, rename it, and change the ID (in double
@@ -32130,7 +32113,7 @@ creating your patch.</p>
 </div>
 </div>
 <div class="sect2">
-<h3 id="_common_documentation_issues"><a class="anchor" href="#_common_documentation_issues"></a>A.8. Common Documentation Issues</h3>
+<h3 id="_common_documentation_issues"><a class="anchor" href="#_common_documentation_issues"></a>A.9. Common Documentation Issues</h3>
 <div class="paragraph">
 <p>The following documentation issues come up often. Some of these are preferences,
 but others can create mysterious build errors or other problems.</p>


[21/33] hbase-site git commit: Published site at 82d554e3783372cc6b05489452c815b57c06f6cd.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/99c53df1/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatch.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatch.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatch.html
index f6a717e..a701ece 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatch.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatch.html
@@ -7930,329 +7930,342 @@
 <span class="sourceLineNo">7922</span>      case DELETE:<a name="line.7922"></a>
 <span class="sourceLineNo">7923</span>      case BATCH_MUTATE:<a name="line.7923"></a>
 <span class="sourceLineNo">7924</span>      case COMPACT_REGION:<a name="line.7924"></a>
-<span class="sourceLineNo">7925</span>        // when a region is in recovering state, no read, split or merge is allowed<a name="line.7925"></a>
-<span class="sourceLineNo">7926</span>        if (isRecovering() &amp;&amp; (this.disallowWritesInRecovering ||<a name="line.7926"></a>
-<span class="sourceLineNo">7927</span>              (op != Operation.PUT &amp;&amp; op != Operation.DELETE &amp;&amp; op != Operation.BATCH_MUTATE))) {<a name="line.7927"></a>
-<span class="sourceLineNo">7928</span>          throw new RegionInRecoveryException(getRegionInfo().getRegionNameAsString() +<a name="line.7928"></a>
-<span class="sourceLineNo">7929</span>            " is recovering; cannot take reads");<a name="line.7929"></a>
-<span class="sourceLineNo">7930</span>        }<a name="line.7930"></a>
-<span class="sourceLineNo">7931</span>        break;<a name="line.7931"></a>
-<span class="sourceLineNo">7932</span>      default:<a name="line.7932"></a>
-<span class="sourceLineNo">7933</span>        break;<a name="line.7933"></a>
-<span class="sourceLineNo">7934</span>    }<a name="line.7934"></a>
-<span class="sourceLineNo">7935</span>    if (op == Operation.MERGE_REGION || op == Operation.SPLIT_REGION<a name="line.7935"></a>
-<span class="sourceLineNo">7936</span>        || op == Operation.COMPACT_REGION) {<a name="line.7936"></a>
-<span class="sourceLineNo">7937</span>      // split, merge or compact region doesn't need to check the closing/closed state or lock the<a name="line.7937"></a>
-<span class="sourceLineNo">7938</span>      // region<a name="line.7938"></a>
-<span class="sourceLineNo">7939</span>      return;<a name="line.7939"></a>
-<span class="sourceLineNo">7940</span>    }<a name="line.7940"></a>
-<span class="sourceLineNo">7941</span>    if (this.closing.get()) {<a name="line.7941"></a>
-<span class="sourceLineNo">7942</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.7942"></a>
-<span class="sourceLineNo">7943</span>    }<a name="line.7943"></a>
-<span class="sourceLineNo">7944</span>    lock(lock.readLock());<a name="line.7944"></a>
-<span class="sourceLineNo">7945</span>    if (this.closed.get()) {<a name="line.7945"></a>
-<span class="sourceLineNo">7946</span>      lock.readLock().unlock();<a name="line.7946"></a>
-<span class="sourceLineNo">7947</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.7947"></a>
-<span class="sourceLineNo">7948</span>    }<a name="line.7948"></a>
-<span class="sourceLineNo">7949</span>    try {<a name="line.7949"></a>
-<span class="sourceLineNo">7950</span>      if (coprocessorHost != null) {<a name="line.7950"></a>
-<span class="sourceLineNo">7951</span>        coprocessorHost.postStartRegionOperation(op);<a name="line.7951"></a>
-<span class="sourceLineNo">7952</span>      }<a name="line.7952"></a>
-<span class="sourceLineNo">7953</span>    } catch (Exception e) {<a name="line.7953"></a>
-<span class="sourceLineNo">7954</span>      lock.readLock().unlock();<a name="line.7954"></a>
-<span class="sourceLineNo">7955</span>      throw new IOException(e);<a name="line.7955"></a>
-<span class="sourceLineNo">7956</span>    }<a name="line.7956"></a>
-<span class="sourceLineNo">7957</span>  }<a name="line.7957"></a>
-<span class="sourceLineNo">7958</span><a name="line.7958"></a>
-<span class="sourceLineNo">7959</span>  @Override<a name="line.7959"></a>
-<span class="sourceLineNo">7960</span>  public void closeRegionOperation() throws IOException {<a name="line.7960"></a>
-<span class="sourceLineNo">7961</span>    closeRegionOperation(Operation.ANY);<a name="line.7961"></a>
-<span class="sourceLineNo">7962</span>  }<a name="line.7962"></a>
-<span class="sourceLineNo">7963</span><a name="line.7963"></a>
-<span class="sourceLineNo">7964</span>  /**<a name="line.7964"></a>
-<span class="sourceLineNo">7965</span>   * Closes the lock. This needs to be called in the finally block corresponding<a name="line.7965"></a>
-<span class="sourceLineNo">7966</span>   * to the try block of {@link #startRegionOperation(Operation)}<a name="line.7966"></a>
-<span class="sourceLineNo">7967</span>   * @throws IOException<a name="line.7967"></a>
-<span class="sourceLineNo">7968</span>   */<a name="line.7968"></a>
-<span class="sourceLineNo">7969</span>  public void closeRegionOperation(Operation operation) throws IOException {<a name="line.7969"></a>
-<span class="sourceLineNo">7970</span>    lock.readLock().unlock();<a name="line.7970"></a>
-<span class="sourceLineNo">7971</span>    if (coprocessorHost != null) {<a name="line.7971"></a>
-<span class="sourceLineNo">7972</span>      coprocessorHost.postCloseRegionOperation(operation);<a name="line.7972"></a>
-<span class="sourceLineNo">7973</span>    }<a name="line.7973"></a>
-<span class="sourceLineNo">7974</span>  }<a name="line.7974"></a>
-<span class="sourceLineNo">7975</span><a name="line.7975"></a>
-<span class="sourceLineNo">7976</span>  /**<a name="line.7976"></a>
-<span class="sourceLineNo">7977</span>   * This method needs to be called before any public call that reads or<a name="line.7977"></a>
-<span class="sourceLineNo">7978</span>   * modifies stores in bulk. It has to be called just before a try.<a name="line.7978"></a>
-<span class="sourceLineNo">7979</span>   * #closeBulkRegionOperation needs to be called in the try's finally block<a name="line.7979"></a>
-<span class="sourceLineNo">7980</span>   * Acquires a writelock and checks if the region is closing or closed.<a name="line.7980"></a>
-<span class="sourceLineNo">7981</span>   * @throws NotServingRegionException when the region is closing or closed<a name="line.7981"></a>
-<span class="sourceLineNo">7982</span>   * @throws RegionTooBusyException if failed to get the lock in time<a name="line.7982"></a>
-<span class="sourceLineNo">7983</span>   * @throws InterruptedIOException if interrupted while waiting for a lock<a name="line.7983"></a>
-<span class="sourceLineNo">7984</span>   */<a name="line.7984"></a>
-<span class="sourceLineNo">7985</span>  private void startBulkRegionOperation(boolean writeLockNeeded)<a name="line.7985"></a>
-<span class="sourceLineNo">7986</span>      throws NotServingRegionException, RegionTooBusyException, InterruptedIOException {<a name="line.7986"></a>
-<span class="sourceLineNo">7987</span>    if (this.closing.get()) {<a name="line.7987"></a>
-<span class="sourceLineNo">7988</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.7988"></a>
-<span class="sourceLineNo">7989</span>    }<a name="line.7989"></a>
-<span class="sourceLineNo">7990</span>    if (writeLockNeeded) lock(lock.writeLock());<a name="line.7990"></a>
-<span class="sourceLineNo">7991</span>    else lock(lock.readLock());<a name="line.7991"></a>
-<span class="sourceLineNo">7992</span>    if (this.closed.get()) {<a name="line.7992"></a>
-<span class="sourceLineNo">7993</span>      if (writeLockNeeded) lock.writeLock().unlock();<a name="line.7993"></a>
-<span class="sourceLineNo">7994</span>      else lock.readLock().unlock();<a name="line.7994"></a>
-<span class="sourceLineNo">7995</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.7995"></a>
-<span class="sourceLineNo">7996</span>    }<a name="line.7996"></a>
-<span class="sourceLineNo">7997</span>  }<a name="line.7997"></a>
-<span class="sourceLineNo">7998</span><a name="line.7998"></a>
-<span class="sourceLineNo">7999</span>  /**<a name="line.7999"></a>
-<span class="sourceLineNo">8000</span>   * Closes the lock. This needs to be called in the finally block corresponding<a name="line.8000"></a>
-<span class="sourceLineNo">8001</span>   * to the try block of #startRegionOperation<a name="line.8001"></a>
-<span class="sourceLineNo">8002</span>   */<a name="line.8002"></a>
-<span class="sourceLineNo">8003</span>  private void closeBulkRegionOperation(){<a name="line.8003"></a>
-<span class="sourceLineNo">8004</span>    if (lock.writeLock().isHeldByCurrentThread()) lock.writeLock().unlock();<a name="line.8004"></a>
-<span class="sourceLineNo">8005</span>    else lock.readLock().unlock();<a name="line.8005"></a>
-<span class="sourceLineNo">8006</span>  }<a name="line.8006"></a>
-<span class="sourceLineNo">8007</span><a name="line.8007"></a>
-<span class="sourceLineNo">8008</span>  /**<a name="line.8008"></a>
-<span class="sourceLineNo">8009</span>   * Update LongAdders for number of puts without wal and the size of possible data loss.<a name="line.8009"></a>
-<span class="sourceLineNo">8010</span>   * These information are exposed by the region server metrics.<a name="line.8010"></a>
-<span class="sourceLineNo">8011</span>   */<a name="line.8011"></a>
-<span class="sourceLineNo">8012</span>  private void recordMutationWithoutWal(final Map&lt;byte [], List&lt;Cell&gt;&gt; familyMap) {<a name="line.8012"></a>
-<span class="sourceLineNo">8013</span>    numMutationsWithoutWAL.increment();<a name="line.8013"></a>
-<span class="sourceLineNo">8014</span>    if (numMutationsWithoutWAL.sum() &lt;= 1) {<a name="line.8014"></a>
-<span class="sourceLineNo">8015</span>      LOG.info("writing data to region " + this +<a name="line.8015"></a>
-<span class="sourceLineNo">8016</span>               " with WAL disabled. Data may be lost in the event of a crash.");<a name="line.8016"></a>
-<span class="sourceLineNo">8017</span>    }<a name="line.8017"></a>
-<span class="sourceLineNo">8018</span><a name="line.8018"></a>
-<span class="sourceLineNo">8019</span>    long mutationSize = 0;<a name="line.8019"></a>
-<span class="sourceLineNo">8020</span>    for (List&lt;Cell&gt; cells: familyMap.values()) {<a name="line.8020"></a>
-<span class="sourceLineNo">8021</span>      assert cells instanceof RandomAccess;<a name="line.8021"></a>
-<span class="sourceLineNo">8022</span>      int listSize = cells.size();<a name="line.8022"></a>
-<span class="sourceLineNo">8023</span>      for (int i=0; i &lt; listSize; i++) {<a name="line.8023"></a>
-<span class="sourceLineNo">8024</span>        Cell cell = cells.get(i);<a name="line.8024"></a>
-<span class="sourceLineNo">8025</span>        mutationSize += KeyValueUtil.length(cell);<a name="line.8025"></a>
-<span class="sourceLineNo">8026</span>      }<a name="line.8026"></a>
-<span class="sourceLineNo">8027</span>    }<a name="line.8027"></a>
-<span class="sourceLineNo">8028</span><a name="line.8028"></a>
-<span class="sourceLineNo">8029</span>    dataInMemoryWithoutWAL.add(mutationSize);<a name="line.8029"></a>
-<span class="sourceLineNo">8030</span>  }<a name="line.8030"></a>
+<span class="sourceLineNo">7925</span>      case SNAPSHOT:<a name="line.7925"></a>
+<span class="sourceLineNo">7926</span>        // when a region is in recovering state, no read, split, merge or snapshot is allowed<a name="line.7926"></a>
+<span class="sourceLineNo">7927</span>        if (isRecovering() &amp;&amp; (this.disallowWritesInRecovering ||<a name="line.7927"></a>
+<span class="sourceLineNo">7928</span>              (op != Operation.PUT &amp;&amp; op != Operation.DELETE &amp;&amp; op != Operation.BATCH_MUTATE))) {<a name="line.7928"></a>
+<span class="sourceLineNo">7929</span>          throw new RegionInRecoveryException(getRegionInfo().getRegionNameAsString() +<a name="line.7929"></a>
+<span class="sourceLineNo">7930</span>            " is recovering; cannot take reads");<a name="line.7930"></a>
+<span class="sourceLineNo">7931</span>        }<a name="line.7931"></a>
+<span class="sourceLineNo">7932</span>        break;<a name="line.7932"></a>
+<span class="sourceLineNo">7933</span>      default:<a name="line.7933"></a>
+<span class="sourceLineNo">7934</span>        break;<a name="line.7934"></a>
+<span class="sourceLineNo">7935</span>    }<a name="line.7935"></a>
+<span class="sourceLineNo">7936</span>    if (op == Operation.MERGE_REGION || op == Operation.SPLIT_REGION<a name="line.7936"></a>
+<span class="sourceLineNo">7937</span>        || op == Operation.COMPACT_REGION) {<a name="line.7937"></a>
+<span class="sourceLineNo">7938</span>      // split, merge or compact region doesn't need to check the closing/closed state or lock the<a name="line.7938"></a>
+<span class="sourceLineNo">7939</span>      // region<a name="line.7939"></a>
+<span class="sourceLineNo">7940</span>      return;<a name="line.7940"></a>
+<span class="sourceLineNo">7941</span>    }<a name="line.7941"></a>
+<span class="sourceLineNo">7942</span>    if (this.closing.get()) {<a name="line.7942"></a>
+<span class="sourceLineNo">7943</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.7943"></a>
+<span class="sourceLineNo">7944</span>    }<a name="line.7944"></a>
+<span class="sourceLineNo">7945</span>    lock(lock.readLock());<a name="line.7945"></a>
+<span class="sourceLineNo">7946</span>    if (this.closed.get()) {<a name="line.7946"></a>
+<span class="sourceLineNo">7947</span>      lock.readLock().unlock();<a name="line.7947"></a>
+<span class="sourceLineNo">7948</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.7948"></a>
+<span class="sourceLineNo">7949</span>    }<a name="line.7949"></a>
+<span class="sourceLineNo">7950</span>    // The unit for snapshot is a region. So, all stores for this region must be<a name="line.7950"></a>
+<span class="sourceLineNo">7951</span>    // prepared for snapshot operation before proceeding.<a name="line.7951"></a>
+<span class="sourceLineNo">7952</span>    if (op == Operation.SNAPSHOT) {<a name="line.7952"></a>
+<span class="sourceLineNo">7953</span>      for (Store store : stores.values()) {<a name="line.7953"></a>
+<span class="sourceLineNo">7954</span>        if (store instanceof HStore) {<a name="line.7954"></a>
+<span class="sourceLineNo">7955</span>          ((HStore)store).preSnapshotOperation();<a name="line.7955"></a>
+<span class="sourceLineNo">7956</span>        }<a name="line.7956"></a>
+<span class="sourceLineNo">7957</span>      }<a name="line.7957"></a>
+<span class="sourceLineNo">7958</span>    }<a name="line.7958"></a>
+<span class="sourceLineNo">7959</span>    try {<a name="line.7959"></a>
+<span class="sourceLineNo">7960</span>      if (coprocessorHost != null) {<a name="line.7960"></a>
+<span class="sourceLineNo">7961</span>        coprocessorHost.postStartRegionOperation(op);<a name="line.7961"></a>
+<span class="sourceLineNo">7962</span>      }<a name="line.7962"></a>
+<span class="sourceLineNo">7963</span>    } catch (Exception e) {<a name="line.7963"></a>
+<span class="sourceLineNo">7964</span>      lock.readLock().unlock();<a name="line.7964"></a>
+<span class="sourceLineNo">7965</span>      throw new IOException(e);<a name="line.7965"></a>
+<span class="sourceLineNo">7966</span>    }<a name="line.7966"></a>
+<span class="sourceLineNo">7967</span>  }<a name="line.7967"></a>
+<span class="sourceLineNo">7968</span><a name="line.7968"></a>
+<span class="sourceLineNo">7969</span>  @Override<a name="line.7969"></a>
+<span class="sourceLineNo">7970</span>  public void closeRegionOperation() throws IOException {<a name="line.7970"></a>
+<span class="sourceLineNo">7971</span>    closeRegionOperation(Operation.ANY);<a name="line.7971"></a>
+<span class="sourceLineNo">7972</span>  }<a name="line.7972"></a>
+<span class="sourceLineNo">7973</span><a name="line.7973"></a>
+<span class="sourceLineNo">7974</span>  @Override<a name="line.7974"></a>
+<span class="sourceLineNo">7975</span>  public void closeRegionOperation(Operation operation) throws IOException {<a name="line.7975"></a>
+<span class="sourceLineNo">7976</span>    if (operation == Operation.SNAPSHOT) {<a name="line.7976"></a>
+<span class="sourceLineNo">7977</span>      for (Store store: stores.values()) {<a name="line.7977"></a>
+<span class="sourceLineNo">7978</span>        if (store instanceof HStore) {<a name="line.7978"></a>
+<span class="sourceLineNo">7979</span>          ((HStore)store).postSnapshotOperation();<a name="line.7979"></a>
+<span class="sourceLineNo">7980</span>        }<a name="line.7980"></a>
+<span class="sourceLineNo">7981</span>      }<a name="line.7981"></a>
+<span class="sourceLineNo">7982</span>    }<a name="line.7982"></a>
+<span class="sourceLineNo">7983</span>    lock.readLock().unlock();<a name="line.7983"></a>
+<span class="sourceLineNo">7984</span>    if (coprocessorHost != null) {<a name="line.7984"></a>
+<span class="sourceLineNo">7985</span>      coprocessorHost.postCloseRegionOperation(operation);<a name="line.7985"></a>
+<span class="sourceLineNo">7986</span>    }<a name="line.7986"></a>
+<span class="sourceLineNo">7987</span>  }<a name="line.7987"></a>
+<span class="sourceLineNo">7988</span><a name="line.7988"></a>
+<span class="sourceLineNo">7989</span>  /**<a name="line.7989"></a>
+<span class="sourceLineNo">7990</span>   * This method needs to be called before any public call that reads or<a name="line.7990"></a>
+<span class="sourceLineNo">7991</span>   * modifies stores in bulk. It has to be called just before a try.<a name="line.7991"></a>
+<span class="sourceLineNo">7992</span>   * #closeBulkRegionOperation needs to be called in the try's finally block<a name="line.7992"></a>
+<span class="sourceLineNo">7993</span>   * Acquires a writelock and checks if the region is closing or closed.<a name="line.7993"></a>
+<span class="sourceLineNo">7994</span>   * @throws NotServingRegionException when the region is closing or closed<a name="line.7994"></a>
+<span class="sourceLineNo">7995</span>   * @throws RegionTooBusyException if failed to get the lock in time<a name="line.7995"></a>
+<span class="sourceLineNo">7996</span>   * @throws InterruptedIOException if interrupted while waiting for a lock<a name="line.7996"></a>
+<span class="sourceLineNo">7997</span>   */<a name="line.7997"></a>
+<span class="sourceLineNo">7998</span>  private void startBulkRegionOperation(boolean writeLockNeeded)<a name="line.7998"></a>
+<span class="sourceLineNo">7999</span>      throws NotServingRegionException, RegionTooBusyException, InterruptedIOException {<a name="line.7999"></a>
+<span class="sourceLineNo">8000</span>    if (this.closing.get()) {<a name="line.8000"></a>
+<span class="sourceLineNo">8001</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closing");<a name="line.8001"></a>
+<span class="sourceLineNo">8002</span>    }<a name="line.8002"></a>
+<span class="sourceLineNo">8003</span>    if (writeLockNeeded) lock(lock.writeLock());<a name="line.8003"></a>
+<span class="sourceLineNo">8004</span>    else lock(lock.readLock());<a name="line.8004"></a>
+<span class="sourceLineNo">8005</span>    if (this.closed.get()) {<a name="line.8005"></a>
+<span class="sourceLineNo">8006</span>      if (writeLockNeeded) lock.writeLock().unlock();<a name="line.8006"></a>
+<span class="sourceLineNo">8007</span>      else lock.readLock().unlock();<a name="line.8007"></a>
+<span class="sourceLineNo">8008</span>      throw new NotServingRegionException(getRegionInfo().getRegionNameAsString() + " is closed");<a name="line.8008"></a>
+<span class="sourceLineNo">8009</span>    }<a name="line.8009"></a>
+<span class="sourceLineNo">8010</span>  }<a name="line.8010"></a>
+<span class="sourceLineNo">8011</span><a name="line.8011"></a>
+<span class="sourceLineNo">8012</span>  /**<a name="line.8012"></a>
+<span class="sourceLineNo">8013</span>   * Closes the lock. This needs to be called in the finally block corresponding<a name="line.8013"></a>
+<span class="sourceLineNo">8014</span>   * to the try block of #startRegionOperation<a name="line.8014"></a>
+<span class="sourceLineNo">8015</span>   */<a name="line.8015"></a>
+<span class="sourceLineNo">8016</span>  private void closeBulkRegionOperation(){<a name="line.8016"></a>
+<span class="sourceLineNo">8017</span>    if (lock.writeLock().isHeldByCurrentThread()) lock.writeLock().unlock();<a name="line.8017"></a>
+<span class="sourceLineNo">8018</span>    else lock.readLock().unlock();<a name="line.8018"></a>
+<span class="sourceLineNo">8019</span>  }<a name="line.8019"></a>
+<span class="sourceLineNo">8020</span><a name="line.8020"></a>
+<span class="sourceLineNo">8021</span>  /**<a name="line.8021"></a>
+<span class="sourceLineNo">8022</span>   * Update LongAdders for number of puts without wal and the size of possible data loss.<a name="line.8022"></a>
+<span class="sourceLineNo">8023</span>   * These information are exposed by the region server metrics.<a name="line.8023"></a>
+<span class="sourceLineNo">8024</span>   */<a name="line.8024"></a>
+<span class="sourceLineNo">8025</span>  private void recordMutationWithoutWal(final Map&lt;byte [], List&lt;Cell&gt;&gt; familyMap) {<a name="line.8025"></a>
+<span class="sourceLineNo">8026</span>    numMutationsWithoutWAL.increment();<a name="line.8026"></a>
+<span class="sourceLineNo">8027</span>    if (numMutationsWithoutWAL.sum() &lt;= 1) {<a name="line.8027"></a>
+<span class="sourceLineNo">8028</span>      LOG.info("writing data to region " + this +<a name="line.8028"></a>
+<span class="sourceLineNo">8029</span>               " with WAL disabled. Data may be lost in the event of a crash.");<a name="line.8029"></a>
+<span class="sourceLineNo">8030</span>    }<a name="line.8030"></a>
 <span class="sourceLineNo">8031</span><a name="line.8031"></a>
-<span class="sourceLineNo">8032</span>  private void lock(final Lock lock)<a name="line.8032"></a>
-<span class="sourceLineNo">8033</span>      throws RegionTooBusyException, InterruptedIOException {<a name="line.8033"></a>
-<span class="sourceLineNo">8034</span>    lock(lock, 1);<a name="line.8034"></a>
-<span class="sourceLineNo">8035</span>  }<a name="line.8035"></a>
-<span class="sourceLineNo">8036</span><a name="line.8036"></a>
-<span class="sourceLineNo">8037</span>  /**<a name="line.8037"></a>
-<span class="sourceLineNo">8038</span>   * Try to acquire a lock.  Throw RegionTooBusyException<a name="line.8038"></a>
-<span class="sourceLineNo">8039</span>   * if failed to get the lock in time. Throw InterruptedIOException<a name="line.8039"></a>
-<span class="sourceLineNo">8040</span>   * if interrupted while waiting for the lock.<a name="line.8040"></a>
-<span class="sourceLineNo">8041</span>   */<a name="line.8041"></a>
-<span class="sourceLineNo">8042</span>  private void lock(final Lock lock, final int multiplier)<a name="line.8042"></a>
-<span class="sourceLineNo">8043</span>      throws RegionTooBusyException, InterruptedIOException {<a name="line.8043"></a>
-<span class="sourceLineNo">8044</span>    try {<a name="line.8044"></a>
-<span class="sourceLineNo">8045</span>      final long waitTime = Math.min(maxBusyWaitDuration,<a name="line.8045"></a>
-<span class="sourceLineNo">8046</span>          busyWaitDuration * Math.min(multiplier, maxBusyWaitMultiplier));<a name="line.8046"></a>
-<span class="sourceLineNo">8047</span>      if (!lock.tryLock(waitTime, TimeUnit.MILLISECONDS)) {<a name="line.8047"></a>
-<span class="sourceLineNo">8048</span>        throw new RegionTooBusyException(<a name="line.8048"></a>
-<span class="sourceLineNo">8049</span>            "failed to get a lock in " + waitTime + " ms. " +<a name="line.8049"></a>
-<span class="sourceLineNo">8050</span>                "regionName=" + (this.getRegionInfo() == null ? "unknown" :<a name="line.8050"></a>
-<span class="sourceLineNo">8051</span>                this.getRegionInfo().getRegionNameAsString()) +<a name="line.8051"></a>
-<span class="sourceLineNo">8052</span>                ", server=" + (this.getRegionServerServices() == null ? "unknown" :<a name="line.8052"></a>
-<span class="sourceLineNo">8053</span>                this.getRegionServerServices().getServerName()));<a name="line.8053"></a>
-<span class="sourceLineNo">8054</span>      }<a name="line.8054"></a>
-<span class="sourceLineNo">8055</span>    } catch (InterruptedException ie) {<a name="line.8055"></a>
-<span class="sourceLineNo">8056</span>      LOG.info("Interrupted while waiting for a lock");<a name="line.8056"></a>
-<span class="sourceLineNo">8057</span>      InterruptedIOException iie = new InterruptedIOException();<a name="line.8057"></a>
-<span class="sourceLineNo">8058</span>      iie.initCause(ie);<a name="line.8058"></a>
-<span class="sourceLineNo">8059</span>      throw iie;<a name="line.8059"></a>
-<span class="sourceLineNo">8060</span>    }<a name="line.8060"></a>
-<span class="sourceLineNo">8061</span>  }<a name="line.8061"></a>
-<span class="sourceLineNo">8062</span><a name="line.8062"></a>
-<span class="sourceLineNo">8063</span>  /**<a name="line.8063"></a>
-<span class="sourceLineNo">8064</span>   * Calls sync with the given transaction ID<a name="line.8064"></a>
-<span class="sourceLineNo">8065</span>   * @param txid should sync up to which transaction<a name="line.8065"></a>
-<span class="sourceLineNo">8066</span>   * @throws IOException If anything goes wrong with DFS<a name="line.8066"></a>
-<span class="sourceLineNo">8067</span>   */<a name="line.8067"></a>
-<span class="sourceLineNo">8068</span>  private void sync(long txid, Durability durability) throws IOException {<a name="line.8068"></a>
-<span class="sourceLineNo">8069</span>    if (this.getRegionInfo().isMetaRegion()) {<a name="line.8069"></a>
-<span class="sourceLineNo">8070</span>      this.wal.sync(txid);<a name="line.8070"></a>
-<span class="sourceLineNo">8071</span>    } else {<a name="line.8071"></a>
-<span class="sourceLineNo">8072</span>      switch(durability) {<a name="line.8072"></a>
-<span class="sourceLineNo">8073</span>      case USE_DEFAULT:<a name="line.8073"></a>
-<span class="sourceLineNo">8074</span>        // do what table defaults to<a name="line.8074"></a>
-<span class="sourceLineNo">8075</span>        if (shouldSyncWAL()) {<a name="line.8075"></a>
-<span class="sourceLineNo">8076</span>          this.wal.sync(txid);<a name="line.8076"></a>
-<span class="sourceLineNo">8077</span>        }<a name="line.8077"></a>
-<span class="sourceLineNo">8078</span>        break;<a name="line.8078"></a>
-<span class="sourceLineNo">8079</span>      case SKIP_WAL:<a name="line.8079"></a>
-<span class="sourceLineNo">8080</span>        // nothing do to<a name="line.8080"></a>
-<span class="sourceLineNo">8081</span>        break;<a name="line.8081"></a>
-<span class="sourceLineNo">8082</span>      case ASYNC_WAL:<a name="line.8082"></a>
-<span class="sourceLineNo">8083</span>        // nothing do to<a name="line.8083"></a>
-<span class="sourceLineNo">8084</span>        break;<a name="line.8084"></a>
-<span class="sourceLineNo">8085</span>      case SYNC_WAL:<a name="line.8085"></a>
-<span class="sourceLineNo">8086</span>      case FSYNC_WAL:<a name="line.8086"></a>
-<span class="sourceLineNo">8087</span>        // sync the WAL edit (SYNC and FSYNC treated the same for now)<a name="line.8087"></a>
-<span class="sourceLineNo">8088</span>        this.wal.sync(txid);<a name="line.8088"></a>
-<span class="sourceLineNo">8089</span>        break;<a name="line.8089"></a>
-<span class="sourceLineNo">8090</span>      default:<a name="line.8090"></a>
-<span class="sourceLineNo">8091</span>        throw new RuntimeException("Unknown durability " + durability);<a name="line.8091"></a>
-<span class="sourceLineNo">8092</span>      }<a name="line.8092"></a>
-<span class="sourceLineNo">8093</span>    }<a name="line.8093"></a>
-<span class="sourceLineNo">8094</span>  }<a name="line.8094"></a>
-<span class="sourceLineNo">8095</span><a name="line.8095"></a>
-<span class="sourceLineNo">8096</span>  /**<a name="line.8096"></a>
-<span class="sourceLineNo">8097</span>   * Check whether we should sync the wal from the table's durability settings<a name="line.8097"></a>
-<span class="sourceLineNo">8098</span>   */<a name="line.8098"></a>
-<span class="sourceLineNo">8099</span>  private boolean shouldSyncWAL() {<a name="line.8099"></a>
-<span class="sourceLineNo">8100</span>    return durability.ordinal() &gt;  Durability.ASYNC_WAL.ordinal();<a name="line.8100"></a>
-<span class="sourceLineNo">8101</span>  }<a name="line.8101"></a>
-<span class="sourceLineNo">8102</span><a name="line.8102"></a>
-<span class="sourceLineNo">8103</span>  /**<a name="line.8103"></a>
-<span class="sourceLineNo">8104</span>   * A mocked list implementation - discards all updates.<a name="line.8104"></a>
-<span class="sourceLineNo">8105</span>   */<a name="line.8105"></a>
-<span class="sourceLineNo">8106</span>  private static final List&lt;Cell&gt; MOCKED_LIST = new AbstractList&lt;Cell&gt;() {<a name="line.8106"></a>
-<span class="sourceLineNo">8107</span><a name="line.8107"></a>
-<span class="sourceLineNo">8108</span>    @Override<a name="line.8108"></a>
-<span class="sourceLineNo">8109</span>    public void add(int index, Cell element) {<a name="line.8109"></a>
-<span class="sourceLineNo">8110</span>      // do nothing<a name="line.8110"></a>
-<span class="sourceLineNo">8111</span>    }<a name="line.8111"></a>
-<span class="sourceLineNo">8112</span><a name="line.8112"></a>
-<span class="sourceLineNo">8113</span>    @Override<a name="line.8113"></a>
-<span class="sourceLineNo">8114</span>    public boolean addAll(int index, Collection&lt;? extends Cell&gt; c) {<a name="line.8114"></a>
-<span class="sourceLineNo">8115</span>      return false; // this list is never changed as a result of an update<a name="line.8115"></a>
-<span class="sourceLineNo">8116</span>    }<a name="line.8116"></a>
-<span class="sourceLineNo">8117</span><a name="line.8117"></a>
-<span class="sourceLineNo">8118</span>    @Override<a name="line.8118"></a>
-<span class="sourceLineNo">8119</span>    public KeyValue get(int index) {<a name="line.8119"></a>
-<span class="sourceLineNo">8120</span>      throw new UnsupportedOperationException();<a name="line.8120"></a>
-<span class="sourceLineNo">8121</span>    }<a name="line.8121"></a>
-<span class="sourceLineNo">8122</span><a name="line.8122"></a>
-<span class="sourceLineNo">8123</span>    @Override<a name="line.8123"></a>
-<span class="sourceLineNo">8124</span>    public int size() {<a name="line.8124"></a>
-<span class="sourceLineNo">8125</span>      return 0;<a name="line.8125"></a>
-<span class="sourceLineNo">8126</span>    }<a name="line.8126"></a>
-<span class="sourceLineNo">8127</span>  };<a name="line.8127"></a>
-<span class="sourceLineNo">8128</span><a name="line.8128"></a>
-<span class="sourceLineNo">8129</span>  @Override<a name="line.8129"></a>
-<span class="sourceLineNo">8130</span>  public long getOpenSeqNum() {<a name="line.8130"></a>
-<span class="sourceLineNo">8131</span>    return this.openSeqNum;<a name="line.8131"></a>
-<span class="sourceLineNo">8132</span>  }<a name="line.8132"></a>
-<span class="sourceLineNo">8133</span><a name="line.8133"></a>
-<span class="sourceLineNo">8134</span>  @Override<a name="line.8134"></a>
-<span class="sourceLineNo">8135</span>  public Map&lt;byte[], Long&gt; getMaxStoreSeqId() {<a name="line.8135"></a>
-<span class="sourceLineNo">8136</span>    return this.maxSeqIdInStores;<a name="line.8136"></a>
-<span class="sourceLineNo">8137</span>  }<a name="line.8137"></a>
-<span class="sourceLineNo">8138</span><a name="line.8138"></a>
-<span class="sourceLineNo">8139</span>  @Override<a name="line.8139"></a>
-<span class="sourceLineNo">8140</span>  public long getOldestSeqIdOfStore(byte[] familyName) {<a name="line.8140"></a>
-<span class="sourceLineNo">8141</span>    return wal.getEarliestMemstoreSeqNum(getRegionInfo().getEncodedNameAsBytes(), familyName);<a name="line.8141"></a>
-<span class="sourceLineNo">8142</span>  }<a name="line.8142"></a>
-<span class="sourceLineNo">8143</span><a name="line.8143"></a>
-<span class="sourceLineNo">8144</span>  @Override<a name="line.8144"></a>
-<span class="sourceLineNo">8145</span>  public CompactionState getCompactionState() {<a name="line.8145"></a>
-<span class="sourceLineNo">8146</span>    boolean hasMajor = majorInProgress.get() &gt; 0, hasMinor = minorInProgress.get() &gt; 0;<a name="line.8146"></a>
-<span class="sourceLineNo">8147</span>    return (hasMajor ? (hasMinor ? CompactionState.MAJOR_AND_MINOR : CompactionState.MAJOR)<a name="line.8147"></a>
-<span class="sourceLineNo">8148</span>        : (hasMinor ? CompactionState.MINOR : CompactionState.NONE));<a name="line.8148"></a>
-<span class="sourceLineNo">8149</span>  }<a name="line.8149"></a>
-<span class="sourceLineNo">8150</span><a name="line.8150"></a>
-<span class="sourceLineNo">8151</span>  public void reportCompactionRequestStart(boolean isMajor){<a name="line.8151"></a>
-<span class="sourceLineNo">8152</span>    (isMajor ? majorInProgress : minorInProgress).incrementAndGet();<a name="line.8152"></a>
-<span class="sourceLineNo">8153</span>  }<a name="line.8153"></a>
-<span class="sourceLineNo">8154</span><a name="line.8154"></a>
-<span class="sourceLineNo">8155</span>  public void reportCompactionRequestEnd(boolean isMajor, int numFiles, long filesSizeCompacted) {<a name="line.8155"></a>
-<span class="sourceLineNo">8156</span>    int newValue = (isMajor ? majorInProgress : minorInProgress).decrementAndGet();<a name="line.8156"></a>
-<span class="sourceLineNo">8157</span><a name="line.8157"></a>
-<span class="sourceLineNo">8158</span>    // metrics<a name="line.8158"></a>
-<span class="sourceLineNo">8159</span>    compactionsFinished.incrementAndGet();<a name="line.8159"></a>
-<span class="sourceLineNo">8160</span>    compactionNumFilesCompacted.addAndGet(numFiles);<a name="line.8160"></a>
-<span class="sourceLineNo">8161</span>    compactionNumBytesCompacted.addAndGet(filesSizeCompacted);<a name="line.8161"></a>
-<span class="sourceLineNo">8162</span><a name="line.8162"></a>
-<span class="sourceLineNo">8163</span>    assert newValue &gt;= 0;<a name="line.8163"></a>
-<span class="sourceLineNo">8164</span>  }<a name="line.8164"></a>
-<span class="sourceLineNo">8165</span><a name="line.8165"></a>
-<span class="sourceLineNo">8166</span>  public void reportCompactionRequestFailure() {<a name="line.8166"></a>
-<span class="sourceLineNo">8167</span>    compactionsFailed.incrementAndGet();<a name="line.8167"></a>
-<span class="sourceLineNo">8168</span>  }<a name="line.8168"></a>
-<span class="sourceLineNo">8169</span><a name="line.8169"></a>
-<span class="sourceLineNo">8170</span>  public void incrementCompactionsQueuedCount() {<a name="line.8170"></a>
-<span class="sourceLineNo">8171</span>    compactionsQueued.incrementAndGet();<a name="line.8171"></a>
-<span class="sourceLineNo">8172</span>  }<a name="line.8172"></a>
-<span class="sourceLineNo">8173</span><a name="line.8173"></a>
-<span class="sourceLineNo">8174</span>  public void decrementCompactionsQueuedCount() {<a name="line.8174"></a>
-<span class="sourceLineNo">8175</span>    compactionsQueued.decrementAndGet();<a name="line.8175"></a>
-<span class="sourceLineNo">8176</span>  }<a name="line.8176"></a>
-<span class="sourceLineNo">8177</span><a name="line.8177"></a>
-<span class="sourceLineNo">8178</span>  public void incrementFlushesQueuedCount() {<a name="line.8178"></a>
-<span class="sourceLineNo">8179</span>    flushesQueued.incrementAndGet();<a name="line.8179"></a>
-<span class="sourceLineNo">8180</span>  }<a name="line.8180"></a>
-<span class="sourceLineNo">8181</span><a name="line.8181"></a>
-<span class="sourceLineNo">8182</span>  @VisibleForTesting<a name="line.8182"></a>
-<span class="sourceLineNo">8183</span>  public long getReadPoint() {<a name="line.8183"></a>
-<span class="sourceLineNo">8184</span>    return getReadPoint(IsolationLevel.READ_COMMITTED);<a name="line.8184"></a>
+<span class="sourceLineNo">8032</span>    long mutationSize = 0;<a name="line.8032"></a>
+<span class="sourceLineNo">8033</span>    for (List&lt;Cell&gt; cells: familyMap.values()) {<a name="line.8033"></a>
+<span class="sourceLineNo">8034</span>      assert cells instanceof RandomAccess;<a name="line.8034"></a>
+<span class="sourceLineNo">8035</span>      int listSize = cells.size();<a name="line.8035"></a>
+<span class="sourceLineNo">8036</span>      for (int i=0; i &lt; listSize; i++) {<a name="line.8036"></a>
+<span class="sourceLineNo">8037</span>        Cell cell = cells.get(i);<a name="line.8037"></a>
+<span class="sourceLineNo">8038</span>        mutationSize += KeyValueUtil.length(cell);<a name="line.8038"></a>
+<span class="sourceLineNo">8039</span>      }<a name="line.8039"></a>
+<span class="sourceLineNo">8040</span>    }<a name="line.8040"></a>
+<span class="sourceLineNo">8041</span><a name="line.8041"></a>
+<span class="sourceLineNo">8042</span>    dataInMemoryWithoutWAL.add(mutationSize);<a name="line.8042"></a>
+<span class="sourceLineNo">8043</span>  }<a name="line.8043"></a>
+<span class="sourceLineNo">8044</span><a name="line.8044"></a>
+<span class="sourceLineNo">8045</span>  private void lock(final Lock lock)<a name="line.8045"></a>
+<span class="sourceLineNo">8046</span>      throws RegionTooBusyException, InterruptedIOException {<a name="line.8046"></a>
+<span class="sourceLineNo">8047</span>    lock(lock, 1);<a name="line.8047"></a>
+<span class="sourceLineNo">8048</span>  }<a name="line.8048"></a>
+<span class="sourceLineNo">8049</span><a name="line.8049"></a>
+<span class="sourceLineNo">8050</span>  /**<a name="line.8050"></a>
+<span class="sourceLineNo">8051</span>   * Try to acquire a lock.  Throw RegionTooBusyException<a name="line.8051"></a>
+<span class="sourceLineNo">8052</span>   * if failed to get the lock in time. Throw InterruptedIOException<a name="line.8052"></a>
+<span class="sourceLineNo">8053</span>   * if interrupted while waiting for the lock.<a name="line.8053"></a>
+<span class="sourceLineNo">8054</span>   */<a name="line.8054"></a>
+<span class="sourceLineNo">8055</span>  private void lock(final Lock lock, final int multiplier)<a name="line.8055"></a>
+<span class="sourceLineNo">8056</span>      throws RegionTooBusyException, InterruptedIOException {<a name="line.8056"></a>
+<span class="sourceLineNo">8057</span>    try {<a name="line.8057"></a>
+<span class="sourceLineNo">8058</span>      final long waitTime = Math.min(maxBusyWaitDuration,<a name="line.8058"></a>
+<span class="sourceLineNo">8059</span>          busyWaitDuration * Math.min(multiplier, maxBusyWaitMultiplier));<a name="line.8059"></a>
+<span class="sourceLineNo">8060</span>      if (!lock.tryLock(waitTime, TimeUnit.MILLISECONDS)) {<a name="line.8060"></a>
+<span class="sourceLineNo">8061</span>        throw new RegionTooBusyException(<a name="line.8061"></a>
+<span class="sourceLineNo">8062</span>            "failed to get a lock in " + waitTime + " ms. " +<a name="line.8062"></a>
+<span class="sourceLineNo">8063</span>                "regionName=" + (this.getRegionInfo() == null ? "unknown" :<a name="line.8063"></a>
+<span class="sourceLineNo">8064</span>                this.getRegionInfo().getRegionNameAsString()) +<a name="line.8064"></a>
+<span class="sourceLineNo">8065</span>                ", server=" + (this.getRegionServerServices() == null ? "unknown" :<a name="line.8065"></a>
+<span class="sourceLineNo">8066</span>                this.getRegionServerServices().getServerName()));<a name="line.8066"></a>
+<span class="sourceLineNo">8067</span>      }<a name="line.8067"></a>
+<span class="sourceLineNo">8068</span>    } catch (InterruptedException ie) {<a name="line.8068"></a>
+<span class="sourceLineNo">8069</span>      LOG.info("Interrupted while waiting for a lock");<a name="line.8069"></a>
+<span class="sourceLineNo">8070</span>      InterruptedIOException iie = new InterruptedIOException();<a name="line.8070"></a>
+<span class="sourceLineNo">8071</span>      iie.initCause(ie);<a name="line.8071"></a>
+<span class="sourceLineNo">8072</span>      throw iie;<a name="line.8072"></a>
+<span class="sourceLineNo">8073</span>    }<a name="line.8073"></a>
+<span class="sourceLineNo">8074</span>  }<a name="line.8074"></a>
+<span class="sourceLineNo">8075</span><a name="line.8075"></a>
+<span class="sourceLineNo">8076</span>  /**<a name="line.8076"></a>
+<span class="sourceLineNo">8077</span>   * Calls sync with the given transaction ID<a name="line.8077"></a>
+<span class="sourceLineNo">8078</span>   * @param txid should sync up to which transaction<a name="line.8078"></a>
+<span class="sourceLineNo">8079</span>   * @throws IOException If anything goes wrong with DFS<a name="line.8079"></a>
+<span class="sourceLineNo">8080</span>   */<a name="line.8080"></a>
+<span class="sourceLineNo">8081</span>  private void sync(long txid, Durability durability) throws IOException {<a name="line.8081"></a>
+<span class="sourceLineNo">8082</span>    if (this.getRegionInfo().isMetaRegion()) {<a name="line.8082"></a>
+<span class="sourceLineNo">8083</span>      this.wal.sync(txid);<a name="line.8083"></a>
+<span class="sourceLineNo">8084</span>    } else {<a name="line.8084"></a>
+<span class="sourceLineNo">8085</span>      switch(durability) {<a name="line.8085"></a>
+<span class="sourceLineNo">8086</span>      case USE_DEFAULT:<a name="line.8086"></a>
+<span class="sourceLineNo">8087</span>        // do what table defaults to<a name="line.8087"></a>
+<span class="sourceLineNo">8088</span>        if (shouldSyncWAL()) {<a name="line.8088"></a>
+<span class="sourceLineNo">8089</span>          this.wal.sync(txid);<a name="line.8089"></a>
+<span class="sourceLineNo">8090</span>        }<a name="line.8090"></a>
+<span class="sourceLineNo">8091</span>        break;<a name="line.8091"></a>
+<span class="sourceLineNo">8092</span>      case SKIP_WAL:<a name="line.8092"></a>
+<span class="sourceLineNo">8093</span>        // nothing do to<a name="line.8093"></a>
+<span class="sourceLineNo">8094</span>        break;<a name="line.8094"></a>
+<span class="sourceLineNo">8095</span>      case ASYNC_WAL:<a name="line.8095"></a>
+<span class="sourceLineNo">8096</span>        // nothing do to<a name="line.8096"></a>
+<span class="sourceLineNo">8097</span>        break;<a name="line.8097"></a>
+<span class="sourceLineNo">8098</span>      case SYNC_WAL:<a name="line.8098"></a>
+<span class="sourceLineNo">8099</span>      case FSYNC_WAL:<a name="line.8099"></a>
+<span class="sourceLineNo">8100</span>        // sync the WAL edit (SYNC and FSYNC treated the same for now)<a name="line.8100"></a>
+<span class="sourceLineNo">8101</span>        this.wal.sync(txid);<a name="line.8101"></a>
+<span class="sourceLineNo">8102</span>        break;<a name="line.8102"></a>
+<span class="sourceLineNo">8103</span>      default:<a name="line.8103"></a>
+<span class="sourceLineNo">8104</span>        throw new RuntimeException("Unknown durability " + durability);<a name="line.8104"></a>
+<span class="sourceLineNo">8105</span>      }<a name="line.8105"></a>
+<span class="sourceLineNo">8106</span>    }<a name="line.8106"></a>
+<span class="sourceLineNo">8107</span>  }<a name="line.8107"></a>
+<span class="sourceLineNo">8108</span><a name="line.8108"></a>
+<span class="sourceLineNo">8109</span>  /**<a name="line.8109"></a>
+<span class="sourceLineNo">8110</span>   * Check whether we should sync the wal from the table's durability settings<a name="line.8110"></a>
+<span class="sourceLineNo">8111</span>   */<a name="line.8111"></a>
+<span class="sourceLineNo">8112</span>  private boolean shouldSyncWAL() {<a name="line.8112"></a>
+<span class="sourceLineNo">8113</span>    return durability.ordinal() &gt;  Durability.ASYNC_WAL.ordinal();<a name="line.8113"></a>
+<span class="sourceLineNo">8114</span>  }<a name="line.8114"></a>
+<span class="sourceLineNo">8115</span><a name="line.8115"></a>
+<span class="sourceLineNo">8116</span>  /**<a name="line.8116"></a>
+<span class="sourceLineNo">8117</span>   * A mocked list implementation - discards all updates.<a name="line.8117"></a>
+<span class="sourceLineNo">8118</span>   */<a name="line.8118"></a>
+<span class="sourceLineNo">8119</span>  private static final List&lt;Cell&gt; MOCKED_LIST = new AbstractList&lt;Cell&gt;() {<a name="line.8119"></a>
+<span class="sourceLineNo">8120</span><a name="line.8120"></a>
+<span class="sourceLineNo">8121</span>    @Override<a name="line.8121"></a>
+<span class="sourceLineNo">8122</span>    public void add(int index, Cell element) {<a name="line.8122"></a>
+<span class="sourceLineNo">8123</span>      // do nothing<a name="line.8123"></a>
+<span class="sourceLineNo">8124</span>    }<a name="line.8124"></a>
+<span class="sourceLineNo">8125</span><a name="line.8125"></a>
+<span class="sourceLineNo">8126</span>    @Override<a name="line.8126"></a>
+<span class="sourceLineNo">8127</span>    public boolean addAll(int index, Collection&lt;? extends Cell&gt; c) {<a name="line.8127"></a>
+<span class="sourceLineNo">8128</span>      return false; // this list is never changed as a result of an update<a name="line.8128"></a>
+<span class="sourceLineNo">8129</span>    }<a name="line.8129"></a>
+<span class="sourceLineNo">8130</span><a name="line.8130"></a>
+<span class="sourceLineNo">8131</span>    @Override<a name="line.8131"></a>
+<span class="sourceLineNo">8132</span>    public KeyValue get(int index) {<a name="line.8132"></a>
+<span class="sourceLineNo">8133</span>      throw new UnsupportedOperationException();<a name="line.8133"></a>
+<span class="sourceLineNo">8134</span>    }<a name="line.8134"></a>
+<span class="sourceLineNo">8135</span><a name="line.8135"></a>
+<span class="sourceLineNo">8136</span>    @Override<a name="line.8136"></a>
+<span class="sourceLineNo">8137</span>    public int size() {<a name="line.8137"></a>
+<span class="sourceLineNo">8138</span>      return 0;<a name="line.8138"></a>
+<span class="sourceLineNo">8139</span>    }<a name="line.8139"></a>
+<span class="sourceLineNo">8140</span>  };<a name="line.8140"></a>
+<span class="sourceLineNo">8141</span><a name="line.8141"></a>
+<span class="sourceLineNo">8142</span>  @Override<a name="line.8142"></a>
+<span class="sourceLineNo">8143</span>  public long getOpenSeqNum() {<a name="line.8143"></a>
+<span class="sourceLineNo">8144</span>    return this.openSeqNum;<a name="line.8144"></a>
+<span class="sourceLineNo">8145</span>  }<a name="line.8145"></a>
+<span class="sourceLineNo">8146</span><a name="line.8146"></a>
+<span class="sourceLineNo">8147</span>  @Override<a name="line.8147"></a>
+<span class="sourceLineNo">8148</span>  public Map&lt;byte[], Long&gt; getMaxStoreSeqId() {<a name="line.8148"></a>
+<span class="sourceLineNo">8149</span>    return this.maxSeqIdInStores;<a name="line.8149"></a>
+<span class="sourceLineNo">8150</span>  }<a name="line.8150"></a>
+<span class="sourceLineNo">8151</span><a name="line.8151"></a>
+<span class="sourceLineNo">8152</span>  @Override<a name="line.8152"></a>
+<span class="sourceLineNo">8153</span>  public long getOldestSeqIdOfStore(byte[] familyName) {<a name="line.8153"></a>
+<span class="sourceLineNo">8154</span>    return wal.getEarliestMemstoreSeqNum(getRegionInfo().getEncodedNameAsBytes(), familyName);<a name="line.8154"></a>
+<span class="sourceLineNo">8155</span>  }<a name="line.8155"></a>
+<span class="sourceLineNo">8156</span><a name="line.8156"></a>
+<span class="sourceLineNo">8157</span>  @Override<a name="line.8157"></a>
+<span class="sourceLineNo">8158</span>  public CompactionState getCompactionState() {<a name="line.8158"></a>
+<span class="sourceLineNo">8159</span>    boolean hasMajor = majorInProgress.get() &gt; 0, hasMinor = minorInProgress.get() &gt; 0;<a name="line.8159"></a>
+<span class="sourceLineNo">8160</span>    return (hasMajor ? (hasMinor ? CompactionState.MAJOR_AND_MINOR : CompactionState.MAJOR)<a name="line.8160"></a>
+<span class="sourceLineNo">8161</span>        : (hasMinor ? CompactionState.MINOR : CompactionState.NONE));<a name="line.8161"></a>
+<span class="sourceLineNo">8162</span>  }<a name="line.8162"></a>
+<span class="sourceLineNo">8163</span><a name="line.8163"></a>
+<span class="sourceLineNo">8164</span>  public void reportCompactionRequestStart(boolean isMajor){<a name="line.8164"></a>
+<span class="sourceLineNo">8165</span>    (isMajor ? majorInProgress : minorInProgress).incrementAndGet();<a name="line.8165"></a>
+<span class="sourceLineNo">8166</span>  }<a name="line.8166"></a>
+<span class="sourceLineNo">8167</span><a name="line.8167"></a>
+<span class="sourceLineNo">8168</span>  public void reportCompactionRequestEnd(boolean isMajor, int numFiles, long filesSizeCompacted) {<a name="line.8168"></a>
+<span class="sourceLineNo">8169</span>    int newValue = (isMajor ? majorInProgress : minorInProgress).decrementAndGet();<a name="line.8169"></a>
+<span class="sourceLineNo">8170</span><a name="line.8170"></a>
+<span class="sourceLineNo">8171</span>    // metrics<a name="line.8171"></a>
+<span class="sourceLineNo">8172</span>    compactionsFinished.incrementAndGet();<a name="line.8172"></a>
+<span class="sourceLineNo">8173</span>    compactionNumFilesCompacted.addAndGet(numFiles);<a name="line.8173"></a>
+<span class="sourceLineNo">8174</span>    compactionNumBytesCompacted.addAndGet(filesSizeCompacted);<a name="line.8174"></a>
+<span class="sourceLineNo">8175</span><a name="line.8175"></a>
+<span class="sourceLineNo">8176</span>    assert newValue &gt;= 0;<a name="line.8176"></a>
+<span class="sourceLineNo">8177</span>  }<a name="line.8177"></a>
+<span class="sourceLineNo">8178</span><a name="line.8178"></a>
+<span class="sourceLineNo">8179</span>  public void reportCompactionRequestFailure() {<a name="line.8179"></a>
+<span class="sourceLineNo">8180</span>    compactionsFailed.incrementAndGet();<a name="line.8180"></a>
+<span class="sourceLineNo">8181</span>  }<a name="line.8181"></a>
+<span class="sourceLineNo">8182</span><a name="line.8182"></a>
+<span class="sourceLineNo">8183</span>  public void incrementCompactionsQueuedCount() {<a name="line.8183"></a>
+<span class="sourceLineNo">8184</span>    compactionsQueued.incrementAndGet();<a name="line.8184"></a>
 <span class="sourceLineNo">8185</span>  }<a name="line.8185"></a>
 <span class="sourceLineNo">8186</span><a name="line.8186"></a>
-<span class="sourceLineNo">8187</span>  /**<a name="line.8187"></a>
-<span class="sourceLineNo">8188</span>   * {@inheritDoc}<a name="line.8188"></a>
-<span class="sourceLineNo">8189</span>   */<a name="line.8189"></a>
-<span class="sourceLineNo">8190</span>  @Override<a name="line.8190"></a>
-<span class="sourceLineNo">8191</span>  public void onConfigurationChange(Configuration conf) {<a name="line.8191"></a>
-<span class="sourceLineNo">8192</span>    // Do nothing for now.<a name="line.8192"></a>
+<span class="sourceLineNo">8187</span>  public void decrementCompactionsQueuedCount() {<a name="line.8187"></a>
+<span class="sourceLineNo">8188</span>    compactionsQueued.decrementAndGet();<a name="line.8188"></a>
+<span class="sourceLineNo">8189</span>  }<a name="line.8189"></a>
+<span class="sourceLineNo">8190</span><a name="line.8190"></a>
+<span class="sourceLineNo">8191</span>  public void incrementFlushesQueuedCount() {<a name="line.8191"></a>
+<span class="sourceLineNo">8192</span>    flushesQueued.incrementAndGet();<a name="line.8192"></a>
 <span class="sourceLineNo">8193</span>  }<a name="line.8193"></a>
 <span class="sourceLineNo">8194</span><a name="line.8194"></a>
-<span class="sourceLineNo">8195</span>  /**<a name="line.8195"></a>
-<span class="sourceLineNo">8196</span>   * {@inheritDoc}<a name="line.8196"></a>
-<span class="sourceLineNo">8197</span>   */<a name="line.8197"></a>
-<span class="sourceLineNo">8198</span>  @Override<a name="line.8198"></a>
-<span class="sourceLineNo">8199</span>  public void registerChildren(ConfigurationManager manager) {<a name="line.8199"></a>
-<span class="sourceLineNo">8200</span>    configurationManager = Optional.of(manager);<a name="line.8200"></a>
-<span class="sourceLineNo">8201</span>    for (Store s : this.stores.values()) {<a name="line.8201"></a>
-<span class="sourceLineNo">8202</span>      configurationManager.get().registerObserver(s);<a name="line.8202"></a>
-<span class="sourceLineNo">8203</span>    }<a name="line.8203"></a>
-<span class="sourceLineNo">8204</span>  }<a name="line.8204"></a>
-<span class="sourceLineNo">8205</span><a name="line.8205"></a>
-<span class="sourceLineNo">8206</span>  /**<a name="line.8206"></a>
-<span class="sourceLineNo">8207</span>   * {@inheritDoc}<a name="line.8207"></a>
-<span class="sourceLineNo">8208</span>   */<a name="line.8208"></a>
-<span class="sourceLineNo">8209</span>  @Override<a name="line.8209"></a>
-<span class="sourceLineNo">8210</span>  public void deregisterChildren(ConfigurationManager manager) {<a name="line.8210"></a>
-<span class="sourceLineNo">8211</span>    for (Store s : this.stores.values()) {<a name="line.8211"></a>
-<span class="sourceLineNo">8212</span>      configurationManager.get().deregisterObserver(s);<a name="line.8212"></a>
-<span class="sourceLineNo">8213</span>    }<a name="line.8213"></a>
-<span class="sourceLineNo">8214</span>  }<a name="line.8214"></a>
-<span class="sourceLineNo">8215</span><a name="line.8215"></a>
-<span class="sourceLineNo">8216</span>  @Override<a name="line.8216"></a>
-<span class="sourceLineNo">8217</span>  public CellComparator getCellComparator() {<a name="line.8217"></a>
-<span class="sourceLineNo">8218</span>    return this.getRegionInfo().isMetaRegion() ? CellComparator.META_COMPARATOR<a name="line.8218"></a>
-<span class="sourceLineNo">8219</span>        : CellComparator.COMPARATOR;<a name="line.8219"></a>
-<span class="sourceLineNo">8220</span>  }<a name="line.8220"></a>
-<span class="sourceLineNo">8221</span><a name="line.8221"></a>
-<span class="sourceLineNo">8222</span>  public long getMemstoreFlushSize() {<a name="line.8222"></a>
-<span class="sourceLineNo">8223</span>    return this.memstoreFlushSize;<a name="line.8223"></a>
-<span class="sourceLineNo">8224</span>  }<a name="line.8224"></a>
-<span class="sourceLineNo">8225</span><a name="line.8225"></a>
-<span class="sourceLineNo">8226</span>  //// method for debugging tests<a name="line.8226"></a>
-<span class="sourceLineNo">8227</span>  void throwException(String title, String regionName) {<a name="line.8227"></a>
-<span class="sourceLineNo">8228</span>    StringBuffer buf = new StringBuffer();<a name="line.8228"></a>
-<span class="sourceLineNo">8229</span>    buf.append(title + ", ");<a name="line.8229"></a>
-<span class="sourceLineNo">8230</span>    buf.append(getRegionInfo().toString());<a name="line.8230"></a>
-<span class="sourceLineNo">8231</span>    buf.append(getRegionInfo().isMetaRegion() ? " meta region " : " ");<a name="line.8231"></a>
-<span class="sourceLineNo">8232</span>    buf.append(getRegionInfo().isMetaTable() ? " meta table " : " ");<a name="line.8232"></a>
-<span class="sourceLineNo">8233</span>    buf.append("stores: ");<a name="line.8233"></a>
-<span class="sourceLineNo">8234</span>    for (Store s : getStores()) {<a name="line.8234"></a>
-<span class="sourceLineNo">8235</span>      buf.append(s.getColumnFamilyDescriptor().getNameAsString());<a name="line.8235"></a>
-<span class="sourceLineNo">8236</span>      buf.append(" size: ");<a name="line.8236"></a>
-<span class="sourceLineNo">8237</span>      buf.append(s.getSizeOfMemStore().getDataSize());<a name="line.8237"></a>
-<span class="sourceLineNo">8238</span>      buf.append(" ");<a name="line.8238"></a>
-<span class="sourceLineNo">8239</span>    }<a name="line.8239"></a>
-<span class="sourceLineNo">8240</span>    buf.append("end-of-stores");<a name="line.8240"></a>
-<span class="sourceLineNo">8241</span>    buf.append(", memstore size ");<a name="line.8241"></a>
-<span class="sourceLineNo">8242</span>    buf.append(getMemstoreSize());<a name="line.8242"></a>
-<span class="sourceLineNo">8243</span>    if (getRegionInfo().getRegionNameAsString().startsWith(regionName)) {<a name="line.8243"></a>
-<span class="sourceLineNo">8244</span>      throw new RuntimeException(buf.toString());<a name="line.8244"></a>
-<span class="sourceLineNo">8245</span>    }<a name="line.8245"></a>
-<span class="sourceLineNo">8246</span>  }<a name="line.8246"></a>
-<span class="sourceLineNo">8247</span>}<a name="line.8247"></a>
+<span class="sourceLineNo">8195</span>  @VisibleForTesting<a name="line.8195"></a>
+<span class="sourceLineNo">8196</span>  public long getReadPoint() {<a name="line.8196"></a>
+<span class="sourceLineNo">8197</span>    return getReadPoint(IsolationLevel.READ_COMMITTED);<a name="line.8197"></a>
+<span class="sourceLineNo">8198</span>  }<a name="line.8198"></a>
+<span class="sourceLineNo">8199</span><a name="line.8199"></a>
+<span class="sourceLineNo">8200</span>  /**<a name="line.8200"></a>
+<span class="sourceLineNo">8201</span>   * {@inheritDoc}<a name="line.8201"></a>
+<span class="sourceLineNo">8202</span>   */<a name="line.8202"></a>
+<span class="sourceLineNo">8203</span>  @Override<a name="line.8203"></a>
+<span class="sourceLineNo">8204</span>  public void onConfigurationChange(Configuration conf) {<a name="line.8204"></a>
+<span class="sourceLineNo">8205</span>    // Do nothing for now.<a name="line.8205"></a>
+<span class="sourceLineNo">8206</span>  }<a name="line.8206"></a>
+<span class="sourceLineNo">8207</span><a name="line.8207"></a>
+<span class="sourceLineNo">8208</span>  /**<a name="line.8208"></a>
+<span class="sourceLineNo">8209</span>   * {@inheritDoc}<a name="line.8209"></a>
+<span class="sourceLineNo">8210</span>   */<a name="line.8210"></a>
+<span class="sourceLineNo">8211</span>  @Override<a name="line.8211"></a>
+<span class="sourceLineNo">8212</span>  public void registerChildren(ConfigurationManager manager) {<a name="line.8212"></a>
+<span class="sourceLineNo">8213</span>    configurationManager = Optional.of(manager);<a name="line.8213"></a>
+<span class="sourceLineNo">8214</span>    for (Store s : this.stores.values()) {<a name="line.8214"></a>
+<span class="sourceLineNo">8215</span>      configurationManager.get().registerObserver(s);<a name="line.8215"></a>
+<span class="sourceLineNo">8216</span>    }<a name="line.8216"></a>
+<span class="sourceLineNo">8217</span>  }<a name="line.8217"></a>
+<span class="sourceLineNo">8218</span><a name="line.8218"></a>
+<span class="sourceLineNo">8219</span>  /**<a name="line.8219"></a>
+<span class="sourceLineNo">8220</span>   * {@inheritDoc}<a name="line.8220"></a>
+<span class="sourceLineNo">8221</span>   */<a name="line.8221"></a>
+<span class="sourceLineNo">8222</span>  @Override<a name="line.8222"></a>
+<span class="sourceLineNo">8223</span>  public void deregisterChildren(ConfigurationManager manager) {<a name="line.8223"></a>
+<span class="sourceLineNo">8224</span>    for (Store s : this.stores.values()) {<a name="line.8224"></a>
+<span class="sourceLineNo">8225</span>      configurationManager.get().deregisterObserver(s);<a name="line.8225"></a>
+<span class="sourceLineNo">8226</span>    }<a name="line.8226"></a>
+<span class="sourceLineNo">8227</span>  }<a name="line.8227"></a>
+<span class="sourceLineNo">8228</span><a name="line.8228"></a>
+<span class="sourceLineNo">8229</span>  @Override<a name="line.8229"></a>
+<span class="sourceLineNo">8230</span>  public CellComparator getCellComparator() {<a name="line.8230"></a>
+<span class="sourceLineNo">8231</span>    return this.getRegionInfo().isMetaRegion() ? CellComparator.META_COMPARATOR<a name="line.8231"></a>
+<span class="sourceLineNo">8232</span>        : CellComparator.COMPARATOR;<a name="line.8232"></a>
+<span class="sourceLineNo">8233</span>  }<a name="line.8233"></a>
+<span class="sourceLineNo">8234</span><a name="line.8234"></a>
+<span class="sourceLineNo">8235</span>  public long getMemstoreFlushSize() {<a name="line.8235"></a>
+<span class="sourceLineNo">8236</span>    return this.memstoreFlushSize;<a name="line.8236"></a>
+<span class="sourceLineNo">8237</span>  }<a name="line.8237"></a>
+<span class="sourceLineNo">8238</span><a name="line.8238"></a>
+<span class="sourceLineNo">8239</span>  //// method for debugging tests<a name="line.8239"></a>
+<span class="sourceLineNo">8240</span>  void throwException(String title, String regionName) {<a name="line.8240"></a>
+<span class="sourceLineNo">8241</span>    StringBuffer buf = new StringBuffer();<a name="line.8241"></a>
+<span class="sourceLineNo">8242</span>    buf.append(title + ", ");<a name="line.8242"></a>
+<span class="sourceLineNo">8243</span>    buf.append(getRegionInfo().toString());<a name="line.8243"></a>
+<span class="sourceLineNo">8244</span>    buf.append(getRegionInfo().isMetaRegion() ? " meta region " : " ");<a name="line.8244"></a>
+<span class="sourceLineNo">8245</span>    buf.append(getRegionInfo().isMetaTable() ? " meta table " : " ");<a name="line.8245"></a>
+<span class="sourceLineNo">8246</span>    buf.append("stores: ");<a name="line.8246"></a>
+<span class="sourceLineNo">8247</span>    for (Store s : getStores()) {<a name="line.8247"></a>
+<span class="sourceLineNo">8248</span>      buf.append(s.getColumnFamilyDescriptor().getNameAsString());<a name="line.8248"></a>
+<span class="sourceLineNo">8249</span>      buf.append(" size: ");<a name="line.8249"></a>
+<span class="sourceLineNo">8250</span>      buf.append(s.getSizeOfMemStore().getDataSize());<a name="line.8250"></a>
+<span class="sourceLineNo">8251</span>      buf.append(" ");<a name="line.8251"></a>
+<span class="sourceLineNo">8252</span>    }<a name="line.8252"></a>
+<span class="sourceLineNo">8253</span>    buf.append("end-of-stores");<a name="line.8253"></a>
+<span class="sourceLineNo">8254</span>    buf.append(", memstore size ");<a name="line.8254"></a>
+<span class="sourceLineNo">8255</span>    buf.append(getMemstoreSize());<a name="line.8255"></a>
+<span class="sourceLineNo">8256</span>    if (getRegionInfo().getRegionNameAsString().startsWith(regionName)) {<a name="line.8256"></a>
+<span class="sourceLineNo">8257</span>      throw new RuntimeException(buf.toString());<a name="line.8257"></a>
+<span class="sourceLineNo">8258</span>    }<a name="line.8258"></a>
+<span class="sourceLineNo">8259</span>  }<a name="line.8259"></a>
+<span class="sourceLineNo">8260</span>}<a name="line.8260"></a>