You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by mi...@apache.org on 2016/02/18 18:20:18 UTC

[01/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Repository: hbase-site
Updated Branches:
  refs/heads/asf-site 3268e8dbe -> f32f549ad


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/xref-test/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html
----------------------------------------------------------------------
diff --git a/xref-test/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html b/xref-test/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html
index 71ea0e5..4e7fed1 100644
--- a/xref-test/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html
+++ b/xref-test/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html
@@ -43,1157 +43,1234 @@
 <a class="jxr_linenumber" name="33" href="#33">33</a>  <strong class="jxr_keyword">import</strong> java.lang.reflect.Field;
 <a class="jxr_linenumber" name="34" href="#34">34</a>  <strong class="jxr_keyword">import</strong> java.security.PrivilegedExceptionAction;
 <a class="jxr_linenumber" name="35" href="#35">35</a>  <strong class="jxr_keyword">import</strong> java.util.ArrayList;
-<a class="jxr_linenumber" name="36" href="#36">36</a>  <strong class="jxr_keyword">import</strong> java.util.Collection;
-<a class="jxr_linenumber" name="37" href="#37">37</a>  <strong class="jxr_keyword">import</strong> java.util.HashSet;
-<a class="jxr_linenumber" name="38" href="#38">38</a>  <strong class="jxr_keyword">import</strong> java.util.List;
-<a class="jxr_linenumber" name="39" href="#39">39</a>  <strong class="jxr_keyword">import</strong> java.util.Set;
-<a class="jxr_linenumber" name="40" href="#40">40</a>  <strong class="jxr_keyword">import</strong> java.util.concurrent.atomic.AtomicBoolean;
-<a class="jxr_linenumber" name="41" href="#41">41</a>  <strong class="jxr_keyword">import</strong> java.util.concurrent.atomic.AtomicInteger;
-<a class="jxr_linenumber" name="42" href="#42">42</a>  
-<a class="jxr_linenumber" name="43" href="#43">43</a>  <strong class="jxr_keyword">import</strong> org.apache.commons.logging.Log;
-<a class="jxr_linenumber" name="44" href="#44">44</a>  <strong class="jxr_keyword">import</strong> org.apache.commons.logging.LogFactory;
-<a class="jxr_linenumber" name="45" href="#45">45</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.conf.Configuration;
-<a class="jxr_linenumber" name="46" href="#46">46</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.fs.FSDataInputStream;
-<a class="jxr_linenumber" name="47" href="#47">47</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.fs.FileStatus;
-<a class="jxr_linenumber" name="48" href="#48">48</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.fs.FileSystem;
-<a class="jxr_linenumber" name="49" href="#49">49</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.fs.Path;
-<a class="jxr_linenumber" name="50" href="#50">50</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.fs.PathFilter;
-<a class="jxr_linenumber" name="51" href="#51">51</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.Cell;
-<a class="jxr_linenumber" name="52" href="#52">52</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.HBaseConfiguration;
-<a class="jxr_linenumber" name="53" href="#53">53</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.HBaseTestingUtility;
-<a class="jxr_linenumber" name="54" href="#54">54</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.HColumnDescriptor;
-<a class="jxr_linenumber" name="55" href="#55">55</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.HConstants;
-<a class="jxr_linenumber" name="56" href="#56">56</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.HRegionInfo;
-<a class="jxr_linenumber" name="57" href="#57">57</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.HTableDescriptor;
-<a class="jxr_linenumber" name="58" href="#58">58</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.KeyValue;
-<a class="jxr_linenumber" name="59" href="#59">59</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.MasterNotRunningException;
-<a class="jxr_linenumber" name="60" href="#60">60</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.MiniHBaseCluster;
-<a class="jxr_linenumber" name="61" href="#61">61</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.ServerName;
-<a class="jxr_linenumber" name="62" href="#62">62</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.TableName;
-<a class="jxr_linenumber" name="63" href="#63">63</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.ZooKeeperConnectionException;
-<a class="jxr_linenumber" name="64" href="#64">64</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.Delete;
-<a class="jxr_linenumber" name="65" href="#65">65</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.Get;
-<a class="jxr_linenumber" name="66" href="#66">66</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.Put;
-<a class="jxr_linenumber" name="67" href="#67">67</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.Result;
-<a class="jxr_linenumber" name="68" href="#68">68</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.ResultScanner;
-<a class="jxr_linenumber" name="69" href="#69">69</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.Scan;
-<a class="jxr_linenumber" name="70" href="#70">70</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.Table;
-<a class="jxr_linenumber" name="71" href="#71">71</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.master.HMaster;
-<a class="jxr_linenumber" name="72" href="#72">72</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.monitoring.MonitoredTask;
-<a class="jxr_linenumber" name="73" href="#73">73</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.ZooKeeperProtos.SplitLogTask.RecoveryMode;
-<a class="jxr_linenumber" name="74" href="#74">74</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.DefaultStoreEngine;
-<a class="jxr_linenumber" name="75" href="#75">75</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.DefaultStoreFlusher;
-<a class="jxr_linenumber" name="76" href="#76">76</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.FlushRequestListener;
-<a class="jxr_linenumber" name="77" href="#77">77</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.FlushRequester;
-<a class="jxr_linenumber" name="78" href="#78">78</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.HRegion;
-<a class="jxr_linenumber" name="79" href="#79">79</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.HRegionServer;
-<a class="jxr_linenumber" name="80" href="#80">80</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.MemStoreSnapshot;
-<a class="jxr_linenumber" name="81" href="#81">81</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.MultiVersionConcurrencyControl;
-<a class="jxr_linenumber" name="82" href="#82">82</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.Region;
-<a class="jxr_linenumber" name="83" href="#83">83</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.RegionScanner;
-<a class="jxr_linenumber" name="84" href="#84">84</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.RegionServerServices;
-<a class="jxr_linenumber" name="85" href="#85">85</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.Store;
-<a class="jxr_linenumber" name="86" href="#86">86</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.throttle.ThroughputController;
-<a class="jxr_linenumber" name="87" href="#87">87</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.security.User;
-<a class="jxr_linenumber" name="88" href="#88">88</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.testclassification.MediumTests;
-<a class="jxr_linenumber" name="89" href="#89">89</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.testclassification.RegionServerTests;
-<a class="jxr_linenumber" name="90" href="#90">90</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.util.Bytes;
-<a class="jxr_linenumber" name="91" href="#91">91</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.util.EnvironmentEdge;
-<a class="jxr_linenumber" name="92" href="#92">92</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.util.EnvironmentEdgeManager;
-<a class="jxr_linenumber" name="93" href="#93">93</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.util.FSUtils;
-<a class="jxr_linenumber" name="94" href="#94">94</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.util.HFileTestUtil;
-<a class="jxr_linenumber" name="95" href="#95">95</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.util.Pair;
-<a class="jxr_linenumber" name="96" href="#96">96</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.wal.DefaultWALProvider;
-<a class="jxr_linenumber" name="97" href="#97">97</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.wal.WAL;
-<a class="jxr_linenumber" name="98" href="#98">98</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.wal.WALFactory;
-<a class="jxr_linenumber" name="99" href="#99">99</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.wal.WALKey;
-<a class="jxr_linenumber" name="100" href="#100">100</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.wal.WALSplitter;
-<a class="jxr_linenumber" name="101" href="#101">101</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hdfs.DFSInputStream;
-<a class="jxr_linenumber" name="102" href="#102">102</a> <strong class="jxr_keyword">import</strong> org.junit.After;
-<a class="jxr_linenumber" name="103" href="#103">103</a> <strong class="jxr_keyword">import</strong> org.junit.AfterClass;
-<a class="jxr_linenumber" name="104" href="#104">104</a> <strong class="jxr_keyword">import</strong> org.junit.Before;
-<a class="jxr_linenumber" name="105" href="#105">105</a> <strong class="jxr_keyword">import</strong> org.junit.BeforeClass;
-<a class="jxr_linenumber" name="106" href="#106">106</a> <strong class="jxr_keyword">import</strong> org.junit.Rule;
-<a class="jxr_linenumber" name="107" href="#107">107</a> <strong class="jxr_keyword">import</strong> org.junit.Test;
-<a class="jxr_linenumber" name="108" href="#108">108</a> <strong class="jxr_keyword">import</strong> org.junit.experimental.categories.Category;
-<a class="jxr_linenumber" name="109" href="#109">109</a> <strong class="jxr_keyword">import</strong> org.junit.rules.TestName;
-<a class="jxr_linenumber" name="110" href="#110">110</a> <strong class="jxr_keyword">import</strong> org.mockito.Mockito;
-<a class="jxr_linenumber" name="111" href="#111">111</a> <strong class="jxr_keyword">import</strong> org.mockito.invocation.InvocationOnMock;
-<a class="jxr_linenumber" name="112" href="#112">112</a> <strong class="jxr_keyword">import</strong> org.mockito.stubbing.Answer;
-<a class="jxr_linenumber" name="113" href="#113">113</a> 
-<a class="jxr_linenumber" name="114" href="#114">114</a> <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="115" href="#115">115</a> <em class="jxr_javadoccomment"> * Test replay of edits out of a WAL split.</em>
-<a class="jxr_linenumber" name="116" href="#116">116</a> <em class="jxr_javadoccomment"> */</em>
-<a class="jxr_linenumber" name="117" href="#117">117</a> @Category({RegionServerTests.<strong class="jxr_keyword">class</strong>, MediumTests.<strong class="jxr_keyword">class</strong>})
-<a class="jxr_linenumber" name="118" href="#118">118</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html">TestWALReplay</a> {
-<a class="jxr_linenumber" name="119" href="#119">119</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> Log LOG = LogFactory.getLog(TestWALReplay.<strong class="jxr_keyword">class</strong>);
-<a class="jxr_linenumber" name="120" href="#120">120</a>   <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html">HBaseTestingUtility</a> TEST_UTIL = <strong class="jxr_keyword">new</strong> <a href="../../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html">HBaseTestingUtility</a>();
-<a class="jxr_linenumber" name="121" href="#121">121</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> EnvironmentEdge ee = EnvironmentEdgeManager.getDelegate();
-<a class="jxr_linenumber" name="122" href="#122">122</a>   <strong class="jxr_keyword">private</strong> Path hbaseRootDir = <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="123" href="#123">123</a>   <strong class="jxr_keyword">private</strong> String logName;
-<a class="jxr_linenumber" name="124" href="#124">124</a>   <strong class="jxr_keyword">private</strong> Path oldLogDir;
-<a class="jxr_linenumber" name="125" href="#125">125</a>   <strong class="jxr_keyword">private</strong> Path logDir;
-<a class="jxr_linenumber" name="126" href="#126">126</a>   <strong class="jxr_keyword">private</strong> FileSystem fs;
-<a class="jxr_linenumber" name="127" href="#127">127</a>   <strong class="jxr_keyword">private</strong> Configuration conf;
-<a class="jxr_linenumber" name="128" href="#128">128</a>   <strong class="jxr_keyword">private</strong> RecoveryMode mode;
-<a class="jxr_linenumber" name="129" href="#129">129</a>   <strong class="jxr_keyword">private</strong> WALFactory wals;
-<a class="jxr_linenumber" name="130" href="#130">130</a> 
-<a class="jxr_linenumber" name="131" href="#131">131</a>   @Rule
-<a class="jxr_linenumber" name="132" href="#132">132</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> TestName currentTest = <strong class="jxr_keyword">new</strong> TestName();
-<a class="jxr_linenumber" name="133" href="#133">133</a> 
+<a class="jxr_linenumber" name="36" href="#36">36</a>  <strong class="jxr_keyword">import</strong> java.util.Arrays;
+<a class="jxr_linenumber" name="37" href="#37">37</a>  <strong class="jxr_keyword">import</strong> java.util.Collection;
+<a class="jxr_linenumber" name="38" href="#38">38</a>  <strong class="jxr_keyword">import</strong> java.util.HashSet;
+<a class="jxr_linenumber" name="39" href="#39">39</a>  <strong class="jxr_keyword">import</strong> java.util.List;
+<a class="jxr_linenumber" name="40" href="#40">40</a>  <strong class="jxr_keyword">import</strong> java.util.Set;
+<a class="jxr_linenumber" name="41" href="#41">41</a>  <strong class="jxr_keyword">import</strong> java.util.concurrent.atomic.AtomicBoolean;
+<a class="jxr_linenumber" name="42" href="#42">42</a>  <strong class="jxr_keyword">import</strong> java.util.concurrent.atomic.AtomicInteger;
+<a class="jxr_linenumber" name="43" href="#43">43</a>  
+<a class="jxr_linenumber" name="44" href="#44">44</a>  <strong class="jxr_keyword">import</strong> org.apache.commons.logging.Log;
+<a class="jxr_linenumber" name="45" href="#45">45</a>  <strong class="jxr_keyword">import</strong> org.apache.commons.logging.LogFactory;
+<a class="jxr_linenumber" name="46" href="#46">46</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.conf.Configuration;
+<a class="jxr_linenumber" name="47" href="#47">47</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.fs.FSDataInputStream;
+<a class="jxr_linenumber" name="48" href="#48">48</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.fs.FileStatus;
+<a class="jxr_linenumber" name="49" href="#49">49</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.fs.FileSystem;
+<a class="jxr_linenumber" name="50" href="#50">50</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.fs.Path;
+<a class="jxr_linenumber" name="51" href="#51">51</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.fs.PathFilter;
+<a class="jxr_linenumber" name="52" href="#52">52</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.Cell;
+<a class="jxr_linenumber" name="53" href="#53">53</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.HBaseConfiguration;
+<a class="jxr_linenumber" name="54" href="#54">54</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.HBaseTestingUtility;
+<a class="jxr_linenumber" name="55" href="#55">55</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.HColumnDescriptor;
+<a class="jxr_linenumber" name="56" href="#56">56</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.HConstants;
+<a class="jxr_linenumber" name="57" href="#57">57</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.HRegionInfo;
+<a class="jxr_linenumber" name="58" href="#58">58</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.HTableDescriptor;
+<a class="jxr_linenumber" name="59" href="#59">59</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.KeyValue;
+<a class="jxr_linenumber" name="60" href="#60">60</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.MasterNotRunningException;
+<a class="jxr_linenumber" name="61" href="#61">61</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.MiniHBaseCluster;
+<a class="jxr_linenumber" name="62" href="#62">62</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.ServerName;
+<a class="jxr_linenumber" name="63" href="#63">63</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.TableName;
+<a class="jxr_linenumber" name="64" href="#64">64</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.ZooKeeperConnectionException;
+<a class="jxr_linenumber" name="65" href="#65">65</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.Delete;
+<a class="jxr_linenumber" name="66" href="#66">66</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.Get;
+<a class="jxr_linenumber" name="67" href="#67">67</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.Put;
+<a class="jxr_linenumber" name="68" href="#68">68</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.Result;
+<a class="jxr_linenumber" name="69" href="#69">69</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.ResultScanner;
+<a class="jxr_linenumber" name="70" href="#70">70</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.Scan;
+<a class="jxr_linenumber" name="71" href="#71">71</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.client.Table;
+<a class="jxr_linenumber" name="72" href="#72">72</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.master.HMaster;
+<a class="jxr_linenumber" name="73" href="#73">73</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.monitoring.MonitoredTask;
+<a class="jxr_linenumber" name="74" href="#74">74</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.protobuf.generated.ZooKeeperProtos.SplitLogTask.RecoveryMode;
+<a class="jxr_linenumber" name="75" href="#75">75</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.DefaultStoreEngine;
+<a class="jxr_linenumber" name="76" href="#76">76</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.DefaultStoreFlusher;
+<a class="jxr_linenumber" name="77" href="#77">77</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.FlushRequestListener;
+<a class="jxr_linenumber" name="78" href="#78">78</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.FlushRequester;
+<a class="jxr_linenumber" name="79" href="#79">79</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.HRegion;
+<a class="jxr_linenumber" name="80" href="#80">80</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.HRegionServer;
+<a class="jxr_linenumber" name="81" href="#81">81</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.MemStoreSnapshot;
+<a class="jxr_linenumber" name="82" href="#82">82</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.MultiVersionConcurrencyControl;
+<a class="jxr_linenumber" name="83" href="#83">83</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.Region;
+<a class="jxr_linenumber" name="84" href="#84">84</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.RegionScanner;
+<a class="jxr_linenumber" name="85" href="#85">85</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.RegionServerServices;
+<a class="jxr_linenumber" name="86" href="#86">86</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.Store;
+<a class="jxr_linenumber" name="87" href="#87">87</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.regionserver.throttle.ThroughputController;
+<a class="jxr_linenumber" name="88" href="#88">88</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.security.User;
+<a class="jxr_linenumber" name="89" href="#89">89</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.testclassification.MediumTests;
+<a class="jxr_linenumber" name="90" href="#90">90</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.testclassification.RegionServerTests;
+<a class="jxr_linenumber" name="91" href="#91">91</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.util.Bytes;
+<a class="jxr_linenumber" name="92" href="#92">92</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.util.EnvironmentEdge;
+<a class="jxr_linenumber" name="93" href="#93">93</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.util.EnvironmentEdgeManager;
+<a class="jxr_linenumber" name="94" href="#94">94</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.util.FSUtils;
+<a class="jxr_linenumber" name="95" href="#95">95</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.util.HFileTestUtil;
+<a class="jxr_linenumber" name="96" href="#96">96</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.util.Pair;
+<a class="jxr_linenumber" name="97" href="#97">97</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.wal.DefaultWALProvider;
+<a class="jxr_linenumber" name="98" href="#98">98</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.wal.WAL;
+<a class="jxr_linenumber" name="99" href="#99">99</a>  <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.wal.WALFactory;
+<a class="jxr_linenumber" name="100" href="#100">100</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.wal.WALKey;
+<a class="jxr_linenumber" name="101" href="#101">101</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hbase.wal.WALSplitter;
+<a class="jxr_linenumber" name="102" href="#102">102</a> <strong class="jxr_keyword">import</strong> org.apache.hadoop.hdfs.DFSInputStream;
+<a class="jxr_linenumber" name="103" href="#103">103</a> <strong class="jxr_keyword">import</strong> org.junit.After;
+<a class="jxr_linenumber" name="104" href="#104">104</a> <strong class="jxr_keyword">import</strong> org.junit.AfterClass;
+<a class="jxr_linenumber" name="105" href="#105">105</a> <strong class="jxr_keyword">import</strong> org.junit.Before;
+<a class="jxr_linenumber" name="106" href="#106">106</a> <strong class="jxr_keyword">import</strong> org.junit.BeforeClass;
+<a class="jxr_linenumber" name="107" href="#107">107</a> <strong class="jxr_keyword">import</strong> org.junit.Rule;
+<a class="jxr_linenumber" name="108" href="#108">108</a> <strong class="jxr_keyword">import</strong> org.junit.Test;
+<a class="jxr_linenumber" name="109" href="#109">109</a> <strong class="jxr_keyword">import</strong> org.junit.experimental.categories.Category;
+<a class="jxr_linenumber" name="110" href="#110">110</a> <strong class="jxr_keyword">import</strong> org.junit.rules.TestName;
+<a class="jxr_linenumber" name="111" href="#111">111</a> <strong class="jxr_keyword">import</strong> org.mockito.Mockito;
+<a class="jxr_linenumber" name="112" href="#112">112</a> <strong class="jxr_keyword">import</strong> org.mockito.invocation.InvocationOnMock;
+<a class="jxr_linenumber" name="113" href="#113">113</a> <strong class="jxr_keyword">import</strong> org.mockito.stubbing.Answer;
+<a class="jxr_linenumber" name="114" href="#114">114</a> 
+<a class="jxr_linenumber" name="115" href="#115">115</a> <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="116" href="#116">116</a> <em class="jxr_javadoccomment"> * Test replay of edits out of a WAL split.</em>
+<a class="jxr_linenumber" name="117" href="#117">117</a> <em class="jxr_javadoccomment"> */</em>
+<a class="jxr_linenumber" name="118" href="#118">118</a> @Category({RegionServerTests.<strong class="jxr_keyword">class</strong>, MediumTests.<strong class="jxr_keyword">class</strong>})
+<a class="jxr_linenumber" name="119" href="#119">119</a> <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html">TestWALReplay</a> {
+<a class="jxr_linenumber" name="120" href="#120">120</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> Log LOG = LogFactory.getLog(TestWALReplay.<strong class="jxr_keyword">class</strong>);
+<a class="jxr_linenumber" name="121" href="#121">121</a>   <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <a href="../../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html">HBaseTestingUtility</a> TEST_UTIL = <strong class="jxr_keyword">new</strong> <a href="../../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html">HBaseTestingUtility</a>();
+<a class="jxr_linenumber" name="122" href="#122">122</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> EnvironmentEdge ee = EnvironmentEdgeManager.getDelegate();
+<a class="jxr_linenumber" name="123" href="#123">123</a>   <strong class="jxr_keyword">private</strong> Path hbaseRootDir = <strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="124" href="#124">124</a>   <strong class="jxr_keyword">private</strong> String logName;
+<a class="jxr_linenumber" name="125" href="#125">125</a>   <strong class="jxr_keyword">private</strong> Path oldLogDir;
+<a class="jxr_linenumber" name="126" href="#126">126</a>   <strong class="jxr_keyword">private</strong> Path logDir;
+<a class="jxr_linenumber" name="127" href="#127">127</a>   <strong class="jxr_keyword">private</strong> FileSystem fs;
+<a class="jxr_linenumber" name="128" href="#128">128</a>   <strong class="jxr_keyword">private</strong> Configuration conf;
+<a class="jxr_linenumber" name="129" href="#129">129</a>   <strong class="jxr_keyword">private</strong> RecoveryMode mode;
+<a class="jxr_linenumber" name="130" href="#130">130</a>   <strong class="jxr_keyword">private</strong> WALFactory wals;
+<a class="jxr_linenumber" name="131" href="#131">131</a> 
+<a class="jxr_linenumber" name="132" href="#132">132</a>   @Rule
+<a class="jxr_linenumber" name="133" href="#133">133</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> TestName currentTest = <strong class="jxr_keyword">new</strong> TestName();
 <a class="jxr_linenumber" name="134" href="#134">134</a> 
-<a class="jxr_linenumber" name="135" href="#135">135</a>   @BeforeClass
-<a class="jxr_linenumber" name="136" href="#136">136</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">void</strong> setUpBeforeClass() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="137" href="#137">137</a>     Configuration conf = TEST_UTIL.getConfiguration();
-<a class="jxr_linenumber" name="138" href="#138">138</a>     conf.setBoolean(<span class="jxr_string">"dfs.support.append"</span>, <strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="139" href="#139">139</a>     <em class="jxr_comment">// The below config supported by 0.20-append and CDH3b2</em>
-<a class="jxr_linenumber" name="140" href="#140">140</a>     conf.setInt(<span class="jxr_string">"dfs.client.block.recovery.retries"</span>, 2);
-<a class="jxr_linenumber" name="141" href="#141">141</a>     TEST_UTIL.startMiniCluster(3);
-<a class="jxr_linenumber" name="142" href="#142">142</a>     Path hbaseRootDir =
-<a class="jxr_linenumber" name="143" href="#143">143</a>       TEST_UTIL.getDFSCluster().getFileSystem().makeQualified(<strong class="jxr_keyword">new</strong> Path(<span class="jxr_string">"/hbase"</span>));
-<a class="jxr_linenumber" name="144" href="#144">144</a>     LOG.info(<span class="jxr_string">"hbase.rootdir="</span> + hbaseRootDir);
-<a class="jxr_linenumber" name="145" href="#145">145</a>     FSUtils.setRootDir(conf, hbaseRootDir);
-<a class="jxr_linenumber" name="146" href="#146">146</a>   }
-<a class="jxr_linenumber" name="147" href="#147">147</a> 
-<a class="jxr_linenumber" name="148" href="#148">148</a>   @AfterClass
-<a class="jxr_linenumber" name="149" href="#149">149</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">void</strong> tearDownAfterClass() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="150" href="#150">150</a>     TEST_UTIL.shutdownMiniCluster();
-<a class="jxr_linenumber" name="151" href="#151">151</a>   }
-<a class="jxr_linenumber" name="152" href="#152">152</a> 
-<a class="jxr_linenumber" name="153" href="#153">153</a>   @Before
-<a class="jxr_linenumber" name="154" href="#154">154</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setUp() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="155" href="#155">155</a>     <strong class="jxr_keyword">this</strong>.conf = HBaseConfiguration.create(TEST_UTIL.getConfiguration());
-<a class="jxr_linenumber" name="156" href="#156">156</a>     <strong class="jxr_keyword">this</strong>.fs = TEST_UTIL.getDFSCluster().getFileSystem();
-<a class="jxr_linenumber" name="157" href="#157">157</a>     <strong class="jxr_keyword">this</strong>.hbaseRootDir = FSUtils.getRootDir(<strong class="jxr_keyword">this</strong>.conf);
-<a class="jxr_linenumber" name="158" href="#158">158</a>     <strong class="jxr_keyword">this</strong>.oldLogDir = <strong class="jxr_keyword">new</strong> Path(<strong class="jxr_keyword">this</strong>.hbaseRootDir, HConstants.HREGION_OLDLOGDIR_NAME);
-<a class="jxr_linenumber" name="159" href="#159">159</a>     <strong class="jxr_keyword">this</strong>.logName = DefaultWALProvider.getWALDirectoryName(currentTest.getMethodName() + <span class="jxr_string">"-manual"</span>);
-<a class="jxr_linenumber" name="160" href="#160">160</a>     <strong class="jxr_keyword">this</strong>.logDir = <strong class="jxr_keyword">new</strong> Path(<strong class="jxr_keyword">this</strong>.hbaseRootDir, logName);
-<a class="jxr_linenumber" name="161" href="#161">161</a>     <strong class="jxr_keyword">if</strong> (TEST_UTIL.getDFSCluster().getFileSystem().exists(<strong class="jxr_keyword">this</strong>.hbaseRootDir)) {
-<a class="jxr_linenumber" name="162" href="#162">162</a>       TEST_UTIL.getDFSCluster().getFileSystem().delete(<strong class="jxr_keyword">this</strong>.hbaseRootDir, <strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="163" href="#163">163</a>     }
-<a class="jxr_linenumber" name="164" href="#164">164</a>     <strong class="jxr_keyword">this</strong>.mode = (conf.getBoolean(HConstants.DISTRIBUTED_LOG_REPLAY_KEY, false) ?
-<a class="jxr_linenumber" name="165" href="#165">165</a>         RecoveryMode.LOG_REPLAY : RecoveryMode.LOG_SPLITTING);
-<a class="jxr_linenumber" name="166" href="#166">166</a>     <strong class="jxr_keyword">this</strong>.wals = <strong class="jxr_keyword">new</strong> WALFactory(conf, <strong class="jxr_keyword">null</strong>, currentTest.getMethodName());
-<a class="jxr_linenumber" name="167" href="#167">167</a>   }
-<a class="jxr_linenumber" name="168" href="#168">168</a> 
-<a class="jxr_linenumber" name="169" href="#169">169</a>   @After
-<a class="jxr_linenumber" name="170" href="#170">170</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> tearDown() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="171" href="#171">171</a>     <strong class="jxr_keyword">this</strong>.wals.close();
-<a class="jxr_linenumber" name="172" href="#172">172</a>     TEST_UTIL.getDFSCluster().getFileSystem().delete(<strong class="jxr_keyword">this</strong>.hbaseRootDir, <strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="173" href="#173">173</a>   }
-<a class="jxr_linenumber" name="174" href="#174">174</a> 
-<a class="jxr_linenumber" name="175" href="#175">175</a>   <em class="jxr_comment">/*</em>
-<a class="jxr_linenumber" name="176" href="#176">176</a> <em class="jxr_comment">   * @param p Directory to cleanup</em>
-<a class="jxr_linenumber" name="177" href="#177">177</a> <em class="jxr_comment">   */</em>
-<a class="jxr_linenumber" name="178" href="#178">178</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> deleteDir(<strong class="jxr_keyword">final</strong> Path p) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="179" href="#179">179</a>     <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.fs.exists(p)) {
-<a class="jxr_linenumber" name="180" href="#180">180</a>       <strong class="jxr_keyword">if</strong> (!<strong class="jxr_keyword">this</strong>.fs.delete(p, <strong class="jxr_keyword">true</strong>)) {
-<a class="jxr_linenumber" name="181" href="#181">181</a>         <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IOException(<span class="jxr_string">"Failed remove of "</span> + p);
-<a class="jxr_linenumber" name="182" href="#182">182</a>       }
-<a class="jxr_linenumber" name="183" href="#183">183</a>     }
-<a class="jxr_linenumber" name="184" href="#184">184</a>   }
-<a class="jxr_linenumber" name="185" href="#185">185</a> 
-<a class="jxr_linenumber" name="186" href="#186">186</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="187" href="#187">187</a> <em class="jxr_javadoccomment">   *</em>
-<a class="jxr_linenumber" name="188" href="#188">188</a> <em class="jxr_javadoccomment">   * @throws Exception</em>
-<a class="jxr_linenumber" name="189" href="#189">189</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="190" href="#190">190</a>   @Test
-<a class="jxr_linenumber" name="191" href="#191">191</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testReplayEditsAfterRegionMovedWithMultiCF() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="192" href="#192">192</a>     <strong class="jxr_keyword">final</strong> TableName tableName =
-<a class="jxr_linenumber" name="193" href="#193">193</a>         TableName.valueOf(<span class="jxr_string">"testReplayEditsAfterRegionMovedWithMultiCF"</span>);
-<a class="jxr_linenumber" name="194" href="#194">194</a>     byte[] family1 = Bytes.toBytes(<span class="jxr_string">"cf1"</span>);
-<a class="jxr_linenumber" name="195" href="#195">195</a>     byte[] family2 = Bytes.toBytes(<span class="jxr_string">"cf2"</span>);
-<a class="jxr_linenumber" name="196" href="#196">196</a>     byte[] qualifier = Bytes.toBytes(<span class="jxr_string">"q"</span>);
-<a class="jxr_linenumber" name="197" href="#197">197</a>     byte[] value = Bytes.toBytes(<span class="jxr_string">"testV"</span>);
-<a class="jxr_linenumber" name="198" href="#198">198</a>     byte[][] familys = { family1, family2 };
-<a class="jxr_linenumber" name="199" href="#199">199</a>     TEST_UTIL.createTable(tableName, familys);
-<a class="jxr_linenumber" name="200" href="#200">200</a>     Table htable = TEST_UTIL.getConnection().getTable(tableName);
-<a class="jxr_linenumber" name="201" href="#201">201</a>     Put put = <strong class="jxr_keyword">new</strong> Put(Bytes.toBytes(<span class="jxr_string">"r1"</span>));
-<a class="jxr_linenumber" name="202" href="#202">202</a>     put.addColumn(family1, qualifier, value);
-<a class="jxr_linenumber" name="203" href="#203">203</a>     htable.put(put);
-<a class="jxr_linenumber" name="204" href="#204">204</a>     ResultScanner resultScanner = htable.getScanner(<strong class="jxr_keyword">new</strong> Scan());
-<a class="jxr_linenumber" name="205" href="#205">205</a>     <strong class="jxr_keyword">int</strong> count = 0;
-<a class="jxr_linenumber" name="206" href="#206">206</a>     <strong class="jxr_keyword">while</strong> (resultScanner.next() != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="207" href="#207">207</a>       count++;
-<a class="jxr_linenumber" name="208" href="#208">208</a>     }
-<a class="jxr_linenumber" name="209" href="#209">209</a>     resultScanner.close();
-<a class="jxr_linenumber" name="210" href="#210">210</a>     assertEquals(1, count);
-<a class="jxr_linenumber" name="211" href="#211">211</a> 
-<a class="jxr_linenumber" name="212" href="#212">212</a>     <a href="../../../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html">MiniHBaseCluster</a> hbaseCluster = TEST_UTIL.getMiniHBaseCluster();
-<a class="jxr_linenumber" name="213" href="#213">213</a>     List&lt;HRegion&gt; regions = hbaseCluster.getRegions(tableName);
-<a class="jxr_linenumber" name="214" href="#214">214</a>     assertEquals(1, regions.size());
-<a class="jxr_linenumber" name="215" href="#215">215</a> 
-<a class="jxr_linenumber" name="216" href="#216">216</a>     <em class="jxr_comment">// move region to another regionserver</em>
-<a class="jxr_linenumber" name="217" href="#217">217</a>     Region destRegion = regions.get(0);
-<a class="jxr_linenumber" name="218" href="#218">218</a>     <strong class="jxr_keyword">int</strong> originServerNum = hbaseCluster
-<a class="jxr_linenumber" name="219" href="#219">219</a>         .getServerWith(destRegion.getRegionInfo().getRegionName());
-<a class="jxr_linenumber" name="220" href="#220">220</a>     assertTrue(<span class="jxr_string">"Please start more than 1 regionserver"</span>, hbaseCluster
-<a class="jxr_linenumber" name="221" href="#221">221</a>         .getRegionServerThreads().size() &gt; 1);
-<a class="jxr_linenumber" name="222" href="#222">222</a>     <strong class="jxr_keyword">int</strong> destServerNum = 0;
-<a class="jxr_linenumber" name="223" href="#223">223</a>     <strong class="jxr_keyword">while</strong> (destServerNum == originServerNum) {
-<a class="jxr_linenumber" name="224" href="#224">224</a>       destServerNum++;
-<a class="jxr_linenumber" name="225" href="#225">225</a>     }
-<a class="jxr_linenumber" name="226" href="#226">226</a>     HRegionServer originServer = hbaseCluster.getRegionServer(originServerNum);
-<a class="jxr_linenumber" name="227" href="#227">227</a>     HRegionServer destServer = hbaseCluster.getRegionServer(destServerNum);
-<a class="jxr_linenumber" name="228" href="#228">228</a>     <em class="jxr_comment">// move region to destination regionserver</em>
-<a class="jxr_linenumber" name="229" href="#229">229</a>     moveRegionAndWait(destRegion, destServer);
-<a class="jxr_linenumber" name="230" href="#230">230</a> 
-<a class="jxr_linenumber" name="231" href="#231">231</a>     <em class="jxr_comment">// delete the row</em>
-<a class="jxr_linenumber" name="232" href="#232">232</a>     Delete del = <strong class="jxr_keyword">new</strong> Delete(Bytes.toBytes(<span class="jxr_string">"r1"</span>));
-<a class="jxr_linenumber" name="233" href="#233">233</a>     htable.delete(del);
-<a class="jxr_linenumber" name="234" href="#234">234</a>     resultScanner = htable.getScanner(<strong class="jxr_keyword">new</strong> Scan());
-<a class="jxr_linenumber" name="235" href="#235">235</a>     count = 0;
-<a class="jxr_linenumber" name="236" href="#236">236</a>     <strong class="jxr_keyword">while</strong> (resultScanner.next() != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="237" href="#237">237</a>       count++;
-<a class="jxr_linenumber" name="238" href="#238">238</a>     }
-<a class="jxr_linenumber" name="239" href="#239">239</a>     resultScanner.close();
-<a class="jxr_linenumber" name="240" href="#240">240</a>     assertEquals(0, count);
-<a class="jxr_linenumber" name="241" href="#241">241</a> 
-<a class="jxr_linenumber" name="242" href="#242">242</a>     <em class="jxr_comment">// flush region and make major compaction</em>
-<a class="jxr_linenumber" name="243" href="#243">243</a>     Region region =  destServer.getOnlineRegion(destRegion.getRegionInfo().getRegionName());
-<a class="jxr_linenumber" name="244" href="#244">244</a>     region.flush(<strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="245" href="#245">245</a>     <em class="jxr_comment">// wait to complete major compaction</em>
-<a class="jxr_linenumber" name="246" href="#246">246</a>     <strong class="jxr_keyword">for</strong> (Store store : region.getStores()) {
-<a class="jxr_linenumber" name="247" href="#247">247</a>       store.triggerMajorCompaction();
-<a class="jxr_linenumber" name="248" href="#248">248</a>     }
-<a class="jxr_linenumber" name="249" href="#249">249</a>     region.compact(<strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="250" href="#250">250</a> 
-<a class="jxr_linenumber" name="251" href="#251">251</a>     <em class="jxr_comment">// move region to origin regionserver</em>
-<a class="jxr_linenumber" name="252" href="#252">252</a>     moveRegionAndWait(destRegion, originServer);
-<a class="jxr_linenumber" name="253" href="#253">253</a>     <em class="jxr_comment">// abort the origin regionserver</em>
-<a class="jxr_linenumber" name="254" href="#254">254</a>     originServer.abort(<span class="jxr_string">"testing"</span>);
-<a class="jxr_linenumber" name="255" href="#255">255</a> 
-<a class="jxr_linenumber" name="256" href="#256">256</a>     <em class="jxr_comment">// see what we get</em>
-<a class="jxr_linenumber" name="257" href="#257">257</a>     Result result = htable.get(<strong class="jxr_keyword">new</strong> Get(Bytes.toBytes(<span class="jxr_string">"r1"</span>)));
-<a class="jxr_linenumber" name="258" href="#258">258</a>     <strong class="jxr_keyword">if</strong> (result != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="259" href="#259">259</a>       assertTrue(<span class="jxr_string">"Row is deleted, but we get"</span> + result.toString(),
-<a class="jxr_linenumber" name="260" href="#260">260</a>           (result == <strong class="jxr_keyword">null</strong>) || result.isEmpty());
-<a class="jxr_linenumber" name="261" href="#261">261</a>     }
-<a class="jxr_linenumber" name="262" href="#262">262</a>     resultScanner.close();
-<a class="jxr_linenumber" name="263" href="#263">263</a>   }
-<a class="jxr_linenumber" name="264" href="#264">264</a> 
-<a class="jxr_linenumber" name="265" href="#265">265</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> moveRegionAndWait(Region destRegion, HRegionServer destServer)
-<a class="jxr_linenumber" name="266" href="#266">266</a>       <strong class="jxr_keyword">throws</strong> InterruptedException, MasterNotRunningException,
-<a class="jxr_linenumber" name="267" href="#267">267</a>       ZooKeeperConnectionException, IOException {
-<a class="jxr_linenumber" name="268" href="#268">268</a>     HMaster master = TEST_UTIL.getMiniHBaseCluster().getMaster();
-<a class="jxr_linenumber" name="269" href="#269">269</a>     TEST_UTIL.getHBaseAdmin().move(
-<a class="jxr_linenumber" name="270" href="#270">270</a>         destRegion.getRegionInfo().getEncodedNameAsBytes(),
-<a class="jxr_linenumber" name="271" href="#271">271</a>         Bytes.toBytes(destServer.getServerName().getServerName()));
-<a class="jxr_linenumber" name="272" href="#272">272</a>     <strong class="jxr_keyword">while</strong> (<strong class="jxr_keyword">true</strong>) {
-<a class="jxr_linenumber" name="273" href="#273">273</a>       ServerName serverName = master.getAssignmentManager()
-<a class="jxr_linenumber" name="274" href="#274">274</a>         .getRegionStates().getRegionServerOfRegion(destRegion.getRegionInfo());
-<a class="jxr_linenumber" name="275" href="#275">275</a>       <strong class="jxr_keyword">if</strong> (serverName != <strong class="jxr_keyword">null</strong> &amp;&amp; serverName.equals(destServer.getServerName())) {
-<a class="jxr_linenumber" name="276" href="#276">276</a>         TEST_UTIL.assertRegionOnServer(
-<a class="jxr_linenumber" name="277" href="#277">277</a>           destRegion.getRegionInfo(), serverName, 200);
-<a class="jxr_linenumber" name="278" href="#278">278</a>         <strong class="jxr_keyword">break</strong>;
-<a class="jxr_linenumber" name="279" href="#279">279</a>       }
-<a class="jxr_linenumber" name="280" href="#280">280</a>       Thread.sleep(10);
-<a class="jxr_linenumber" name="281" href="#281">281</a>     }
-<a class="jxr_linenumber" name="282" href="#282">282</a>   }
-<a class="jxr_linenumber" name="283" href="#283">283</a> 
-<a class="jxr_linenumber" name="284" href="#284">284</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="285" href="#285">285</a> <em class="jxr_javadoccomment">   * Tests for hbase-2727.</em>
-<a class="jxr_linenumber" name="286" href="#286">286</a> <em class="jxr_javadoccomment">   * @throws Exception</em>
-<a class="jxr_linenumber" name="287" href="#287">287</a> <em class="jxr_javadoccomment">   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-2727"&gt;HBASE-2727&lt;/a&gt;</em>
-<a class="jxr_linenumber" name="288" href="#288">288</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="289" href="#289">289</a>   @Test
-<a class="jxr_linenumber" name="290" href="#290">290</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> test2727() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="291" href="#291">291</a>     <em class="jxr_comment">// Test being able to have &gt; 1 set of edits in the recovered.edits directory.</em>
-<a class="jxr_linenumber" name="292" href="#292">292</a>     <em class="jxr_comment">// Ensure edits are replayed properly.</em>
-<a class="jxr_linenumber" name="293" href="#293">293</a>     <strong class="jxr_keyword">final</strong> TableName tableName =
-<a class="jxr_linenumber" name="294" href="#294">294</a>         TableName.valueOf(<span class="jxr_string">"test2727"</span>);
-<a class="jxr_linenumber" name="295" href="#295">295</a> 
-<a class="jxr_linenumber" name="296" href="#296">296</a>     MultiVersionConcurrencyControl mvcc = <strong class="jxr_keyword">new</strong> MultiVersionConcurrencyControl();
-<a class="jxr_linenumber" name="297" href="#297">297</a>     HRegionInfo hri = createBasic3FamilyHRegionInfo(tableName);
-<a class="jxr_linenumber" name="298" href="#298">298</a>     Path basedir = FSUtils.getTableDir(hbaseRootDir, tableName);
-<a class="jxr_linenumber" name="299" href="#299">299</a>     deleteDir(basedir);
-<a class="jxr_linenumber" name="300" href="#300">300</a> 
-<a class="jxr_linenumber" name="301" href="#301">301</a>     HTableDescriptor htd = createBasic3FamilyHTD(tableName);
-<a class="jxr_linenumber" name="302" href="#302">302</a>     Region region2 = HBaseTestingUtility.createRegionAndWAL(hri, hbaseRootDir, <strong class="jxr_keyword">this</strong>.conf, htd);
-<a class="jxr_linenumber" name="303" href="#303">303</a>     HBaseTestingUtility.closeRegionAndWAL(region2);
-<a class="jxr_linenumber" name="304" href="#304">304</a>     <strong class="jxr_keyword">final</strong> byte [] rowName = tableName.getName();
-<a class="jxr_linenumber" name="305" href="#305">305</a> 
-<a class="jxr_linenumber" name="306" href="#306">306</a>     WAL wal1 = createWAL(<strong class="jxr_keyword">this</strong>.conf);
-<a class="jxr_linenumber" name="307" href="#307">307</a>     <em class="jxr_comment">// Add 1k to each family.</em>
-<a class="jxr_linenumber" name="308" href="#308">308</a>     <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> countPerFamily = 1000;
-<a class="jxr_linenumber" name="309" href="#309">309</a> 
-<a class="jxr_linenumber" name="310" href="#310">310</a>     <strong class="jxr_keyword">for</strong> (HColumnDescriptor hcd: htd.getFamilies()) {
-<a class="jxr_linenumber" name="311" href="#311">311</a>       addWALEdits(tableName, hri, rowName, hcd.getName(), countPerFamily, ee,
-<a class="jxr_linenumber" name="312" href="#312">312</a>           wal1, htd, mvcc);
-<a class="jxr_linenumber" name="313" href="#313">313</a>     }
-<a class="jxr_linenumber" name="314" href="#314">314</a>     wal1.shutdown();
-<a class="jxr_linenumber" name="315" href="#315">315</a>     runWALSplit(<strong class="jxr_keyword">this</strong>.conf);
-<a class="jxr_linenumber" name="316" href="#316">316</a> 
-<a class="jxr_linenumber" name="317" href="#317">317</a>     WAL wal2 = createWAL(<strong class="jxr_keyword">this</strong>.conf);
-<a class="jxr_linenumber" name="318" href="#318">318</a>     <em class="jxr_comment">// Add 1k to each family.</em>
-<a class="jxr_linenumber" name="319" href="#319">319</a>     <strong class="jxr_keyword">for</strong> (HColumnDescriptor hcd: htd.getFamilies()) {
-<a class="jxr_linenumber" name="320" href="#320">320</a>       addWALEdits(tableName, hri, rowName, hcd.getName(), countPerFamily,
-<a class="jxr_linenumber" name="321" href="#321">321</a>           ee, wal2, htd, mvcc);
-<a class="jxr_linenumber" name="322" href="#322">322</a>     }
-<a class="jxr_linenumber" name="323" href="#323">323</a>     wal2.shutdown();
-<a class="jxr_linenumber" name="324" href="#324">324</a>     runWALSplit(<strong class="jxr_keyword">this</strong>.conf);
-<a class="jxr_linenumber" name="325" href="#325">325</a> 
-<a class="jxr_linenumber" name="326" href="#326">326</a>     WAL wal3 = createWAL(<strong class="jxr_keyword">this</strong>.conf);
-<a class="jxr_linenumber" name="327" href="#327">327</a>     <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="328" href="#328">328</a>       HRegion region = HRegion.openHRegion(<strong class="jxr_keyword">this</strong>.conf, <strong class="jxr_keyword">this</strong>.fs, hbaseRootDir, hri, htd, wal3);
-<a class="jxr_linenumber" name="329" href="#329">329</a>       <strong class="jxr_keyword">long</strong> seqid = region.getOpenSeqNum();
-<a class="jxr_linenumber" name="330" href="#330">330</a>       <em class="jxr_comment">// The regions opens with sequenceId as 1. With 6k edits, its sequence number reaches 6k + 1.</em>
-<a class="jxr_linenumber" name="331" href="#331">331</a>       <em class="jxr_comment">// When opened, this region would apply 6k edits, and increment the sequenceId by 1</em>
-<a class="jxr_linenumber" name="332" href="#332">332</a>       assertTrue(seqid &gt; mvcc.getWritePoint());
-<a class="jxr_linenumber" name="333" href="#333">333</a>       assertEquals(seqid - 1, mvcc.getWritePoint());
-<a class="jxr_linenumber" name="334" href="#334">334</a>       LOG.debug(<span class="jxr_string">"region.getOpenSeqNum(): "</span> + region.getOpenSeqNum() + <span class="jxr_string">", wal3.id: "</span>
-<a class="jxr_linenumber" name="335" href="#335">335</a>           + mvcc.getReadPoint());
-<a class="jxr_linenumber" name="336" href="#336">336</a> 
-<a class="jxr_linenumber" name="337" href="#337">337</a>       <em class="jxr_comment">// TODO: Scan all.</em>
-<a class="jxr_linenumber" name="338" href="#338">338</a>       region.close();
-<a class="jxr_linenumber" name="339" href="#339">339</a>     } <strong class="jxr_keyword">finally</strong> {
-<a class="jxr_linenumber" name="340" href="#340">340</a>       wal3.close();
-<a class="jxr_linenumber" name="341" href="#341">341</a>     }
-<a class="jxr_linenumber" name="342" href="#342">342</a>   }
-<a class="jxr_linenumber" name="343" href="#343">343</a> 
-<a class="jxr_linenumber" name="344" href="#344">344</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="345" href="#345">345</a> <em class="jxr_javadoccomment">   * Test case of HRegion that is only made out of bulk loaded files.  Assert</em>
-<a class="jxr_linenumber" name="346" href="#346">346</a> <em class="jxr_javadoccomment">   * that we don't 'crash'.</em>
-<a class="jxr_linenumber" name="347" href="#347">347</a> <em class="jxr_javadoccomment">   * @throws IOException</em>
-<a class="jxr_linenumber" name="348" href="#348">348</a> <em class="jxr_javadoccomment">   * @throws IllegalAccessException</em>
-<a class="jxr_linenumber" name="349" href="#349">349</a> <em class="jxr_javadoccomment">   * @throws NoSuchFieldException</em>
-<a class="jxr_linenumber" name="350" href="#350">350</a> <em class="jxr_javadoccomment">   * @throws IllegalArgumentException</em>
-<a class="jxr_linenumber" name="351" href="#351">351</a> <em class="jxr_javadoccomment">   * @throws SecurityException</em>
-<a class="jxr_linenumber" name="352" href="#352">352</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="353" href="#353">353</a>   @Test
-<a class="jxr_linenumber" name="354" href="#354">354</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testRegionMadeOfBulkLoadedFilesOnly()
-<a class="jxr_linenumber" name="355" href="#355">355</a>   <strong class="jxr_keyword">throws</strong> IOException, SecurityException, IllegalArgumentException,
-<a class="jxr_linenumber" name="356" href="#356">356</a>       NoSuchFieldException, IllegalAccessException, InterruptedException {
-<a class="jxr_linenumber" name="357" href="#357">357</a>     <strong class="jxr_keyword">final</strong> TableName tableName =
-<a class="jxr_linenumber" name="358" href="#358">358</a>         TableName.valueOf(<span class="jxr_string">"testRegionMadeOfBulkLoadedFilesOnly"</span>);
-<a class="jxr_linenumber" name="359" href="#359">359</a>     <strong class="jxr_keyword">final</strong> HRegionInfo hri = createBasic3FamilyHRegionInfo(tableName);
-<a class="jxr_linenumber" name="360" href="#360">360</a>     <strong class="jxr_keyword">final</strong> Path basedir = <strong class="jxr_keyword">new</strong> Path(<strong class="jxr_keyword">this</strong>.hbaseRootDir, tableName.getNameAsString());
-<a class="jxr_linenumber" name="361" href="#361">361</a>     deleteDir(basedir);
-<a class="jxr_linenumber" name="362" href="#362">362</a>     <strong class="jxr_keyword">final</strong> HTableDescriptor htd = createBasic3FamilyHTD(tableName);
-<a class="jxr_linenumber" name="363" href="#363">363</a>     Region region2 = HBaseTestingUtility.createRegionAndWAL(hri, hbaseRootDir, <strong class="jxr_keyword">this</strong>.conf, htd);
-<a class="jxr_linenumber" name="364" href="#364">364</a>     HBaseTestingUtility.closeRegionAndWAL(region2);
-<a class="jxr_linenumber" name="365" href="#365">365</a>     WAL wal = createWAL(<strong class="jxr_keyword">this</strong>.conf);
-<a class="jxr_linenumber" name="366" href="#366">366</a>     Region region = HRegion.openHRegion(hri, htd, wal, <strong class="jxr_keyword">this</strong>.conf);
-<a class="jxr_linenumber" name="367" href="#367">367</a> 
-<a class="jxr_linenumber" name="368" href="#368">368</a>     byte [] family = htd.getFamilies().iterator().next().getName();
-<a class="jxr_linenumber" name="369" href="#369">369</a>     Path f =  <strong class="jxr_keyword">new</strong> Path(basedir, <span class="jxr_string">"hfile"</span>);
-<a class="jxr_linenumber" name="370" href="#370">370</a>     HFileTestUtil.createHFile(<strong class="jxr_keyword">this</strong>.conf, fs, f, family, family, Bytes.toBytes(<span class="jxr_string">""</span>),
-<a class="jxr_linenumber" name="371" href="#371">371</a>         Bytes.toBytes(<span class="jxr_string">"z"</span>), 10);
-<a class="jxr_linenumber" name="372" href="#372">372</a>     List &lt;Pair&lt;byte[],String&gt;&gt;  hfs= <strong class="jxr_keyword">new</strong> ArrayList&lt;Pair&lt;byte[],String&gt;&gt;(1);
-<a class="jxr_linenumber" name="373" href="#373">373</a>     hfs.add(Pair.newPair(family, f.toString()));
-<a class="jxr_linenumber" name="374" href="#374">374</a>     region.bulkLoadHFiles(hfs, <strong class="jxr_keyword">true</strong>, <strong class="jxr_keyword">null</strong>);
-<a class="jxr_linenumber" name="375" href="#375">375</a> 
-<a class="jxr_linenumber" name="376" href="#376">376</a>     <em class="jxr_comment">// Add an edit so something in the WAL</em>
-<a class="jxr_linenumber" name="377" href="#377">377</a>     byte [] row = tableName.getName();
-<a class="jxr_linenumber" name="378" href="#378">378</a>     region.put((<strong class="jxr_keyword">new</strong> Put(row)).addColumn(family, family, family));
-<a class="jxr_linenumber" name="379" href="#379">379</a>     wal.sync();
-<a class="jxr_linenumber" name="380" href="#380">380</a>     <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> rowsInsertedCount = 11;
-<a class="jxr_linenumber" name="381" href="#381">381</a> 
-<a class="jxr_linenumber" name="382" href="#382">382</a>     assertEquals(rowsInsertedCount, getScannedCount(region.getScanner(<strong class="jxr_keyword">new</strong> Scan())));
-<a class="jxr_linenumber" name="383" href="#383">383</a> 
-<a class="jxr_linenumber" name="384" href="#384">384</a>     <em class="jxr_comment">// Now 'crash' the region by stealing its wal</em>
-<a class="jxr_linenumber" name="385" href="#385">385</a>     <strong class="jxr_keyword">final</strong> Configuration newConf = HBaseConfiguration.create(<strong class="jxr_keyword">this</strong>.conf);
-<a class="jxr_linenumber" name="386" href="#386">386</a>     User user = HBaseTestingUtility.getDifferentUser(newConf,
-<a class="jxr_linenumber" name="387" href="#387">387</a>         tableName.getNameAsString());
-<a class="jxr_linenumber" name="388" href="#388">388</a>     user.runAs(<strong class="jxr_keyword">new</strong> PrivilegedExceptionAction() {
-<a class="jxr_linenumber" name="389" href="#389">389</a>       @Override
-<a class="jxr_linenumber" name="390" href="#390">390</a>       <strong class="jxr_keyword">public</strong> Object run() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="391" href="#391">391</a>         runWALSplit(newConf);
-<a class="jxr_linenumber" name="392" href="#392">392</a>         WAL wal2 = createWAL(newConf);
-<a class="jxr_linenumber" name="393" href="#393">393</a> 
-<a class="jxr_linenumber" name="394" href="#394">394</a>         HRegion region2 = HRegion.openHRegion(newConf, FileSystem.get(newConf),
-<a class="jxr_linenumber" name="395" href="#395">395</a>           hbaseRootDir, hri, htd, wal2);
-<a class="jxr_linenumber" name="396" href="#396">396</a>         <strong class="jxr_keyword">long</strong> seqid2 = region2.getOpenSeqNum();
-<a class="jxr_linenumber" name="397" href="#397">397</a>         assertTrue(seqid2 &gt; -1);
-<a class="jxr_linenumber" name="398" href="#398">398</a>         assertEquals(rowsInsertedCount, getScannedCount(region2.getScanner(<strong class="jxr_keyword">new</strong> Scan())));
-<a class="jxr_linenumber" name="399" href="#399">399</a> 
-<a class="jxr_linenumber" name="400" href="#400">400</a>         <em class="jxr_comment">// I can't close wal1.  Its been appropriated when we split.</em>
-<a class="jxr_linenumber" name="401" href="#401">401</a>         region2.close();
-<a class="jxr_linenumber" name="402" href="#402">402</a>         wal2.close();
-<a class="jxr_linenumber" name="403" href="#403">403</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="404" href="#404">404</a>       }
-<a class="jxr_linenumber" name="405" href="#405">405</a>     });
-<a class="jxr_linenumber" name="406" href="#406">406</a>   }
-<a class="jxr_linenumber" name="407" href="#407">407</a> 
-<a class="jxr_linenumber" name="408" href="#408">408</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="409" href="#409">409</a> <em class="jxr_javadoccomment">   * HRegion test case that is made of a major compacted HFile (created with three bulk loaded</em>
-<a class="jxr_linenumber" name="410" href="#410">410</a> <em class="jxr_javadoccomment">   * files) and an edit in the memstore.</em>
-<a class="jxr_linenumber" name="411" href="#411">411</a> <em class="jxr_javadoccomment">   * This is for HBASE-10958 "[dataloss] Bulk loading with seqids can prevent some log entries</em>
-<a class="jxr_linenumber" name="412" href="#412">412</a> <em class="jxr_javadoccomment">   * from being replayed"</em>
-<a class="jxr_linenumber" name="413" href="#413">413</a> <em class="jxr_javadoccomment">   * @throws IOException</em>
-<a class="jxr_linenumber" name="414" href="#414">414</a> <em class="jxr_javadoccomment">   * @throws IllegalAccessException</em>
-<a class="jxr_linenumber" name="415" href="#415">415</a> <em class="jxr_javadoccomment">   * @throws NoSuchFieldException</em>
-<a class="jxr_linenumber" name="416" href="#416">416</a> <em class="jxr_javadoccomment">   * @throws IllegalArgumentException</em>
-<a class="jxr_linenumber" name="417" href="#417">417</a> <em class="jxr_javadoccomment">   * @throws SecurityException</em>
-<a class="jxr_linenumber" name="418" href="#418">418</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="419" href="#419">419</a>   @Test
-<a class="jxr_linenumber" name="420" href="#420">420</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testCompactedBulkLoadedFiles()
-<a class="jxr_linenumber" name="421" href="#421">421</a>       <strong class="jxr_keyword">throws</strong> IOException, SecurityException, IllegalArgumentException,
-<a class="jxr_linenumber" name="422" href="#422">422</a>       NoSuchFieldException, IllegalAccessException, InterruptedException {
-<a class="jxr_linenumber" name="423" href="#423">423</a>     <strong class="jxr_keyword">final</strong> TableName tableName =
-<a class="jxr_linenumber" name="424" href="#424">424</a>         TableName.valueOf(<span class="jxr_string">"testCompactedBulkLoadedFiles"</span>);
-<a class="jxr_linenumber" name="425" href="#425">425</a>     <strong class="jxr_keyword">final</strong> HRegionInfo hri = createBasic3FamilyHRegionInfo(tableName);
-<a class="jxr_linenumber" name="426" href="#426">426</a>     <strong class="jxr_keyword">final</strong> Path basedir = <strong class="jxr_keyword">new</strong> Path(<strong class="jxr_keyword">this</strong>.hbaseRootDir, tableName.getNameAsString());
-<a class="jxr_linenumber" name="427" href="#427">427</a>     deleteDir(basedir);
-<a class="jxr_linenumber" name="428" href="#428">428</a>     <strong class="jxr_keyword">final</strong> HTableDescriptor htd = createBasic3FamilyHTD(tableName);
-<a class="jxr_linenumber" name="429" href="#429">429</a>     HRegion region2 = HBaseTestingUtility.createRegionAndWAL(hri, hbaseRootDir, <strong class="jxr_keyword">this</strong>.conf, htd);
-<a class="jxr_linenumber" name="430" href="#430">430</a>     HBaseTestingUtility.closeRegionAndWAL(region2);
-<a class="jxr_linenumber" name="431" href="#431">431</a>     WAL wal = createWAL(<strong class="jxr_keyword">this</strong>.conf);
-<a class="jxr_linenumber" name="432" href="#432">432</a>     HRegion region = HRegion.openHRegion(hri, htd, wal, <strong class="jxr_keyword">this</strong>.conf);
-<a class="jxr_linenumber" name="433" href="#433">433</a> 
-<a class="jxr_linenumber" name="434" href="#434">434</a>     <em class="jxr_comment">// Add an edit so something in the WAL</em>
-<a class="jxr_linenumber" name="435" href="#435">435</a>     byte [] row = tableName.getName();
-<a class="jxr_linenumber" name="436" href="#436">436</a>     byte [] family = htd.getFamilies().iterator().next().getName();
-<a class="jxr_linenumber" name="437" href="#437">437</a>     region.put((<strong class="jxr_keyword">new</strong> Put(row)).addColumn(family, family, family));
-<a class="jxr_linenumber" name="438" href="#438">438</a>     wal.sync();
-<a class="jxr_linenumber" name="439" href="#439">439</a> 
-<a class="jxr_linenumber" name="440" href="#440">440</a>     List &lt;Pair&lt;byte[],String&gt;&gt;  hfs= <strong class="jxr_keyword">new</strong> ArrayList&lt;Pair&lt;byte[],String&gt;&gt;(1);
-<a class="jxr_linenumber" name="441" href="#441">441</a>     <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i = 0; i &lt; 3; i++) {
-<a class="jxr_linenumber" name="442" href="#442">442</a>       Path f = <strong class="jxr_keyword">new</strong> Path(basedir, <span class="jxr_string">"hfile"</span>+i);
-<a class="jxr_linenumber" name="443" href="#443">443</a>       HFileTestUtil.createHFile(<strong class="jxr_keyword">this</strong>.conf, fs, f, family, family, Bytes.toBytes(i + <span class="jxr_string">"00"</span>),
-<a class="jxr_linenumber" name="444" href="#444">444</a>           Bytes.toBytes(i + <span class="jxr_string">"50"</span>), 10);
-<a class="jxr_linenumber" name="445" href="#445">445</a>       hfs.add(Pair.newPair(family, f.toString()));
-<a class="jxr_linenumber" name="446" href="#446">446</a>     }
-<a class="jxr_linenumber" name="447" href="#447">447</a>     region.bulkLoadHFiles(hfs, <strong class="jxr_keyword">true</strong>, <strong class="jxr_keyword">null</strong>);
-<a class="jxr_linenumber" name="448" href="#448">448</a>     <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> rowsInsertedCount = 31;
-<a class="jxr_linenumber" name="449" href="#449">449</a>     assertEquals(rowsInsertedCount, getScannedCount(region.getScanner(<strong class="jxr_keyword">new</strong> Scan())));
-<a class="jxr_linenumber" name="450" href="#450">450</a> 
-<a class="jxr_linenumber" name="451" href="#451">451</a>     <em class="jxr_comment">// major compact to turn all the bulk loaded files into one normal file</em>
-<a class="jxr_linenumber" name="452" href="#452">452</a>     region.compact(<strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="453" href="#453">453</a>     assertEquals(rowsInsertedCount, getScannedCount(region.getScanner(<strong class="jxr_keyword">new</strong> Scan())));
-<a class="jxr_linenumber" name="454" href="#454">454</a> 
-<a class="jxr_linenumber" name="455" href="#455">455</a>     <em class="jxr_comment">// Now 'crash' the region by stealing its wal</em>
-<a class="jxr_linenumber" name="456" href="#456">456</a>     <strong class="jxr_keyword">final</strong> Configuration newConf = HBaseConfiguration.create(<strong class="jxr_keyword">this</strong>.conf);
-<a class="jxr_linenumber" name="457" href="#457">457</a>     User user = HBaseTestingUtility.getDifferentUser(newConf,
-<a class="jxr_linenumber" name="458" href="#458">458</a>         tableName.getNameAsString());
-<a class="jxr_linenumber" name="459" href="#459">459</a>     user.runAs(<strong class="jxr_keyword">new</strong> PrivilegedExceptionAction() {
-<a class="jxr_linenumber" name="460" href="#460">460</a>       @Override
-<a class="jxr_linenumber" name="461" href="#461">461</a>       <strong class="jxr_keyword">public</strong> Object run() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="462" href="#462">462</a>         runWALSplit(newConf);
-<a class="jxr_linenumber" name="463" href="#463">463</a>         WAL wal2 = createWAL(newConf);
-<a class="jxr_linenumber" name="464" href="#464">464</a> 
-<a class="jxr_linenumber" name="465" href="#465">465</a>         HRegion region2 = HRegion.openHRegion(newConf, FileSystem.get(newConf),
-<a class="jxr_linenumber" name="466" href="#466">466</a>             hbaseRootDir, hri, htd, wal2);
-<a class="jxr_linenumber" name="467" href="#467">467</a>         <strong class="jxr_keyword">long</strong> seqid2 = region2.getOpenSeqNum();
-<a class="jxr_linenumber" name="468" href="#468">468</a>         assertTrue(seqid2 &gt; -1);
-<a class="jxr_linenumber" name="469" href="#469">469</a>         assertEquals(rowsInsertedCount, getScannedCount(region2.getScanner(<strong class="jxr_keyword">new</strong> Scan())));
-<a class="jxr_linenumber" name="470" href="#470">470</a> 
-<a class="jxr_linenumber" name="471" href="#471">471</a>         <em class="jxr_comment">// I can't close wal1.  Its been appropriated when we split.</em>
-<a class="jxr_linenumber" name="472" href="#472">472</a>         region2.close();
-<a class="jxr_linenumber" name="473" href="#473">473</a>         wal2.close();
-<a class="jxr_linenumber" name="474" href="#474">474</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="475" href="#475">475</a>       }
-<a class="jxr_linenumber" name="476" href="#476">476</a>     });
-<a class="jxr_linenumber" name="477" href="#477">477</a>   }
-<a class="jxr_linenumber" name="478" href="#478">478</a> 
+<a class="jxr_linenumber" name="135" href="#135">135</a> 
+<a class="jxr_linenumber" name="136" href="#136">136</a>   @BeforeClass
+<a class="jxr_linenumber" name="137" href="#137">137</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">void</strong> setUpBeforeClass() <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="138" href="#138">138</a>     Configuration conf = TEST_UTIL.getConfiguration();
+<a class="jxr_linenumber" name="139" href="#139">139</a>     conf.setBoolean(<span class="jxr_string">"dfs.support.append"</span>, <strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="140" href="#140">140</a>     <em class="jxr_comment">// The below config supported by 0.20-append and CDH3b2</em>
+<a class="jxr_linenumber" name="141" href="#141">141</a>     conf.setInt(<span class="jxr_string">"dfs.client.block.recovery.retries"</span>, 2);
+<a class="jxr_linenumber" name="142" href="#142">142</a>     TEST_UTIL.startMiniCluster(3);
+<a class="jxr_linenumber" name="143" href="#143">143</a>     Path hbaseRootDir =
+<a class="jxr_linenumber" name="144" href="#144">144</a>       TEST_UTIL.getDFSCluster().getFileSystem().makeQualified(<strong class="jxr_keyword">new</strong> Path(<span class="jxr_string">"/hbase"</span>));
+<a class="jxr_linenumber" name="145" href="#145">145</a>     LOG.info(<span class="jxr_string">"hbase.rootdir="</span> + hbaseRootDir);
+<a class="jxr_linenumber" name="146" href="#146">146</a>     FSUtils.setRootDir(conf, hbaseRootDir);
+<a class="jxr_linenumber" name="147" href="#147">147</a>   }
+<a class="jxr_linenumber" name="148" href="#148">148</a> 
+<a class="jxr_linenumber" name="149" href="#149">149</a>   @AfterClass
+<a class="jxr_linenumber" name="150" href="#150">150</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">void</strong> tearDownAfterClass() <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="151" href="#151">151</a>     TEST_UTIL.shutdownMiniCluster();
+<a class="jxr_linenumber" name="152" href="#152">152</a>   }
+<a class="jxr_linenumber" name="153" href="#153">153</a> 
+<a class="jxr_linenumber" name="154" href="#154">154</a>   @Before
+<a class="jxr_linenumber" name="155" href="#155">155</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setUp() <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="156" href="#156">156</a>     <strong class="jxr_keyword">this</strong>.conf = HBaseConfiguration.create(TEST_UTIL.getConfiguration());
+<a class="jxr_linenumber" name="157" href="#157">157</a>     <strong class="jxr_keyword">this</strong>.fs = TEST_UTIL.getDFSCluster().getFileSystem();
+<a class="jxr_linenumber" name="158" href="#158">158</a>     <strong class="jxr_keyword">this</strong>.hbaseRootDir = FSUtils.getRootDir(<strong class="jxr_keyword">this</strong>.conf);
+<a class="jxr_linenumber" name="159" href="#159">159</a>     <strong class="jxr_keyword">this</strong>.oldLogDir = <strong class="jxr_keyword">new</strong> Path(<strong class="jxr_keyword">this</strong>.hbaseRootDir, HConstants.HREGION_OLDLOGDIR_NAME);
+<a class="jxr_linenumber" name="160" href="#160">160</a>     <strong class="jxr_keyword">this</strong>.logName = DefaultWALProvider.getWALDirectoryName(currentTest.getMethodName() + <span class="jxr_string">"-manual"</span>);
+<a class="jxr_linenumber" name="161" href="#161">161</a>     <strong class="jxr_keyword">this</strong>.logDir = <strong class="jxr_keyword">new</strong> Path(<strong class="jxr_keyword">this</strong>.hbaseRootDir, logName);
+<a class="jxr_linenumber" name="162" href="#162">162</a>     <strong class="jxr_keyword">if</strong> (TEST_UTIL.getDFSCluster().getFileSystem().exists(<strong class="jxr_keyword">this</strong>.hbaseRootDir)) {
+<a class="jxr_linenumber" name="163" href="#163">163</a>       TEST_UTIL.getDFSCluster().getFileSystem().delete(<strong class="jxr_keyword">this</strong>.hbaseRootDir, <strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="164" href="#164">164</a>     }
+<a class="jxr_linenumber" name="165" href="#165">165</a>     <strong class="jxr_keyword">this</strong>.mode = (conf.getBoolean(HConstants.DISTRIBUTED_LOG_REPLAY_KEY, false) ?
+<a class="jxr_linenumber" name="166" href="#166">166</a>         RecoveryMode.LOG_REPLAY : RecoveryMode.LOG_SPLITTING);
+<a class="jxr_linenumber" name="167" href="#167">167</a>     <strong class="jxr_keyword">this</strong>.wals = <strong class="jxr_keyword">new</strong> WALFactory(conf, <strong class="jxr_keyword">null</strong>, currentTest.getMethodName());
+<a class="jxr_linenumber" name="168" href="#168">168</a>   }
+<a class="jxr_linenumber" name="169" href="#169">169</a> 
+<a class="jxr_linenumber" name="170" href="#170">170</a>   @After
+<a class="jxr_linenumber" name="171" href="#171">171</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> tearDown() <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="172" href="#172">172</a>     <strong class="jxr_keyword">this</strong>.wals.close();
+<a class="jxr_linenumber" name="173" href="#173">173</a>     TEST_UTIL.getDFSCluster().getFileSystem().delete(<strong class="jxr_keyword">this</strong>.hbaseRootDir, <strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="174" href="#174">174</a>   }
+<a class="jxr_linenumber" name="175" href="#175">175</a> 
+<a class="jxr_linenumber" name="176" href="#176">176</a>   <em class="jxr_comment">/*</em>
+<a class="jxr_linenumber" name="177" href="#177">177</a> <em class="jxr_comment">   * @param p Directory to cleanup</em>
+<a class="jxr_linenumber" name="178" href="#178">178</a> <em class="jxr_comment">   */</em>
+<a class="jxr_linenumber" name="179" href="#179">179</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> deleteDir(<strong class="jxr_keyword">final</strong> Path p) <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="180" href="#180">180</a>     <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.fs.exists(p)) {
+<a class="jxr_linenumber" name="181" href="#181">181</a>       <strong class="jxr_keyword">if</strong> (!<strong class="jxr_keyword">this</strong>.fs.delete(p, <strong class="jxr_keyword">true</strong>)) {
+<a class="jxr_linenumber" name="182" href="#182">182</a>         <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IOException(<span class="jxr_string">"Failed remove of "</span> + p);
+<a class="jxr_linenumber" name="183" href="#183">183</a>       }
+<a class="jxr_linenumber" name="184" href="#184">184</a>     }
+<a class="jxr_linenumber" name="185" href="#185">185</a>   }
+<a class="jxr_linenumber" name="186" href="#186">186</a> 
+<a class="jxr_linenumber" name="187" href="#187">187</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="188" href="#188">188</a> <em class="jxr_javadoccomment">   *</em>
+<a class="jxr_linenumber" name="189" href="#189">189</a> <em class="jxr_javadoccomment">   * @throws Exception</em>
+<a class="jxr_linenumber" name="190" href="#190">190</a> <em class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="191" href="#191">191</a>   @Test
+<a class="jxr_linenumber" name="192" href="#192">192</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> testReplayEditsAfterRegionMovedWithMultiCF() <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="193" href="#193">193</a>     <strong class="jxr_keyword">final</strong> TableName tableName =
+<a class="jxr_linenumber" name="194" href="#194">194</a>         TableName.valueOf(<span class="jxr_string">"testReplayEditsAfterRegionMovedWithMultiCF"</span>);
+<a class="jxr_linenumber" name="195" href="#195">195</a>     byte[] family1 = Bytes.toBytes(<span class="jxr_string">"cf1"</span>);
+<a class="jxr_linenumber" name="196" href="#196">196</a>     byte[] family2 = Bytes.toBytes(<span class="jxr_string">"cf2"</span>);
+<a class="jxr_linenumber" name="197" href="#197">197</a>     byte[] qualifier = Bytes.toBytes(<span class="jxr_string">"q"</span>);
+<a class="jxr_linenumber" name="198" href="#198">198</a>     byte[] value = Bytes.toBytes(<span class="jxr_string">"testV"</span>);
+<a class="jxr_linenumber" name="199" href="#199">199</a>     byte[][] familys = { family1, family2 };
+<a class="jxr_linenumber" name="200" href="#200">200</a>     TEST_UTIL.createTable(tableName, familys);
+<a class="jxr_linenumber" name="201" href="#201">201</a>     Table htable = TEST_UTIL.getConnection().getTable(tableName);
+<a class="jxr_linenumber" name="202" href="#202">202</a>     Put put = <strong class="jxr_keyword">new</strong> Put(Bytes.toBytes(<span class="jxr_string">"r1"</span>));
+<a class="jxr_linenumber" name="203" href="#203">203</a>     put.addColumn(family1, qualifier, value);
+<a class="jxr_linenumber" name="204" href="#204">204</a>     htable.put(put);
+<a class="jxr_linenumber" name="205" href="#205">205</a>     ResultScanner resultScanner = htable.getScanner(<strong class="jxr_keyword">new</strong> Scan());
+<a class="jxr_linenumber" name="206" href="#206">206</a>     <strong class="jxr_keyword">int</strong> count = 0;
+<a class="jxr_linenumber" name="207" href="#207">207</a>     <strong class="jxr_keyword">while</strong> (resultScanner.next() != <strong class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="208" href="#208">208</a>       count++;
+<a class="jxr_linenumber" name="209" href="#209">209</a>     }
+<a class="jxr_linenumber" name="210" href="#210">210</a>     resultScanner.close();
+<a class="jxr_linenumber" name="211" href="#211">211</a>     assertEquals(1, count);
+<a class="jxr_linenumber" name="212" href="#212">212</a> 
+<a class="jxr_linenumber" name="213" href="#213">213</a>     <a href="../../../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html">MiniHBaseCluster</a> hbaseCluster = TEST_UTIL.getMiniHBaseCluster();
+<a class="jxr_linenumber" name="214" href="#214">214</a>     List&lt;HRegion&gt; regions = hbaseCluster.getRegions(tableName);
+<a class="jxr_linenumber" name="215" href="#215">215</a>     assertEquals(1, regions.size());
+<a class="jxr_linenumber" name="216" href="#216">216</a> 
+<a class="jxr_linenumber" name="217" href="#217">217</a>     <em class="jxr_comment">// move region to another regionserver</em>
+<a class="jxr_linenumber" name="218" href="#218">218</a>     Region destRegion = regions.get(0);
+<a class="jxr_linenumber" name="219" href="#219">219</a>     <strong class="jxr_keyword">int</strong> originServerNum = hbaseCluster
+<a class="jxr_linenumber" name="220" href="#220">220</a>         .getServerWith(destRegion.getRegionInfo().getRegionName());
+<a class="jxr_linenumber" name="221" href="#221">221</a>     assertTrue(<span class="jxr_string">"Please start more than 1 regionserver"</span>, hbaseCluster
+<a class="jxr_linenumber" name="222" href="#222">222</a>         .getRegionServerThreads().size() &gt; 1);
+<a class="jxr_linenumber" name="223" href="#223">223</a>     <strong class="jxr_keyword">int</strong> destServerNum = 0;
+<a class="jxr_linenumber" name="224" href="#224">224</a>     <strong class="jxr_keyword">while</strong> (destServerNum == originServerNum) {
+<a class="jxr_linenumber" name="225" href="#225">225</a>       destServerNum++;
+<a class="jxr_linenumber" name="226" href="#226">226</a>     }
+<a class="jxr_linenumber" name="227" href="#227">227</a>     HRegionServer originServer = hbaseCluster.getRegionServer(originServerNum);
+<a class="jxr_linenumber" name="228" href="#228">228</a>     HRegionServer destServer = hbaseCluster.getRegionServer(destServerNum);
+<a class="jxr_linenumber" name="229" href="#229">229</a>     <em class="jxr_comment">// move region to destination regionserver</em>
+<a class="jxr_linenumber" name="230" href="#230">230</a>     moveRegionAndWait(destRegion, destServer);
+<a class="jxr_linenumber" name="231" href="#231">231</a> 
+<a class="jxr_linenumber" name="232" href="#232">232</a>     <em class="jxr_comment">// delete the row</em>
+<a class="jxr_linenumber" name="233" href="#233">233</a>     Delete del = <strong class="jxr_keyword">new</strong> Delete(Bytes.toBytes(<span class="jxr_string">"r1"</span>));
+<a class="jxr_linenumber" name="234" href="#234">234</a>     htable.delete(del);
+<a class="jxr_linenumber" name="235" href="#235">235</a>     resultScanner = htable.getScanner(<strong class="jxr_keyword">new</strong> Scan());
+<a class="jxr_linenumber" name="236" href="#236">236</a>     count = 0;
+<a class="jxr_linenumber" name="237" href="#237">237</a>     <strong class="jxr_keyword">while</strong> (resultScanner.next() != <strong class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="238" href="#238">238</a>       count++;
+<a class="jxr_linenumber" name="239" href="#239">239</a>     }
+<a class="jxr_linenumber" name="240" href="#240">240</a>     resultScanner.close();
+<a class="jxr_linenumber" name="241" href="#241">241</a>     assertEquals(0, count);
+<a class="jxr_linenumber" name="242" href="#242">242</a> 
+<a class="jxr_linenumber" name="243" href="#243">243</a>     <em class="jxr_comment">// flush region and make major compaction</em>
+<a class="jxr_linenumber" name="244" href="#244">244</a>     Region region =  destServer.getOnlineRegion(destRegion.getRegionInfo().getRegionName());
+<a class="jxr_linenumber" name="245" href="#245">245</a>     region.flush(<strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="246" href="#246">246</a>     <em class="jxr_comment">// wait to complete major compaction</em>
+<a class="jxr_linenumber" name="247" href="#247">247</a>     <strong class="jxr_keyword">for</strong> (Store store : region.getStores()) {
+<a class="jxr_linenumber" name="248" href="#248">248</a>       store.triggerMajorCompaction();
+<a class="jxr_linenumber" name="249" href="#249">249</a>     }
+<a class="jxr_linenumber" name="250" href="#250">250</a>     region.compact(<strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="251" href="#251">251</a> 
+<a class="jxr_linenumber" name="252" href="#252">252</a>     <em class="jxr_comment">// move region to origin regionserver</em>
+<a class="jxr_linenumber" name="253" href="#253">253</a>     moveRegionAndWait(destRegion, originServer);
+<a class="jxr_linenumber" name="254" href="#254">254</a>     <em class="jxr_comment">// abort the origin regionserver</em>
+<a class="jxr_linenumber" name="255" href="#255">255</a>     originServer.abort(<span class="jxr_string">"testing"</span>);
+<a class="jxr_linenumber" name="256" href="#256">256</a> 
+<a class="jxr_linenumber" name="257" href="#257">257</a>     <em class="jxr_comment">// see what we get</em>
+<a class="jxr_linenumber" name="258" href="#258">258</a>     Result result = htable.get(<strong class="jxr_keyword">new</strong> Get(Bytes.toBytes(<span class="jxr_string">"r1"</span>)));
+<a class="jxr_linenumber" name="259" href="#259">259</a>     <strong class="jxr_keyword">if</strong> (result != <strong class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="260" href="#260">260</a>       assertTrue(<span class="jxr_string">"Row is deleted, but we get"</span> + result.toString(),
+<a class="jxr_linenumber" name="261" href="#261">261</a>           (result == <strong class="jxr_keyword">null</strong>) || result.isEmpty());
+<a class="jxr_linenumber" name="262" href="#262">262</a>     }
+<a class="jxr_linenumber" name="263" href="#263">263</a>     resultScanner.close();
+<a class="jxr_linenumber" name="264" href="#264">264</a>   }
+<a class="jxr_linenumber" name="265" href="#265">265</a> 
+<a class="jxr_linenumber" name="266" href="#266">266</a>   <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> moveRegionAndWait(Region destRegion, HRegionServer destServer)
+<a class="jxr_linenumber" name="267" href="#267">267</a>       <strong class="jxr_keyword">throws</strong> InterruptedException, MasterNotRunningException,
+<a class="jxr_linenumber" name="268" href="#268">268</a>       ZooKeeperConnectionException, IOException {
+<a class="jxr_linenumber" name="269" href="#269">269</a>     HMaster master = TEST_UTIL.getMiniHBaseCluster().getMaster();
+<a class="jxr_linenumber" name="270" href="#270">270</a>     TEST_UTIL.getHBaseAdmin().move(
+<a class="jxr_linenumber" name="271" href="#271">271</a>         destRegion.getRegionInfo().getEncodedNameAsBytes(),
+<a class="jxr_linenumber" name="272" href="#272">272</a>         Bytes.toBytes(destServer.getServerName().getServerName()));
+<a class="jxr_linenumber" name="273" href="#273">273</a>     <strong class="jxr_keyword">while</strong> (<strong class="jxr_keyword">true</strong>) {
+<a class="jxr_linenumber" name="274" href="#274">274</a>       ServerName serverName = master.getAssignmentManager()
+<a class="jxr_linenumber" name="275" href="#275">275</a>         .getRegionStates().getRegionServerOfRegion(destRegion.getRegionInfo());
+<a class="jxr_linenumber" name="276" href="#276">276</a>       <strong class="jxr_keyword">if</strong> (serverName != <strong class="jxr_keyword">null</strong> &amp;&amp; serverName.equals(destServer.getServerName())) {
+<a class="jxr_linenumber" name="277" href="#277">277</a>         TEST_UTIL.assertRegionOnServer(
+<a class="jxr_linenumber" name="278" href="#278">278</a>           destRegion.getRegionInfo(), serverName, 200);
+<a class="jxr_linenumber" name="279" href="#279">279</a>         <strong class="jxr_keyword">break</strong>;
+<a class="jxr_linenumber" name="280" href="#280">280</a>       }
+<a class="jxr_linenumber" name="281" href="#281">281</a>       Thread.sleep(10);
+<a class="jxr_linenumber" name="282" href="#282">282</a>     }
+<a class="jxr_linenumber" name="283" href="#283">283</a>   }
+<a class="jxr_linenumber" name="284" href="#284">284</a> 
+<a class="jxr_linenumber" name="285" href="#285">285</a>   <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="286" href="#286">286</a> <em class="jxr_javadoccomment">   * 

<TRUNCATED>

[02/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/testdevapidocs/src-html/org/apache/hadoop/hbase/util/TestOrderedBytes.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/util/TestOrderedBytes.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/util/TestOrderedBytes.html
index 62df6ab..9b63985 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/util/TestOrderedBytes.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/util/TestOrderedBytes.html
@@ -1194,7 +1194,65 @@
 <span class="sourceLineNo">1186</span>      assertEquals(o, OrderedBytes.skip(buff));<a name="line.1186"></a>
 <span class="sourceLineNo">1187</span>    }<a name="line.1187"></a>
 <span class="sourceLineNo">1188</span>  }<a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>}<a name="line.1189"></a>
+<span class="sourceLineNo">1189</span><a name="line.1189"></a>
+<span class="sourceLineNo">1190</span>  /**<a name="line.1190"></a>
+<span class="sourceLineNo">1191</span>   * Test encoded value check<a name="line.1191"></a>
+<span class="sourceLineNo">1192</span>   */<a name="line.1192"></a>
+<span class="sourceLineNo">1193</span>  @Test<a name="line.1193"></a>
+<span class="sourceLineNo">1194</span>  public void testEncodedValueCheck() {<a name="line.1194"></a>
+<span class="sourceLineNo">1195</span>    BigDecimal longMax = BigDecimal.valueOf(Long.MAX_VALUE);<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>    double negInf = Double.NEGATIVE_INFINITY;<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span>    BigDecimal negLarge = longMax.multiply(longMax).negate();<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>    BigDecimal negMed = new BigDecimal("-10.0");<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span>    BigDecimal negSmall = new BigDecimal("-0.0010");<a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>    long zero = 0l;<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span>    BigDecimal posSmall = negSmall.negate();<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span>    BigDecimal posMed = negMed.negate();<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span>    BigDecimal posLarge = negLarge.negate();<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span>    double posInf = Double.POSITIVE_INFINITY;<a name="line.1204"></a>
+<span class="sourceLineNo">1205</span>    double nan = Double.NaN;<a name="line.1205"></a>
+<span class="sourceLineNo">1206</span>    byte int8 = 100;<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span>    short int16 = 100;<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span>    int int32 = 100;<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span>    long int64 = 100l;<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span>    float float32 = 100.0f;<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span>    double float64 = 100.0d;<a name="line.1211"></a>
+<span class="sourceLineNo">1212</span>    String text = "hello world.";<a name="line.1212"></a>
+<span class="sourceLineNo">1213</span>    byte[] blobVar = Bytes.toBytes("foo");<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span><a name="line.1214"></a>
+<span class="sourceLineNo">1215</span>    int cnt = 0;<a name="line.1215"></a>
+<span class="sourceLineNo">1216</span>    PositionedByteRange buff = new SimplePositionedMutableByteRange(1024);<a name="line.1216"></a>
+<span class="sourceLineNo">1217</span>    for (Order ord : new Order[] { Order.ASCENDING, Order.DESCENDING }) {<a name="line.1217"></a>
+<span class="sourceLineNo">1218</span>      int o;<a name="line.1218"></a>
+<span class="sourceLineNo">1219</span>      o = OrderedBytes.encodeNull(buff, ord); cnt++;<a name="line.1219"></a>
+<span class="sourceLineNo">1220</span>      o = OrderedBytes.encodeNumeric(buff, negInf, ord); cnt++;<a name="line.1220"></a>
+<span class="sourceLineNo">1221</span>      o = OrderedBytes.encodeNumeric(buff, negLarge, ord); cnt++;<a name="line.1221"></a>
+<span class="sourceLineNo">1222</span>      o = OrderedBytes.encodeNumeric(buff, negMed, ord); cnt++;<a name="line.1222"></a>
+<span class="sourceLineNo">1223</span>      o = OrderedBytes.encodeNumeric(buff, negSmall, ord); cnt++;<a name="line.1223"></a>
+<span class="sourceLineNo">1224</span>      o = OrderedBytes.encodeNumeric(buff, zero, ord); cnt++;<a name="line.1224"></a>
+<span class="sourceLineNo">1225</span>      o = OrderedBytes.encodeNumeric(buff, posSmall, ord); cnt++;<a name="line.1225"></a>
+<span class="sourceLineNo">1226</span>      o = OrderedBytes.encodeNumeric(buff, posMed, ord); cnt++;<a name="line.1226"></a>
+<span class="sourceLineNo">1227</span>      o = OrderedBytes.encodeNumeric(buff, posLarge, ord); cnt++;<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span>      o = OrderedBytes.encodeNumeric(buff, posInf, ord); cnt++;<a name="line.1228"></a>
+<span class="sourceLineNo">1229</span>      o = OrderedBytes.encodeNumeric(buff, nan, ord); cnt++;<a name="line.1229"></a>
+<span class="sourceLineNo">1230</span>      o = OrderedBytes.encodeInt8(buff, int8, ord); cnt++;<a name="line.1230"></a>
+<span class="sourceLineNo">1231</span>      o = OrderedBytes.encodeInt16(buff, int16, ord); cnt++;<a name="line.1231"></a>
+<span class="sourceLineNo">1232</span>      o = OrderedBytes.encodeInt32(buff, int32, ord); cnt++;<a name="line.1232"></a>
+<span class="sourceLineNo">1233</span>      o = OrderedBytes.encodeInt64(buff, int64, ord); cnt++;<a name="line.1233"></a>
+<span class="sourceLineNo">1234</span>      o = OrderedBytes.encodeFloat32(buff, float32, ord); cnt++;<a name="line.1234"></a>
+<span class="sourceLineNo">1235</span>      o = OrderedBytes.encodeFloat64(buff, float64, ord); cnt++;<a name="line.1235"></a>
+<span class="sourceLineNo">1236</span>      o = OrderedBytes.encodeString(buff, text, ord); cnt++;<a name="line.1236"></a>
+<span class="sourceLineNo">1237</span>      o = OrderedBytes.encodeBlobVar(buff, blobVar, ord); cnt++;<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span>    }<a name="line.1238"></a>
+<span class="sourceLineNo">1239</span><a name="line.1239"></a>
+<span class="sourceLineNo">1240</span>    buff.setPosition(0);<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span>    assertEquals(OrderedBytes.length(buff), cnt);<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span>    for (int i = 0; i &lt; cnt; i++) {<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span>      assertEquals(OrderedBytes.isEncodedValue(buff), true);<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span>      OrderedBytes.skip(buff);<a name="line.1244"></a>
+<span class="sourceLineNo">1245</span>    }<a name="line.1245"></a>
+<span class="sourceLineNo">1246</span>  }<a name="line.1246"></a>
+<span class="sourceLineNo">1247</span>}<a name="line.1247"></a>
 
 
 


[15/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html
index 0597160..b444f46 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html
@@ -184,2145 +184,2183 @@
 <span class="sourceLineNo">176</span>  // Min batch size when replay WAL edits<a name="line.176"></a>
 <span class="sourceLineNo">177</span>  private final int minBatchSize;<a name="line.177"></a>
 <span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span>  WALSplitter(final WALFactory factory, Configuration conf, Path rootDir,<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      FileSystem fs, LastSequenceId idChecker,<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      CoordinatedStateManager csm, RecoveryMode mode) {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    this.conf = HBaseConfiguration.create(conf);<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    String codecClassName = conf<a name="line.183"></a>
-<span class="sourceLineNo">184</span>        .get(WALCellCodec.WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    this.conf.set(HConstants.RPC_CODEC_CONF_KEY, codecClassName);<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    this.rootDir = rootDir;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    this.fs = fs;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    this.sequenceIdChecker = idChecker;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    this.csm = (BaseCoordinatedStateManager)csm;<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    this.walFactory = factory;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    this.controller = new PipelineController();<a name="line.191"></a>
-<span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span>    entryBuffers = new EntryBuffers(controller,<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        this.conf.getInt("hbase.regionserver.hlog.splitlog.buffersize",<a name="line.194"></a>
-<span class="sourceLineNo">195</span>            128*1024*1024));<a name="line.195"></a>
+<span class="sourceLineNo">179</span>  // the file being split currently<a name="line.179"></a>
+<span class="sourceLineNo">180</span>  private FileStatus fileBeingSplit;<a name="line.180"></a>
+<span class="sourceLineNo">181</span><a name="line.181"></a>
+<span class="sourceLineNo">182</span>  @VisibleForTesting<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  WALSplitter(final WALFactory factory, Configuration conf, Path rootDir,<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      FileSystem fs, LastSequenceId idChecker,<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      CoordinatedStateManager csm, RecoveryMode mode) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    this.conf = HBaseConfiguration.create(conf);<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    String codecClassName = conf<a name="line.187"></a>
+<span class="sourceLineNo">188</span>        .get(WALCellCodec.WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    this.conf.set(HConstants.RPC_CODEC_CONF_KEY, codecClassName);<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    this.rootDir = rootDir;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    this.fs = fs;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    this.sequenceIdChecker = idChecker;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    this.csm = (BaseCoordinatedStateManager)csm;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    this.walFactory = factory;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    this.controller = new PipelineController();<a name="line.195"></a>
 <span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span>    // a larger minBatchSize may slow down recovery because replay writer has to wait for<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    // enough edits before replaying them<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    this.minBatchSize = this.conf.getInt("hbase.regionserver.wal.logreplay.batch.size", 64);<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    this.distributedLogReplay = (RecoveryMode.LOG_REPLAY == mode);<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>    this.numWriterThreads = this.conf.getInt("hbase.regionserver.hlog.splitlog.writer.threads", 3);<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    if (csm != null &amp;&amp; this.distributedLogReplay) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      outputSink = new LogReplayOutputSink(controller, entryBuffers, numWriterThreads);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    } else {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      if (this.distributedLogReplay) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        LOG.info("ZooKeeperWatcher is passed in as NULL so disable distrubitedLogRepaly.");<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      }<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      this.distributedLogReplay = false;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      outputSink = new LogRecoveredEditsOutputSink(controller, entryBuffers, numWriterThreads);<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>  }<a name="line.213"></a>
-<span class="sourceLineNo">214</span><a name="line.214"></a>
-<span class="sourceLineNo">215</span>  /**<a name="line.215"></a>
-<span class="sourceLineNo">216</span>   * Splits a WAL file into region's recovered-edits directory.<a name="line.216"></a>
-<span class="sourceLineNo">217</span>   * This is the main entry point for distributed log splitting from SplitLogWorker.<a name="line.217"></a>
-<span class="sourceLineNo">218</span>   * &lt;p&gt;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>   * If the log file has N regions then N recovered.edits files will be produced.<a name="line.219"></a>
-<span class="sourceLineNo">220</span>   * &lt;p&gt;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   * @param rootDir<a name="line.221"></a>
-<span class="sourceLineNo">222</span>   * @param logfile<a name="line.222"></a>
-<span class="sourceLineNo">223</span>   * @param fs<a name="line.223"></a>
-<span class="sourceLineNo">224</span>   * @param conf<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   * @param reporter<a name="line.225"></a>
-<span class="sourceLineNo">226</span>   * @param idChecker<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   * @param cp coordination state manager<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   * @return false if it is interrupted by the progress-able.<a name="line.228"></a>
-<span class="sourceLineNo">229</span>   * @throws IOException<a name="line.229"></a>
-<span class="sourceLineNo">230</span>   */<a name="line.230"></a>
-<span class="sourceLineNo">231</span>  public static boolean splitLogFile(Path rootDir, FileStatus logfile, FileSystem fs,<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      Configuration conf, CancelableProgressable reporter, LastSequenceId idChecker,<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      CoordinatedStateManager cp, RecoveryMode mode, final WALFactory factory) throws IOException {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, idChecker, cp, mode);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    return s.splitLogFile(logfile, reporter);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  }<a name="line.236"></a>
-<span class="sourceLineNo">237</span><a name="line.237"></a>
-<span class="sourceLineNo">238</span>  // A wrapper to split one log folder using the method used by distributed<a name="line.238"></a>
-<span class="sourceLineNo">239</span>  // log splitting. Used by tools and unit tests. It should be package private.<a name="line.239"></a>
-<span class="sourceLineNo">240</span>  // It is public only because TestWALObserver is in a different package,<a name="line.240"></a>
-<span class="sourceLineNo">241</span>  // which uses this method to do log splitting.<a name="line.241"></a>
-<span class="sourceLineNo">242</span>  @VisibleForTesting<a name="line.242"></a>
-<span class="sourceLineNo">243</span>  public static List&lt;Path&gt; split(Path rootDir, Path logDir, Path oldLogDir,<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      FileSystem fs, Configuration conf, final WALFactory factory) throws IOException {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    final FileStatus[] logfiles = SplitLogManager.getFileList(conf,<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        Collections.singletonList(logDir), null);<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    List&lt;Path&gt; splits = new ArrayList&lt;Path&gt;();<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    if (logfiles != null &amp;&amp; logfiles.length &gt; 0) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      for (FileStatus logfile: logfiles) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, null, null,<a name="line.250"></a>
-<span class="sourceLineNo">251</span>            RecoveryMode.LOG_SPLITTING);<a name="line.251"></a>
-<span class="sourceLineNo">252</span>        if (s.splitLogFile(logfile, null)) {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>          finishSplitLogFile(rootDir, oldLogDir, logfile.getPath(), conf);<a name="line.253"></a>
-<span class="sourceLineNo">254</span>          if (s.outputSink.splits != null) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>            splits.addAll(s.outputSink.splits);<a name="line.255"></a>
-<span class="sourceLineNo">256</span>          }<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        }<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      }<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    }<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    if (!fs.delete(logDir, true)) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      throw new IOException("Unable to delete src dir: " + logDir);<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    return splits;<a name="line.263"></a>
-<span class="sourceLineNo">264</span>  }<a name="line.264"></a>
-<span class="sourceLineNo">265</span><a name="line.265"></a>
-<span class="sourceLineNo">266</span>  /**<a name="line.266"></a>
-<span class="sourceLineNo">267</span>   * log splitting implementation, splits one log file.<a name="line.267"></a>
-<span class="sourceLineNo">268</span>   * @param logfile should be an actual log file.<a name="line.268"></a>
-<span class="sourceLineNo">269</span>   */<a name="line.269"></a>
-<span class="sourceLineNo">270</span>  boolean splitLogFile(FileStatus logfile, CancelableProgressable reporter) throws IOException {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    Preconditions.checkState(status == null);<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    Preconditions.checkArgument(logfile.isFile(),<a name="line.272"></a>
-<span class="sourceLineNo">273</span>        "passed in file status is for something other than a regular file.");<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    boolean isCorrupted = false;<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    boolean skipErrors = conf.getBoolean("hbase.hlog.split.skip.errors",<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      SPLIT_SKIP_ERRORS_DEFAULT);<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    int interval = conf.getInt("hbase.splitlog.report.interval.loglines", 1024);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    Path logPath = logfile.getPath();<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    boolean outputSinkStarted = false;<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    boolean progress_failed = false;<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    int editsCount = 0;<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    int editsSkipped = 0;<a name="line.282"></a>
-<span class="sourceLineNo">283</span><a name="line.283"></a>
-<span class="sourceLineNo">284</span>    status =<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        TaskMonitor.get().createStatus(<a name="line.285"></a>
-<span class="sourceLineNo">286</span>          "Splitting log file " + logfile.getPath() + "into a temporary staging area.");<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    Reader in = null;<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    try {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      long logLength = logfile.getLen();<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      LOG.info("Splitting wal: " + logPath + ", length=" + logLength);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      LOG.info("DistributedLogReplay = " + this.distributedLogReplay);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      status.setStatus("Opening log file");<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>        progress_failed = true;<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        return false;<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      }<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      try {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        in = getReader(logfile, skipErrors, reporter);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      } catch (CorruptedLogFileException e) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>        LOG.warn("Could not get reader, corrupted log file " + logPath, e);<a name="line.300"></a>
-<span class="sourceLineNo">301</span>        ZKSplitLog.markCorrupted(rootDir, logfile.getPath().getName(), fs);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>        isCorrupted = true;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      }<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      if (in == null) {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>        LOG.warn("Nothing to split in log file " + logPath);<a name="line.305"></a>
-<span class="sourceLineNo">306</span>        return true;<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      }<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      int numOpenedFilesBeforeReporting = conf.getInt("hbase.splitlog.report.openedfiles", 3);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      int numOpenedFilesLastCheck = 0;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      outputSink.setReporter(reporter);<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      outputSink.startWriterThreads();<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      outputSinkStarted = true;<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      Entry entry;<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      Long lastFlushedSequenceId = -1L;<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      ServerName serverName = DefaultWALProvider.getServerNameFromWALDirectoryName(logPath);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      failedServerName = (serverName == null) ? "" : serverName.getServerName();<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      while ((entry = getNextLogLine(in, logPath, skipErrors)) != null) {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>        byte[] region = entry.getKey().getEncodedRegionName();<a name="line.318"></a>
-<span class="sourceLineNo">319</span>        String encodedRegionNameAsStr = Bytes.toString(region);<a name="line.319"></a>
-<span class="sourceLineNo">320</span>        lastFlushedSequenceId = lastFlushedSequenceIds.get(encodedRegionNameAsStr);<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        if (lastFlushedSequenceId == null) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>          if (this.distributedLogReplay) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>            RegionStoreSequenceIds ids =<a name="line.323"></a>
-<span class="sourceLineNo">324</span>                csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.324"></a>
-<span class="sourceLineNo">325</span>                  encodedRegionNameAsStr);<a name="line.325"></a>
-<span class="sourceLineNo">326</span>            if (ids != null) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>              lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.327"></a>
-<span class="sourceLineNo">328</span>              if (LOG.isDebugEnabled()) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>                LOG.debug("DLR Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.329"></a>
-<span class="sourceLineNo">330</span>                  TextFormat.shortDebugString(ids));<a name="line.330"></a>
-<span class="sourceLineNo">331</span>              }<a name="line.331"></a>
-<span class="sourceLineNo">332</span>            }<a name="line.332"></a>
-<span class="sourceLineNo">333</span>          } else if (sequenceIdChecker != null) {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>            RegionStoreSequenceIds ids = sequenceIdChecker.getLastSequenceId(region);<a name="line.334"></a>
-<span class="sourceLineNo">335</span>            Map&lt;byte[], Long&gt; maxSeqIdInStores = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.335"></a>
-<span class="sourceLineNo">336</span>            for (StoreSequenceId storeSeqId : ids.getStoreSequenceIdList()) {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>              maxSeqIdInStores.put(storeSeqId.getFamilyName().toByteArray(),<a name="line.337"></a>
-<span class="sourceLineNo">338</span>                storeSeqId.getSequenceId());<a name="line.338"></a>
-<span class="sourceLineNo">339</span>            }<a name="line.339"></a>
-<span class="sourceLineNo">340</span>            regionMaxSeqIdInStores.put(encodedRegionNameAsStr, maxSeqIdInStores);<a name="line.340"></a>
-<span class="sourceLineNo">341</span>            lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.341"></a>
-<span class="sourceLineNo">342</span>            if (LOG.isDebugEnabled()) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>              LOG.debug("DLS Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.343"></a>
-<span class="sourceLineNo">344</span>                  TextFormat.shortDebugString(ids));<a name="line.344"></a>
+<span class="sourceLineNo">197</span>    entryBuffers = new EntryBuffers(controller,<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        this.conf.getInt("hbase.regionserver.hlog.splitlog.buffersize",<a name="line.198"></a>
+<span class="sourceLineNo">199</span>            128*1024*1024));<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>    // a larger minBatchSize may slow down recovery because replay writer has to wait for<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    // enough edits before replaying them<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    this.minBatchSize = this.conf.getInt("hbase.regionserver.wal.logreplay.batch.size", 64);<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    this.distributedLogReplay = (RecoveryMode.LOG_REPLAY == mode);<a name="line.204"></a>
+<span class="sourceLineNo">205</span><a name="line.205"></a>
+<span class="sourceLineNo">206</span>    this.numWriterThreads = this.conf.getInt("hbase.regionserver.hlog.splitlog.writer.threads", 3);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    if (csm != null &amp;&amp; this.distributedLogReplay) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      outputSink = new LogReplayOutputSink(controller, entryBuffers, numWriterThreads);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    } else {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      if (this.distributedLogReplay) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>        LOG.info("ZooKeeperWatcher is passed in as NULL so disable distrubitedLogRepaly.");<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      }<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      this.distributedLogReplay = false;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      outputSink = new LogRecoveredEditsOutputSink(controller, entryBuffers, numWriterThreads);<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    }<a name="line.215"></a>
+<span class="sourceLineNo">216</span><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>
+<span class="sourceLineNo">220</span>   * Splits a WAL file into region's recovered-edits directory.<a name="line.220"></a>
+<span class="sourceLineNo">221</span>   * This is the main entry point for distributed log splitting from SplitLogWorker.<a name="line.221"></a>
+<span class="sourceLineNo">222</span>   * &lt;p&gt;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>   * If the log file has N regions then N recovered.edits files will be produced.<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   * &lt;p&gt;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   * @param rootDir<a name="line.225"></a>
+<span class="sourceLineNo">226</span>   * @param logfile<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   * @param fs<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   * @param conf<a name="line.228"></a>
+<span class="sourceLineNo">229</span>   * @param reporter<a name="line.229"></a>
+<span class="sourceLineNo">230</span>   * @param idChecker<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   * @param cp coordination state manager<a name="line.231"></a>
+<span class="sourceLineNo">232</span>   * @return false if it is interrupted by the progress-able.<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   * @throws IOException<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   */<a name="line.234"></a>
+<span class="sourceLineNo">235</span>  public static boolean splitLogFile(Path rootDir, FileStatus logfile, FileSystem fs,<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      Configuration conf, CancelableProgressable reporter, LastSequenceId idChecker,<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      CoordinatedStateManager cp, RecoveryMode mode, final WALFactory factory) throws IOException {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, idChecker, cp, mode);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    return s.splitLogFile(logfile, reporter);<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>  // A wrapper to split one log folder using the method used by distributed<a name="line.242"></a>
+<span class="sourceLineNo">243</span>  // log splitting. Used by tools and unit tests. It should be package private.<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  // It is public only because TestWALObserver is in a different package,<a name="line.244"></a>
+<span class="sourceLineNo">245</span>  // which uses this method to do log splitting.<a name="line.245"></a>
+<span class="sourceLineNo">246</span>  @VisibleForTesting<a name="line.246"></a>
+<span class="sourceLineNo">247</span>  public static List&lt;Path&gt; split(Path rootDir, Path logDir, Path oldLogDir,<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      FileSystem fs, Configuration conf, final WALFactory factory) throws IOException {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    final FileStatus[] logfiles = SplitLogManager.getFileList(conf,<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        Collections.singletonList(logDir), null);<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    List&lt;Path&gt; splits = new ArrayList&lt;Path&gt;();<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    if (logfiles != null &amp;&amp; logfiles.length &gt; 0) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      for (FileStatus logfile: logfiles) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>        WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, null, null,<a name="line.254"></a>
+<span class="sourceLineNo">255</span>            RecoveryMode.LOG_SPLITTING);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>        if (s.splitLogFile(logfile, null)) {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>          finishSplitLogFile(rootDir, oldLogDir, logfile.getPath(), conf);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>          if (s.outputSink.splits != null) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>            splits.addAll(s.outputSink.splits);<a name="line.259"></a>
+<span class="sourceLineNo">260</span>          }<a name="line.260"></a>
+<span class="sourceLineNo">261</span>        }<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      }<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    }<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    if (!fs.delete(logDir, true)) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      throw new IOException("Unable to delete src dir: " + logDir);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    }<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    return splits;<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  }<a name="line.268"></a>
+<span class="sourceLineNo">269</span><a name="line.269"></a>
+<span class="sourceLineNo">270</span>  /**<a name="line.270"></a>
+<span class="sourceLineNo">271</span>   * log splitting implementation, splits one log file.<a name="line.271"></a>
+<span class="sourceLineNo">272</span>   * @param logfile should be an actual log file.<a name="line.272"></a>
+<span class="sourceLineNo">273</span>   */<a name="line.273"></a>
+<span class="sourceLineNo">274</span>  @VisibleForTesting<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  boolean splitLogFile(FileStatus logfile, CancelableProgressable reporter) throws IOException {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    Preconditions.checkState(status == null);<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    Preconditions.checkArgument(logfile.isFile(),<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        "passed in file status is for something other than a regular file.");<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    boolean isCorrupted = false;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    boolean skipErrors = conf.getBoolean("hbase.hlog.split.skip.errors",<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      SPLIT_SKIP_ERRORS_DEFAULT);<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    int interval = conf.getInt("hbase.splitlog.report.interval.loglines", 1024);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    Path logPath = logfile.getPath();<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    boolean outputSinkStarted = false;<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    boolean progress_failed = false;<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    int editsCount = 0;<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    int editsSkipped = 0;<a name="line.287"></a>
+<span class="sourceLineNo">288</span><a name="line.288"></a>
+<span class="sourceLineNo">289</span>    status =<a name="line.289"></a>
+<span class="sourceLineNo">290</span>        TaskMonitor.get().createStatus(<a name="line.290"></a>
+<span class="sourceLineNo">291</span>          "Splitting log file " + logfile.getPath() + "into a temporary staging area.");<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    Reader in = null;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    this.fileBeingSplit = logfile;<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    try {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      long logLength = logfile.getLen();<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      LOG.info("Splitting wal: " + logPath + ", length=" + logLength);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      LOG.info("DistributedLogReplay = " + this.distributedLogReplay);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      status.setStatus("Opening log file");<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>        progress_failed = true;<a name="line.300"></a>
+<span class="sourceLineNo">301</span>        return false;<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      }<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      try {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>        in = getReader(logfile, skipErrors, reporter);<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      } catch (CorruptedLogFileException e) {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>        LOG.warn("Could not get reader, corrupted log file " + logPath, e);<a name="line.306"></a>
+<span class="sourceLineNo">307</span>        ZKSplitLog.markCorrupted(rootDir, logfile.getPath().getName(), fs);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>        isCorrupted = true;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      }<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      if (in == null) {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        LOG.warn("Nothing to split in log file " + logPath);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        return true;<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      }<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      int numOpenedFilesBeforeReporting = conf.getInt("hbase.splitlog.report.openedfiles", 3);<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      int numOpenedFilesLastCheck = 0;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      outputSink.setReporter(reporter);<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      outputSink.startWriterThreads();<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      outputSinkStarted = true;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      Entry entry;<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      Long lastFlushedSequenceId = -1L;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      ServerName serverName = DefaultWALProvider.getServerNameFromWALDirectoryName(logPath);<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      failedServerName = (serverName == null) ? "" : serverName.getServerName();<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      while ((entry = getNextLogLine(in, logPath, skipErrors)) != null) {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>        byte[] region = entry.getKey().getEncodedRegionName();<a name="line.324"></a>
+<span class="sourceLineNo">325</span>        String encodedRegionNameAsStr = Bytes.toString(region);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>        lastFlushedSequenceId = lastFlushedSequenceIds.get(encodedRegionNameAsStr);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>        if (lastFlushedSequenceId == null) {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>          if (this.distributedLogReplay) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>            RegionStoreSequenceIds ids =<a name="line.329"></a>
+<span class="sourceLineNo">330</span>                csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.330"></a>
+<span class="sourceLineNo">331</span>                  encodedRegionNameAsStr);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>            if (ids != null) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span>              lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.333"></a>
+<span class="sourceLineNo">334</span>              if (LOG.isDebugEnabled()) {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>                LOG.debug("DLR Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.335"></a>
+<span class="sourceLineNo">336</span>                  TextFormat.shortDebugString(ids));<a name="line.336"></a>
+<span class="sourceLineNo">337</span>              }<a name="line.337"></a>
+<span class="sourceLineNo">338</span>            }<a name="line.338"></a>
+<span class="sourceLineNo">339</span>          } else if (sequenceIdChecker != null) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>            RegionStoreSequenceIds ids = sequenceIdChecker.getLastSequenceId(region);<a name="line.340"></a>
+<span class="sourceLineNo">341</span>            Map&lt;byte[], Long&gt; maxSeqIdInStores = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.341"></a>
+<span class="sourceLineNo">342</span>            for (StoreSequenceId storeSeqId : ids.getStoreSequenceIdList()) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>              maxSeqIdInStores.put(storeSeqId.getFamilyName().toByteArray(),<a name="line.343"></a>
+<span class="sourceLineNo">344</span>                storeSeqId.getSequenceId());<a name="line.344"></a>
 <span class="sourceLineNo">345</span>            }<a name="line.345"></a>
-<span class="sourceLineNo">346</span>          }<a name="line.346"></a>
-<span class="sourceLineNo">347</span>          if (lastFlushedSequenceId == null) {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>            lastFlushedSequenceId = -1L;<a name="line.348"></a>
-<span class="sourceLineNo">349</span>          }<a name="line.349"></a>
-<span class="sourceLineNo">350</span>          lastFlushedSequenceIds.put(encodedRegionNameAsStr, lastFlushedSequenceId);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        }<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        if (lastFlushedSequenceId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>          editsSkipped++;<a name="line.353"></a>
-<span class="sourceLineNo">354</span>          continue;<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        }<a name="line.355"></a>
-<span class="sourceLineNo">356</span>        entryBuffers.appendEntry(entry);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        editsCount++;<a name="line.357"></a>
-<span class="sourceLineNo">358</span>        int moreWritersFromLastCheck = this.getNumOpenWriters() - numOpenedFilesLastCheck;<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        // If sufficient edits have passed, check if we should report progress.<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        if (editsCount % interval == 0<a name="line.360"></a>
-<span class="sourceLineNo">361</span>            || moreWritersFromLastCheck &gt; numOpenedFilesBeforeReporting) {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>          numOpenedFilesLastCheck = this.getNumOpenWriters();<a name="line.362"></a>
-<span class="sourceLineNo">363</span>          String countsStr = (editsCount - (editsSkipped + outputSink.getSkippedEdits()))<a name="line.363"></a>
-<span class="sourceLineNo">364</span>              + " edits, skipped " + editsSkipped + " edits.";<a name="line.364"></a>
-<span class="sourceLineNo">365</span>          status.setStatus("Split " + countsStr);<a name="line.365"></a>
-<span class="sourceLineNo">366</span>          if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>            progress_failed = true;<a name="line.367"></a>
-<span class="sourceLineNo">368</span>            return false;<a name="line.368"></a>
-<span class="sourceLineNo">369</span>          }<a name="line.369"></a>
-<span class="sourceLineNo">370</span>        }<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      }<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    } catch (InterruptedException ie) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      IOException iie = new InterruptedIOException();<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      iie.initCause(ie);<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      throw iie;<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    } catch (CorruptedLogFileException e) {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      LOG.warn("Could not parse, corrupted log file " + logPath, e);<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      csm.getSplitLogWorkerCoordination().markCorrupted(rootDir,<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        logfile.getPath().getName(), fs);<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      isCorrupted = true;<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    } catch (IOException e) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      throw e;<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    } finally {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      LOG.debug("Finishing writing output logs and closing down.");<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      try {<a name="line.386"></a>
-<span class="sourceLineNo">387</span>        if (null != in) {<a name="line.387"></a>
-<span class="sourceLineNo">388</span>          in.close();<a name="line.388"></a>
-<span class="sourceLineNo">389</span>        }<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      } catch (IOException exception) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        LOG.warn("Could not close wal reader: " + exception.getMessage());<a name="line.391"></a>
-<span class="sourceLineNo">392</span>        LOG.debug("exception details", exception);<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      }<a name="line.393"></a>
-<span class="sourceLineNo">394</span>      try {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        if (outputSinkStarted) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>          // Set progress_failed to true as the immediate following statement will reset its value<a name="line.396"></a>
-<span class="sourceLineNo">397</span>          // when finishWritingAndClose() throws exception, progress_failed has the right value<a name="line.397"></a>
-<span class="sourceLineNo">398</span>          progress_failed = true;<a name="line.398"></a>
-<span class="sourceLineNo">399</span>          progress_failed = outputSink.finishWritingAndClose() == null;<a name="line.399"></a>
-<span class="sourceLineNo">400</span>        }<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      } finally {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        String msg =<a name="line.402"></a>
-<span class="sourceLineNo">403</span>            "Processed " + editsCount + " edits across " + outputSink.getNumberOfRecoveredRegions()<a name="line.403"></a>
-<span class="sourceLineNo">404</span>                + " regions; edits skipped=" + editsSkipped + "; log file=" + logPath +<a name="line.404"></a>
-<span class="sourceLineNo">405</span>                ", length=" + logfile.getLen() + // See if length got updated post lease recovery<a name="line.405"></a>
-<span class="sourceLineNo">406</span>                ", corrupted=" + isCorrupted + ", progress failed=" + progress_failed;<a name="line.406"></a>
-<span class="sourceLineNo">407</span>        LOG.info(msg);<a name="line.407"></a>
-<span class="sourceLineNo">408</span>        status.markComplete(msg);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      }<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    }<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    return !progress_failed;<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>   * Completes the work done by splitLogFile by archiving logs<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   * &lt;p&gt;<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * It is invoked by SplitLogManager once it knows that one of the<a name="line.417"></a>
-<span class="sourceLineNo">418</span>   * SplitLogWorkers have completed the splitLogFile() part. If the master<a name="line.418"></a>
-<span class="sourceLineNo">419</span>   * crashes then this function might get called multiple times.<a name="line.419"></a>
-<span class="sourceLineNo">420</span>   * &lt;p&gt;<a name="line.420"></a>
-<span class="sourceLineNo">421</span>   * @param logfile<a name="line.421"></a>
-<span class="sourceLineNo">422</span>   * @param conf<a name="line.422"></a>
-<span class="sourceLineNo">423</span>   * @throws IOException<a name="line.423"></a>
-<span class="sourceLineNo">424</span>   */<a name="line.424"></a>
-<span class="sourceLineNo">425</span>  public static void finishSplitLogFile(String logfile,<a name="line.425"></a>
-<span class="sourceLineNo">426</span>      Configuration conf)  throws IOException {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    Path rootdir = FSUtils.getRootDir(conf);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    Path oldLogDir = new Path(rootdir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    Path logPath;<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    if (FSUtils.isStartingWithPath(rootdir, logfile)) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      logPath = new Path(logfile);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    } else {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      logPath = new Path(rootdir, logfile);<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    }<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    finishSplitLogFile(rootdir, oldLogDir, logPath, conf);<a name="line.435"></a>
-<span class="sourceLineNo">436</span>  }<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>  static void finishSplitLogFile(Path rootdir, Path oldLogDir,<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      Path logPath, Configuration conf) throws IOException {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    List&lt;Path&gt; processedLogs = new ArrayList&lt;Path&gt;();<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    List&lt;Path&gt; corruptedLogs = new ArrayList&lt;Path&gt;();<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    FileSystem fs;<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    fs = rootdir.getFileSystem(conf);<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    if (ZKSplitLog.isCorrupted(rootdir, logPath.getName(), fs)) {<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      corruptedLogs.add(logPath);<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    } else {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      processedLogs.add(logPath);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    }<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    archiveLogs(corruptedLogs, processedLogs, oldLogDir, fs, conf);<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    Path stagingDir = ZKSplitLog.getSplitLogDir(rootdir, logPath.getName());<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    fs.delete(stagingDir, true);<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  }<a name="line.452"></a>
-<span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span>  /**<a name="line.454"></a>
-<span class="sourceLineNo">455</span>   * Moves processed logs to a oldLogDir after successful processing Moves<a name="line.455"></a>
-<span class="sourceLineNo">456</span>   * corrupted logs (any log that couldn't be successfully parsed to corruptDir<a name="line.456"></a>
-<span class="sourceLineNo">457</span>   * (.corrupt) for later investigation<a name="line.457"></a>
-<span class="sourceLineNo">458</span>   *<a name="line.458"></a>
-<span class="sourceLineNo">459</span>   * @param corruptedLogs<a name="line.459"></a>
-<span class="sourceLineNo">460</span>   * @param processedLogs<a name="line.460"></a>
-<span class="sourceLineNo">461</span>   * @param oldLogDir<a name="line.461"></a>
-<span class="sourceLineNo">462</span>   * @param fs<a name="line.462"></a>
-<span class="sourceLineNo">463</span>   * @param conf<a name="line.463"></a>
-<span class="sourceLineNo">464</span>   * @throws IOException<a name="line.464"></a>
-<span class="sourceLineNo">465</span>   */<a name="line.465"></a>
-<span class="sourceLineNo">466</span>  private static void archiveLogs(<a name="line.466"></a>
-<span class="sourceLineNo">467</span>      final List&lt;Path&gt; corruptedLogs,<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      final List&lt;Path&gt; processedLogs, final Path oldLogDir,<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      final FileSystem fs, final Configuration conf) throws IOException {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    final Path corruptDir = new Path(FSUtils.getRootDir(conf), conf.get(<a name="line.470"></a>
-<span class="sourceLineNo">471</span>        "hbase.regionserver.hlog.splitlog.corrupt.dir",  HConstants.CORRUPT_DIR_NAME));<a name="line.471"></a>
-<span class="sourceLineNo">472</span><a name="line.472"></a>
-<span class="sourceLineNo">473</span>    if (!fs.mkdirs(corruptDir)) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      LOG.info("Unable to mkdir " + corruptDir);<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    }<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    fs.mkdirs(oldLogDir);<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>    // this method can get restarted or called multiple times for archiving<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    // the same log files.<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    for (Path corrupted : corruptedLogs) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      Path p = new Path(corruptDir, corrupted.getName());<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      if (fs.exists(corrupted)) {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        if (!fs.rename(corrupted, p)) {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>          LOG.warn("Unable to move corrupted log " + corrupted + " to " + p);<a name="line.484"></a>
-<span class="sourceLineNo">485</span>        } else {<a name="line.485"></a>
-<span class="sourceLineNo">486</span>          LOG.warn("Moved corrupted log " + corrupted + " to " + p);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>        }<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      }<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    }<a name="line.489"></a>
-<span class="sourceLineNo">490</span><a name="line.490"></a>
-<span class="sourceLineNo">491</span>    for (Path p : processedLogs) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      Path newPath = FSHLog.getWALArchivePath(oldLogDir, p);<a name="line.492"></a>
-<span class="sourceLineNo">493</span>      if (fs.exists(p)) {<a name="line.493"></a>
-<span class="sourceLineNo">494</span>        if (!FSUtils.renameAndSetModifyTime(fs, p, newPath)) {<a name="line.494"></a>
-<span class="sourceLineNo">495</span>          LOG.warn("Unable to move  " + p + " to " + newPath);<a name="line.495"></a>
-<span class="sourceLineNo">496</span>        } else {<a name="line.496"></a>
-<span class="sourceLineNo">497</span>          LOG.info("Archived processed log " + p + " to " + newPath);<a name="line.497"></a>
-<span class="sourceLineNo">498</span>        }<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      }<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><a name="line.502"></a>
-<span class="sourceLineNo">503</span>  /**<a name="line.503"></a>
-<span class="sourceLineNo">504</span>   * Path to a file under RECOVERED_EDITS_DIR directory of the region found in<a name="line.504"></a>
-<span class="sourceLineNo">505</span>   * &lt;code&gt;logEntry&lt;/code&gt; named for the sequenceid in the passed<a name="line.505"></a>
-<span class="sourceLineNo">506</span>   * &lt;code&gt;logEntry&lt;/code&gt;: e.g. /hbase/some_table/2323432434/recovered.edits/2332.<a name="line.506"></a>
-<span class="sourceLineNo">507</span>   * This method also ensures existence of RECOVERED_EDITS_DIR under the region<a name="line.507"></a>
-<span class="sourceLineNo">508</span>   * creating it if necessary.<a name="line.508"></a>
-<span class="sourceLineNo">509</span>   * @param fs<a name="line.509"></a>
-<span class="sourceLineNo">510</span>   * @param logEntry<a name="line.510"></a>
-<span class="sourceLineNo">511</span>   * @param rootDir HBase root dir.<a name="line.511"></a>
-<span class="sourceLineNo">512</span>   * @return Path to file into which to dump split log edits.<a name="line.512"></a>
-<span class="sourceLineNo">513</span>   * @throws IOException<a name="line.513"></a>
-<span class="sourceLineNo">514</span>   */<a name="line.514"></a>
-<span class="sourceLineNo">515</span>  @SuppressWarnings("deprecation")<a name="line.515"></a>
-<span class="sourceLineNo">516</span>  static Path getRegionSplitEditsPath(final FileSystem fs,<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      final Entry logEntry, final Path rootDir, boolean isCreate)<a name="line.517"></a>
-<span class="sourceLineNo">518</span>  throws IOException {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    Path tableDir = FSUtils.getTableDir(rootDir, logEntry.getKey().getTablename());<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    String encodedRegionName = Bytes.toString(logEntry.getKey().getEncodedRegionName());<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    Path regiondir = HRegion.getRegionDir(tableDir, encodedRegionName);<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    Path dir = getRegionDirRecoveredEditsDir(regiondir);<a name="line.522"></a>
-<span class="sourceLineNo">523</span><a name="line.523"></a>
-<span class="sourceLineNo">524</span>    if (!fs.exists(regiondir)) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      LOG.info("This region's directory doesn't exist: "<a name="line.525"></a>
-<span class="sourceLineNo">526</span>          + regiondir.toString() + ". It is very likely that it was" +<a name="line.526"></a>
-<span class="sourceLineNo">527</span>          " already split so it's safe to discard those edits.");<a name="line.527"></a>
-<span class="sourceLineNo">528</span>      return null;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    }<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    if (fs.exists(dir) &amp;&amp; fs.isFile(dir)) {<a name="line.530"></a>
-<span class="sourceLineNo">531</span>      Path tmp = new Path("/tmp");<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      if (!fs.exists(tmp)) {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>        fs.mkdirs(tmp);<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      }<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      tmp = new Path(tmp,<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        HConstants.RECOVERED_EDITS_DIR + "_" + encodedRegionName);<a name="line.536"></a>
-<span class="sourceLineNo">537</span>      LOG.warn("Found existing old file: " + dir + ". It could be some "<a name="line.537"></a>
-<span class="sourceLineNo">538</span>        + "leftover of an old installation. It should be a folder instead. "<a name="line.538"></a>
-<span class="sourceLineNo">539</span>        + "So moving it to " + tmp);<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      if (!fs.rename(dir, tmp)) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        LOG.warn("Failed to sideline old file " + dir);<a name="line.541"></a>
-<span class="sourceLineNo">542</span>      }<a name="line.542"></a>
-<span class="sourceLineNo">543</span>    }<a name="line.543"></a>
-<span class="sourceLineNo">544</span><a name="line.544"></a>
-<span class="sourceLineNo">545</span>    if (isCreate &amp;&amp; !fs.exists(dir)) {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>      if (!fs.mkdirs(dir)) LOG.warn("mkdir failed on " + dir);<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    }<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    // Append file name ends with RECOVERED_LOG_TMPFILE_SUFFIX to ensure<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    // region's replayRecoveredEdits will not delete it<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    String fileName = formatRecoveredEditsFileName(logEntry.getKey().getLogSeqNum());<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    fileName = getTmpRecoveredEditsFileName(fileName);<a name="line.551"></a>
-<span class="sourceLineNo">552</span>    return new Path(dir, fileName);<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>  static String getTmpRecoveredEditsFileName(String fileName) {<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    return fileName + RECOVERED_LOG_TMPFILE_SUFFIX;<a name="line.556"></a>
-<span class="sourceLineNo">557</span>  }<a name="line.557"></a>
-<span class="sourceLineNo">558</span><a name="line.558"></a>
-<span class="sourceLineNo">559</span>  /**<a name="line.559"></a>
-<span class="sourceLineNo">560</span>   * Get the completed recovered edits file path, renaming it to be by last edit<a name="line.560"></a>
-<span class="sourceLineNo">561</span>   * in the file from its first edit. Then we could use the name to skip<a name="line.561"></a>
-<span class="sourceLineNo">562</span>   * recovered edits when doing {@link HRegion#replayRecoveredEditsIfAny}.<a name="line.562"></a>
-<span class="sourceLineNo">563</span>   * @param srcPath<a name="line.563"></a>
-<span class="sourceLineNo">564</span>   * @param maximumEditLogSeqNum<a name="line.564"></a>
-<span class="sourceLineNo">565</span>   * @return dstPath take file's last edit log seq num as the name<a name="line.565"></a>
-<span class="sourceLineNo">566</span>   */<a name="line.566"></a>
-<span class="sourceLineNo">567</span>  static Path getCompletedRecoveredEditsFilePath(Path srcPath,<a name="line.567"></a>
-<span class="sourceLineNo">568</span>      Long maximumEditLogSeqNum) {<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    String fileName = formatRecoveredEditsFileName(maximumEditLogSeqNum);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    return new Path(srcPath.getParent(), fileName);<a name="line.570"></a>
-<span class="sourceLineNo">571</span>  }<a name="line.571"></a>
-<span class="sourceLineNo">572</span><a name="line.572"></a>
-<span class="sourceLineNo">573</span>  static String formatRecoveredEditsFileName(final long seqid) {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    return String.format("%019d", seqid);<a name="line.574"></a>
-<span class="sourceLineNo">575</span>  }<a name="line.575"></a>
-<span class="sourceLineNo">576</span><a name="line.576"></a>
-<span class="sourceLineNo">577</span>  private static final Pattern EDITFILES_NAME_PATTERN = Pattern.compile("-?[0-9]+");<a name="line.577"></a>
-<span class="sourceLineNo">578</span>  private static final String RECOVERED_LOG_TMPFILE_SUFFIX = ".temp";<a name="line.578"></a>
-<span class="sourceLineNo">579</span><a name="line.579"></a>
-<span class="sourceLineNo">580</span>  /**<a name="line.580"></a>
-<span class="sourceLineNo">581</span>   * @param regiondir<a name="line.581"></a>
-<span class="sourceLineNo">582</span>   *          This regions directory in the filesystem.<a name="line.582"></a>
-<span class="sourceLineNo">583</span>   * @return The directory that holds recovered edits files for the region<a name="line.583"></a>
-<span class="sourceLineNo">584</span>   *         &lt;code&gt;regiondir&lt;/code&gt;<a name="line.584"></a>
-<span class="sourceLineNo">585</span>   */<a name="line.585"></a>
-<span class="sourceLineNo">586</span>  public static Path getRegionDirRecoveredEditsDir(final Path regiondir) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    return new Path(regiondir, HConstants.RECOVERED_EDITS_DIR);<a name="line.587"></a>
-<span class="sourceLineNo">588</span>  }<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span>  /**<a name="line.590"></a>
-<span class="sourceLineNo">591</span>   * Returns sorted set of edit files made by splitter, excluding files<a name="line.591"></a>
-<span class="sourceLineNo">592</span>   * with '.temp' suffix.<a name="line.592"></a>
-<span class="sourceLineNo">593</span>   *<a name="line.593"></a>
-<span class="sourceLineNo">594</span>   * @param fs<a name="line.594"></a>
-<span class="sourceLineNo">595</span>   * @param regiondir<a name="line.595"></a>
-<span class="sourceLineNo">596</span>   * @return Files in passed &lt;code&gt;regiondir&lt;/code&gt; as a sorted set.<a name="line.596"></a>
-<span class="sourceLineNo">597</span>   * @throws IOException<a name="line.597"></a>
-<span class="sourceLineNo">598</span>   */<a name="line.598"></a>
-<span class="sourceLineNo">599</span>  public static NavigableSet&lt;Path&gt; getSplitEditFilesSorted(final FileSystem fs,<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      final Path regiondir) throws IOException {<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    NavigableSet&lt;Path&gt; filesSorted = new TreeSet&lt;Path&gt;();<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    Path editsdir = getRegionDirRecoveredEditsDir(regiondir);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    if (!fs.exists(editsdir))<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      return filesSorted;<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    FileStatus[] files = FSUtils.listStatus(fs, editsdir, new PathFilter() {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      @Override<a name="line.606"></a>
-<span class="sourceLineNo">607</span>      public boolean accept(Path p) {<a name="line.607"></a>
-<span class="sourceLineNo">608</span>        boolean result = false;<a name="line.608"></a>
-<span class="sourceLineNo">609</span>        try {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>          // Return files and only files that match the editfile names pattern.<a name="line.610"></a>
-<span class="sourceLineNo">611</span>          // There can be other files in this directory other than edit files.<a name="line.611"></a>
-<span class="sourceLineNo">612</span>          // In particular, on error, we'll move aside the bad edit file giving<a name="line.612"></a>
-<span class="sourceLineNo">613</span>          // it a timestamp suffix. See moveAsideBadEditsFile.<a name="line.613"></a>
-<span class="sourceLineNo">614</span>          Matcher m = EDITFILES_NAME_PATTERN.matcher(p.getName());<a name="line.614"></a>
-<span class="sourceLineNo">615</span>          result = fs.isFile(p) &amp;&amp; m.matches();<a name="line.615"></a>
-<span class="sourceLineNo">616</span>          // Skip the file whose name ends with RECOVERED_LOG_TMPFILE_SUFFIX,<a name="line.616"></a>
-<span class="sourceLineNo">617</span>          // because it means splitwal thread is writting this file.<a name="line.617"></a>
-<span class="sourceLineNo">618</span>          if (p.getName().endsWith(RECOVERED_LOG_TMPFILE_SUFFIX)) {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>            result = false;<a name="line.619"></a>
-<span class="sourceLineNo">620</span>          }<a name="line.620"></a>
-<span class="sourceLineNo">621</span>          // Skip SeqId Files<a name="line.621"></a>
-<span class="sourceLineNo">622</span>          if (isSequenceIdFile(p)) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span>            result = false;<a name="line.623"></a>
-<span class="sourceLineNo">624</span>          }<a name="line.624"></a>
-<span class="sourceLineNo">625</span>        } catch (IOException e) {<a name="line.625"></a>
-<span class="sourceLineNo">626</span>          LOG.warn("Failed isFile check on " + p);<a name="line.626"></a>
-<span class="sourceLineNo">627</span>        }<a name="line.627"></a>
-<span class="sourceLineNo">628</span>        return result;<a name="line.628"></a>
-<span class="sourceLineNo">629</span>      }<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    });<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    if (files == null) {<a name="line.631"></a>
-<span class="sourceLineNo">632</span>      return filesSorted;<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    }<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    for (FileStatus status : files) {<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      filesSorted.add(status.getPath());<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    }<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    return filesSorted;<a name="line.637"></a>
-<span class="sourceLineNo">638</span>  }<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>   * Move aside a bad edits file.<a name="line.641"></a>
-<span class="sourceLineNo">642</span>   *<a name="line.642"></a>
-<span class="sourceLineNo">643</span>   * @param fs<a name="line.643"></a>
-<span class="sourceLineNo">644</span>   * @param edits<a name="line.644"></a>
-<span class="sourceLineNo">645</span>   *          Edits file to move aside.<a name="line.645"></a>
-<span class="sourceLineNo">646</span>   * @return The name of the moved aside file.<a name="line.646"></a>
-<span class="sourceLineNo">647</span>   * @throws IOException<a name="line.647"></a>
-<span class="sourceLineNo">648</span>   */<a name="line.648"></a>
-<span class="sourceLineNo">649</span>  public static Path moveAsideBadEditsFile(final FileSystem fs, final Path edits)<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      throws IOException {<a name="line.650"></a>
-<span class="sourceLineNo">651</span>    Path moveAsideName = new Path(edits.getParent(), edits.getName() + "."<a name="line.651"></a>
-<span class="sourceLineNo">652</span>        + System.currentTimeMillis());<a name="line.652"></a>
-<span class="sourceLineNo">653</span>    if (!fs.rename(edits, moveAsideName)) {<a name="line.653"></a>
-<span class="sourceLineNo">654</span>      LOG.warn("Rename failed from " + edits + " to " + moveAsideName);<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    }<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    return moveAsideName;<a name="line.656"></a>
-<span class="sourceLineNo">657</span>  }<a name="line.657"></a>
-<span class="sourceLineNo">658</span><a name="line.658"></a>
-<span class="sourceLineNo">659</span>  private static final String SEQUENCE_ID_FILE_SUFFIX = ".seqid";<a name="line.659"></a>
-<span class="sourceLineNo">660</span>  private static final String OLD_SEQUENCE_ID_FILE_SUFFIX = "_seqid";<a name="line.660"></a>
-<span class="sourceLineNo">661</span>  private static final int SEQUENCE_ID_FILE_SUFFIX_LENGTH = SEQUENCE_ID_FILE_SUFFIX.length();<a name="line.661"></a>
-<span class="sourceLineNo">662</span><a name="line.662"></a>
-<span class="sourceLineNo">663</span>  /**<a name="line.663"></a>
-<span class="sourceLineNo">664</span>   * Is the given file a region open sequence id file.<a name="line.664"></a>
-<span class="sourceLineNo">665</span>   */<a name="line.665"></a>
-<span class="sourceLineNo">666</span>  @VisibleForTesting<a name="line.666"></a>
-<span class="sourceLineNo">667</span>  public static boolean isSequenceIdFile(final Path file) {<a name="line.667"></a>
-<span class="sourceLineNo">668</span>    return file.getName().endsWith(SEQUENCE_ID_FILE_SUFFIX)<a name="line.668"></a>
-<span class="sourceLineNo">669</span>        || file.getName().endsWith(OLD_SEQUENCE_ID_FILE_SUFFIX);<a name="line.669"></a>
-<span class="sourceLineNo">670</span>  }<a name="line.670"></a>
+<span class="sourceLineNo">346</span>            regionMaxSeqIdInStores.put(encodedRegionNameAsStr, maxSeqIdInStores);<a name="line.346"></a>
+<span class="sourceLineNo">347</span>            lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.347"></a>
+<span class="sourceLineNo">348</span>            if (LOG.isDebugEnabled()) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>              LOG.debug("DLS Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.349"></a>
+<span class="sourceLineNo">350</span>                  TextFormat.shortDebugString(ids));<a name="line.350"></a>
+<span class="sourceLineNo">351</span>            }<a name="line.351"></a>
+<span class="sourceLineNo">352</span>          }<a name="line.352"></a>
+<span class="sourceLineNo">353</span>          if (lastFlushedSequenceId == null) {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>            lastFlushedSequenceId = -1L;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>          }<a name="line.355"></a>
+<span class="sourceLineNo">356</span>          lastFlushedSequenceIds.put(encodedRegionNameAsStr, lastFlushedSequenceId);<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        }<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        if (lastFlushedSequenceId &gt;= entry.getKey().getSequenceId()) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>          editsSkipped++;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>          continue;<a name="line.360"></a>
+<span class="sourceLineNo">361</span>        }<a name="line.361"></a>
+<span class="sourceLineNo">362</span>        entryBuffers.appendEntry(entry);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        editsCount++;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>        int moreWritersFromLastCheck = this.getNumOpenWriters() - numOpenedFilesLastCheck;<a name="line.364"></a>
+<span class="sourceLineNo">365</span>        // If sufficient edits have passed, check if we should report progress.<a name="line.365"></a>
+<span class="sourceLineNo">366</span>        if (editsCount % interval == 0<a name="line.366"></a>
+<span class="sourceLineNo">367</span>            || moreWritersFromLastCheck &gt; numOpenedFilesBeforeReporting) {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>          numOpenedFilesLastCheck = this.getNumOpenWriters();<a name="line.368"></a>
+<span class="sourceLineNo">369</span>          String countsStr = (editsCount - (editsSkipped + outputSink.getSkippedEdits()))<a name="line.369"></a>
+<span class="sourceLineNo">370</span>              + " edits, skipped " + editsSkipped + " edits.";<a name="line.370"></a>
+<span class="sourceLineNo">371</span>          status.setStatus("Split " + countsStr);<a name="line.371"></a>
+<span class="sourceLineNo">372</span>          if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>            progress_failed = true;<a name="line.373"></a>
+<span class="sourceLineNo">374</span>            return false;<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>      }<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    } catch (InterruptedException ie) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      IOException iie = new InterruptedIOException();<a name="line.379"></a>
+<span class="sourceLineNo">380</span>      iie.initCause(ie);<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      throw iie;<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    } catch (CorruptedLogFileException e) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      LOG.warn("Could not parse, corrupted log file " + logPath, e);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      csm.getSplitLogWorkerCoordination().markCorrupted(rootDir,<a name="line.384"></a>
+<span class="sourceLineNo">385</span>        logfile.getPath().getName(), fs);<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      isCorrupted = true;<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    } catch (IOException e) {<a name="line.387"></a>
+<span class="sourceLineNo">388</span>      e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      throw e;<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    } finally {<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      LOG.debug("Finishing writing output logs and closing down.");<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      try {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>        if (null != in) {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>          in.close();<a name="line.394"></a>
+<span class="sourceLineNo">395</span>        }<a name="line.395"></a>
+<span class="sourceLineNo">396</span>      } catch (IOException exception) {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>        LOG.warn("Could not close wal reader: " + exception.getMessage());<a name="line.397"></a>
+<span class="sourceLineNo">398</span>        LOG.debug("exception details", exception);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      }<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      try {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>        if (outputSinkStarted) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>          // Set progress_failed to true as the immediate following statement will reset its value<a name="line.402"></a>
+<span class="sourceLineNo">403</span>          // when finishWritingAndClose() throws exception, progress_failed has the right value<a name="line.403"></a>
+<span class="sourceLineNo">404</span>          progress_failed = true;<a name="line.404"></a>
+<span class="sourceLineNo">405</span>          progress_failed = outputSink.finishWritingAndClose() == null;<a name="line.405"></a>
+<span class="sourceLineNo">406</span>        }<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      } finally {<a name="line.407"></a>
+<span class="sourceLineNo">408</span>        String msg =<a name="line.408"></a>
+<span class="sourceLineNo">409</span>            "Processed " + editsCount + " edits across " + outputSink.getNumberOfRecoveredRegions()<a name="line.409"></a>
+<span class="sourceLineNo">410</span>                + " regions; edits skipped=" + editsSkipped + "; log file=" + logPath +<a name="line.410"></a>
+<span class="sourceLineNo">411</span>                ", length=" + logfile.getLen() + // See if length got updated post lease recovery<a name="line.411"></a>
+<span class="sourceLineNo">412</span>                ", corrupted=" + isCorrupted + ", progress failed=" + progress_failed;<a name="line.412"></a>
+<span class="sourceLineNo">413</span>        LOG.info(msg);<a name="line.413"></a>
+<span class="sourceLineNo">414</span>        status.markComplete(msg);<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>    return !progress_failed;<a name="line.417"></a>
+<span class="sourceLineNo">418</span>  }<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>   * Completes the work done by splitLogFile by archiving logs<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   * &lt;p&gt;<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   * It is invoked by SplitLogManager once it knows that one of the<a name="line.423"></a>
+<span class="sourceLineNo">424</span>   * SplitLogWorkers have completed the splitLogFile() part. If the master<a name="line.424"></a>
+<span class="sourceLineNo">425</span>   * crashes then this function might get called multiple times.<a name="line.425"></a>
+<span class="sourceLineNo">426</span>   * &lt;p&gt;<a name="line.426"></a>
+<span class="sourceLineNo">427</span>   * @param logfile<a name="line.427"></a>
+<span class="sourceLineNo">428</span>   * @param conf<a name="line.428"></a>
+<span class="sourceLineNo">429</span>   * @throws IOException<a name="line.429"></a>
+<span class="sourceLineNo">430</span>   */<a name="line.430"></a>
+<span class="sourceLineNo">431</span>  public static void finishSplitLogFile(String logfile,<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      Configuration conf)  throws IOException {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    Path rootdir = FSUtils.getRootDir(conf);<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    Path oldLogDir = new Path(rootdir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.434"></a>
+<span class="sourceLineNo">435</span>    Path logPath;<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    if (FSUtils.isStartingWithPath(rootdir, logfile)) {<a name="line.436"></a>
+<span class="sourceLineNo">437</span>      logPath = new Path(logfile);<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    } else {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>      logPath = new Path(rootdir, logfile);<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    }<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    finishSplitLogFile(rootdir, oldLogDir, logPath, conf);<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>  private static void finishSplitLogFile(Path rootdir, Path oldLogDir,<a name="line.444"></a>
+<span class="sourceLineNo">445</span>      Path logPath, Configuration conf) throws IOException {<a name="line.445"></a>
+<span class="sourceLineNo">446</span>    List&lt;Path&gt; processedLogs = new ArrayList&lt;Path&gt;();<a name="line.446"></a>
+<span class="sourceLineNo">447</span>    List&lt;Path&gt; corruptedLogs = new ArrayList&lt;Path&gt;();<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    FileSystem fs;<a name="line.448"></a>
+<span class="sourceLineNo">449</span>    fs = rootdir.getFileSystem(conf);<a name="line.449"></a>
+<span class="sourceLineNo">450</span>    if (ZKSplitLog.isCorrupted(rootdir, logPath.getName(), fs)) {<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      corruptedLogs.add(logPath);<a name="line.451"></a>
+<span class="sourceLineNo">452</span>    } else {<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      processedLogs.add(logPath);<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    }<a name="line.454"></a>
+<span class="sourceLineNo">455</span>    archiveLogs(corruptedLogs, processedLogs, oldLogDir, fs, conf);<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    Path stagingDir = ZKSplitLog.getSplitLogDir(rootdir, logPath.getName());<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    fs.delete(stagingDir, true);<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>  /**<a name="line.460"></a>
+<span class="sourceLineNo">461</span>   * Moves processed logs to a oldLogDir after successful processing Moves<a name="line.461"></a>
+<span class="sourceLineNo">462</span>   * corrupted logs (any log that couldn't be successfully parsed to corruptDir<a name="line.462"></a>
+<span class="sourceLineNo">463</span>   * (.corrupt) for later investigation<a name="line.463"></a>
+<span class="sourceLineNo">464</span>   *<a name="line.464"></a>
+<span class="sourceLineNo">465</span>   * @param corruptedLogs<a name="line.465"></a>
+<span class="sourceLineNo">466</span>   * @param processedLogs<a name="line.466"></a>
+<span class="sourceLineNo">467</span>   * @param oldLogDir<a name="line.467"></a>
+<span class="sourceLineNo">468</span>   * @param fs<a name="line.468"></a>
+<span class="sourceLineNo">469</span>   * @param conf<a name="line.469"></a>
+<span class="sourceLineNo">470</span>   * @throws IOException<a name="line.470"></a>
+<span class="sourceLineNo">471</span>   */<a name="line.471"></a>
+<span class="sourceLineNo">472</span>  private static void archiveLogs(<a name="line.472"></a>
+<span class="sourceLineNo">473</span>      final List&lt;Path&gt; corruptedLogs,<a name="line.473"></a>
+<span class="sourceLineNo">474</span>      final List&lt;Path&gt; processedLogs, final Path oldLogDir,<a name="line.474"></a>
+<span class="sourceLineNo">475</span>      final FileSystem fs, final Configuration conf) throws IOException {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    final Path corruptDir = new Path(FSUtils.getRootDir(conf), conf.get(<a name="line.476"></a>
+<span class="sourceLineNo">477</span>        "hbase.regionserver.hlog.splitlog.corrupt.dir",  HConstants.CORRUPT_DIR_NAME));<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>    if (!fs.mkdirs(corruptDir)) {<a name="line.479"></a>
+<span class="sourceLineNo">480</span>      LOG.info("Unable to mkdir " + corruptDir);<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    }<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    fs.mkdirs(oldLogDir);<a name="line.482"></a>
+<span class="sourceLineNo">483</span><a name="line.483"></a>
+<span class="sourceLineNo">484</span>    // this method can get restarted or called multiple times for archiving<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    // the same log files.<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    for (Path corrupted : corruptedLogs) {<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      Path p = new Path(corruptDir, corrupted.getName());<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      if (fs.exists(corrupted)) {<a name="line.488"></a>
+<span class="sourceLineNo">489</span>        if (!fs.rename(corrupted, p)) {<a name="line.489"></a>
+<span class="sourceLineNo">490</span>          LOG.warn("Unable to move corrupted log " + corrupted + " to " + p);<a name="line.490"></a>
+<span class="sourceLineNo">491</span>        } else {<a name="line.491"></a>
+<span class="sourceLineNo">492</span>          LOG.warn("Moved corrupted log " + corrupted + " to " + p);<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>    }<a name="line.495"></a>
+<span class="sourceLineNo">496</span><a name="line.496"></a>
+<span class="sourceLineNo">497</span>    for (Path p : processedLogs) {<a name="line.497"></a>
+<span class="sourceLineNo">498</span>      Path newPath = FSHLog.getWALArchivePath(oldLogDir, p);<a name="line.498"></a>
+<span class="sourceLineNo">499</span>      if (fs.exists(p)) {<a name="line.499"></a>
+<span class="sourceLineNo">500</span>        if (!FSUtils.renameAndSetModifyTime(fs, p, newPath)) {<a name="line.500"></a>
+<span class="sourceLineNo">501</span>          LOG.warn("Unable to move  " + p + " to " + newPath);<a name="line.501"></a>
+<span class="sourceLineNo">502</span>        } else {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>          LOG.info("Archived processed log " + p + " to " + newPath);<a name="line.503"></a>
+<span class="sourceLineNo">504</span>        }<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      }<a name="line.505"></a>
+<span class="sourceLineNo">506</span>    }<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>  /**<a name="line.509"></a>
+<span class="sourceLineNo">510</span>   * Path to a file under RECOVERED_EDITS_DIR directory of the region found in<a name="line.510"></a>
+<span class="sourceLineNo">511</span>   * &lt;code&gt;logEntry&lt;/code&gt; named for the sequenceid in the passed<a name="line.511"></a>
+<span class="sourceLineNo">512</span>   * &lt;code&gt;logEntry&lt;/code&gt;: e.g. /hbase/some_table/2323432434/recovered.edits/2332.<a name="line.512"></a>
+<span class="sourceLineNo">513</span>   * This method also ensures existence of RECOVERED_EDITS_DIR under the region<a name="line.513"></a>
+<span class="sourceLineNo">514</span>   * creating it if necessary.<a name="line.514"></a>
+<span class="sourceLineNo">515</span>   * @param fs<a name="line.515"></a>
+<span class="sourceLineNo">516</span>   * @param logEntry<a name="line.516"></a>
+<span class="sourceLineNo">517</span>   * @param rootDir HBase root dir.<a name="line.517"></a>
+<span class="sourceLineNo">518</span>   * @param fileBeingSplit the file being split currently. Used to generate tmp file name.<a name="line.518"></a>
+<span class="sourceLineNo">519</span>   * @return Path to file into which to dump split log edits.<a name="line.519"></a>
+<span class="sourceLineNo">520</span>   * @throws IOException<a name="line.520"></a>
+<span class="sourceLineNo">521</span>   */<a name="line.521"></a>
+<span class="sourceLineNo">522</span>  @SuppressWarnings("deprecation")<a name="line.522"></a>
+<span class="sourceLineNo">523</span>  private static Path getRegionSplitEditsPath(final FileSystem fs,<a name="line.523"></a>
+<span class="sourceLineNo">524</span>      final Entry logEntry, final Path rootDir, FileStatus fileBeingSplit)<a name="line.524"></a>
+<span class="sourceLineNo">525</span>  throws IOException {<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    Path tableDir = FSUtils.getTableDir(rootDir, logEntry.getKey().getTablename());<a name="line.526"></a>
+<span class="sourceLineNo">527</span>    String encodedRegionName = Bytes.toString(logEntry.getKey().getEncodedRegionName());<a name="line.527"></a>
+<span class="sourceLineNo">528</span>    Path regiondir = HRegion.getRegionDir(tableDir, encodedRegionName);<a name="line.528"></a>
+<span class="sourceLineNo">529</span>    Path dir = getRegionDirRecoveredEditsDir(regiondir);<a name="line.529"></a>
+<span class="sourceLineNo">530</span><a name="line.530"></a>
+<span class="sourceLineNo">531</span>    if (!fs.exists(regiondir)) {<a name="line.531"></a>
+<span class="sourceLineNo">532</span>      LOG.info("This region's directory doesn't exist: "<a name="line.532"></a>
+<span class="sourceLineNo">533</span>          + regiondir.toString() + ". It is very likely that it was" +<a name="line.533"></a>
+<span class="sourceLineNo">534</span>          " already split so it's safe to discard those edits.");<a name="line.534"></a>
+<span class="sourceLineNo">535</span>      return null;<a name="line.535"></a>
+<span class="sourceLineNo">536</span>    }<a name="line.536"></a>
+<span class="sourceLineNo">537</span>    if (fs.exists(dir) &amp;&amp; fs.isFile(dir)) {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      Path tmp = new Path("/tmp");<a name="line.538"></a>
+<span class="sourceLineNo">539</span>      if (!fs.exists(tmp)) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span>        fs.mkdirs(tmp);<a name="line.540"></a>
+<span class="sourceLineNo">541</span>      }<a name="line.541"></a>
+<span class="sourceLineNo">542</span>      tmp = new Path(tmp,<a name="line.542"></a>
+<span class="sourceLineNo">543</span>        HConstants.RECOVERED_EDITS_DIR + "_" + encodedRegionName);<a name="line.543"></a>
+<span class="sourceLineNo">544</span>      LOG.warn("Found existing old file: " + dir + ". It could be some "<a name="line.544"></a>
+<span class="sourceLineNo">545</span>        + "leftover of an old installation. It should be a folder instead. "<a name="line.545"></a>
+<span class="sourceLineNo">546</span>        + "So moving it to " + tmp);<a name="line.546"></a>
+<span class="sourceLineNo">547</span>      if (!fs.rename(dir, tmp)) {<a name="line.547"></a>
+<span class="sourceLineNo">548</span>        LOG.warn("Failed to sideline old file " + dir);<a name="line.548"></a>
+<span class="sourceLineNo">549</span>      }<a name="line.549"></a>
+<span class="sourceLineNo">550</span>    }<a name="line.550"></a>
+<span class="sourceLineNo">551</span><a name="line.551"></a>
+<span class="sourceLineNo">552</span>    if (!fs.exists(dir) &amp;&amp;

<TRUNCATED>

[14/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionServerWriter.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionServerWriter.html b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionServerWriter.html
index 0597160..b444f46 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionServerWriter.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionServerWriter.html
@@ -184,2145 +184,2183 @@
 <span class="sourceLineNo">176</span>  // Min batch size when replay WAL edits<a name="line.176"></a>
 <span class="sourceLineNo">177</span>  private final int minBatchSize;<a name="line.177"></a>
 <span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span>  WALSplitter(final WALFactory factory, Configuration conf, Path rootDir,<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      FileSystem fs, LastSequenceId idChecker,<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      CoordinatedStateManager csm, RecoveryMode mode) {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    this.conf = HBaseConfiguration.create(conf);<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    String codecClassName = conf<a name="line.183"></a>
-<span class="sourceLineNo">184</span>        .get(WALCellCodec.WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    this.conf.set(HConstants.RPC_CODEC_CONF_KEY, codecClassName);<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    this.rootDir = rootDir;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    this.fs = fs;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    this.sequenceIdChecker = idChecker;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    this.csm = (BaseCoordinatedStateManager)csm;<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    this.walFactory = factory;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    this.controller = new PipelineController();<a name="line.191"></a>
-<span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span>    entryBuffers = new EntryBuffers(controller,<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        this.conf.getInt("hbase.regionserver.hlog.splitlog.buffersize",<a name="line.194"></a>
-<span class="sourceLineNo">195</span>            128*1024*1024));<a name="line.195"></a>
+<span class="sourceLineNo">179</span>  // the file being split currently<a name="line.179"></a>
+<span class="sourceLineNo">180</span>  private FileStatus fileBeingSplit;<a name="line.180"></a>
+<span class="sourceLineNo">181</span><a name="line.181"></a>
+<span class="sourceLineNo">182</span>  @VisibleForTesting<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  WALSplitter(final WALFactory factory, Configuration conf, Path rootDir,<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      FileSystem fs, LastSequenceId idChecker,<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      CoordinatedStateManager csm, RecoveryMode mode) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    this.conf = HBaseConfiguration.create(conf);<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    String codecClassName = conf<a name="line.187"></a>
+<span class="sourceLineNo">188</span>        .get(WALCellCodec.WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    this.conf.set(HConstants.RPC_CODEC_CONF_KEY, codecClassName);<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    this.rootDir = rootDir;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    this.fs = fs;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    this.sequenceIdChecker = idChecker;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    this.csm = (BaseCoordinatedStateManager)csm;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    this.walFactory = factory;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    this.controller = new PipelineController();<a name="line.195"></a>
 <span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span>    // a larger minBatchSize may slow down recovery because replay writer has to wait for<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    // enough edits before replaying them<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    this.minBatchSize = this.conf.getInt("hbase.regionserver.wal.logreplay.batch.size", 64);<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    this.distributedLogReplay = (RecoveryMode.LOG_REPLAY == mode);<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>    this.numWriterThreads = this.conf.getInt("hbase.regionserver.hlog.splitlog.writer.threads", 3);<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    if (csm != null &amp;&amp; this.distributedLogReplay) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      outputSink = new LogReplayOutputSink(controller, entryBuffers, numWriterThreads);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    } else {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      if (this.distributedLogReplay) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        LOG.info("ZooKeeperWatcher is passed in as NULL so disable distrubitedLogRepaly.");<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      }<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      this.distributedLogReplay = false;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      outputSink = new LogRecoveredEditsOutputSink(controller, entryBuffers, numWriterThreads);<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>  }<a name="line.213"></a>
-<span class="sourceLineNo">214</span><a name="line.214"></a>
-<span class="sourceLineNo">215</span>  /**<a name="line.215"></a>
-<span class="sourceLineNo">216</span>   * Splits a WAL file into region's recovered-edits directory.<a name="line.216"></a>
-<span class="sourceLineNo">217</span>   * This is the main entry point for distributed log splitting from SplitLogWorker.<a name="line.217"></a>
-<span class="sourceLineNo">218</span>   * &lt;p&gt;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>   * If the log file has N regions then N recovered.edits files will be produced.<a name="line.219"></a>
-<span class="sourceLineNo">220</span>   * &lt;p&gt;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   * @param rootDir<a name="line.221"></a>
-<span class="sourceLineNo">222</span>   * @param logfile<a name="line.222"></a>
-<span class="sourceLineNo">223</span>   * @param fs<a name="line.223"></a>
-<span class="sourceLineNo">224</span>   * @param conf<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   * @param reporter<a name="line.225"></a>
-<span class="sourceLineNo">226</span>   * @param idChecker<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   * @param cp coordination state manager<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   * @return false if it is interrupted by the progress-able.<a name="line.228"></a>
-<span class="sourceLineNo">229</span>   * @throws IOException<a name="line.229"></a>
-<span class="sourceLineNo">230</span>   */<a name="line.230"></a>
-<span class="sourceLineNo">231</span>  public static boolean splitLogFile(Path rootDir, FileStatus logfile, FileSystem fs,<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      Configuration conf, CancelableProgressable reporter, LastSequenceId idChecker,<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      CoordinatedStateManager cp, RecoveryMode mode, final WALFactory factory) throws IOException {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, idChecker, cp, mode);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    return s.splitLogFile(logfile, reporter);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  }<a name="line.236"></a>
-<span class="sourceLineNo">237</span><a name="line.237"></a>
-<span class="sourceLineNo">238</span>  // A wrapper to split one log folder using the method used by distributed<a name="line.238"></a>
-<span class="sourceLineNo">239</span>  // log splitting. Used by tools and unit tests. It should be package private.<a name="line.239"></a>
-<span class="sourceLineNo">240</span>  // It is public only because TestWALObserver is in a different package,<a name="line.240"></a>
-<span class="sourceLineNo">241</span>  // which uses this method to do log splitting.<a name="line.241"></a>
-<span class="sourceLineNo">242</span>  @VisibleForTesting<a name="line.242"></a>
-<span class="sourceLineNo">243</span>  public static List&lt;Path&gt; split(Path rootDir, Path logDir, Path oldLogDir,<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      FileSystem fs, Configuration conf, final WALFactory factory) throws IOException {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    final FileStatus[] logfiles = SplitLogManager.getFileList(conf,<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        Collections.singletonList(logDir), null);<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    List&lt;Path&gt; splits = new ArrayList&lt;Path&gt;();<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    if (logfiles != null &amp;&amp; logfiles.length &gt; 0) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      for (FileStatus logfile: logfiles) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, null, null,<a name="line.250"></a>
-<span class="sourceLineNo">251</span>            RecoveryMode.LOG_SPLITTING);<a name="line.251"></a>
-<span class="sourceLineNo">252</span>        if (s.splitLogFile(logfile, null)) {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>          finishSplitLogFile(rootDir, oldLogDir, logfile.getPath(), conf);<a name="line.253"></a>
-<span class="sourceLineNo">254</span>          if (s.outputSink.splits != null) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>            splits.addAll(s.outputSink.splits);<a name="line.255"></a>
-<span class="sourceLineNo">256</span>          }<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        }<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      }<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    }<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    if (!fs.delete(logDir, true)) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      throw new IOException("Unable to delete src dir: " + logDir);<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    return splits;<a name="line.263"></a>
-<span class="sourceLineNo">264</span>  }<a name="line.264"></a>
-<span class="sourceLineNo">265</span><a name="line.265"></a>
-<span class="sourceLineNo">266</span>  /**<a name="line.266"></a>
-<span class="sourceLineNo">267</span>   * log splitting implementation, splits one log file.<a name="line.267"></a>
-<span class="sourceLineNo">268</span>   * @param logfile should be an actual log file.<a name="line.268"></a>
-<span class="sourceLineNo">269</span>   */<a name="line.269"></a>
-<span class="sourceLineNo">270</span>  boolean splitLogFile(FileStatus logfile, CancelableProgressable reporter) throws IOException {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    Preconditions.checkState(status == null);<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    Preconditions.checkArgument(logfile.isFile(),<a name="line.272"></a>
-<span class="sourceLineNo">273</span>        "passed in file status is for something other than a regular file.");<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    boolean isCorrupted = false;<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    boolean skipErrors = conf.getBoolean("hbase.hlog.split.skip.errors",<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      SPLIT_SKIP_ERRORS_DEFAULT);<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    int interval = conf.getInt("hbase.splitlog.report.interval.loglines", 1024);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    Path logPath = logfile.getPath();<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    boolean outputSinkStarted = false;<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    boolean progress_failed = false;<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    int editsCount = 0;<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    int editsSkipped = 0;<a name="line.282"></a>
-<span class="sourceLineNo">283</span><a name="line.283"></a>
-<span class="sourceLineNo">284</span>    status =<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        TaskMonitor.get().createStatus(<a name="line.285"></a>
-<span class="sourceLineNo">286</span>          "Splitting log file " + logfile.getPath() + "into a temporary staging area.");<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    Reader in = null;<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    try {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      long logLength = logfile.getLen();<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      LOG.info("Splitting wal: " + logPath + ", length=" + logLength);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      LOG.info("DistributedLogReplay = " + this.distributedLogReplay);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      status.setStatus("Opening log file");<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>        progress_failed = true;<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        return false;<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      }<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      try {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        in = getReader(logfile, skipErrors, reporter);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      } catch (CorruptedLogFileException e) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>        LOG.warn("Could not get reader, corrupted log file " + logPath, e);<a name="line.300"></a>
-<span class="sourceLineNo">301</span>        ZKSplitLog.markCorrupted(rootDir, logfile.getPath().getName(), fs);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>        isCorrupted = true;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      }<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      if (in == null) {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>        LOG.warn("Nothing to split in log file " + logPath);<a name="line.305"></a>
-<span class="sourceLineNo">306</span>        return true;<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      }<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      int numOpenedFilesBeforeReporting = conf.getInt("hbase.splitlog.report.openedfiles", 3);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      int numOpenedFilesLastCheck = 0;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      outputSink.setReporter(reporter);<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      outputSink.startWriterThreads();<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      outputSinkStarted = true;<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      Entry entry;<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      Long lastFlushedSequenceId = -1L;<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      ServerName serverName = DefaultWALProvider.getServerNameFromWALDirectoryName(logPath);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      failedServerName = (serverName == null) ? "" : serverName.getServerName();<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      while ((entry = getNextLogLine(in, logPath, skipErrors)) != null) {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>        byte[] region = entry.getKey().getEncodedRegionName();<a name="line.318"></a>
-<span class="sourceLineNo">319</span>        String encodedRegionNameAsStr = Bytes.toString(region);<a name="line.319"></a>
-<span class="sourceLineNo">320</span>        lastFlushedSequenceId = lastFlushedSequenceIds.get(encodedRegionNameAsStr);<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        if (lastFlushedSequenceId == null) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>          if (this.distributedLogReplay) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>            RegionStoreSequenceIds ids =<a name="line.323"></a>
-<span class="sourceLineNo">324</span>                csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.324"></a>
-<span class="sourceLineNo">325</span>                  encodedRegionNameAsStr);<a name="line.325"></a>
-<span class="sourceLineNo">326</span>            if (ids != null) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>              lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.327"></a>
-<span class="sourceLineNo">328</span>              if (LOG.isDebugEnabled()) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>                LOG.debug("DLR Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.329"></a>
-<span class="sourceLineNo">330</span>                  TextFormat.shortDebugString(ids));<a name="line.330"></a>
-<span class="sourceLineNo">331</span>              }<a name="line.331"></a>
-<span class="sourceLineNo">332</span>            }<a name="line.332"></a>
-<span class="sourceLineNo">333</span>          } else if (sequenceIdChecker != null) {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>            RegionStoreSequenceIds ids = sequenceIdChecker.getLastSequenceId(region);<a name="line.334"></a>
-<span class="sourceLineNo">335</span>            Map&lt;byte[], Long&gt; maxSeqIdInStores = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.335"></a>
-<span class="sourceLineNo">336</span>            for (StoreSequenceId storeSeqId : ids.getStoreSequenceIdList()) {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>              maxSeqIdInStores.put(storeSeqId.getFamilyName().toByteArray(),<a name="line.337"></a>
-<span class="sourceLineNo">338</span>                storeSeqId.getSequenceId());<a name="line.338"></a>
-<span class="sourceLineNo">339</span>            }<a name="line.339"></a>
-<span class="sourceLineNo">340</span>            regionMaxSeqIdInStores.put(encodedRegionNameAsStr, maxSeqIdInStores);<a name="line.340"></a>
-<span class="sourceLineNo">341</span>            lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.341"></a>
-<span class="sourceLineNo">342</span>            if (LOG.isDebugEnabled()) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>              LOG.debug("DLS Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.343"></a>
-<span class="sourceLineNo">344</span>                  TextFormat.shortDebugString(ids));<a name="line.344"></a>
+<span class="sourceLineNo">197</span>    entryBuffers = new EntryBuffers(controller,<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        this.conf.getInt("hbase.regionserver.hlog.splitlog.buffersize",<a name="line.198"></a>
+<span class="sourceLineNo">199</span>            128*1024*1024));<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>    // a larger minBatchSize may slow down recovery because replay writer has to wait for<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    // enough edits before replaying them<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    this.minBatchSize = this.conf.getInt("hbase.regionserver.wal.logreplay.batch.size", 64);<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    this.distributedLogReplay = (RecoveryMode.LOG_REPLAY == mode);<a name="line.204"></a>
+<span class="sourceLineNo">205</span><a name="line.205"></a>
+<span class="sourceLineNo">206</span>    this.numWriterThreads = this.conf.getInt("hbase.regionserver.hlog.splitlog.writer.threads", 3);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    if (csm != null &amp;&amp; this.distributedLogReplay) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      outputSink = new LogReplayOutputSink(controller, entryBuffers, numWriterThreads);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    } else {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      if (this.distributedLogReplay) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>        LOG.info("ZooKeeperWatcher is passed in as NULL so disable distrubitedLogRepaly.");<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      }<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      this.distributedLogReplay = false;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      outputSink = new LogRecoveredEditsOutputSink(controller, entryBuffers, numWriterThreads);<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    }<a name="line.215"></a>
+<span class="sourceLineNo">216</span><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>
+<span class="sourceLineNo">220</span>   * Splits a WAL file into region's recovered-edits directory.<a name="line.220"></a>
+<span class="sourceLineNo">221</span>   * This is the main entry point for distributed log splitting from SplitLogWorker.<a name="line.221"></a>
+<span class="sourceLineNo">222</span>   * &lt;p&gt;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>   * If the log file has N regions then N recovered.edits files will be produced.<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   * &lt;p&gt;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   * @param rootDir<a name="line.225"></a>
+<span class="sourceLineNo">226</span>   * @param logfile<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   * @param fs<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   * @param conf<a name="line.228"></a>
+<span class="sourceLineNo">229</span>   * @param reporter<a name="line.229"></a>
+<span class="sourceLineNo">230</span>   * @param idChecker<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   * @param cp coordination state manager<a name="line.231"></a>
+<span class="sourceLineNo">232</span>   * @return false if it is interrupted by the progress-able.<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   * @throws IOException<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   */<a name="line.234"></a>
+<span class="sourceLineNo">235</span>  public static boolean splitLogFile(Path rootDir, FileStatus logfile, FileSystem fs,<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      Configuration conf, CancelableProgressable reporter, LastSequenceId idChecker,<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      CoordinatedStateManager cp, RecoveryMode mode, final WALFactory factory) throws IOException {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, idChecker, cp, mode);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    return s.splitLogFile(logfile, reporter);<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>  // A wrapper to split one log folder using the method used by distributed<a name="line.242"></a>
+<span class="sourceLineNo">243</span>  // log splitting. Used by tools and unit tests. It should be package private.<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  // It is public only because TestWALObserver is in a different package,<a name="line.244"></a>
+<span class="sourceLineNo">245</span>  // which uses this method to do log splitting.<a name="line.245"></a>
+<span class="sourceLineNo">246</span>  @VisibleForTesting<a name="line.246"></a>
+<span class="sourceLineNo">247</span>  public static List&lt;Path&gt; split(Path rootDir, Path logDir, Path oldLogDir,<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      FileSystem fs, Configuration conf, final WALFactory factory) throws IOException {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    final FileStatus[] logfiles = SplitLogManager.getFileList(conf,<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        Collections.singletonList(logDir), null);<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    List&lt;Path&gt; splits = new ArrayList&lt;Path&gt;();<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    if (logfiles != null &amp;&amp; logfiles.length &gt; 0) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      for (FileStatus logfile: logfiles) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>        WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, null, null,<a name="line.254"></a>
+<span class="sourceLineNo">255</span>            RecoveryMode.LOG_SPLITTING);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>        if (s.splitLogFile(logfile, null)) {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>          finishSplitLogFile(rootDir, oldLogDir, logfile.getPath(), conf);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>          if (s.outputSink.splits != null) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>            splits.addAll(s.outputSink.splits);<a name="line.259"></a>
+<span class="sourceLineNo">260</span>          }<a name="line.260"></a>
+<span class="sourceLineNo">261</span>        }<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      }<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    }<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    if (!fs.delete(logDir, true)) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      throw new IOException("Unable to delete src dir: " + logDir);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    }<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    return splits;<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  }<a name="line.268"></a>
+<span class="sourceLineNo">269</span><a name="line.269"></a>
+<span class="sourceLineNo">270</span>  /**<a name="line.270"></a>
+<span class="sourceLineNo">271</span>   * log splitting implementation, splits one log file.<a name="line.271"></a>
+<span class="sourceLineNo">272</span>   * @param logfile should be an actual log file.<a name="line.272"></a>
+<span class="sourceLineNo">273</span>   */<a name="line.273"></a>
+<span class="sourceLineNo">274</span>  @VisibleForTesting<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  boolean splitLogFile(FileStatus logfile, CancelableProgressable reporter) throws IOException {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    Preconditions.checkState(status == null);<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    Preconditions.checkArgument(logfile.isFile(),<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        "passed in file status is for something other than a regular file.");<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    boolean isCorrupted = false;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    boolean skipErrors = conf.getBoolean("hbase.hlog.split.skip.errors",<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      SPLIT_SKIP_ERRORS_DEFAULT);<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    int interval = conf.getInt("hbase.splitlog.report.interval.loglines", 1024);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    Path logPath = logfile.getPath();<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    boolean outputSinkStarted = false;<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    boolean progress_failed = false;<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    int editsCount = 0;<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    int editsSkipped = 0;<a name="line.287"></a>
+<span class="sourceLineNo">288</span><a name="line.288"></a>
+<span class="sourceLineNo">289</span>    status =<a name="line.289"></a>
+<span class="sourceLineNo">290</span>        TaskMonitor.get().createStatus(<a name="line.290"></a>
+<span class="sourceLineNo">291</span>          "Splitting log file " + logfile.getPath() + "into a temporary staging area.");<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    Reader in = null;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    this.fileBeingSplit = logfile;<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    try {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      long logLength = logfile.getLen();<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      LOG.info("Splitting wal: " + logPath + ", length=" + logLength);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      LOG.info("DistributedLogReplay = " + this.distributedLogReplay);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      status.setStatus("Opening log file");<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>        progress_failed = true;<a name="line.300"></a>
+<span class="sourceLineNo">301</span>        return false;<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      }<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      try {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>        in = getReader(logfile, skipErrors, reporter);<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      } catch (CorruptedLogFileException e) {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>        LOG.warn("Could not get reader, corrupted log file " + logPath, e);<a name="line.306"></a>
+<span class="sourceLineNo">307</span>        ZKSplitLog.markCorrupted(rootDir, logfile.getPath().getName(), fs);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>        isCorrupted = true;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      }<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      if (in == null) {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        LOG.warn("Nothing to split in log file " + logPath);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        return true;<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      }<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      int numOpenedFilesBeforeReporting = conf.getInt("hbase.splitlog.report.openedfiles", 3);<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      int numOpenedFilesLastCheck = 0;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      outputSink.setReporter(reporter);<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      outputSink.startWriterThreads();<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      outputSinkStarted = true;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      Entry entry;<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      Long lastFlushedSequenceId = -1L;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      ServerName serverName = DefaultWALProvider.getServerNameFromWALDirectoryName(logPath);<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      failedServerName = (serverName == null) ? "" : serverName.getServerName();<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      while ((entry = getNextLogLine(in, logPath, skipErrors)) != null) {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>        byte[] region = entry.getKey().getEncodedRegionName();<a name="line.324"></a>
+<span class="sourceLineNo">325</span>        String encodedRegionNameAsStr = Bytes.toString(region);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>        lastFlushedSequenceId = lastFlushedSequenceIds.get(encodedRegionNameAsStr);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>        if (lastFlushedSequenceId == null) {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>          if (this.distributedLogReplay) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>            RegionStoreSequenceIds ids =<a name="line.329"></a>
+<span class="sourceLineNo">330</span>                csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.330"></a>
+<span class="sourceLineNo">331</span>                  encodedRegionNameAsStr);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>            if (ids != null) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span>              lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.333"></a>
+<span class="sourceLineNo">334</span>              if (LOG.isDebugEnabled()) {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>                LOG.debug("DLR Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.335"></a>
+<span class="sourceLineNo">336</span>                  TextFormat.shortDebugString(ids));<a name="line.336"></a>
+<span class="sourceLineNo">337</span>              }<a name="line.337"></a>
+<span class="sourceLineNo">338</span>            }<a name="line.338"></a>
+<span class="sourceLineNo">339</span>          } else if (sequenceIdChecker != null) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>            RegionStoreSequenceIds ids = sequenceIdChecker.getLastSequenceId(region);<a name="line.340"></a>
+<span class="sourceLineNo">341</span>            Map&lt;byte[], Long&gt; maxSeqIdInStores = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.341"></a>
+<span class="sourceLineNo">342</span>            for (StoreSequenceId storeSeqId : ids.getStoreSequenceIdList()) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>              maxSeqIdInStores.put(storeSeqId.getFamilyName().toByteArray(),<a name="line.343"></a>
+<span class="sourceLineNo">344</span>                storeSeqId.getSequenceId());<a name="line.344"></a>
 <span class="sourceLineNo">345</span>            }<a name="line.345"></a>
-<span class="sourceLineNo">346</span>          }<a name="line.346"></a>
-<span class="sourceLineNo">347</span>          if (lastFlushedSequenceId == null) {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>            lastFlushedSequenceId = -1L;<a name="line.348"></a>
-<span class="sourceLineNo">349</span>          }<a name="line.349"></a>
-<span class="sourceLineNo">350</span>          lastFlushedSequenceIds.put(encodedRegionNameAsStr, lastFlushedSequenceId);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        }<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        if (lastFlushedSequenceId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>          editsSkipped++;<a name="line.353"></a>
-<span class="sourceLineNo">354</span>          continue;<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        }<a name="line.355"></a>
-<span class="sourceLineNo">356</span>        entryBuffers.appendEntry(entry);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        editsCount++;<a name="line.357"></a>
-<span class="sourceLineNo">358</span>        int moreWritersFromLastCheck = this.getNumOpenWriters() - numOpenedFilesLastCheck;<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        // If sufficient edits have passed, check if we should report progress.<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        if (editsCount % interval == 0<a name="line.360"></a>
-<span class="sourceLineNo">361</span>            || moreWritersFromLastCheck &gt; numOpenedFilesBeforeReporting) {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>          numOpenedFilesLastCheck = this.getNumOpenWriters();<a name="line.362"></a>
-<span class="sourceLineNo">363</span>          String countsStr = (editsCount - (editsSkipped + outputSink.getSkippedEdits()))<a name="line.363"></a>
-<span class="sourceLineNo">364</span>              + " edits, skipped " + editsSkipped + " edits.";<a name="line.364"></a>
-<span class="sourceLineNo">365</span>          status.setStatus("Split " + countsStr);<a name="line.365"></a>
-<span class="sourceLineNo">366</span>          if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>            progress_failed = true;<a name="line.367"></a>
-<span class="sourceLineNo">368</span>            return false;<a name="line.368"></a>
-<span class="sourceLineNo">369</span>          }<a name="line.369"></a>
-<span class="sourceLineNo">370</span>        }<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      }<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    } catch (InterruptedException ie) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      IOException iie = new InterruptedIOException();<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      iie.initCause(ie);<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      throw iie;<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    } catch (CorruptedLogFileException e) {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      LOG.warn("Could not parse, corrupted log file " + logPath, e);<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      csm.getSplitLogWorkerCoordination().markCorrupted(rootDir,<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        logfile.getPath().getName(), fs);<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      isCorrupted = true;<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    } catch (IOException e) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      throw e;<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    } finally {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      LOG.debug("Finishing writing output logs and closing down.");<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      try {<a name="line.386"></a>
-<span class="sourceLineNo">387</span>        if (null != in) {<a name="line.387"></a>
-<span class="sourceLineNo">388</span>          in.close();<a name="line.388"></a>
-<span class="sourceLineNo">389</span>        }<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      } catch (IOException exception) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        LOG.warn("Could not close wal reader: " + exception.getMessage());<a name="line.391"></a>
-<span class="sourceLineNo">392</span>        LOG.debug("exception details", exception);<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      }<a name="line.393"></a>
-<span class="sourceLineNo">394</span>      try {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        if (outputSinkStarted) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>          // Set progress_failed to true as the immediate following statement will reset its value<a name="line.396"></a>
-<span class="sourceLineNo">397</span>          // when finishWritingAndClose() throws exception, progress_failed has the right value<a name="line.397"></a>
-<span class="sourceLineNo">398</span>          progress_failed = true;<a name="line.398"></a>
-<span class="sourceLineNo">399</span>          progress_failed = outputSink.finishWritingAndClose() == null;<a name="line.399"></a>
-<span class="sourceLineNo">400</span>        }<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      } finally {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        String msg =<a name="line.402"></a>
-<span class="sourceLineNo">403</span>            "Processed " + editsCount + " edits across " + outputSink.getNumberOfRecoveredRegions()<a name="line.403"></a>
-<span class="sourceLineNo">404</span>                + " regions; edits skipped=" + editsSkipped + "; log file=" + logPath +<a name="line.404"></a>
-<span class="sourceLineNo">405</span>                ", length=" + logfile.getLen() + // See if length got updated post lease recovery<a name="line.405"></a>
-<span class="sourceLineNo">406</span>                ", corrupted=" + isCorrupted + ", progress failed=" + progress_failed;<a name="line.406"></a>
-<span class="sourceLineNo">407</span>        LOG.info(msg);<a name="line.407"></a>
-<span class="sourceLineNo">408</span>        status.markComplete(msg);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      }<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    }<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    return !progress_failed;<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>   * Completes the work done by splitLogFile by archiving logs<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   * &lt;p&gt;<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * It is invoked by SplitLogManager once it knows that one of the<a name="line.417"></a>
-<span class="sourceLineNo">418</span>   * SplitLogWorkers have completed the splitLogFile() part. If the master<a name="line.418"></a>
-<span class="sourceLineNo">419</span>   * crashes then this function might get called multiple times.<a name="line.419"></a>
-<span class="sourceLineNo">420</span>   * &lt;p&gt;<a name="line.420"></a>
-<span class="sourceLineNo">421</span>   * @param logfile<a name="line.421"></a>
-<span class="sourceLineNo">422</span>   * @param conf<a name="line.422"></a>
-<span class="sourceLineNo">423</span>   * @throws IOException<a name="line.423"></a>
-<span class="sourceLineNo">424</span>   */<a name="line.424"></a>
-<span class="sourceLineNo">425</span>  public static void finishSplitLogFile(String logfile,<a name="line.425"></a>
-<span class="sourceLineNo">426</span>      Configuration conf)  throws IOException {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    Path rootdir = FSUtils.getRootDir(conf);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    Path oldLogDir = new Path(rootdir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    Path logPath;<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    if (FSUtils.isStartingWithPath(rootdir, logfile)) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      logPath = new Path(logfile);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    } else {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      logPath = new Path(rootdir, logfile);<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    }<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    finishSplitLogFile(rootdir, oldLogDir, logPath, conf);<a name="line.435"></a>
-<span class="sourceLineNo">436</span>  }<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>  static void finishSplitLogFile(Path rootdir, Path oldLogDir,<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      Path logPath, Configuration conf) throws IOException {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    List&lt;Path&gt; processedLogs = new ArrayList&lt;Path&gt;();<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    List&lt;Path&gt; corruptedLogs = new ArrayList&lt;Path&gt;();<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    FileSystem fs;<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    fs = rootdir.getFileSystem(conf);<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    if (ZKSplitLog.isCorrupted(rootdir, logPath.getName(), fs)) {<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      corruptedLogs.add(logPath);<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    } else {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      processedLogs.add(logPath);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    }<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    archiveLogs(corruptedLogs, processedLogs, oldLogDir, fs, conf);<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    Path stagingDir = ZKSplitLog.getSplitLogDir(rootdir, logPath.getName());<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    fs.delete(stagingDir, true);<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  }<a name="line.452"></a>
-<span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span>  /**<a name="line.454"></a>
-<span class="sourceLineNo">455</span>   * Moves processed logs to a oldLogDir after successful processing Moves<a name="line.455"></a>
-<span class="sourceLineNo">456</span>   * corrupted logs (any log that couldn't be successfully parsed to corruptDir<a name="line.456"></a>
-<span class="sourceLineNo">457</span>   * (.corrupt) for later investigation<a name="line.457"></a>
-<span class="sourceLineNo">458</span>   *<a name="line.458"></a>
-<span class="sourceLineNo">459</span>   * @param corruptedLogs<a name="line.459"></a>
-<span class="sourceLineNo">460</span>   * @param processedLogs<a name="line.460"></a>
-<span class="sourceLineNo">461</span>   * @param oldLogDir<a name="line.461"></a>
-<span class="sourceLineNo">462</span>   * @param fs<a name="line.462"></a>
-<span class="sourceLineNo">463</span>   * @param conf<a name="line.463"></a>
-<span class="sourceLineNo">464</span>   * @throws IOException<a name="line.464"></a>
-<span class="sourceLineNo">465</span>   */<a name="line.465"></a>
-<span class="sourceLineNo">466</span>  private static void archiveLogs(<a name="line.466"></a>
-<span class="sourceLineNo">467</span>      final List&lt;Path&gt; corruptedLogs,<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      final List&lt;Path&gt; processedLogs, final Path oldLogDir,<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      final FileSystem fs, final Configuration conf) throws IOException {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    final Path corruptDir = new Path(FSUtils.getRootDir(conf), conf.get(<a name="line.470"></a>
-<span class="sourceLineNo">471</span>        "hbase.regionserver.hlog.splitlog.corrupt.dir",  HConstants.CORRUPT_DIR_NAME));<a name="line.471"></a>
-<span class="sourceLineNo">472</span><a name="line.472"></a>
-<span class="sourceLineNo">473</span>    if (!fs.mkdirs(corruptDir)) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      LOG.info("Unable to mkdir " + corruptDir);<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    }<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    fs.mkdirs(oldLogDir);<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>    // this method can get restarted or called multiple times for archiving<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    // the same log files.<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    for (Path corrupted : corruptedLogs) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      Path p = new Path(corruptDir, corrupted.getName());<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      if (fs.exists(corrupted)) {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        if (!fs.rename(corrupted, p)) {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>          LOG.warn("Unable to move corrupted log " + corrupted + " to " + p);<a name="line.484"></a>
-<span class="sourceLineNo">485</span>        } else {<a name="line.485"></a>
-<span class="sourceLineNo">486</span>          LOG.warn("Moved corrupted log " + corrupted + " to " + p);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>        }<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      }<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    }<a name="line.489"></a>
-<span class="sourceLineNo">490</span><a name="line.490"></a>
-<span class="sourceLineNo">491</span>    for (Path p : processedLogs) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      Path newPath = FSHLog.getWALArchivePath(oldLogDir, p);<a name="line.492"></a>
-<span class="sourceLineNo">493</span>      if (fs.exists(p)) {<a name="line.493"></a>
-<span class="sourceLineNo">494</span>        if (!FSUtils.renameAndSetModifyTime(fs, p, newPath)) {<a name="line.494"></a>
-<span class="sourceLineNo">495</span>          LOG.warn("Unable to move  " + p + " to " + newPath);<a name="line.495"></a>
-<span class="sourceLineNo">496</span>        } else {<a name="line.496"></a>
-<span class="sourceLineNo">497</span>          LOG.info("Archived processed log " + p + " to " + newPath);<a name="line.497"></a>
-<span class="sourceLineNo">498</span>        }<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      }<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><a name="line.502"></a>
-<span class="sourceLineNo">503</span>  /**<a name="line.503"></a>
-<span class="sourceLineNo">504</span>   * Path to a file under RECOVERED_EDITS_DIR directory of the region found in<a name="line.504"></a>
-<span class="sourceLineNo">505</span>   * &lt;code&gt;logEntry&lt;/code&gt; named for the sequenceid in the passed<a name="line.505"></a>
-<span class="sourceLineNo">506</span>   * &lt;code&gt;logEntry&lt;/code&gt;: e.g. /hbase/some_table/2323432434/recovered.edits/2332.<a name="line.506"></a>
-<span class="sourceLineNo">507</span>   * This method also ensures existence of RECOVERED_EDITS_DIR under the region<a name="line.507"></a>
-<span class="sourceLineNo">508</span>   * creating it if necessary.<a name="line.508"></a>
-<span class="sourceLineNo">509</span>   * @param fs<a name="line.509"></a>
-<span class="sourceLineNo">510</span>   * @param logEntry<a name="line.510"></a>
-<span class="sourceLineNo">511</span>   * @param rootDir HBase root dir.<a name="line.511"></a>
-<span class="sourceLineNo">512</span>   * @return Path to file into which to dump split log edits.<a name="line.512"></a>
-<span class="sourceLineNo">513</span>   * @throws IOException<a name="line.513"></a>
-<span class="sourceLineNo">514</span>   */<a name="line.514"></a>
-<span class="sourceLineNo">515</span>  @SuppressWarnings("deprecation")<a name="line.515"></a>
-<span class="sourceLineNo">516</span>  static Path getRegionSplitEditsPath(final FileSystem fs,<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      final Entry logEntry, final Path rootDir, boolean isCreate)<a name="line.517"></a>
-<span class="sourceLineNo">518</span>  throws IOException {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    Path tableDir = FSUtils.getTableDir(rootDir, logEntry.getKey().getTablename());<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    String encodedRegionName = Bytes.toString(logEntry.getKey().getEncodedRegionName());<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    Path regiondir = HRegion.getRegionDir(tableDir, encodedRegionName);<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    Path dir = getRegionDirRecoveredEditsDir(regiondir);<a name="line.522"></a>
-<span class="sourceLineNo">523</span><a name="line.523"></a>
-<span class="sourceLineNo">524</span>    if (!fs.exists(regiondir)) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      LOG.info("This region's directory doesn't exist: "<a name="line.525"></a>
-<span class="sourceLineNo">526</span>          + regiondir.toString() + ". It is very likely that it was" +<a name="line.526"></a>
-<span class="sourceLineNo">527</span>          " already split so it's safe to discard those edits.");<a name="line.527"></a>
-<span class="sourceLineNo">528</span>      return null;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    }<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    if (fs.exists(dir) &amp;&amp; fs.isFile(dir)) {<a name="line.530"></a>
-<span class="sourceLineNo">531</span>      Path tmp = new Path("/tmp");<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      if (!fs.exists(tmp)) {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>        fs.mkdirs(tmp);<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      }<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      tmp = new Path(tmp,<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        HConstants.RECOVERED_EDITS_DIR + "_" + encodedRegionName);<a name="line.536"></a>
-<span class="sourceLineNo">537</span>      LOG.warn("Found existing old file: " + dir + ". It could be some "<a name="line.537"></a>
-<span class="sourceLineNo">538</span>        + "leftover of an old installation. It should be a folder instead. "<a name="line.538"></a>
-<span class="sourceLineNo">539</span>        + "So moving it to " + tmp);<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      if (!fs.rename(dir, tmp)) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        LOG.warn("Failed to sideline old file " + dir);<a name="line.541"></a>
-<span class="sourceLineNo">542</span>      }<a name="line.542"></a>
-<span class="sourceLineNo">543</span>    }<a name="line.543"></a>
-<span class="sourceLineNo">544</span><a name="line.544"></a>
-<span class="sourceLineNo">545</span>    if (isCreate &amp;&amp; !fs.exists(dir)) {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>      if (!fs.mkdirs(dir)) LOG.warn("mkdir failed on " + dir);<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    }<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    // Append file name ends with RECOVERED_LOG_TMPFILE_SUFFIX to ensure<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    // region's replayRecoveredEdits will not delete it<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    String fileName = formatRecoveredEditsFileName(logEntry.getKey().getLogSeqNum());<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    fileName = getTmpRecoveredEditsFileName(fileName);<a name="line.551"></a>
-<span class="sourceLineNo">552</span>    return new Path(dir, fileName);<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>  static String getTmpRecoveredEditsFileName(String fileName) {<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    return fileName + RECOVERED_LOG_TMPFILE_SUFFIX;<a name="line.556"></a>
-<span class="sourceLineNo">557</span>  }<a name="line.557"></a>
-<span class="sourceLineNo">558</span><a name="line.558"></a>
-<span class="sourceLineNo">559</span>  /**<a name="line.559"></a>
-<span class="sourceLineNo">560</span>   * Get the completed recovered edits file path, renaming it to be by last edit<a name="line.560"></a>
-<span class="sourceLineNo">561</span>   * in the file from its first edit. Then we could use the name to skip<a name="line.561"></a>
-<span class="sourceLineNo">562</span>   * recovered edits when doing {@link HRegion#replayRecoveredEditsIfAny}.<a name="line.562"></a>
-<span class="sourceLineNo">563</span>   * @param srcPath<a name="line.563"></a>
-<span class="sourceLineNo">564</span>   * @param maximumEditLogSeqNum<a name="line.564"></a>
-<span class="sourceLineNo">565</span>   * @return dstPath take file's last edit log seq num as the name<a name="line.565"></a>
-<span class="sourceLineNo">566</span>   */<a name="line.566"></a>
-<span class="sourceLineNo">567</span>  static Path getCompletedRecoveredEditsFilePath(Path srcPath,<a name="line.567"></a>
-<span class="sourceLineNo">568</span>      Long maximumEditLogSeqNum) {<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    String fileName = formatRecoveredEditsFileName(maximumEditLogSeqNum);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    return new Path(srcPath.getParent(), fileName);<a name="line.570"></a>
-<span class="sourceLineNo">571</span>  }<a name="line.571"></a>
-<span class="sourceLineNo">572</span><a name="line.572"></a>
-<span class="sourceLineNo">573</span>  static String formatRecoveredEditsFileName(final long seqid) {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    return String.format("%019d", seqid);<a name="line.574"></a>
-<span class="sourceLineNo">575</span>  }<a name="line.575"></a>
-<span class="sourceLineNo">576</span><a name="line.576"></a>
-<span class="sourceLineNo">577</span>  private static final Pattern EDITFILES_NAME_PATTERN = Pattern.compile("-?[0-9]+");<a name="line.577"></a>
-<span class="sourceLineNo">578</span>  private static final String RECOVERED_LOG_TMPFILE_SUFFIX = ".temp";<a name="line.578"></a>
-<span class="sourceLineNo">579</span><a name="line.579"></a>
-<span class="sourceLineNo">580</span>  /**<a name="line.580"></a>
-<span class="sourceLineNo">581</span>   * @param regiondir<a name="line.581"></a>
-<span class="sourceLineNo">582</span>   *          This regions directory in the filesystem.<a name="line.582"></a>
-<span class="sourceLineNo">583</span>   * @return The directory that holds recovered edits files for the region<a name="line.583"></a>
-<span class="sourceLineNo">584</span>   *         &lt;code&gt;regiondir&lt;/code&gt;<a name="line.584"></a>
-<span class="sourceLineNo">585</span>   */<a name="line.585"></a>
-<span class="sourceLineNo">586</span>  public static Path getRegionDirRecoveredEditsDir(final Path regiondir) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    return new Path(regiondir, HConstants.RECOVERED_EDITS_DIR);<a name="line.587"></a>
-<span class="sourceLineNo">588</span>  }<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span>  /**<a name="line.590"></a>
-<span class="sourceLineNo">591</span>   * Returns sorted set of edit files made by splitter, excluding files<a name="line.591"></a>
-<span class="sourceLineNo">592</span>   * with '.temp' suffix.<a name="line.592"></a>
-<span class="sourceLineNo">593</span>   *<a name="line.593"></a>
-<span class="sourceLineNo">594</span>   * @param fs<a name="line.594"></a>
-<span class="sourceLineNo">595</span>   * @param regiondir<a name="line.595"></a>
-<span class="sourceLineNo">596</span>   * @return Files in passed &lt;code&gt;regiondir&lt;/code&gt; as a sorted set.<a name="line.596"></a>
-<span class="sourceLineNo">597</span>   * @throws IOException<a name="line.597"></a>
-<span class="sourceLineNo">598</span>   */<a name="line.598"></a>
-<span class="sourceLineNo">599</span>  public static NavigableSet&lt;Path&gt; getSplitEditFilesSorted(final FileSystem fs,<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      final Path regiondir) throws IOException {<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    NavigableSet&lt;Path&gt; filesSorted = new TreeSet&lt;Path&gt;();<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    Path editsdir = getRegionDirRecoveredEditsDir(regiondir);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    if (!fs.exists(editsdir))<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      return filesSorted;<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    FileStatus[] files = FSUtils.listStatus(fs, editsdir, new PathFilter() {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      @Override<a name="line.606"></a>
-<span class="sourceLineNo">607</span>      public boolean accept(Path p) {<a name="line.607"></a>
-<span class="sourceLineNo">608</span>        boolean result = false;<a name="line.608"></a>
-<span class="sourceLineNo">609</span>        try {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>          // Return files and only files that match the editfile names pattern.<a name="line.610"></a>
-<span class="sourceLineNo">611</span>          // There can be other files in this directory other than edit files.<a name="line.611"></a>
-<span class="sourceLineNo">612</span>          // In particular, on error, we'll move aside the bad edit file giving<a name="line.612"></a>
-<span class="sourceLineNo">613</span>          // it a timestamp suffix. See moveAsideBadEditsFile.<a name="line.613"></a>
-<span class="sourceLineNo">614</span>          Matcher m = EDITFILES_NAME_PATTERN.matcher(p.getName());<a name="line.614"></a>
-<span class="sourceLineNo">615</span>          result = fs.isFile(p) &amp;&amp; m.matches();<a name="line.615"></a>
-<span class="sourceLineNo">616</span>          // Skip the file whose name ends with RECOVERED_LOG_TMPFILE_SUFFIX,<a name="line.616"></a>
-<span class="sourceLineNo">617</span>          // because it means splitwal thread is writting this file.<a name="line.617"></a>
-<span class="sourceLineNo">618</span>          if (p.getName().endsWith(RECOVERED_LOG_TMPFILE_SUFFIX)) {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>            result = false;<a name="line.619"></a>
-<span class="sourceLineNo">620</span>          }<a name="line.620"></a>
-<span class="sourceLineNo">621</span>          // Skip SeqId Files<a name="line.621"></a>
-<span class="sourceLineNo">622</span>          if (isSequenceIdFile(p)) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span>            result = false;<a name="line.623"></a>
-<span class="sourceLineNo">624</span>          }<a name="line.624"></a>
-<span class="sourceLineNo">625</span>        } catch (IOException e) {<a name="line.625"></a>
-<span class="sourceLineNo">626</span>          LOG.warn("Failed isFile check on " + p);<a name="line.626"></a>
-<span class="sourceLineNo">627</span>        }<a name="line.627"></a>
-<span class="sourceLineNo">628</span>        return result;<a name="line.628"></a>
-<span class="sourceLineNo">629</span>      }<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    });<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    if (files == null) {<a name="line.631"></a>
-<span class="sourceLineNo">632</span>      return filesSorted;<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    }<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    for (FileStatus status : files) {<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      filesSorted.add(status.getPath());<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    }<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    return filesSorted;<a name="line.637"></a>
-<span class="sourceLineNo">638</span>  }<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>   * Move aside a bad edits file.<a name="line.641"></a>
-<span class="sourceLineNo">642</span>   *<a name="line.642"></a>
-<span class="sourceLineNo">643</span>   * @param fs<a name="line.643"></a>
-<span class="sourceLineNo">644</span>   * @param edits<a name="line.644"></a>
-<span class="sourceLineNo">645</span>   *          Edits file to move aside.<a name="line.645"></a>
-<span class="sourceLineNo">646</span>   * @return The name of the moved aside file.<a name="line.646"></a>
-<span class="sourceLineNo">647</span>   * @throws IOException<a name="line.647"></a>
-<span class="sourceLineNo">648</span>   */<a name="line.648"></a>
-<span class="sourceLineNo">649</span>  public static Path moveAsideBadEditsFile(final FileSystem fs, final Path edits)<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      throws IOException {<a name="line.650"></a>
-<span class="sourceLineNo">651</span>    Path moveAsideName = new Path(edits.getParent(), edits.getName() + "."<a name="line.651"></a>
-<span class="sourceLineNo">652</span>        + System.currentTimeMillis());<a name="line.652"></a>
-<span class="sourceLineNo">653</span>    if (!fs.rename(edits, moveAsideName)) {<a name="line.653"></a>
-<span class="sourceLineNo">654</span>      LOG.warn("Rename failed from " + edits + " to " + moveAsideName);<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    }<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    return moveAsideName;<a name="line.656"></a>
-<span class="sourceLineNo">657</span>  }<a name="line.657"></a>
-<span class="sourceLineNo">658</span><a name="line.658"></a>
-<span class="sourceLineNo">659</span>  private static final String SEQUENCE_ID_FILE_SUFFIX = ".seqid";<a name="line.659"></a>
-<span class="sourceLineNo">660</span>  private static final String OLD_SEQUENCE_ID_FILE_SUFFIX = "_seqid";<a name="line.660"></a>
-<span class="sourceLineNo">661</span>  private static final int SEQUENCE_ID_FILE_SUFFIX_LENGTH = SEQUENCE_ID_FILE_SUFFIX.length();<a name="line.661"></a>
-<span class="sourceLineNo">662</span><a name="line.662"></a>
-<span class="sourceLineNo">663</span>  /**<a name="line.663"></a>
-<span class="sourceLineNo">664</span>   * Is the given file a region open sequence id file.<a name="line.664"></a>
-<span class="sourceLineNo">665</span>   */<a name="line.665"></a>
-<span class="sourceLineNo">666</span>  @VisibleForTesting<a name="line.666"></a>
-<span class="sourceLineNo">667</span>  public static boolean isSequenceIdFile(final Path file) {<a name="line.667"></a>
-<span class="sourceLineNo">668</span>    return file.getName().endsWith(SEQUENCE_ID_FILE_SUFFIX)<a name="line.668"></a>
-<span class="sourceLineNo">669</span>        || file.getName().endsWith(OLD_SEQUENCE_ID_FILE_SUFFIX);<a name="line.669"></a>
-<span class="sourceLineNo">670</span>  }<a name="line.670"></a>
+<span class="sourceLineNo">346</span>            regionMaxSeqIdInStores.put(encodedRegionNameAsStr, maxSeqIdInStores);<a name="line.346"></a>
+<span class="sourceLineNo">347</span>            lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.347"></a>
+<span class="sourceLineNo">348</span>            if (LOG.isDebugEnabled()) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>              LOG.debug("DLS Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.349"></a>
+<span class="sourceLineNo">350</span>                  TextFormat.shortDebugString(ids));<a name="line.350"></a>
+<span class="sourceLineNo">351</span>            }<a name="line.351"></a>
+<span class="sourceLineNo">352</span>          }<a name="line.352"></a>
+<span class="sourceLineNo">353</span>          if (lastFlushedSequenceId == null) {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>            lastFlushedSequenceId = -1L;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>          }<a name="line.355"></a>
+<span class="sourceLineNo">356</span>          lastFlushedSequenceIds.put(encodedRegionNameAsStr, lastFlushedSequenceId);<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        }<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        if (lastFlushedSequenceId &gt;= entry.getKey().getSequenceId()) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>          editsSkipped++;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>          continue;<a name="line.360"></a>
+<span class="sourceLineNo">361</span>        }<a name="line.361"></a>
+<span class="sourceLineNo">362</span>        entryBuffers.appendEntry(entry);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        editsCount++;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>        int moreWritersFromLastCheck = this.getNumOpenWriters() - numOpenedFilesLastCheck;<a name="line.364"></a>
+<span class="sourceLineNo">365</span>        // If sufficient edits have passed, check if we should report progress.<a name="line.365"></a>
+<span class="sourceLineNo">366</span>        if (editsCount % interval == 0<a name="line.366"></a>
+<span class="sourceLineNo">367</span>            || moreWritersFromLastCheck &gt; numOpenedFilesBeforeReporting) {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>          numOpenedFilesLastCheck = this.getNumOpenWriters();<a name="line.368"></a>
+<span class="sourceLineNo">369</span>          String countsStr = (editsCount - (editsSkipped + outputSink.getSkippedEdits()))<a name="line.369"></a>
+<span class="sourceLineNo">370</span>              + " edits, skipped " + editsSkipped + " edits.";<a name="line.370"></a>
+<span class="sourceLineNo">371</span>          status.setStatus("Split " + countsStr);<a name="line.371"></a>
+<span class="sourceLineNo">372</span>          if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>            progress_failed = true;<a name="line.373"></a>
+<span class="sourceLineNo">374</span>            return false;<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>      }<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    } catch (InterruptedException ie) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      IOException iie = new InterruptedIOException();<a name="line.379"></a>
+<span class="sourceLineNo">380</span>      iie.initCause(ie);<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      throw iie;<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    } catch (CorruptedLogFileException e) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      LOG.warn("Could not parse, corrupted log file " + logPath, e);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      csm.getSplitLogWorkerCoordination().markCorrupted(rootDir,<a name="line.384"></a>
+<span class="sourceLineNo">385</span>        logfile.getPath().getName(), fs);<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      isCorrupted = true;<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    } catch (IOException e) {<a name="line.387"></a>
+<span class="sourceLineNo">388</span>      e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      throw e;<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    } finally {<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      LOG.debug("Finishing writing output logs and closing down.");<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      try {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>        if (null != in) {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>          in.close();<a name="line.394"></a>
+<span class="sourceLineNo">395</span>        }<a name="line.395"></a>
+<span class="sourceLineNo">396</span>      } catch (IOException exception) {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>        LOG.warn("Could not close wal reader: " + exception.getMessage());<a name="line.397"></a>
+<span class="sourceLineNo">398</span>        LOG.debug("exception details", exception);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      }<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      try {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>        if (outputSinkStarted) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>          // Set progress_failed to true as the immediate following statement will reset its value<a name="line.402"></a>
+<span class="sourceLineNo">403</span>          // when finishWritingAndClose() throws exception, progress_failed has the right value<a name="line.403"></a>
+<span class="sourceLineNo">404</span>          progress_failed = true;<a name="line.404"></a>
+<span class="sourceLineNo">405</span>          progress_failed = outputSink.finishWritingAndClose() == null;<a name="line.405"></a>
+<span class="sourceLineNo">406</span>        }<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      } finally {<a name="line.407"></a>
+<span class="sourceLineNo">408</span>        String msg =<a name="line.408"></a>
+<span class="sourceLineNo">409</span>            "Processed " + editsCount + " edits across " + outputSink.getNumberOfRecoveredRegions()<a name="line.409"></a>
+<span class="sourceLineNo">410</span>                + " regions; edits skipped=" + editsSkipped + "; log file=" + logPath +<a name="line.410"></a>
+<span class="sourceLineNo">411</span>                ", length=" + logfile.getLen() + // See if length got updated post lease recovery<a name="line.411"></a>
+<span class="sourceLineNo">412</span>                ", corrupted=" + isCorrupted + ", progress failed=" + progress_failed;<a name="line.412"></a>
+<span class="sourceLineNo">413</span>        LOG.info(msg);<a name="line.413"></a>
+<span class="sourceLineNo">414</span>        status.markComplete(msg);<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>    return !progress_failed;<a name="line.417"></a>
+<span class="sourceLineNo">418</span>  }<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>   * Completes the work done by splitLogFile by archiving logs<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   * &lt;p&gt;<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   * It is invoked by SplitLogManager once it knows that one of the<a name="line.423"></a>
+<span class="sourceLineNo">424</span>   * SplitLogWorkers have completed the splitLogFile() part. If the master<a name="line.424"></a>
+<span class="sourceLineNo">425</span>   * crashes then this function might get called multiple times.<a name="line.425"></a>
+<span class="sourceLineNo">426</span>   * &lt;p&gt;<a name="line.426"></a>
+<span class="sourceLineNo">427</span>   * @param logfile<a name="line.427"></a>
+<span class="sourceLineNo">428</span>   * @param conf<a name="line.428"></a>
+<span class="sourceLineNo">429</span>   * @throws IOException<a name="line.429"></a>
+<span class="sourceLineNo">430</span>   */<a name="line.430"></a>
+<span class="sourceLineNo">431</span>  public static void finishSplitLogFile(String logfile,<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      Configuration conf)  throws IOException {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    Path rootdir = FSUtils.getRootDir(conf);<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    Path oldLogDir = new Path(rootdir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.434"></a>
+<span class="sourceLineNo">435</span>    Path logPath;<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    if (FSUtils.isStartingWithPath(rootdir, logfile)) {<a name="line.436"></a>
+<span class="sourceLineNo">437</span>      logPath = new Path(logfile);<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    } else {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>      logPath = new Path(rootdir, logfile);<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    }<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    finishSplitLogFile(rootdir, oldLogDir, logPath, conf);<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>  private static void finishSplitLogFile(Path rootdir, Path oldLogDir,<a name="line.444"></a>
+<span class="sourceLineNo">445</span>      Path logPath, Configuration conf) throws IOException {<a name="line.445"></a>
+<span class="sourceLineNo">446</span>    List&lt;Path&gt; processedLogs = new ArrayList&lt;Path&gt;();<a name="line.446"></a>
+<span class="sourceLineNo">447</span>    List&lt;Path&gt; corruptedLogs = new ArrayList&lt;Path&gt;();<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    FileSystem fs;<a name="line.448"></a>
+<span class="sourceLineNo">449</span>    fs = rootdir.getFileSystem(conf);<a name="line.449"></a>
+<span class="sourceLineNo">450</span>    if (ZKSplitLog.isCorrupted(rootdir, logPath.getName(), fs)) {<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      corruptedLogs.add(logPath);<a name="line.451"></a>
+<span class="sourceLineNo">452</span>    } else {<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      processedLogs.add(logPath);<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    }<a name="line.454"></a>
+<span class="sourceLineNo">455</span>    archiveLogs(corruptedLogs, processedLogs, oldLogDir, fs, conf);<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    Path stagingDir = ZKSplitLog.getSplitLogDir(rootdir, logPath.getName());<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    fs.delete(stagingDir, true);<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>  /**<a name="line.460"></a>
+<span class="sourceLineNo">461</span>   * Moves processed logs to a oldLogDir after successful processing Moves<a name="line.461"></a>
+<span class="sourceLineNo">462</span>   * corrupted logs (any log that couldn't be successfully parsed to corruptDir<a name="line.462"></a>
+<span class="sourceLineNo">463</span>   * (.corrupt) for later investigation<a name="line.463"></a>
+<span class="sourceLineNo">464</span>   *<a name="line.464"></a>
+<span class="sourceLineNo">465</span>   * @param corruptedLogs<a name="line.465"></a>
+<span class="sourceLineNo">466</span>   * @param processedLogs<a name="line.466"></a>
+<span class="sourceLineNo">467</span>   * @param oldLogDir<a name="line.467"></a>
+<span class="sourceLineNo">468</span>   * @param fs<a name="line.468"></a>
+<span class="sourceLineNo">469</span>   * @param conf<a name="line.469"></a>
+<span class="sourceLineNo">470</span>   * @throws IOException<a name="line.470"></a>
+<span class="sourceLineNo">471</span>   */<a name="line.471"></a>
+<span class="sourceLineNo">472</span>  private static void archiveLogs(<a name="line.472"></a>
+<span class="sourceLineNo">473</span>      final List&lt;Path&gt; corruptedLogs,<a name="line.473"></a>
+<span class="sourceLineNo">474</span>      final List&lt;Path&gt; processedLogs, final Path oldLogDir,<a name="line.474"></a>
+<span class="sourceLineNo">475</span>      final FileSystem fs, final Configuration conf) throws IOException {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    final Path corruptDir = new Path(FSUtils.getRootDir(conf), conf.get(<a name="line.476"></a>
+<span class="sourceLineNo">477</span>        "hbase.regionserver.hlog.splitlog.corrupt.dir",  HConstants.CORRUPT_DIR_NAME));<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>    if (!fs.mkdirs(corruptDir)) {<a name="line.479"></a>
+<span class="sourceLineNo">480</span>      LOG.info("Unable to mkdir " + corruptDir);<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    }<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    fs.mkdirs(oldLogDir);<a name="line.482"></a>
+<span class="sourceLineNo">483</span><a name="line.483"></a>
+<span class="sourceLineNo">484</span>    // this method can get restarted or called multiple times for archiving<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    // the same log files.<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    for (Path corrupted : corruptedLogs) {<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      Path p = new Path(corruptDir, corrupted.getName());<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      if (fs.exists(corrupted)) {<a name="line.488"></a>
+<span class="sourceLineNo">489</span>        if (!fs.rename(corrupted, p)) {<a name="line.489"></a>
+<span class="sourceLineNo">490</span>          LOG.warn("Unable to move corrupted log " + corrupted + " to " + p);<a name="line.490"></a>
+<span class="sourceLineNo">491</span>        } else {<a name="line.491"></a>
+<span class="sourceLineNo">492</span>          LOG.warn("Moved corrupted log " + corrupted + " to " + p);<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>    }<a name="line.495"></a>
+<span class="sourceLineNo">496</span><a name="line.496"></a>
+<span class="sourceLineNo">497</span>    for (Path p : processedLogs) {<a name="line.497"></a>
+<span class="sourceLineNo">498</span>      Path newPath = FSHLog.getWALArchivePath(oldLogDir, p);<a name="line.498"></a>
+<span class="sourceLineNo">499</span>      if (fs.exists(p)) {<a name="line.499"></a>
+<span class="sourceLineNo">500</span>        if (!FSUtils.renameAndSetModifyTime(fs, p, newPath)) {<a name="line.500"></a>
+<span class="sourceLineNo">501</span>          LOG.warn("Unable to move  " + p + " to " + newPath);<a name="line.501"></a>
+<span class="sourceLineNo">502</span>        } else {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>          LOG.info("Archived processed log " + p + " to " + newPath);<a name="line.503"></a>
+<span class="sourceLineNo">504</span>        }<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      }<a name="line.505"></a>
+<span class="sourceLineNo">506</span>    }<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>  /**<a name="line.509"></a>
+<span class="sourceLineNo">510</span>   * Path to a file under RECOVERED_EDITS_DIR directory of the region found in<a name="line.510"></a>
+<span class="sourceLineNo">511</span>   * &lt;code&gt;logEntry&lt;/code&gt; named for the sequenceid in the passed<a name="line.511"></a>
+<span class="sourceLineNo">512</span>   * &lt;code&gt;logEntry&lt;/code&gt;: e.g. /hbase/some_table/2323432434/recovered.edits/2332.<a name="line.512"></a>
+<span class="sourceLineNo">513</span>   * This method also ensures existence of RECOVERED_EDITS_DIR under the region<a name="line.513"></a>
+<span class="sourceLineNo">514</span>   * creating it if necessary.<a name="line.514"></a>
+<span class="sourceLineNo">515</span>   * @param fs<a name="line.515"></a>
+<span class="sourceLineNo">516</span>   * @param logEntry<a name="line.516"></a>
+<span class="sourceLineNo">517</span>   * @param rootDir HBase root dir.<a name="line.517"></a>
+<span class="sourceLineNo">518</span>   * @param fileBeingSplit the file being split currently. Used to generate tmp file name.<a name="line.518"></a>
+<span class="sourceLineNo">519</span>   * @return Path to file into which to dump split log edits.<a name="line.519"></a>
+<span class="sourceLineNo">520</span>   * @throws IOException<a name="line.520"></a>
+<span class="sourceLineNo">521</span>   */<a name="line.521"></a>
+<span class="sourceLineNo">522</span>  @SuppressWarnings("deprecation")<a name="line.522"></a>
+<span class="sourceLineNo">523</span>  private static Path getRegionSplitEditsPath(final FileSystem fs,<a name="line.523"></a>
+<span class="sourceLineNo">524</span>      final Entry logEntry, final Path rootDir, FileStatus fileBeingSplit)<a name="line.524"></a>
+<span class="sourceLineNo">525</span>  throws IOException {<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    Path tableDir = FSUtils.getTableDir(rootDir, logEntry.getKey().getTablename());<a name="line.526"></a>
+<span class="sourceLineNo">527</span>    String encodedRegionName = Bytes.toString(logEntry.getKey().getEncodedRegionName());<a name="line.527"></a>
+<span class="sourceLineNo">528</span>    Path regiondir = HRegion.getRegionDir(tableDir, encodedRegionName);<a name="line.528"></a>
+<span class="sourceLineNo">529</span>    Path dir = getRegionDirRecoveredEditsDir(regiondir);<a name="line.529"></a>
+<span class="sourceLineNo">530</span><a name="line.530"></a>
+<span class="sourceLineNo">531</span>    if (!fs.exists(regiondir)) {<a name="line.531"></a>
+<span class="sourceLineNo">532</span>      LOG.info("This region's directory doesn't exist: "<a name="line.532"></a>
+<span class="sourceLineNo">533</span>          + regiondir.toString() + ". It is very likely that it was" +<a name="line.533"></a>
+<span class="sourceLineNo">534</span>          " already split so it's safe to discard those edits.");<a name="line.534"></a>
+<span class="sourceLineNo">535</span>      return null;<a name="line.535"></a>
+<span class="sourceLineNo">536</span>    }<a name="line.536"></a>
+<span class="sourceLineNo">537</span>    if (fs.exists(dir) &amp;&amp; fs.isFile(dir)) {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      Path tmp = new Path("/tmp");<a name="line.538"></a>
+<span class="sourceLineNo">539</span>      if (!fs.exists(tmp)) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span>        fs.mkdirs(tmp);<a name="line.540"></a>
+<span class="sourceLineNo">541</span>      }<a name="line.541"></a>
+<span class="sourceLineNo">542</span>      tmp = new Path(tmp,<a name="line.542"></a>
+<span class="sourceLineNo">543</span>        HConstants.RECOVERED_EDITS_DIR + "_" + encodedRegionName);<a name="line.543"></a>
+<span class="sourceLineNo">544</span>      LOG.warn("Found existing old file: " + dir + ". It could be some "<a name="line.544"></a>
+<span class="sourceLineNo">545</span>        + "leftover of an old installation. It should be a folder instead. "<a name="line.545"></a>
+<span class="sourceLineNo">546</span>        + "So moving it to " + tmp);<a name="line.546"></a>
+<span class="sourceLineNo">547</span>      if (!fs.rename(dir, tmp)) {<a name="line.547"></a>
+<span class="sourceLineNo">548</span>        LOG.warn("Failed to sideline old file " + dir);<a name="line.548"></a>
+<span class="sourceLineNo">549</span>      }<a name="line.549"></a>
+<span class="sourceLineNo">550</span>    }<a name="line.550"></a>
+<span class="sourceLineNo">551</span><a name="line.551"></a>
+<span class="sourceLineNo">552</span>    if (!fs.exists(dir) &amp;

<TRUNCATED>

[25/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
index c9f2d82..04fbb3a 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
@@ -67,15 +67,15 @@
 <span class="sourceLineNo">059</span>  requiredArguments = {<a name="line.59"></a>
 <span class="sourceLineNo">060</span>    @org.jamon.annotations.Argument(name = "master", type = "HMaster")},<a name="line.60"></a>
 <span class="sourceLineNo">061</span>  optionalArguments = {<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    @org.jamon.annotations.Argument(name = "metaLocation", type = "ServerName"),<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    @org.jamon.annotations.Argument(name = "serverManager", type = "ServerManager"),<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    @org.jamon.annotations.Argument(name = "frags", type = "Map&lt;String,Integer&gt;"),<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    @org.jamon.annotations.Argument(name = "assignmentManager", type = "AssignmentManager"),<a name="line.65"></a>
+<span class="sourceLineNo">062</span>    @org.jamon.annotations.Argument(name = "frags", type = "Map&lt;String,Integer&gt;"),<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    @org.jamon.annotations.Argument(name = "servers", type = "List&lt;ServerName&gt;"),<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    @org.jamon.annotations.Argument(name = "metaLocation", type = "ServerName"),<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    @org.jamon.annotations.Argument(name = "deadServers", type = "Set&lt;ServerName&gt;"),<a name="line.65"></a>
 <span class="sourceLineNo">066</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    @org.jamon.annotations.Argument(name = "catalogJanitorEnabled", type = "boolean"),<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    @org.jamon.annotations.Argument(name = "deadServers", type = "Set&lt;ServerName&gt;"),<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    @org.jamon.annotations.Argument(name = "servers", type = "List&lt;ServerName&gt;")})<a name="line.70"></a>
+<span class="sourceLineNo">067</span>    @org.jamon.annotations.Argument(name = "serverManager", type = "ServerManager"),<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    @org.jamon.annotations.Argument(name = "assignmentManager", type = "AssignmentManager"),<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    @org.jamon.annotations.Argument(name = "catalogJanitorEnabled", type = "boolean")})<a name="line.70"></a>
 <span class="sourceLineNo">071</span>public class MasterStatusTmpl<a name="line.71"></a>
 <span class="sourceLineNo">072</span>  extends org.jamon.AbstractTemplateProxy<a name="line.72"></a>
 <span class="sourceLineNo">073</span>{<a name="line.73"></a>
@@ -116,74 +116,74 @@
 <span class="sourceLineNo">108</span>      return m_master;<a name="line.108"></a>
 <span class="sourceLineNo">109</span>    }<a name="line.109"></a>
 <span class="sourceLineNo">110</span>    private HMaster m_master;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    // 22, 1<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    public void setMetaLocation(ServerName metaLocation)<a name="line.112"></a>
+<span class="sourceLineNo">111</span>    // 21, 1<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    public void setFrags(Map&lt;String,Integer&gt; frags)<a name="line.112"></a>
 <span class="sourceLineNo">113</span>    {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>      // 22, 1<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      m_metaLocation = metaLocation;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      m_metaLocation__IsNotDefault = true;<a name="line.116"></a>
+<span class="sourceLineNo">114</span>      // 21, 1<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      m_frags = frags;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      m_frags__IsNotDefault = true;<a name="line.116"></a>
 <span class="sourceLineNo">117</span>    }<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    public ServerName getMetaLocation()<a name="line.118"></a>
+<span class="sourceLineNo">118</span>    public Map&lt;String,Integer&gt; getFrags()<a name="line.118"></a>
 <span class="sourceLineNo">119</span>    {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      return m_metaLocation;<a name="line.120"></a>
+<span class="sourceLineNo">120</span>      return m_frags;<a name="line.120"></a>
 <span class="sourceLineNo">121</span>    }<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    private ServerName m_metaLocation;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    public boolean getMetaLocation__IsNotDefault()<a name="line.123"></a>
+<span class="sourceLineNo">122</span>    private Map&lt;String,Integer&gt; m_frags;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    public boolean getFrags__IsNotDefault()<a name="line.123"></a>
 <span class="sourceLineNo">124</span>    {<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      return m_metaLocation__IsNotDefault;<a name="line.125"></a>
+<span class="sourceLineNo">125</span>      return m_frags__IsNotDefault;<a name="line.125"></a>
 <span class="sourceLineNo">126</span>    }<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    private boolean m_metaLocation__IsNotDefault;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    // 28, 1<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    public void setServerManager(ServerManager serverManager)<a name="line.129"></a>
+<span class="sourceLineNo">127</span>    private boolean m_frags__IsNotDefault;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    // 23, 1<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    public void setServers(List&lt;ServerName&gt; servers)<a name="line.129"></a>
 <span class="sourceLineNo">130</span>    {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      // 28, 1<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      m_serverManager = serverManager;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      m_serverManager__IsNotDefault = true;<a name="line.133"></a>
+<span class="sourceLineNo">131</span>      // 23, 1<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      m_servers = servers;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      m_servers__IsNotDefault = true;<a name="line.133"></a>
 <span class="sourceLineNo">134</span>    }<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    public ServerManager getServerManager()<a name="line.135"></a>
+<span class="sourceLineNo">135</span>    public List&lt;ServerName&gt; getServers()<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      return m_serverManager;<a name="line.137"></a>
+<span class="sourceLineNo">137</span>      return m_servers;<a name="line.137"></a>
 <span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    private ServerManager m_serverManager;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    public boolean getServerManager__IsNotDefault()<a name="line.140"></a>
+<span class="sourceLineNo">139</span>    private List&lt;ServerName&gt; m_servers;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    public boolean getServers__IsNotDefault()<a name="line.140"></a>
 <span class="sourceLineNo">141</span>    {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      return m_serverManager__IsNotDefault;<a name="line.142"></a>
+<span class="sourceLineNo">142</span>      return m_servers__IsNotDefault;<a name="line.142"></a>
 <span class="sourceLineNo">143</span>    }<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    private boolean m_serverManager__IsNotDefault;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    // 21, 1<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    public void setFrags(Map&lt;String,Integer&gt; frags)<a name="line.146"></a>
+<span class="sourceLineNo">144</span>    private boolean m_servers__IsNotDefault;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    // 22, 1<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    public void setMetaLocation(ServerName metaLocation)<a name="line.146"></a>
 <span class="sourceLineNo">147</span>    {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      // 21, 1<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      m_frags = frags;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      m_frags__IsNotDefault = true;<a name="line.150"></a>
+<span class="sourceLineNo">148</span>      // 22, 1<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      m_metaLocation = metaLocation;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      m_metaLocation__IsNotDefault = true;<a name="line.150"></a>
 <span class="sourceLineNo">151</span>    }<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    public Map&lt;String,Integer&gt; getFrags()<a name="line.152"></a>
+<span class="sourceLineNo">152</span>    public ServerName getMetaLocation()<a name="line.152"></a>
 <span class="sourceLineNo">153</span>    {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      return m_frags;<a name="line.154"></a>
+<span class="sourceLineNo">154</span>      return m_metaLocation;<a name="line.154"></a>
 <span class="sourceLineNo">155</span>    }<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    private Map&lt;String,Integer&gt; m_frags;<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    public boolean getFrags__IsNotDefault()<a name="line.157"></a>
+<span class="sourceLineNo">156</span>    private ServerName m_metaLocation;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    public boolean getMetaLocation__IsNotDefault()<a name="line.157"></a>
 <span class="sourceLineNo">158</span>    {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      return m_frags__IsNotDefault;<a name="line.159"></a>
+<span class="sourceLineNo">159</span>      return m_metaLocation__IsNotDefault;<a name="line.159"></a>
 <span class="sourceLineNo">160</span>    }<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    private boolean m_frags__IsNotDefault;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    // 29, 1<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    public void setAssignmentManager(AssignmentManager assignmentManager)<a name="line.163"></a>
+<span class="sourceLineNo">161</span>    private boolean m_metaLocation__IsNotDefault;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    // 24, 1<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    public void setDeadServers(Set&lt;ServerName&gt; deadServers)<a name="line.163"></a>
 <span class="sourceLineNo">164</span>    {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      // 29, 1<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      m_assignmentManager = assignmentManager;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      m_assignmentManager__IsNotDefault = true;<a name="line.167"></a>
+<span class="sourceLineNo">165</span>      // 24, 1<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      m_deadServers = deadServers;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      m_deadServers__IsNotDefault = true;<a name="line.167"></a>
 <span class="sourceLineNo">168</span>    }<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    public AssignmentManager getAssignmentManager()<a name="line.169"></a>
+<span class="sourceLineNo">169</span>    public Set&lt;ServerName&gt; getDeadServers()<a name="line.169"></a>
 <span class="sourceLineNo">170</span>    {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      return m_assignmentManager;<a name="line.171"></a>
+<span class="sourceLineNo">171</span>      return m_deadServers;<a name="line.171"></a>
 <span class="sourceLineNo">172</span>    }<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    private AssignmentManager m_assignmentManager;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    public boolean getAssignmentManager__IsNotDefault()<a name="line.174"></a>
+<span class="sourceLineNo">173</span>    private Set&lt;ServerName&gt; m_deadServers;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    public boolean getDeadServers__IsNotDefault()<a name="line.174"></a>
 <span class="sourceLineNo">175</span>    {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      return m_assignmentManager__IsNotDefault;<a name="line.176"></a>
+<span class="sourceLineNo">176</span>      return m_deadServers__IsNotDefault;<a name="line.176"></a>
 <span class="sourceLineNo">177</span>    }<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    private boolean m_assignmentManager__IsNotDefault;<a name="line.178"></a>
+<span class="sourceLineNo">178</span>    private boolean m_deadServers__IsNotDefault;<a name="line.178"></a>
 <span class="sourceLineNo">179</span>    // 27, 1<a name="line.179"></a>
 <span class="sourceLineNo">180</span>    public void setFormat(String format)<a name="line.180"></a>
 <span class="sourceLineNo">181</span>    {<a name="line.181"></a>
@@ -201,74 +201,74 @@
 <span class="sourceLineNo">193</span>      return m_format__IsNotDefault;<a name="line.193"></a>
 <span class="sourceLineNo">194</span>    }<a name="line.194"></a>
 <span class="sourceLineNo">195</span>    private boolean m_format__IsNotDefault;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    // 25, 1<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    public void setCatalogJanitorEnabled(boolean catalogJanitorEnabled)<a name="line.197"></a>
+<span class="sourceLineNo">196</span>    // 28, 1<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    public void setServerManager(ServerManager serverManager)<a name="line.197"></a>
 <span class="sourceLineNo">198</span>    {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      // 25, 1<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      m_catalogJanitorEnabled = catalogJanitorEnabled;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      m_catalogJanitorEnabled__IsNotDefault = true;<a name="line.201"></a>
+<span class="sourceLineNo">199</span>      // 28, 1<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      m_serverManager = serverManager;<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      m_serverManager__IsNotDefault = true;<a name="line.201"></a>
 <span class="sourceLineNo">202</span>    }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    public boolean getCatalogJanitorEnabled()<a name="line.203"></a>
+<span class="sourceLineNo">203</span>    public ServerManager getServerManager()<a name="line.203"></a>
 <span class="sourceLineNo">204</span>    {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      return m_catalogJanitorEnabled;<a name="line.205"></a>
+<span class="sourceLineNo">205</span>      return m_serverManager;<a name="line.205"></a>
 <span class="sourceLineNo">206</span>    }<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    private boolean m_catalogJanitorEnabled;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    public boolean getCatalogJanitorEnabled__IsNotDefault()<a name="line.208"></a>
+<span class="sourceLineNo">207</span>    private ServerManager m_serverManager;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    public boolean getServerManager__IsNotDefault()<a name="line.208"></a>
 <span class="sourceLineNo">209</span>    {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      return m_catalogJanitorEnabled__IsNotDefault;<a name="line.210"></a>
+<span class="sourceLineNo">210</span>      return m_serverManager__IsNotDefault;<a name="line.210"></a>
 <span class="sourceLineNo">211</span>    }<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    private boolean m_catalogJanitorEnabled__IsNotDefault;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    // 26, 1<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    public void setFilter(String filter)<a name="line.214"></a>
+<span class="sourceLineNo">212</span>    private boolean m_serverManager__IsNotDefault;<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    // 29, 1<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    public void setAssignmentManager(AssignmentManager assignmentManager)<a name="line.214"></a>
 <span class="sourceLineNo">215</span>    {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      // 26, 1<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      m_filter = filter;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      m_filter__IsNotDefault = true;<a name="line.218"></a>
+<span class="sourceLineNo">216</span>      // 29, 1<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      m_assignmentManager = assignmentManager;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      m_assignmentManager__IsNotDefault = true;<a name="line.218"></a>
 <span class="sourceLineNo">219</span>    }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    public String getFilter()<a name="line.220"></a>
+<span class="sourceLineNo">220</span>    public AssignmentManager getAssignmentManager()<a name="line.220"></a>
 <span class="sourceLineNo">221</span>    {<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      return m_filter;<a name="line.222"></a>
+<span class="sourceLineNo">222</span>      return m_assignmentManager;<a name="line.222"></a>
 <span class="sourceLineNo">223</span>    }<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    private String m_filter;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    public boolean getFilter__IsNotDefault()<a name="line.225"></a>
+<span class="sourceLineNo">224</span>    private AssignmentManager m_assignmentManager;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    public boolean getAssignmentManager__IsNotDefault()<a name="line.225"></a>
 <span class="sourceLineNo">226</span>    {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      return m_filter__IsNotDefault;<a name="line.227"></a>
+<span class="sourceLineNo">227</span>      return m_assignmentManager__IsNotDefault;<a name="line.227"></a>
 <span class="sourceLineNo">228</span>    }<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    private boolean m_filter__IsNotDefault;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    // 24, 1<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    public void setDeadServers(Set&lt;ServerName&gt; deadServers)<a name="line.231"></a>
+<span class="sourceLineNo">229</span>    private boolean m_assignmentManager__IsNotDefault;<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    // 26, 1<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    public void setFilter(String filter)<a name="line.231"></a>
 <span class="sourceLineNo">232</span>    {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      // 24, 1<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      m_deadServers = deadServers;<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      m_deadServers__IsNotDefault = true;<a name="line.235"></a>
+<span class="sourceLineNo">233</span>      // 26, 1<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      m_filter = filter;<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      m_filter__IsNotDefault = true;<a name="line.235"></a>
 <span class="sourceLineNo">236</span>    }<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    public Set&lt;ServerName&gt; getDeadServers()<a name="line.237"></a>
+<span class="sourceLineNo">237</span>    public String getFilter()<a name="line.237"></a>
 <span class="sourceLineNo">238</span>    {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      return m_deadServers;<a name="line.239"></a>
+<span class="sourceLineNo">239</span>      return m_filter;<a name="line.239"></a>
 <span class="sourceLineNo">240</span>    }<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    private Set&lt;ServerName&gt; m_deadServers;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    public boolean getDeadServers__IsNotDefault()<a name="line.242"></a>
+<span class="sourceLineNo">241</span>    private String m_filter;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    public boolean getFilter__IsNotDefault()<a name="line.242"></a>
 <span class="sourceLineNo">243</span>    {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      return m_deadServers__IsNotDefault;<a name="line.244"></a>
+<span class="sourceLineNo">244</span>      return m_filter__IsNotDefault;<a name="line.244"></a>
 <span class="sourceLineNo">245</span>    }<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    private boolean m_deadServers__IsNotDefault;<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    // 23, 1<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    public void setServers(List&lt;ServerName&gt; servers)<a name="line.248"></a>
+<span class="sourceLineNo">246</span>    private boolean m_filter__IsNotDefault;<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    // 25, 1<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    public void setCatalogJanitorEnabled(boolean catalogJanitorEnabled)<a name="line.248"></a>
 <span class="sourceLineNo">249</span>    {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      // 23, 1<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      m_servers = servers;<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      m_servers__IsNotDefault = true;<a name="line.252"></a>
+<span class="sourceLineNo">250</span>      // 25, 1<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      m_catalogJanitorEnabled = catalogJanitorEnabled;<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      m_catalogJanitorEnabled__IsNotDefault = true;<a name="line.252"></a>
 <span class="sourceLineNo">253</span>    }<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    public List&lt;ServerName&gt; getServers()<a name="line.254"></a>
+<span class="sourceLineNo">254</span>    public boolean getCatalogJanitorEnabled()<a name="line.254"></a>
 <span class="sourceLineNo">255</span>    {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      return m_servers;<a name="line.256"></a>
+<span class="sourceLineNo">256</span>      return m_catalogJanitorEnabled;<a name="line.256"></a>
 <span class="sourceLineNo">257</span>    }<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    private List&lt;ServerName&gt; m_servers;<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    public boolean getServers__IsNotDefault()<a name="line.259"></a>
+<span class="sourceLineNo">258</span>    private boolean m_catalogJanitorEnabled;<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    public boolean getCatalogJanitorEnabled__IsNotDefault()<a name="line.259"></a>
 <span class="sourceLineNo">260</span>    {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      return m_servers__IsNotDefault;<a name="line.261"></a>
+<span class="sourceLineNo">261</span>      return m_catalogJanitorEnabled__IsNotDefault;<a name="line.261"></a>
 <span class="sourceLineNo">262</span>    }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    private boolean m_servers__IsNotDefault;<a name="line.263"></a>
+<span class="sourceLineNo">263</span>    private boolean m_catalogJanitorEnabled__IsNotDefault;<a name="line.263"></a>
 <span class="sourceLineNo">264</span>  }<a name="line.264"></a>
 <span class="sourceLineNo">265</span>  @Override<a name="line.265"></a>
 <span class="sourceLineNo">266</span>  protected org.jamon.AbstractTemplateProxy.ImplData makeImplData()<a name="line.266"></a>
@@ -280,31 +280,31 @@
 <span class="sourceLineNo">272</span>    return (ImplData) super.getImplData();<a name="line.272"></a>
 <span class="sourceLineNo">273</span>  }<a name="line.273"></a>
 <span class="sourceLineNo">274</span>  <a name="line.274"></a>
-<span class="sourceLineNo">275</span>  protected ServerName metaLocation;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setMetaLocation(ServerName p_metaLocation)<a name="line.276"></a>
+<span class="sourceLineNo">275</span>  protected Map&lt;String,Integer&gt; frags;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map&lt;String,Integer&gt; p_frags)<a name="line.276"></a>
 <span class="sourceLineNo">277</span>  {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    (getImplData()).setMetaLocation(p_metaLocation);<a name="line.278"></a>
+<span class="sourceLineNo">278</span>    (getImplData()).setFrags(p_frags);<a name="line.278"></a>
 <span class="sourceLineNo">279</span>    return this;<a name="line.279"></a>
 <span class="sourceLineNo">280</span>  }<a name="line.280"></a>
 <span class="sourceLineNo">281</span>  <a name="line.281"></a>
-<span class="sourceLineNo">282</span>  protected ServerManager serverManager;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServerManager(ServerManager p_serverManager)<a name="line.283"></a>
+<span class="sourceLineNo">282</span>  protected List&lt;ServerName&gt; servers;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List&lt;ServerName&gt; p_servers)<a name="line.283"></a>
 <span class="sourceLineNo">284</span>  {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    (getImplData()).setServerManager(p_serverManager);<a name="line.285"></a>
+<span class="sourceLineNo">285</span>    (getImplData()).setServers(p_servers);<a name="line.285"></a>
 <span class="sourceLineNo">286</span>    return this;<a name="line.286"></a>
 <span class="sourceLineNo">287</span>  }<a name="line.287"></a>
 <span class="sourceLineNo">288</span>  <a name="line.288"></a>
-<span class="sourceLineNo">289</span>  protected Map&lt;String,Integer&gt; frags;<a name="line.289"></a>
-<span class="sourceLineNo">290</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map&lt;String,Integer&gt; p_frags)<a name="line.290"></a>
+<span class="sourceLineNo">289</span>  protected ServerName metaLocation;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setMetaLocation(ServerName p_metaLocation)<a name="line.290"></a>
 <span class="sourceLineNo">291</span>  {<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    (getImplData()).setFrags(p_frags);<a name="line.292"></a>
+<span class="sourceLineNo">292</span>    (getImplData()).setMetaLocation(p_metaLocation);<a name="line.292"></a>
 <span class="sourceLineNo">293</span>    return this;<a name="line.293"></a>
 <span class="sourceLineNo">294</span>  }<a name="line.294"></a>
 <span class="sourceLineNo">295</span>  <a name="line.295"></a>
-<span class="sourceLineNo">296</span>  protected AssignmentManager assignmentManager;<a name="line.296"></a>
-<span class="sourceLineNo">297</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setAssignmentManager(AssignmentManager p_assignmentManager)<a name="line.297"></a>
+<span class="sourceLineNo">296</span>  protected Set&lt;ServerName&gt; deadServers;<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setDeadServers(Set&lt;ServerName&gt; p_deadServers)<a name="line.297"></a>
 <span class="sourceLineNo">298</span>  {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    (getImplData()).setAssignmentManager(p_assignmentManager);<a name="line.299"></a>
+<span class="sourceLineNo">299</span>    (getImplData()).setDeadServers(p_deadServers);<a name="line.299"></a>
 <span class="sourceLineNo">300</span>    return this;<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>
@@ -315,31 +315,31 @@
 <span class="sourceLineNo">307</span>    return this;<a name="line.307"></a>
 <span class="sourceLineNo">308</span>  }<a name="line.308"></a>
 <span class="sourceLineNo">309</span>  <a name="line.309"></a>
-<span class="sourceLineNo">310</span>  protected boolean catalogJanitorEnabled;<a name="line.310"></a>
-<span class="sourceLineNo">311</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setCatalogJanitorEnabled(boolean p_catalogJanitorEnabled)<a name="line.311"></a>
+<span class="sourceLineNo">310</span>  protected ServerManager serverManager;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServerManager(ServerManager p_serverManager)<a name="line.311"></a>
 <span class="sourceLineNo">312</span>  {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    (getImplData()).setCatalogJanitorEnabled(p_catalogJanitorEnabled);<a name="line.313"></a>
+<span class="sourceLineNo">313</span>    (getImplData()).setServerManager(p_serverManager);<a name="line.313"></a>
 <span class="sourceLineNo">314</span>    return this;<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>  protected String filter;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFilter(String p_filter)<a name="line.318"></a>
+<span class="sourceLineNo">317</span>  protected AssignmentManager assignmentManager;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setAssignmentManager(AssignmentManager p_assignmentManager)<a name="line.318"></a>
 <span class="sourceLineNo">319</span>  {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    (getImplData()).setFilter(p_filter);<a name="line.320"></a>
+<span class="sourceLineNo">320</span>    (getImplData()).setAssignmentManager(p_assignmentManager);<a name="line.320"></a>
 <span class="sourceLineNo">321</span>    return this;<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>  protected Set&lt;ServerName&gt; deadServers;<a name="line.324"></a>
-<span class="sourceLineNo">325</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setDeadServers(Set&lt;ServerName&gt; p_deadServers)<a name="line.325"></a>
+<span class="sourceLineNo">324</span>  protected String filter;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFilter(String p_filter)<a name="line.325"></a>
 <span class="sourceLineNo">326</span>  {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    (getImplData()).setDeadServers(p_deadServers);<a name="line.327"></a>
+<span class="sourceLineNo">327</span>    (getImplData()).setFilter(p_filter);<a name="line.327"></a>
 <span class="sourceLineNo">328</span>    return this;<a name="line.328"></a>
 <span class="sourceLineNo">329</span>  }<a name="line.329"></a>
 <span class="sourceLineNo">330</span>  <a name="line.330"></a>
-<span class="sourceLineNo">331</span>  protected List&lt;ServerName&gt; servers;<a name="line.331"></a>
-<span class="sourceLineNo">332</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List&lt;ServerName&gt; p_servers)<a name="line.332"></a>
+<span class="sourceLineNo">331</span>  protected boolean catalogJanitorEnabled;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setCatalogJanitorEnabled(boolean p_catalogJanitorEnabled)<a name="line.332"></a>
 <span class="sourceLineNo">333</span>  {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    (getImplData()).setServers(p_servers);<a name="line.334"></a>
+<span class="sourceLineNo">334</span>    (getImplData()).setCatalogJanitorEnabled(p_catalogJanitorEnabled);<a name="line.334"></a>
 <span class="sourceLineNo">335</span>    return this;<a name="line.335"></a>
 <span class="sourceLineNo">336</span>  }<a name="line.336"></a>
 <span class="sourceLineNo">337</span>  <a name="line.337"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.Intf.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.Intf.html b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.Intf.html
index c9f2d82..04fbb3a 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.Intf.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.Intf.html
@@ -67,15 +67,15 @@
 <span class="sourceLineNo">059</span>  requiredArguments = {<a name="line.59"></a>
 <span class="sourceLineNo">060</span>    @org.jamon.annotations.Argument(name = "master", type = "HMaster")},<a name="line.60"></a>
 <span class="sourceLineNo">061</span>  optionalArguments = {<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    @org.jamon.annotations.Argument(name = "metaLocation", type = "ServerName"),<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    @org.jamon.annotations.Argument(name = "serverManager", type = "ServerManager"),<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    @org.jamon.annotations.Argument(name = "frags", type = "Map&lt;String,Integer&gt;"),<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    @org.jamon.annotations.Argument(name = "assignmentManager", type = "AssignmentManager"),<a name="line.65"></a>
+<span class="sourceLineNo">062</span>    @org.jamon.annotations.Argument(name = "frags", type = "Map&lt;String,Integer&gt;"),<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    @org.jamon.annotations.Argument(name = "servers", type = "List&lt;ServerName&gt;"),<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    @org.jamon.annotations.Argument(name = "metaLocation", type = "ServerName"),<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    @org.jamon.annotations.Argument(name = "deadServers", type = "Set&lt;ServerName&gt;"),<a name="line.65"></a>
 <span class="sourceLineNo">066</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    @org.jamon.annotations.Argument(name = "catalogJanitorEnabled", type = "boolean"),<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    @org.jamon.annotations.Argument(name = "deadServers", type = "Set&lt;ServerName&gt;"),<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    @org.jamon.annotations.Argument(name = "servers", type = "List&lt;ServerName&gt;")})<a name="line.70"></a>
+<span class="sourceLineNo">067</span>    @org.jamon.annotations.Argument(name = "serverManager", type = "ServerManager"),<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    @org.jamon.annotations.Argument(name = "assignmentManager", type = "AssignmentManager"),<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    @org.jamon.annotations.Argument(name = "catalogJanitorEnabled", type = "boolean")})<a name="line.70"></a>
 <span class="sourceLineNo">071</span>public class MasterStatusTmpl<a name="line.71"></a>
 <span class="sourceLineNo">072</span>  extends org.jamon.AbstractTemplateProxy<a name="line.72"></a>
 <span class="sourceLineNo">073</span>{<a name="line.73"></a>
@@ -116,74 +116,74 @@
 <span class="sourceLineNo">108</span>      return m_master;<a name="line.108"></a>
 <span class="sourceLineNo">109</span>    }<a name="line.109"></a>
 <span class="sourceLineNo">110</span>    private HMaster m_master;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    // 22, 1<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    public void setMetaLocation(ServerName metaLocation)<a name="line.112"></a>
+<span class="sourceLineNo">111</span>    // 21, 1<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    public void setFrags(Map&lt;String,Integer&gt; frags)<a name="line.112"></a>
 <span class="sourceLineNo">113</span>    {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>      // 22, 1<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      m_metaLocation = metaLocation;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      m_metaLocation__IsNotDefault = true;<a name="line.116"></a>
+<span class="sourceLineNo">114</span>      // 21, 1<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      m_frags = frags;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      m_frags__IsNotDefault = true;<a name="line.116"></a>
 <span class="sourceLineNo">117</span>    }<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    public ServerName getMetaLocation()<a name="line.118"></a>
+<span class="sourceLineNo">118</span>    public Map&lt;String,Integer&gt; getFrags()<a name="line.118"></a>
 <span class="sourceLineNo">119</span>    {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      return m_metaLocation;<a name="line.120"></a>
+<span class="sourceLineNo">120</span>      return m_frags;<a name="line.120"></a>
 <span class="sourceLineNo">121</span>    }<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    private ServerName m_metaLocation;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    public boolean getMetaLocation__IsNotDefault()<a name="line.123"></a>
+<span class="sourceLineNo">122</span>    private Map&lt;String,Integer&gt; m_frags;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    public boolean getFrags__IsNotDefault()<a name="line.123"></a>
 <span class="sourceLineNo">124</span>    {<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      return m_metaLocation__IsNotDefault;<a name="line.125"></a>
+<span class="sourceLineNo">125</span>      return m_frags__IsNotDefault;<a name="line.125"></a>
 <span class="sourceLineNo">126</span>    }<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    private boolean m_metaLocation__IsNotDefault;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    // 28, 1<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    public void setServerManager(ServerManager serverManager)<a name="line.129"></a>
+<span class="sourceLineNo">127</span>    private boolean m_frags__IsNotDefault;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    // 23, 1<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    public void setServers(List&lt;ServerName&gt; servers)<a name="line.129"></a>
 <span class="sourceLineNo">130</span>    {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      // 28, 1<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      m_serverManager = serverManager;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      m_serverManager__IsNotDefault = true;<a name="line.133"></a>
+<span class="sourceLineNo">131</span>      // 23, 1<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      m_servers = servers;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      m_servers__IsNotDefault = true;<a name="line.133"></a>
 <span class="sourceLineNo">134</span>    }<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    public ServerManager getServerManager()<a name="line.135"></a>
+<span class="sourceLineNo">135</span>    public List&lt;ServerName&gt; getServers()<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      return m_serverManager;<a name="line.137"></a>
+<span class="sourceLineNo">137</span>      return m_servers;<a name="line.137"></a>
 <span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    private ServerManager m_serverManager;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    public boolean getServerManager__IsNotDefault()<a name="line.140"></a>
+<span class="sourceLineNo">139</span>    private List&lt;ServerName&gt; m_servers;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    public boolean getServers__IsNotDefault()<a name="line.140"></a>
 <span class="sourceLineNo">141</span>    {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      return m_serverManager__IsNotDefault;<a name="line.142"></a>
+<span class="sourceLineNo">142</span>      return m_servers__IsNotDefault;<a name="line.142"></a>
 <span class="sourceLineNo">143</span>    }<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    private boolean m_serverManager__IsNotDefault;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    // 21, 1<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    public void setFrags(Map&lt;String,Integer&gt; frags)<a name="line.146"></a>
+<span class="sourceLineNo">144</span>    private boolean m_servers__IsNotDefault;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    // 22, 1<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    public void setMetaLocation(ServerName metaLocation)<a name="line.146"></a>
 <span class="sourceLineNo">147</span>    {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      // 21, 1<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      m_frags = frags;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      m_frags__IsNotDefault = true;<a name="line.150"></a>
+<span class="sourceLineNo">148</span>      // 22, 1<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      m_metaLocation = metaLocation;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      m_metaLocation__IsNotDefault = true;<a name="line.150"></a>
 <span class="sourceLineNo">151</span>    }<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    public Map&lt;String,Integer&gt; getFrags()<a name="line.152"></a>
+<span class="sourceLineNo">152</span>    public ServerName getMetaLocation()<a name="line.152"></a>
 <span class="sourceLineNo">153</span>    {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      return m_frags;<a name="line.154"></a>
+<span class="sourceLineNo">154</span>      return m_metaLocation;<a name="line.154"></a>
 <span class="sourceLineNo">155</span>    }<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    private Map&lt;String,Integer&gt; m_frags;<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    public boolean getFrags__IsNotDefault()<a name="line.157"></a>
+<span class="sourceLineNo">156</span>    private ServerName m_metaLocation;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    public boolean getMetaLocation__IsNotDefault()<a name="line.157"></a>
 <span class="sourceLineNo">158</span>    {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      return m_frags__IsNotDefault;<a name="line.159"></a>
+<span class="sourceLineNo">159</span>      return m_metaLocation__IsNotDefault;<a name="line.159"></a>
 <span class="sourceLineNo">160</span>    }<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    private boolean m_frags__IsNotDefault;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    // 29, 1<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    public void setAssignmentManager(AssignmentManager assignmentManager)<a name="line.163"></a>
+<span class="sourceLineNo">161</span>    private boolean m_metaLocation__IsNotDefault;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    // 24, 1<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    public void setDeadServers(Set&lt;ServerName&gt; deadServers)<a name="line.163"></a>
 <span class="sourceLineNo">164</span>    {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      // 29, 1<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      m_assignmentManager = assignmentManager;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      m_assignmentManager__IsNotDefault = true;<a name="line.167"></a>
+<span class="sourceLineNo">165</span>      // 24, 1<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      m_deadServers = deadServers;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      m_deadServers__IsNotDefault = true;<a name="line.167"></a>
 <span class="sourceLineNo">168</span>    }<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    public AssignmentManager getAssignmentManager()<a name="line.169"></a>
+<span class="sourceLineNo">169</span>    public Set&lt;ServerName&gt; getDeadServers()<a name="line.169"></a>
 <span class="sourceLineNo">170</span>    {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      return m_assignmentManager;<a name="line.171"></a>
+<span class="sourceLineNo">171</span>      return m_deadServers;<a name="line.171"></a>
 <span class="sourceLineNo">172</span>    }<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    private AssignmentManager m_assignmentManager;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    public boolean getAssignmentManager__IsNotDefault()<a name="line.174"></a>
+<span class="sourceLineNo">173</span>    private Set&lt;ServerName&gt; m_deadServers;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    public boolean getDeadServers__IsNotDefault()<a name="line.174"></a>
 <span class="sourceLineNo">175</span>    {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      return m_assignmentManager__IsNotDefault;<a name="line.176"></a>
+<span class="sourceLineNo">176</span>      return m_deadServers__IsNotDefault;<a name="line.176"></a>
 <span class="sourceLineNo">177</span>    }<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    private boolean m_assignmentManager__IsNotDefault;<a name="line.178"></a>
+<span class="sourceLineNo">178</span>    private boolean m_deadServers__IsNotDefault;<a name="line.178"></a>
 <span class="sourceLineNo">179</span>    // 27, 1<a name="line.179"></a>
 <span class="sourceLineNo">180</span>    public void setFormat(String format)<a name="line.180"></a>
 <span class="sourceLineNo">181</span>    {<a name="line.181"></a>
@@ -201,74 +201,74 @@
 <span class="sourceLineNo">193</span>      return m_format__IsNotDefault;<a name="line.193"></a>
 <span class="sourceLineNo">194</span>    }<a name="line.194"></a>
 <span class="sourceLineNo">195</span>    private boolean m_format__IsNotDefault;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    // 25, 1<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    public void setCatalogJanitorEnabled(boolean catalogJanitorEnabled)<a name="line.197"></a>
+<span class="sourceLineNo">196</span>    // 28, 1<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    public void setServerManager(ServerManager serverManager)<a name="line.197"></a>
 <span class="sourceLineNo">198</span>    {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      // 25, 1<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      m_catalogJanitorEnabled = catalogJanitorEnabled;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      m_catalogJanitorEnabled__IsNotDefault = true;<a name="line.201"></a>
+<span class="sourceLineNo">199</span>      // 28, 1<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      m_serverManager = serverManager;<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      m_serverManager__IsNotDefault = true;<a name="line.201"></a>
 <span class="sourceLineNo">202</span>    }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    public boolean getCatalogJanitorEnabled()<a name="line.203"></a>
+<span class="sourceLineNo">203</span>    public ServerManager getServerManager()<a name="line.203"></a>
 <span class="sourceLineNo">204</span>    {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      return m_catalogJanitorEnabled;<a name="line.205"></a>
+<span class="sourceLineNo">205</span>      return m_serverManager;<a name="line.205"></a>
 <span class="sourceLineNo">206</span>    }<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    private boolean m_catalogJanitorEnabled;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    public boolean getCatalogJanitorEnabled__IsNotDefault()<a name="line.208"></a>
+<span class="sourceLineNo">207</span>    private ServerManager m_serverManager;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    public boolean getServerManager__IsNotDefault()<a name="line.208"></a>
 <span class="sourceLineNo">209</span>    {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      return m_catalogJanitorEnabled__IsNotDefault;<a name="line.210"></a>
+<span class="sourceLineNo">210</span>      return m_serverManager__IsNotDefault;<a name="line.210"></a>
 <span class="sourceLineNo">211</span>    }<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    private boolean m_catalogJanitorEnabled__IsNotDefault;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    // 26, 1<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    public void setFilter(String filter)<a name="line.214"></a>
+<span class="sourceLineNo">212</span>    private boolean m_serverManager__IsNotDefault;<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    // 29, 1<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    public void setAssignmentManager(AssignmentManager assignmentManager)<a name="line.214"></a>
 <span class="sourceLineNo">215</span>    {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      // 26, 1<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      m_filter = filter;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      m_filter__IsNotDefault = true;<a name="line.218"></a>
+<span class="sourceLineNo">216</span>      // 29, 1<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      m_assignmentManager = assignmentManager;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      m_assignmentManager__IsNotDefault = true;<a name="line.218"></a>
 <span class="sourceLineNo">219</span>    }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    public String getFilter()<a name="line.220"></a>
+<span class="sourceLineNo">220</span>    public AssignmentManager getAssignmentManager()<a name="line.220"></a>
 <span class="sourceLineNo">221</span>    {<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      return m_filter;<a name="line.222"></a>
+<span class="sourceLineNo">222</span>      return m_assignmentManager;<a name="line.222"></a>
 <span class="sourceLineNo">223</span>    }<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    private String m_filter;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    public boolean getFilter__IsNotDefault()<a name="line.225"></a>
+<span class="sourceLineNo">224</span>    private AssignmentManager m_assignmentManager;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    public boolean getAssignmentManager__IsNotDefault()<a name="line.225"></a>
 <span class="sourceLineNo">226</span>    {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      return m_filter__IsNotDefault;<a name="line.227"></a>
+<span class="sourceLineNo">227</span>      return m_assignmentManager__IsNotDefault;<a name="line.227"></a>
 <span class="sourceLineNo">228</span>    }<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    private boolean m_filter__IsNotDefault;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    // 24, 1<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    public void setDeadServers(Set&lt;ServerName&gt; deadServers)<a name="line.231"></a>
+<span class="sourceLineNo">229</span>    private boolean m_assignmentManager__IsNotDefault;<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    // 26, 1<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    public void setFilter(String filter)<a name="line.231"></a>
 <span class="sourceLineNo">232</span>    {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      // 24, 1<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      m_deadServers = deadServers;<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      m_deadServers__IsNotDefault = true;<a name="line.235"></a>
+<span class="sourceLineNo">233</span>      // 26, 1<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      m_filter = filter;<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      m_filter__IsNotDefault = true;<a name="line.235"></a>
 <span class="sourceLineNo">236</span>    }<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    public Set&lt;ServerName&gt; getDeadServers()<a name="line.237"></a>
+<span class="sourceLineNo">237</span>    public String getFilter()<a name="line.237"></a>
 <span class="sourceLineNo">238</span>    {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      return m_deadServers;<a name="line.239"></a>
+<span class="sourceLineNo">239</span>      return m_filter;<a name="line.239"></a>
 <span class="sourceLineNo">240</span>    }<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    private Set&lt;ServerName&gt; m_deadServers;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    public boolean getDeadServers__IsNotDefault()<a name="line.242"></a>
+<span class="sourceLineNo">241</span>    private String m_filter;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    public boolean getFilter__IsNotDefault()<a name="line.242"></a>
 <span class="sourceLineNo">243</span>    {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      return m_deadServers__IsNotDefault;<a name="line.244"></a>
+<span class="sourceLineNo">244</span>      return m_filter__IsNotDefault;<a name="line.244"></a>
 <span class="sourceLineNo">245</span>    }<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    private boolean m_deadServers__IsNotDefault;<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    // 23, 1<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    public void setServers(List&lt;ServerName&gt; servers)<a name="line.248"></a>
+<span class="sourceLineNo">246</span>    private boolean m_filter__IsNotDefault;<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    // 25, 1<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    public void setCatalogJanitorEnabled(boolean catalogJanitorEnabled)<a name="line.248"></a>
 <span class="sourceLineNo">249</span>    {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      // 23, 1<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      m_servers = servers;<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      m_servers__IsNotDefault = true;<a name="line.252"></a>
+<span class="sourceLineNo">250</span>      // 25, 1<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      m_catalogJanitorEnabled = catalogJanitorEnabled;<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      m_catalogJanitorEnabled__IsNotDefault = true;<a name="line.252"></a>
 <span class="sourceLineNo">253</span>    }<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    public List&lt;ServerName&gt; getServers()<a name="line.254"></a>
+<span class="sourceLineNo">254</span>    public boolean getCatalogJanitorEnabled()<a name="line.254"></a>
 <span class="sourceLineNo">255</span>    {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      return m_servers;<a name="line.256"></a>
+<span class="sourceLineNo">256</span>      return m_catalogJanitorEnabled;<a name="line.256"></a>
 <span class="sourceLineNo">257</span>    }<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    private List&lt;ServerName&gt; m_servers;<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    public boolean getServers__IsNotDefault()<a name="line.259"></a>
+<span class="sourceLineNo">258</span>    private boolean m_catalogJanitorEnabled;<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    public boolean getCatalogJanitorEnabled__IsNotDefault()<a name="line.259"></a>
 <span class="sourceLineNo">260</span>    {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      return m_servers__IsNotDefault;<a name="line.261"></a>
+<span class="sourceLineNo">261</span>      return m_catalogJanitorEnabled__IsNotDefault;<a name="line.261"></a>
 <span class="sourceLineNo">262</span>    }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    private boolean m_servers__IsNotDefault;<a name="line.263"></a>
+<span class="sourceLineNo">263</span>    private boolean m_catalogJanitorEnabled__IsNotDefault;<a name="line.263"></a>
 <span class="sourceLineNo">264</span>  }<a name="line.264"></a>
 <span class="sourceLineNo">265</span>  @Override<a name="line.265"></a>
 <span class="sourceLineNo">266</span>  protected org.jamon.AbstractTemplateProxy.ImplData makeImplData()<a name="line.266"></a>
@@ -280,31 +280,31 @@
 <span class="sourceLineNo">272</span>    return (ImplData) super.getImplData();<a name="line.272"></a>
 <span class="sourceLineNo">273</span>  }<a name="line.273"></a>
 <span class="sourceLineNo">274</span>  <a name="line.274"></a>
-<span class="sourceLineNo">275</span>  protected ServerName metaLocation;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setMetaLocation(ServerName p_metaLocation)<a name="line.276"></a>
+<span class="sourceLineNo">275</span>  protected Map&lt;String,Integer&gt; frags;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map&lt;String,Integer&gt; p_frags)<a name="line.276"></a>
 <span class="sourceLineNo">277</span>  {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    (getImplData()).setMetaLocation(p_metaLocation);<a name="line.278"></a>
+<span class="sourceLineNo">278</span>    (getImplData()).setFrags(p_frags);<a name="line.278"></a>
 <span class="sourceLineNo">279</span>    return this;<a name="line.279"></a>
 <span class="sourceLineNo">280</span>  }<a name="line.280"></a>
 <span class="sourceLineNo">281</span>  <a name="line.281"></a>
-<span class="sourceLineNo">282</span>  protected ServerManager serverManager;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServerManager(ServerManager p_serverManager)<a name="line.283"></a>
+<span class="sourceLineNo">282</span>  protected List&lt;ServerName&gt; servers;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List&lt;ServerName&gt; p_servers)<a name="line.283"></a>
 <span class="sourceLineNo">284</span>  {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    (getImplData()).setServerManager(p_serverManager);<a name="line.285"></a>
+<span class="sourceLineNo">285</span>    (getImplData()).setServers(p_servers);<a name="line.285"></a>
 <span class="sourceLineNo">286</span>    return this;<a name="line.286"></a>
 <span class="sourceLineNo">287</span>  }<a name="line.287"></a>
 <span class="sourceLineNo">288</span>  <a name="line.288"></a>
-<span class="sourceLineNo">289</span>  protected Map&lt;String,Integer&gt; frags;<a name="line.289"></a>
-<span class="sourceLineNo">290</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map&lt;String,Integer&gt; p_frags)<a name="line.290"></a>
+<span class="sourceLineNo">289</span>  protected ServerName metaLocation;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setMetaLocation(ServerName p_metaLocation)<a name="line.290"></a>
 <span class="sourceLineNo">291</span>  {<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    (getImplData()).setFrags(p_frags);<a name="line.292"></a>
+<span class="sourceLineNo">292</span>    (getImplData()).setMetaLocation(p_metaLocation);<a name="line.292"></a>
 <span class="sourceLineNo">293</span>    return this;<a name="line.293"></a>
 <span class="sourceLineNo">294</span>  }<a name="line.294"></a>
 <span class="sourceLineNo">295</span>  <a name="line.295"></a>
-<span class="sourceLineNo">296</span>  protected AssignmentManager assignmentManager;<a name="line.296"></a>
-<span class="sourceLineNo">297</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setAssignmentManager(AssignmentManager p_assignmentManager)<a name="line.297"></a>
+<span class="sourceLineNo">296</span>  protected Set&lt;ServerName&gt; deadServers;<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setDeadServers(Set&lt;ServerName&gt; p_deadServers)<a name="line.297"></a>
 <span class="sourceLineNo">298</span>  {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    (getImplData()).setAssignmentManager(p_assignmentManager);<a name="line.299"></a>
+<span class="sourceLineNo">299</span>    (getImplData()).setDeadServers(p_deadServers);<a name="line.299"></a>
 <span class="sourceLineNo">300</span>    return this;<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>
@@ -315,31 +315,31 @@
 <span class="sourceLineNo">307</span>    return this;<a name="line.307"></a>
 <span class="sourceLineNo">308</span>  }<a name="line.308"></a>
 <span class="sourceLineNo">309</span>  <a name="line.309"></a>
-<span class="sourceLineNo">310</span>  protected boolean catalogJanitorEnabled;<a name="line.310"></a>
-<span class="sourceLineNo">311</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setCatalogJanitorEnabled(boolean p_catalogJanitorEnabled)<a name="line.311"></a>
+<span class="sourceLineNo">310</span>  protected ServerManager serverManager;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServerManager(ServerManager p_serverManager)<a name="line.311"></a>
 <span class="sourceLineNo">312</span>  {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    (getImplData()).setCatalogJanitorEnabled(p_catalogJanitorEnabled);<a name="line.313"></a>
+<span class="sourceLineNo">313</span>    (getImplData()).setServerManager(p_serverManager);<a name="line.313"></a>
 <span class="sourceLineNo">314</span>    return this;<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>  protected String filter;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFilter(String p_filter)<a name="line.318"></a>
+<span class="sourceLineNo">317</span>  protected AssignmentManager assignmentManager;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setAssignmentManager(AssignmentManager p_assignmentManager)<a name="line.318"></a>
 <span class="sourceLineNo">319</span>  {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    (getImplData()).setFilter(p_filter);<a name="line.320"></a>
+<span class="sourceLineNo">320</span>    (getImplData()).setAssignmentManager(p_assignmentManager);<a name="line.320"></a>
 <span class="sourceLineNo">321</span>    return this;<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>  protected Set&lt;ServerName&gt; deadServers;<a name="line.324"></a>
-<span class="sourceLineNo">325</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setDeadServers(Set&lt;ServerName&gt; p_deadServers)<a name="line.325"></a>
+<span class="sourceLineNo">324</span>  protected String filter;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFilter(String p_filter)<a name="line.325"></a>
 <span class="sourceLineNo">326</span>  {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    (getImplData()).setDeadServers(p_deadServers);<a name="line.327"></a>
+<span class="sourceLineNo">327</span>    (getImplData()).setFilter(p_filter);<a name="line.327"></a>
 <span class="sourceLineNo">328</span>    return this;<a name="line.328"></a>
 <span class="sourceLineNo">329</span>  }<a name="line.329"></a>
 <span class="sourceLineNo">330</span>  <a name="line.330"></a>
-<span class="sourceLineNo">331</span>  protected List&lt;ServerName&gt; servers;<a name="line.331"></a>
-<span class="sourceLineNo">332</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List&lt;ServerName&gt; p_servers)<a name="line.332"></a>
+<span class="sourceLineNo">331</span>  protected boolean catalogJanitorEnabled;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setCatalogJanitorEnabled(boolean p_catalogJanitorEnabled)<a name="line.332"></a>
 <span class="sourceLineNo">333</span>  {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    (getImplData()).setServers(p_servers);<a name="line.334"></a>
+<span class="sourceLineNo">334</span>    (getImplData()).setCatalogJanitorEnabled(p_catalogJanitorEnabled);<a name="line.334"></a>
 <span class="sourceLineNo">335</span>    return this;<a name="line.335"></a>
 <span class="sourceLineNo">336</span>  }<a name="line.336"></a>
 <span class="sourceLineNo">337</span>  <a name="line.337"></a>


[46/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/checkstyle-aggregate.html
----------------------------------------------------------------------
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index 35e6ed0..ea7b704 100644
--- a/checkstyle-aggregate.html
+++ b/checkstyle-aggregate.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Checkstyle Results</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -283,7 +283,7 @@
 <td>1683</td>
 <td>0</td>
 <td>0</td>
-<td>12749</td></tr></table></div>
+<td>12747</td></tr></table></div>
 <div class="section">
 <h2><a name="Files"></a>Files</h2>
 <table border="0" class="table table-striped">
@@ -3556,7 +3556,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>211</td></tr>
+<td>210</td></tr>
 <tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HRegionFileSystem.java">org/apache/hadoop/hbase/regionserver/HRegionFileSystem.java</a></td>
 <td>0</td>
@@ -5851,7 +5851,7 @@
 <td><a href="#org.apache.hadoop.hbase.wal.WALSplitter.java">org/apache/hadoop/hbase/wal/WALSplitter.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>70</td></tr>
+<td>69</td></tr>
 <tr class="b">
 <td><a href="#org.apache.hadoop.hbase.zookeeper.ClusterStatusTracker.java">org/apache/hadoop/hbase/zookeeper/ClusterStatusTracker.java</a></td>
 <td>0</td>
@@ -6033,7 +6033,7 @@
 <tr class="a">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_blocks.html#NeedBraces">NeedBraces</a></td>
-<td>1788</td>
+<td>1786</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="b">
 <td>coding</td>
@@ -6124,12 +6124,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>767</td>
+<td>766</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="a">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_javadoc.html#NonEmptyAtclauseDescription">NonEmptyAtclauseDescription</a></td>
-<td>3399</td>
+<td>3400</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="b">
 <td>misc</td>
@@ -10463,25 +10463,25 @@
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ProcedureInfo.html#L180">180</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ProcedureInfo.html#L181">181</a></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' child have incorrect indentation level 7, expected level should be 6.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ProcedureInfo.html#L198">198</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ProcedureInfo.html#L199">199</a></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 8, expected level should be 6.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/ProcedureInfo.html#L202">202</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/ProcedureInfo.html#L203">203</a></td></tr>
 <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><a href="./xref/org/apache/hadoop/hbase/ProcedureInfo.html#L215">215</a></td></tr></table></div>
+<td><a href="./xref/org/apache/hadoop/hbase/ProcedureInfo.html#L216">216</a></td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.RegionLoad.java">org/apache/hadoop/hbase/RegionLoad.java</h3>
 <table border="0" class="table table-striped">
@@ -12098,25 +12098,25 @@
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/client/Append.html#L81">81</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/client/Append.html#L80">80</a></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><a href="./xref/org/apache/hadoop/hbase/client/Append.html#L96">96</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/client/Append.html#L95">95</a></td></tr>
 <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><a href="./xref/org/apache/hadoop/hbase/client/Append.html#L97">97</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/client/Append.html#L96">96</a></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><a href="./xref/org/apache/hadoop/hbase/client/Append.html#L118">118</a></td></tr></table></div>
+<td><a href="./xref/org/apache/hadoop/hbase/client/Append.html#L117">117</a></td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.AsyncProcess.java">org/apache/hadoop/hbase/client/AsyncProcess.java</h3>
 <table border="0" class="table table-striped">
@@ -14553,7 +14553,7 @@
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>JavadocTagContinuationIndentation</td>
+<td>NonEmptyAtclauseDescription</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><a href="./xref/org/apache/hadoop/hbase/client/HBaseAdmin.html#L1767">1767</a></td></tr>
 <tr class="a">
@@ -15260,7 +15260,7 @@
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/client/Increment.html#L82">82</a></td></tr></table></div>
+<td><a href="./xref/org/apache/hadoop/hbase/client/Increment.html#L79">79</a></td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.MasterCallable.java">org/apache/hadoop/hbase/client/MasterCallable.java</h3>
 <table border="0" class="table table-striped">
@@ -15764,79 +15764,79 @@
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/client/Mutation.html#L124">124</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/client/Mutation.html#L126">126</a></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><a href="./xref/org/apache/hadoop/hbase/client/Mutation.html#L125">125</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/client/Mutation.html#L127">127</a></td></tr>
 <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><a href="./xref/org/apache/hadoop/hbase/client/Mutation.html#L126">126</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/client/Mutation.html#L128">128</a></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><a href="./xref/org/apache/hadoop/hbase/client/Mutation.html#L127">127</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/client/Mutation.html#L129">129</a></td></tr>
 <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><a href="./xref/org/apache/hadoop/hbase/client/Mutation.html#L236">236</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/client/Mutation.html#L238">238</a></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><a href="./xref/org/apache/hadoop/hbase/client/Mutation.html#L330">330</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/client/Mutation.html#L332">332</a></td></tr>
 <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><a href="./xref/org/apache/hadoop/hbase/client/Mutation.html#L340">340</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/client/Mutation.html#L342">342</a></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><a href="./xref/org/apache/hadoop/hbase/client/Mutation.html#L344">344</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/client/Mutation.html#L346">346</a></td></tr>
 <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><a href="./xref/org/apache/hadoop/hbase/client/Mutation.html#L434">434</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/client/Mutation.html#L436">436</a></td></tr>
 <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><a href="./xref/org/apache/hadoop/hbase/client/Mutation.html#L466">466</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/client/Mutation.html#L485">485</a></td></tr>
 <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><a href="./xref/org/apache/hadoop/hbase/client/Mutation.html#L475">475</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/client/Mutation.html#L494">494</a></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><a href="./xref/org/apache/hadoop/hbase/client/Mutation.html#L476">476</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/client/Mutation.html#L495">495</a></td></tr>
 <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><a href="./xref/org/apache/hadoop/hbase/client/Mutation.html#L478">478</a></td></tr></table></div>
+<td><a href="./xref/org/apache/hadoop/hbase/client/Mutation.html#L497">497</a></td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.Operation.java">org/apache/hadoop/hbase/client/Operation.java</h3>
 <table border="0" class="table table-striped">
@@ -56747,479 +56747,473 @@
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L6975">6975</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7011">7011</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7009">7009</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7014">7014</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7012">7012</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7055">7055</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7053">7053</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7058">7058</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7056">7056</a></td></tr>
+<td>javadoc</td>
+<td>JavadocTagContinuationIndentation</td>
+<td>Line continuation have incorrect indentation level, expected level should be 2.</td>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7067">7067</a></td></tr>
 <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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7065">7065</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7092">7092</a></td></tr>
 <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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7090">7090</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7134">7134</a></td></tr>
 <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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7132">7132</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7135">7135</a></td></tr>
 <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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7133">7133</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7137">7137</a></td></tr>
 <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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7135">7135</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7203">7203</a></td></tr>
 <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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7201">7201</a></td></tr>
-<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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7605">7605</a></td></tr>
-<tr class="a">
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7607">7607</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7628">7628</a></td></tr>
-<tr class="b">
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7630">7630</a></td></tr>
+<tr class="a">
 <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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7629">7629</a></td></tr>
-<tr class="a">
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7631">7631</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7631">7631</a></td></tr>
-<tr class="b">
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7633">7633</a></td></tr>
+<tr class="a">
 <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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7632">7632</a></td></tr>
-<tr class="a">
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7634">7634</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7642">7642</a></td></tr>
-<tr class="b">
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7644">7644</a></td></tr>
+<tr class="a">
 <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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7643">7643</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7712">7712</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7645">7645</a></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>'case' child have incorrect indentation level 6, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7714">7714</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7715">7715</a></td></tr>
+<td>'if' have incorrect indentation level 8, expected level should be 10.</td>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7716">7716</a></td></tr>
 <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 10, expected level should be 12.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7715">7715</a></td></tr>
+<td>'if' child have incorrect indentation level 10, expected level should be 12.</td>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7717">7717</a></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 rcurly' have incorrect indentation level 8, expected level should be 10.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7716">7716</a></td></tr>
+<td>'method call' child have incorrect indentation level 10, expected level should be 12.</td>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7717">7717</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7717">7717</a></td></tr>
+<td>'if rcurly' have incorrect indentation level 8, expected level should be 10.</td>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7718">7718</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7718">7718</a></td></tr>
+<td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7719">7719</a></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>'case' child have incorrect indentation level 6, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7720">7720</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7721">7721</a></td></tr>
+<td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7722">7722</a></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>'case' child have incorrect indentation level 6, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7723">7723</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7724">7724</a></td></tr>
+<td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7725">7725</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7725">7725</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7726">7726</a></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>'case' child have incorrect indentation level 6, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7727">7727</a></td></tr>
 <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 8, expected level should be 10.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7727">7727</a></td></tr>
+<td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7729">7729</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7728">7728</a></td></tr>
+<td>'method call' child have incorrect indentation level 8, expected level should be 10.</td>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7729">7729</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7729">7729</a></td></tr>
+<td>'block' child have incorrect indentation level 8, expected level should be 10.</td>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7730">7730</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7731">7731</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7730">7730</a></td></tr></table></div>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegion.html#L7732">7732</a></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="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.conf.Configuration' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#L34">34</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#L111">111</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#L172">172</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#L250">250</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#L262">262</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#L275">275</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#L279">279</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#L300">300</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#L313">313</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#L353">353</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#L366">366</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#L371">371</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#L394">394</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#L438">438</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#L484">484</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#L488">488</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#L512">512</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#L526">526</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#L575">575</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#L577">577</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#L651">651</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#L675">675</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#L685">685</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#L687">687</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#L712">712</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#L739">739</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#L741">741</a></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 101).</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#L806">806</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#L957">957</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#L960">960</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#L970">970</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#L983">983</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#L984">984</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#L986">986</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#L996">996</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#L1011">1011</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#L1013">1013</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#L1023">1023</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#L1046">1046</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#L1047">1047</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#L1048">1048</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#L1051">1051</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html#L1066">1066</a></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>
@@ -57228,565 +57222,565 @@
 <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="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 'com.google.common.annotations.VisibleForTesting' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L185">185</a></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 'TEST_SKIP_REPORTING_TRANSITION' must be private and have accessor methods.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L214">214</a></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 'compactSplitThread' must be private and have accessor methods.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L263">263</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L499">499</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L500">500</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L501">501</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L509">509</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L511">511</a></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 101).</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L703">703</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L712">712</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L725">725</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L726">726</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L731">731</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L746">746</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L758">758</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L759">759</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L791">791</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L792">792</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L843">843</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
 <td>Method length is 222 lines (max allowed is 150).</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L916">916</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L1010">1010</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L1034">1034</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L1035">1035</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L1036">1036</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L1037">1037</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L1038">1038</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L1039">1039</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L1040">1040</a></td></tr>
-<tr class="b">
+<tr class="a">
 <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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L1053">1053</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L1066">1066</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L1145">1145</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L1267">1267</a></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 14, expected level should be 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L1309">1309</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L1533">1533</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L1567">1567</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L1573">1573</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L1611">1611</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L1645">1645</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L1653">1653</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L1755">1755</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L1756">1756</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L1757">1757</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L1758">1758</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L1759">1759</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L1760">1760</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L1796">1796</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L1809">1809</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L1955">1955</a></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 7, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L1955">1955</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L2184">2184</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L2185">2185</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L2186">2186</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L2187">2187</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L2188">2188</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L2189">2189</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L2190">2190</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L2209">2209</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L2225">2225</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L2233">2233</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L2315">2315</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L2330">2330</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L2416">2416</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L2421">2421</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L2508">2508</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L2509">2509</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L2703">2703</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L2704">2704</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L2740">2740</a></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>'member def type' have incorrect indentation level 5, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L2745">2745</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L2745">2745</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L2746">2746</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L2747">2747</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L2748">2748</a></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>'member def type' have incorrect indentation level 9, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L2748">2748</a></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 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L2749">2749</a></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 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L2750">2750</a></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 9, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L2751">2751</a></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 7, expected level should be 6.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L2752">2752</a></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 rcurly' have incorrect indentation level 5, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L2753">2753</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L2754">2754</a></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 rcurly' have incorrect indentation level 3, expected level should be 2.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L2755">2755</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L2900">2900</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L2927">2927</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L2941">2941</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L3049">3049</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L3071">3071</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L3144">3144</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L3166">3166</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L3167">3167</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L3209">3209</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L3210">3210</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServer.html#L3266">3266</a></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>
@@ -57795,25 +57789,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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServerCommandLine.html#L25">25</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HRegionServerCommandLine.html#L29">29</a></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>
@@ -57822,259 +57816,259 @@
 <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>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L192">192</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L195">195</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L196">196</a></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>'array initialization' child have incorrect indentation level 8, expected level should be 6.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L233">233</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L296">296</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L422">422</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L434">434</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L456">456</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L504">504</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L506">506</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L518">518</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L534">534</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L556">556</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L561">561</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L563">563</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L622">622</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L636">636</a></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 6, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L728">728</a></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 6, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L728">728</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L729">729</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L730">730</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L733">733</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L831">831</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L837">837</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L863">863</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L864">864</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L865">865</a></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 104).</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L1099">1099</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L1175">1175</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L1295">1295</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L1373">1373</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L1648">1648</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L1658">1658</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L1678">1678</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L1772">1772</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L1773">1773</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L2001">2001</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L2122">2122</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L2152">2152</a></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 11, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L2289">2289</a></td></tr>
-<tr class="b">
+<tr class="a">
 <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><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L2289">2289</a></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>
@@ -58083,19 +58077,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.HeapMemStoreLAB.java">org/apache/hadoop/hbase/regionserver/HeapMemStoreLAB.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.conf.Configuration' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HeapMemStoreLAB.html#L28">28</a></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>
@@ -58104,109 +58098,109 @@
 <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 'java.lang.management.ManagementFactory' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#L23">23</a></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 'com.google.common.annotations.VisibleForTesting' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#L41">41</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#L191">191</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#L192">192</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#L193">193</a></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 6, expected level should be 4.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#L194">194</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#L347">347</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#L348">348</a></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 8, expected level should be 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#L348">348</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#L349">349</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#L350">350</a></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><a href="./xref/org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html#L351">351</a></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

<TRUNCATED>

[19/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html
index 0597160..b444f46 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html
@@ -184,2145 +184,2183 @@
 <span class="sourceLineNo">176</span>  // Min batch size when replay WAL edits<a name="line.176"></a>
 <span class="sourceLineNo">177</span>  private final int minBatchSize;<a name="line.177"></a>
 <span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span>  WALSplitter(final WALFactory factory, Configuration conf, Path rootDir,<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      FileSystem fs, LastSequenceId idChecker,<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      CoordinatedStateManager csm, RecoveryMode mode) {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    this.conf = HBaseConfiguration.create(conf);<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    String codecClassName = conf<a name="line.183"></a>
-<span class="sourceLineNo">184</span>        .get(WALCellCodec.WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    this.conf.set(HConstants.RPC_CODEC_CONF_KEY, codecClassName);<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    this.rootDir = rootDir;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    this.fs = fs;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    this.sequenceIdChecker = idChecker;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    this.csm = (BaseCoordinatedStateManager)csm;<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    this.walFactory = factory;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    this.controller = new PipelineController();<a name="line.191"></a>
-<span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span>    entryBuffers = new EntryBuffers(controller,<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        this.conf.getInt("hbase.regionserver.hlog.splitlog.buffersize",<a name="line.194"></a>
-<span class="sourceLineNo">195</span>            128*1024*1024));<a name="line.195"></a>
+<span class="sourceLineNo">179</span>  // the file being split currently<a name="line.179"></a>
+<span class="sourceLineNo">180</span>  private FileStatus fileBeingSplit;<a name="line.180"></a>
+<span class="sourceLineNo">181</span><a name="line.181"></a>
+<span class="sourceLineNo">182</span>  @VisibleForTesting<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  WALSplitter(final WALFactory factory, Configuration conf, Path rootDir,<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      FileSystem fs, LastSequenceId idChecker,<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      CoordinatedStateManager csm, RecoveryMode mode) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    this.conf = HBaseConfiguration.create(conf);<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    String codecClassName = conf<a name="line.187"></a>
+<span class="sourceLineNo">188</span>        .get(WALCellCodec.WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    this.conf.set(HConstants.RPC_CODEC_CONF_KEY, codecClassName);<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    this.rootDir = rootDir;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    this.fs = fs;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    this.sequenceIdChecker = idChecker;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    this.csm = (BaseCoordinatedStateManager)csm;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    this.walFactory = factory;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    this.controller = new PipelineController();<a name="line.195"></a>
 <span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span>    // a larger minBatchSize may slow down recovery because replay writer has to wait for<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    // enough edits before replaying them<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    this.minBatchSize = this.conf.getInt("hbase.regionserver.wal.logreplay.batch.size", 64);<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    this.distributedLogReplay = (RecoveryMode.LOG_REPLAY == mode);<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>    this.numWriterThreads = this.conf.getInt("hbase.regionserver.hlog.splitlog.writer.threads", 3);<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    if (csm != null &amp;&amp; this.distributedLogReplay) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      outputSink = new LogReplayOutputSink(controller, entryBuffers, numWriterThreads);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    } else {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      if (this.distributedLogReplay) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        LOG.info("ZooKeeperWatcher is passed in as NULL so disable distrubitedLogRepaly.");<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      }<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      this.distributedLogReplay = false;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      outputSink = new LogRecoveredEditsOutputSink(controller, entryBuffers, numWriterThreads);<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>  }<a name="line.213"></a>
-<span class="sourceLineNo">214</span><a name="line.214"></a>
-<span class="sourceLineNo">215</span>  /**<a name="line.215"></a>
-<span class="sourceLineNo">216</span>   * Splits a WAL file into region's recovered-edits directory.<a name="line.216"></a>
-<span class="sourceLineNo">217</span>   * This is the main entry point for distributed log splitting from SplitLogWorker.<a name="line.217"></a>
-<span class="sourceLineNo">218</span>   * &lt;p&gt;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>   * If the log file has N regions then N recovered.edits files will be produced.<a name="line.219"></a>
-<span class="sourceLineNo">220</span>   * &lt;p&gt;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   * @param rootDir<a name="line.221"></a>
-<span class="sourceLineNo">222</span>   * @param logfile<a name="line.222"></a>
-<span class="sourceLineNo">223</span>   * @param fs<a name="line.223"></a>
-<span class="sourceLineNo">224</span>   * @param conf<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   * @param reporter<a name="line.225"></a>
-<span class="sourceLineNo">226</span>   * @param idChecker<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   * @param cp coordination state manager<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   * @return false if it is interrupted by the progress-able.<a name="line.228"></a>
-<span class="sourceLineNo">229</span>   * @throws IOException<a name="line.229"></a>
-<span class="sourceLineNo">230</span>   */<a name="line.230"></a>
-<span class="sourceLineNo">231</span>  public static boolean splitLogFile(Path rootDir, FileStatus logfile, FileSystem fs,<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      Configuration conf, CancelableProgressable reporter, LastSequenceId idChecker,<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      CoordinatedStateManager cp, RecoveryMode mode, final WALFactory factory) throws IOException {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, idChecker, cp, mode);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    return s.splitLogFile(logfile, reporter);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  }<a name="line.236"></a>
-<span class="sourceLineNo">237</span><a name="line.237"></a>
-<span class="sourceLineNo">238</span>  // A wrapper to split one log folder using the method used by distributed<a name="line.238"></a>
-<span class="sourceLineNo">239</span>  // log splitting. Used by tools and unit tests. It should be package private.<a name="line.239"></a>
-<span class="sourceLineNo">240</span>  // It is public only because TestWALObserver is in a different package,<a name="line.240"></a>
-<span class="sourceLineNo">241</span>  // which uses this method to do log splitting.<a name="line.241"></a>
-<span class="sourceLineNo">242</span>  @VisibleForTesting<a name="line.242"></a>
-<span class="sourceLineNo">243</span>  public static List&lt;Path&gt; split(Path rootDir, Path logDir, Path oldLogDir,<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      FileSystem fs, Configuration conf, final WALFactory factory) throws IOException {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    final FileStatus[] logfiles = SplitLogManager.getFileList(conf,<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        Collections.singletonList(logDir), null);<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    List&lt;Path&gt; splits = new ArrayList&lt;Path&gt;();<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    if (logfiles != null &amp;&amp; logfiles.length &gt; 0) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      for (FileStatus logfile: logfiles) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, null, null,<a name="line.250"></a>
-<span class="sourceLineNo">251</span>            RecoveryMode.LOG_SPLITTING);<a name="line.251"></a>
-<span class="sourceLineNo">252</span>        if (s.splitLogFile(logfile, null)) {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>          finishSplitLogFile(rootDir, oldLogDir, logfile.getPath(), conf);<a name="line.253"></a>
-<span class="sourceLineNo">254</span>          if (s.outputSink.splits != null) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>            splits.addAll(s.outputSink.splits);<a name="line.255"></a>
-<span class="sourceLineNo">256</span>          }<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        }<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      }<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    }<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    if (!fs.delete(logDir, true)) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      throw new IOException("Unable to delete src dir: " + logDir);<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    return splits;<a name="line.263"></a>
-<span class="sourceLineNo">264</span>  }<a name="line.264"></a>
-<span class="sourceLineNo">265</span><a name="line.265"></a>
-<span class="sourceLineNo">266</span>  /**<a name="line.266"></a>
-<span class="sourceLineNo">267</span>   * log splitting implementation, splits one log file.<a name="line.267"></a>
-<span class="sourceLineNo">268</span>   * @param logfile should be an actual log file.<a name="line.268"></a>
-<span class="sourceLineNo">269</span>   */<a name="line.269"></a>
-<span class="sourceLineNo">270</span>  boolean splitLogFile(FileStatus logfile, CancelableProgressable reporter) throws IOException {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    Preconditions.checkState(status == null);<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    Preconditions.checkArgument(logfile.isFile(),<a name="line.272"></a>
-<span class="sourceLineNo">273</span>        "passed in file status is for something other than a regular file.");<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    boolean isCorrupted = false;<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    boolean skipErrors = conf.getBoolean("hbase.hlog.split.skip.errors",<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      SPLIT_SKIP_ERRORS_DEFAULT);<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    int interval = conf.getInt("hbase.splitlog.report.interval.loglines", 1024);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    Path logPath = logfile.getPath();<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    boolean outputSinkStarted = false;<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    boolean progress_failed = false;<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    int editsCount = 0;<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    int editsSkipped = 0;<a name="line.282"></a>
-<span class="sourceLineNo">283</span><a name="line.283"></a>
-<span class="sourceLineNo">284</span>    status =<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        TaskMonitor.get().createStatus(<a name="line.285"></a>
-<span class="sourceLineNo">286</span>          "Splitting log file " + logfile.getPath() + "into a temporary staging area.");<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    Reader in = null;<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    try {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      long logLength = logfile.getLen();<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      LOG.info("Splitting wal: " + logPath + ", length=" + logLength);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      LOG.info("DistributedLogReplay = " + this.distributedLogReplay);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      status.setStatus("Opening log file");<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>        progress_failed = true;<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        return false;<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      }<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      try {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        in = getReader(logfile, skipErrors, reporter);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      } catch (CorruptedLogFileException e) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>        LOG.warn("Could not get reader, corrupted log file " + logPath, e);<a name="line.300"></a>
-<span class="sourceLineNo">301</span>        ZKSplitLog.markCorrupted(rootDir, logfile.getPath().getName(), fs);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>        isCorrupted = true;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      }<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      if (in == null) {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>        LOG.warn("Nothing to split in log file " + logPath);<a name="line.305"></a>
-<span class="sourceLineNo">306</span>        return true;<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      }<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      int numOpenedFilesBeforeReporting = conf.getInt("hbase.splitlog.report.openedfiles", 3);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      int numOpenedFilesLastCheck = 0;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      outputSink.setReporter(reporter);<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      outputSink.startWriterThreads();<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      outputSinkStarted = true;<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      Entry entry;<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      Long lastFlushedSequenceId = -1L;<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      ServerName serverName = DefaultWALProvider.getServerNameFromWALDirectoryName(logPath);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      failedServerName = (serverName == null) ? "" : serverName.getServerName();<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      while ((entry = getNextLogLine(in, logPath, skipErrors)) != null) {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>        byte[] region = entry.getKey().getEncodedRegionName();<a name="line.318"></a>
-<span class="sourceLineNo">319</span>        String encodedRegionNameAsStr = Bytes.toString(region);<a name="line.319"></a>
-<span class="sourceLineNo">320</span>        lastFlushedSequenceId = lastFlushedSequenceIds.get(encodedRegionNameAsStr);<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        if (lastFlushedSequenceId == null) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>          if (this.distributedLogReplay) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>            RegionStoreSequenceIds ids =<a name="line.323"></a>
-<span class="sourceLineNo">324</span>                csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.324"></a>
-<span class="sourceLineNo">325</span>                  encodedRegionNameAsStr);<a name="line.325"></a>
-<span class="sourceLineNo">326</span>            if (ids != null) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>              lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.327"></a>
-<span class="sourceLineNo">328</span>              if (LOG.isDebugEnabled()) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>                LOG.debug("DLR Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.329"></a>
-<span class="sourceLineNo">330</span>                  TextFormat.shortDebugString(ids));<a name="line.330"></a>
-<span class="sourceLineNo">331</span>              }<a name="line.331"></a>
-<span class="sourceLineNo">332</span>            }<a name="line.332"></a>
-<span class="sourceLineNo">333</span>          } else if (sequenceIdChecker != null) {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>            RegionStoreSequenceIds ids = sequenceIdChecker.getLastSequenceId(region);<a name="line.334"></a>
-<span class="sourceLineNo">335</span>            Map&lt;byte[], Long&gt; maxSeqIdInStores = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.335"></a>
-<span class="sourceLineNo">336</span>            for (StoreSequenceId storeSeqId : ids.getStoreSequenceIdList()) {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>              maxSeqIdInStores.put(storeSeqId.getFamilyName().toByteArray(),<a name="line.337"></a>
-<span class="sourceLineNo">338</span>                storeSeqId.getSequenceId());<a name="line.338"></a>
-<span class="sourceLineNo">339</span>            }<a name="line.339"></a>
-<span class="sourceLineNo">340</span>            regionMaxSeqIdInStores.put(encodedRegionNameAsStr, maxSeqIdInStores);<a name="line.340"></a>
-<span class="sourceLineNo">341</span>            lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.341"></a>
-<span class="sourceLineNo">342</span>            if (LOG.isDebugEnabled()) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>              LOG.debug("DLS Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.343"></a>
-<span class="sourceLineNo">344</span>                  TextFormat.shortDebugString(ids));<a name="line.344"></a>
+<span class="sourceLineNo">197</span>    entryBuffers = new EntryBuffers(controller,<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        this.conf.getInt("hbase.regionserver.hlog.splitlog.buffersize",<a name="line.198"></a>
+<span class="sourceLineNo">199</span>            128*1024*1024));<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>    // a larger minBatchSize may slow down recovery because replay writer has to wait for<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    // enough edits before replaying them<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    this.minBatchSize = this.conf.getInt("hbase.regionserver.wal.logreplay.batch.size", 64);<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    this.distributedLogReplay = (RecoveryMode.LOG_REPLAY == mode);<a name="line.204"></a>
+<span class="sourceLineNo">205</span><a name="line.205"></a>
+<span class="sourceLineNo">206</span>    this.numWriterThreads = this.conf.getInt("hbase.regionserver.hlog.splitlog.writer.threads", 3);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    if (csm != null &amp;&amp; this.distributedLogReplay) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      outputSink = new LogReplayOutputSink(controller, entryBuffers, numWriterThreads);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    } else {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      if (this.distributedLogReplay) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>        LOG.info("ZooKeeperWatcher is passed in as NULL so disable distrubitedLogRepaly.");<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      }<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      this.distributedLogReplay = false;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      outputSink = new LogRecoveredEditsOutputSink(controller, entryBuffers, numWriterThreads);<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    }<a name="line.215"></a>
+<span class="sourceLineNo">216</span><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>
+<span class="sourceLineNo">220</span>   * Splits a WAL file into region's recovered-edits directory.<a name="line.220"></a>
+<span class="sourceLineNo">221</span>   * This is the main entry point for distributed log splitting from SplitLogWorker.<a name="line.221"></a>
+<span class="sourceLineNo">222</span>   * &lt;p&gt;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>   * If the log file has N regions then N recovered.edits files will be produced.<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   * &lt;p&gt;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   * @param rootDir<a name="line.225"></a>
+<span class="sourceLineNo">226</span>   * @param logfile<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   * @param fs<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   * @param conf<a name="line.228"></a>
+<span class="sourceLineNo">229</span>   * @param reporter<a name="line.229"></a>
+<span class="sourceLineNo">230</span>   * @param idChecker<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   * @param cp coordination state manager<a name="line.231"></a>
+<span class="sourceLineNo">232</span>   * @return false if it is interrupted by the progress-able.<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   * @throws IOException<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   */<a name="line.234"></a>
+<span class="sourceLineNo">235</span>  public static boolean splitLogFile(Path rootDir, FileStatus logfile, FileSystem fs,<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      Configuration conf, CancelableProgressable reporter, LastSequenceId idChecker,<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      CoordinatedStateManager cp, RecoveryMode mode, final WALFactory factory) throws IOException {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, idChecker, cp, mode);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    return s.splitLogFile(logfile, reporter);<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>  // A wrapper to split one log folder using the method used by distributed<a name="line.242"></a>
+<span class="sourceLineNo">243</span>  // log splitting. Used by tools and unit tests. It should be package private.<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  // It is public only because TestWALObserver is in a different package,<a name="line.244"></a>
+<span class="sourceLineNo">245</span>  // which uses this method to do log splitting.<a name="line.245"></a>
+<span class="sourceLineNo">246</span>  @VisibleForTesting<a name="line.246"></a>
+<span class="sourceLineNo">247</span>  public static List&lt;Path&gt; split(Path rootDir, Path logDir, Path oldLogDir,<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      FileSystem fs, Configuration conf, final WALFactory factory) throws IOException {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    final FileStatus[] logfiles = SplitLogManager.getFileList(conf,<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        Collections.singletonList(logDir), null);<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    List&lt;Path&gt; splits = new ArrayList&lt;Path&gt;();<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    if (logfiles != null &amp;&amp; logfiles.length &gt; 0) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      for (FileStatus logfile: logfiles) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>        WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, null, null,<a name="line.254"></a>
+<span class="sourceLineNo">255</span>            RecoveryMode.LOG_SPLITTING);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>        if (s.splitLogFile(logfile, null)) {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>          finishSplitLogFile(rootDir, oldLogDir, logfile.getPath(), conf);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>          if (s.outputSink.splits != null) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>            splits.addAll(s.outputSink.splits);<a name="line.259"></a>
+<span class="sourceLineNo">260</span>          }<a name="line.260"></a>
+<span class="sourceLineNo">261</span>        }<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      }<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    }<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    if (!fs.delete(logDir, true)) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      throw new IOException("Unable to delete src dir: " + logDir);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    }<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    return splits;<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  }<a name="line.268"></a>
+<span class="sourceLineNo">269</span><a name="line.269"></a>
+<span class="sourceLineNo">270</span>  /**<a name="line.270"></a>
+<span class="sourceLineNo">271</span>   * log splitting implementation, splits one log file.<a name="line.271"></a>
+<span class="sourceLineNo">272</span>   * @param logfile should be an actual log file.<a name="line.272"></a>
+<span class="sourceLineNo">273</span>   */<a name="line.273"></a>
+<span class="sourceLineNo">274</span>  @VisibleForTesting<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  boolean splitLogFile(FileStatus logfile, CancelableProgressable reporter) throws IOException {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    Preconditions.checkState(status == null);<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    Preconditions.checkArgument(logfile.isFile(),<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        "passed in file status is for something other than a regular file.");<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    boolean isCorrupted = false;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    boolean skipErrors = conf.getBoolean("hbase.hlog.split.skip.errors",<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      SPLIT_SKIP_ERRORS_DEFAULT);<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    int interval = conf.getInt("hbase.splitlog.report.interval.loglines", 1024);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    Path logPath = logfile.getPath();<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    boolean outputSinkStarted = false;<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    boolean progress_failed = false;<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    int editsCount = 0;<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    int editsSkipped = 0;<a name="line.287"></a>
+<span class="sourceLineNo">288</span><a name="line.288"></a>
+<span class="sourceLineNo">289</span>    status =<a name="line.289"></a>
+<span class="sourceLineNo">290</span>        TaskMonitor.get().createStatus(<a name="line.290"></a>
+<span class="sourceLineNo">291</span>          "Splitting log file " + logfile.getPath() + "into a temporary staging area.");<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    Reader in = null;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    this.fileBeingSplit = logfile;<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    try {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      long logLength = logfile.getLen();<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      LOG.info("Splitting wal: " + logPath + ", length=" + logLength);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      LOG.info("DistributedLogReplay = " + this.distributedLogReplay);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      status.setStatus("Opening log file");<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>        progress_failed = true;<a name="line.300"></a>
+<span class="sourceLineNo">301</span>        return false;<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      }<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      try {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>        in = getReader(logfile, skipErrors, reporter);<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      } catch (CorruptedLogFileException e) {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>        LOG.warn("Could not get reader, corrupted log file " + logPath, e);<a name="line.306"></a>
+<span class="sourceLineNo">307</span>        ZKSplitLog.markCorrupted(rootDir, logfile.getPath().getName(), fs);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>        isCorrupted = true;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      }<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      if (in == null) {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        LOG.warn("Nothing to split in log file " + logPath);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        return true;<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      }<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      int numOpenedFilesBeforeReporting = conf.getInt("hbase.splitlog.report.openedfiles", 3);<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      int numOpenedFilesLastCheck = 0;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      outputSink.setReporter(reporter);<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      outputSink.startWriterThreads();<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      outputSinkStarted = true;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      Entry entry;<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      Long lastFlushedSequenceId = -1L;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      ServerName serverName = DefaultWALProvider.getServerNameFromWALDirectoryName(logPath);<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      failedServerName = (serverName == null) ? "" : serverName.getServerName();<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      while ((entry = getNextLogLine(in, logPath, skipErrors)) != null) {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>        byte[] region = entry.getKey().getEncodedRegionName();<a name="line.324"></a>
+<span class="sourceLineNo">325</span>        String encodedRegionNameAsStr = Bytes.toString(region);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>        lastFlushedSequenceId = lastFlushedSequenceIds.get(encodedRegionNameAsStr);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>        if (lastFlushedSequenceId == null) {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>          if (this.distributedLogReplay) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>            RegionStoreSequenceIds ids =<a name="line.329"></a>
+<span class="sourceLineNo">330</span>                csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.330"></a>
+<span class="sourceLineNo">331</span>                  encodedRegionNameAsStr);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>            if (ids != null) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span>              lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.333"></a>
+<span class="sourceLineNo">334</span>              if (LOG.isDebugEnabled()) {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>                LOG.debug("DLR Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.335"></a>
+<span class="sourceLineNo">336</span>                  TextFormat.shortDebugString(ids));<a name="line.336"></a>
+<span class="sourceLineNo">337</span>              }<a name="line.337"></a>
+<span class="sourceLineNo">338</span>            }<a name="line.338"></a>
+<span class="sourceLineNo">339</span>          } else if (sequenceIdChecker != null) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>            RegionStoreSequenceIds ids = sequenceIdChecker.getLastSequenceId(region);<a name="line.340"></a>
+<span class="sourceLineNo">341</span>            Map&lt;byte[], Long&gt; maxSeqIdInStores = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.341"></a>
+<span class="sourceLineNo">342</span>            for (StoreSequenceId storeSeqId : ids.getStoreSequenceIdList()) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>              maxSeqIdInStores.put(storeSeqId.getFamilyName().toByteArray(),<a name="line.343"></a>
+<span class="sourceLineNo">344</span>                storeSeqId.getSequenceId());<a name="line.344"></a>
 <span class="sourceLineNo">345</span>            }<a name="line.345"></a>
-<span class="sourceLineNo">346</span>          }<a name="line.346"></a>
-<span class="sourceLineNo">347</span>          if (lastFlushedSequenceId == null) {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>            lastFlushedSequenceId = -1L;<a name="line.348"></a>
-<span class="sourceLineNo">349</span>          }<a name="line.349"></a>
-<span class="sourceLineNo">350</span>          lastFlushedSequenceIds.put(encodedRegionNameAsStr, lastFlushedSequenceId);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        }<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        if (lastFlushedSequenceId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>          editsSkipped++;<a name="line.353"></a>
-<span class="sourceLineNo">354</span>          continue;<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        }<a name="line.355"></a>
-<span class="sourceLineNo">356</span>        entryBuffers.appendEntry(entry);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        editsCount++;<a name="line.357"></a>
-<span class="sourceLineNo">358</span>        int moreWritersFromLastCheck = this.getNumOpenWriters() - numOpenedFilesLastCheck;<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        // If sufficient edits have passed, check if we should report progress.<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        if (editsCount % interval == 0<a name="line.360"></a>
-<span class="sourceLineNo">361</span>            || moreWritersFromLastCheck &gt; numOpenedFilesBeforeReporting) {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>          numOpenedFilesLastCheck = this.getNumOpenWriters();<a name="line.362"></a>
-<span class="sourceLineNo">363</span>          String countsStr = (editsCount - (editsSkipped + outputSink.getSkippedEdits()))<a name="line.363"></a>
-<span class="sourceLineNo">364</span>              + " edits, skipped " + editsSkipped + " edits.";<a name="line.364"></a>
-<span class="sourceLineNo">365</span>          status.setStatus("Split " + countsStr);<a name="line.365"></a>
-<span class="sourceLineNo">366</span>          if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>            progress_failed = true;<a name="line.367"></a>
-<span class="sourceLineNo">368</span>            return false;<a name="line.368"></a>
-<span class="sourceLineNo">369</span>          }<a name="line.369"></a>
-<span class="sourceLineNo">370</span>        }<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      }<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    } catch (InterruptedException ie) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      IOException iie = new InterruptedIOException();<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      iie.initCause(ie);<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      throw iie;<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    } catch (CorruptedLogFileException e) {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      LOG.warn("Could not parse, corrupted log file " + logPath, e);<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      csm.getSplitLogWorkerCoordination().markCorrupted(rootDir,<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        logfile.getPath().getName(), fs);<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      isCorrupted = true;<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    } catch (IOException e) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      throw e;<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    } finally {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      LOG.debug("Finishing writing output logs and closing down.");<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      try {<a name="line.386"></a>
-<span class="sourceLineNo">387</span>        if (null != in) {<a name="line.387"></a>
-<span class="sourceLineNo">388</span>          in.close();<a name="line.388"></a>
-<span class="sourceLineNo">389</span>        }<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      } catch (IOException exception) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        LOG.warn("Could not close wal reader: " + exception.getMessage());<a name="line.391"></a>
-<span class="sourceLineNo">392</span>        LOG.debug("exception details", exception);<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      }<a name="line.393"></a>
-<span class="sourceLineNo">394</span>      try {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        if (outputSinkStarted) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>          // Set progress_failed to true as the immediate following statement will reset its value<a name="line.396"></a>
-<span class="sourceLineNo">397</span>          // when finishWritingAndClose() throws exception, progress_failed has the right value<a name="line.397"></a>
-<span class="sourceLineNo">398</span>          progress_failed = true;<a name="line.398"></a>
-<span class="sourceLineNo">399</span>          progress_failed = outputSink.finishWritingAndClose() == null;<a name="line.399"></a>
-<span class="sourceLineNo">400</span>        }<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      } finally {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        String msg =<a name="line.402"></a>
-<span class="sourceLineNo">403</span>            "Processed " + editsCount + " edits across " + outputSink.getNumberOfRecoveredRegions()<a name="line.403"></a>
-<span class="sourceLineNo">404</span>                + " regions; edits skipped=" + editsSkipped + "; log file=" + logPath +<a name="line.404"></a>
-<span class="sourceLineNo">405</span>                ", length=" + logfile.getLen() + // See if length got updated post lease recovery<a name="line.405"></a>
-<span class="sourceLineNo">406</span>                ", corrupted=" + isCorrupted + ", progress failed=" + progress_failed;<a name="line.406"></a>
-<span class="sourceLineNo">407</span>        LOG.info(msg);<a name="line.407"></a>
-<span class="sourceLineNo">408</span>        status.markComplete(msg);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      }<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    }<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    return !progress_failed;<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>   * Completes the work done by splitLogFile by archiving logs<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   * &lt;p&gt;<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * It is invoked by SplitLogManager once it knows that one of the<a name="line.417"></a>
-<span class="sourceLineNo">418</span>   * SplitLogWorkers have completed the splitLogFile() part. If the master<a name="line.418"></a>
-<span class="sourceLineNo">419</span>   * crashes then this function might get called multiple times.<a name="line.419"></a>
-<span class="sourceLineNo">420</span>   * &lt;p&gt;<a name="line.420"></a>
-<span class="sourceLineNo">421</span>   * @param logfile<a name="line.421"></a>
-<span class="sourceLineNo">422</span>   * @param conf<a name="line.422"></a>
-<span class="sourceLineNo">423</span>   * @throws IOException<a name="line.423"></a>
-<span class="sourceLineNo">424</span>   */<a name="line.424"></a>
-<span class="sourceLineNo">425</span>  public static void finishSplitLogFile(String logfile,<a name="line.425"></a>
-<span class="sourceLineNo">426</span>      Configuration conf)  throws IOException {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    Path rootdir = FSUtils.getRootDir(conf);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    Path oldLogDir = new Path(rootdir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    Path logPath;<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    if (FSUtils.isStartingWithPath(rootdir, logfile)) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      logPath = new Path(logfile);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    } else {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      logPath = new Path(rootdir, logfile);<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    }<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    finishSplitLogFile(rootdir, oldLogDir, logPath, conf);<a name="line.435"></a>
-<span class="sourceLineNo">436</span>  }<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>  static void finishSplitLogFile(Path rootdir, Path oldLogDir,<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      Path logPath, Configuration conf) throws IOException {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    List&lt;Path&gt; processedLogs = new ArrayList&lt;Path&gt;();<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    List&lt;Path&gt; corruptedLogs = new ArrayList&lt;Path&gt;();<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    FileSystem fs;<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    fs = rootdir.getFileSystem(conf);<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    if (ZKSplitLog.isCorrupted(rootdir, logPath.getName(), fs)) {<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      corruptedLogs.add(logPath);<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    } else {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      processedLogs.add(logPath);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    }<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    archiveLogs(corruptedLogs, processedLogs, oldLogDir, fs, conf);<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    Path stagingDir = ZKSplitLog.getSplitLogDir(rootdir, logPath.getName());<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    fs.delete(stagingDir, true);<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  }<a name="line.452"></a>
-<span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span>  /**<a name="line.454"></a>
-<span class="sourceLineNo">455</span>   * Moves processed logs to a oldLogDir after successful processing Moves<a name="line.455"></a>
-<span class="sourceLineNo">456</span>   * corrupted logs (any log that couldn't be successfully parsed to corruptDir<a name="line.456"></a>
-<span class="sourceLineNo">457</span>   * (.corrupt) for later investigation<a name="line.457"></a>
-<span class="sourceLineNo">458</span>   *<a name="line.458"></a>
-<span class="sourceLineNo">459</span>   * @param corruptedLogs<a name="line.459"></a>
-<span class="sourceLineNo">460</span>   * @param processedLogs<a name="line.460"></a>
-<span class="sourceLineNo">461</span>   * @param oldLogDir<a name="line.461"></a>
-<span class="sourceLineNo">462</span>   * @param fs<a name="line.462"></a>
-<span class="sourceLineNo">463</span>   * @param conf<a name="line.463"></a>
-<span class="sourceLineNo">464</span>   * @throws IOException<a name="line.464"></a>
-<span class="sourceLineNo">465</span>   */<a name="line.465"></a>
-<span class="sourceLineNo">466</span>  private static void archiveLogs(<a name="line.466"></a>
-<span class="sourceLineNo">467</span>      final List&lt;Path&gt; corruptedLogs,<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      final List&lt;Path&gt; processedLogs, final Path oldLogDir,<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      final FileSystem fs, final Configuration conf) throws IOException {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    final Path corruptDir = new Path(FSUtils.getRootDir(conf), conf.get(<a name="line.470"></a>
-<span class="sourceLineNo">471</span>        "hbase.regionserver.hlog.splitlog.corrupt.dir",  HConstants.CORRUPT_DIR_NAME));<a name="line.471"></a>
-<span class="sourceLineNo">472</span><a name="line.472"></a>
-<span class="sourceLineNo">473</span>    if (!fs.mkdirs(corruptDir)) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      LOG.info("Unable to mkdir " + corruptDir);<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    }<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    fs.mkdirs(oldLogDir);<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>    // this method can get restarted or called multiple times for archiving<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    // the same log files.<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    for (Path corrupted : corruptedLogs) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      Path p = new Path(corruptDir, corrupted.getName());<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      if (fs.exists(corrupted)) {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        if (!fs.rename(corrupted, p)) {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>          LOG.warn("Unable to move corrupted log " + corrupted + " to " + p);<a name="line.484"></a>
-<span class="sourceLineNo">485</span>        } else {<a name="line.485"></a>
-<span class="sourceLineNo">486</span>          LOG.warn("Moved corrupted log " + corrupted + " to " + p);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>        }<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      }<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    }<a name="line.489"></a>
-<span class="sourceLineNo">490</span><a name="line.490"></a>
-<span class="sourceLineNo">491</span>    for (Path p : processedLogs) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      Path newPath = FSHLog.getWALArchivePath(oldLogDir, p);<a name="line.492"></a>
-<span class="sourceLineNo">493</span>      if (fs.exists(p)) {<a name="line.493"></a>
-<span class="sourceLineNo">494</span>        if (!FSUtils.renameAndSetModifyTime(fs, p, newPath)) {<a name="line.494"></a>
-<span class="sourceLineNo">495</span>          LOG.warn("Unable to move  " + p + " to " + newPath);<a name="line.495"></a>
-<span class="sourceLineNo">496</span>        } else {<a name="line.496"></a>
-<span class="sourceLineNo">497</span>          LOG.info("Archived processed log " + p + " to " + newPath);<a name="line.497"></a>
-<span class="sourceLineNo">498</span>        }<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      }<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><a name="line.502"></a>
-<span class="sourceLineNo">503</span>  /**<a name="line.503"></a>
-<span class="sourceLineNo">504</span>   * Path to a file under RECOVERED_EDITS_DIR directory of the region found in<a name="line.504"></a>
-<span class="sourceLineNo">505</span>   * &lt;code&gt;logEntry&lt;/code&gt; named for the sequenceid in the passed<a name="line.505"></a>
-<span class="sourceLineNo">506</span>   * &lt;code&gt;logEntry&lt;/code&gt;: e.g. /hbase/some_table/2323432434/recovered.edits/2332.<a name="line.506"></a>
-<span class="sourceLineNo">507</span>   * This method also ensures existence of RECOVERED_EDITS_DIR under the region<a name="line.507"></a>
-<span class="sourceLineNo">508</span>   * creating it if necessary.<a name="line.508"></a>
-<span class="sourceLineNo">509</span>   * @param fs<a name="line.509"></a>
-<span class="sourceLineNo">510</span>   * @param logEntry<a name="line.510"></a>
-<span class="sourceLineNo">511</span>   * @param rootDir HBase root dir.<a name="line.511"></a>
-<span class="sourceLineNo">512</span>   * @return Path to file into which to dump split log edits.<a name="line.512"></a>
-<span class="sourceLineNo">513</span>   * @throws IOException<a name="line.513"></a>
-<span class="sourceLineNo">514</span>   */<a name="line.514"></a>
-<span class="sourceLineNo">515</span>  @SuppressWarnings("deprecation")<a name="line.515"></a>
-<span class="sourceLineNo">516</span>  static Path getRegionSplitEditsPath(final FileSystem fs,<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      final Entry logEntry, final Path rootDir, boolean isCreate)<a name="line.517"></a>
-<span class="sourceLineNo">518</span>  throws IOException {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    Path tableDir = FSUtils.getTableDir(rootDir, logEntry.getKey().getTablename());<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    String encodedRegionName = Bytes.toString(logEntry.getKey().getEncodedRegionName());<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    Path regiondir = HRegion.getRegionDir(tableDir, encodedRegionName);<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    Path dir = getRegionDirRecoveredEditsDir(regiondir);<a name="line.522"></a>
-<span class="sourceLineNo">523</span><a name="line.523"></a>
-<span class="sourceLineNo">524</span>    if (!fs.exists(regiondir)) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      LOG.info("This region's directory doesn't exist: "<a name="line.525"></a>
-<span class="sourceLineNo">526</span>          + regiondir.toString() + ". It is very likely that it was" +<a name="line.526"></a>
-<span class="sourceLineNo">527</span>          " already split so it's safe to discard those edits.");<a name="line.527"></a>
-<span class="sourceLineNo">528</span>      return null;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    }<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    if (fs.exists(dir) &amp;&amp; fs.isFile(dir)) {<a name="line.530"></a>
-<span class="sourceLineNo">531</span>      Path tmp = new Path("/tmp");<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      if (!fs.exists(tmp)) {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>        fs.mkdirs(tmp);<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      }<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      tmp = new Path(tmp,<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        HConstants.RECOVERED_EDITS_DIR + "_" + encodedRegionName);<a name="line.536"></a>
-<span class="sourceLineNo">537</span>      LOG.warn("Found existing old file: " + dir + ". It could be some "<a name="line.537"></a>
-<span class="sourceLineNo">538</span>        + "leftover of an old installation. It should be a folder instead. "<a name="line.538"></a>
-<span class="sourceLineNo">539</span>        + "So moving it to " + tmp);<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      if (!fs.rename(dir, tmp)) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        LOG.warn("Failed to sideline old file " + dir);<a name="line.541"></a>
-<span class="sourceLineNo">542</span>      }<a name="line.542"></a>
-<span class="sourceLineNo">543</span>    }<a name="line.543"></a>
-<span class="sourceLineNo">544</span><a name="line.544"></a>
-<span class="sourceLineNo">545</span>    if (isCreate &amp;&amp; !fs.exists(dir)) {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>      if (!fs.mkdirs(dir)) LOG.warn("mkdir failed on " + dir);<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    }<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    // Append file name ends with RECOVERED_LOG_TMPFILE_SUFFIX to ensure<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    // region's replayRecoveredEdits will not delete it<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    String fileName = formatRecoveredEditsFileName(logEntry.getKey().getLogSeqNum());<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    fileName = getTmpRecoveredEditsFileName(fileName);<a name="line.551"></a>
-<span class="sourceLineNo">552</span>    return new Path(dir, fileName);<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>  static String getTmpRecoveredEditsFileName(String fileName) {<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    return fileName + RECOVERED_LOG_TMPFILE_SUFFIX;<a name="line.556"></a>
-<span class="sourceLineNo">557</span>  }<a name="line.557"></a>
-<span class="sourceLineNo">558</span><a name="line.558"></a>
-<span class="sourceLineNo">559</span>  /**<a name="line.559"></a>
-<span class="sourceLineNo">560</span>   * Get the completed recovered edits file path, renaming it to be by last edit<a name="line.560"></a>
-<span class="sourceLineNo">561</span>   * in the file from its first edit. Then we could use the name to skip<a name="line.561"></a>
-<span class="sourceLineNo">562</span>   * recovered edits when doing {@link HRegion#replayRecoveredEditsIfAny}.<a name="line.562"></a>
-<span class="sourceLineNo">563</span>   * @param srcPath<a name="line.563"></a>
-<span class="sourceLineNo">564</span>   * @param maximumEditLogSeqNum<a name="line.564"></a>
-<span class="sourceLineNo">565</span>   * @return dstPath take file's last edit log seq num as the name<a name="line.565"></a>
-<span class="sourceLineNo">566</span>   */<a name="line.566"></a>
-<span class="sourceLineNo">567</span>  static Path getCompletedRecoveredEditsFilePath(Path srcPath,<a name="line.567"></a>
-<span class="sourceLineNo">568</span>      Long maximumEditLogSeqNum) {<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    String fileName = formatRecoveredEditsFileName(maximumEditLogSeqNum);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    return new Path(srcPath.getParent(), fileName);<a name="line.570"></a>
-<span class="sourceLineNo">571</span>  }<a name="line.571"></a>
-<span class="sourceLineNo">572</span><a name="line.572"></a>
-<span class="sourceLineNo">573</span>  static String formatRecoveredEditsFileName(final long seqid) {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    return String.format("%019d", seqid);<a name="line.574"></a>
-<span class="sourceLineNo">575</span>  }<a name="line.575"></a>
-<span class="sourceLineNo">576</span><a name="line.576"></a>
-<span class="sourceLineNo">577</span>  private static final Pattern EDITFILES_NAME_PATTERN = Pattern.compile("-?[0-9]+");<a name="line.577"></a>
-<span class="sourceLineNo">578</span>  private static final String RECOVERED_LOG_TMPFILE_SUFFIX = ".temp";<a name="line.578"></a>
-<span class="sourceLineNo">579</span><a name="line.579"></a>
-<span class="sourceLineNo">580</span>  /**<a name="line.580"></a>
-<span class="sourceLineNo">581</span>   * @param regiondir<a name="line.581"></a>
-<span class="sourceLineNo">582</span>   *          This regions directory in the filesystem.<a name="line.582"></a>
-<span class="sourceLineNo">583</span>   * @return The directory that holds recovered edits files for the region<a name="line.583"></a>
-<span class="sourceLineNo">584</span>   *         &lt;code&gt;regiondir&lt;/code&gt;<a name="line.584"></a>
-<span class="sourceLineNo">585</span>   */<a name="line.585"></a>
-<span class="sourceLineNo">586</span>  public static Path getRegionDirRecoveredEditsDir(final Path regiondir) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    return new Path(regiondir, HConstants.RECOVERED_EDITS_DIR);<a name="line.587"></a>
-<span class="sourceLineNo">588</span>  }<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span>  /**<a name="line.590"></a>
-<span class="sourceLineNo">591</span>   * Returns sorted set of edit files made by splitter, excluding files<a name="line.591"></a>
-<span class="sourceLineNo">592</span>   * with '.temp' suffix.<a name="line.592"></a>
-<span class="sourceLineNo">593</span>   *<a name="line.593"></a>
-<span class="sourceLineNo">594</span>   * @param fs<a name="line.594"></a>
-<span class="sourceLineNo">595</span>   * @param regiondir<a name="line.595"></a>
-<span class="sourceLineNo">596</span>   * @return Files in passed &lt;code&gt;regiondir&lt;/code&gt; as a sorted set.<a name="line.596"></a>
-<span class="sourceLineNo">597</span>   * @throws IOException<a name="line.597"></a>
-<span class="sourceLineNo">598</span>   */<a name="line.598"></a>
-<span class="sourceLineNo">599</span>  public static NavigableSet&lt;Path&gt; getSplitEditFilesSorted(final FileSystem fs,<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      final Path regiondir) throws IOException {<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    NavigableSet&lt;Path&gt; filesSorted = new TreeSet&lt;Path&gt;();<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    Path editsdir = getRegionDirRecoveredEditsDir(regiondir);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    if (!fs.exists(editsdir))<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      return filesSorted;<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    FileStatus[] files = FSUtils.listStatus(fs, editsdir, new PathFilter() {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      @Override<a name="line.606"></a>
-<span class="sourceLineNo">607</span>      public boolean accept(Path p) {<a name="line.607"></a>
-<span class="sourceLineNo">608</span>        boolean result = false;<a name="line.608"></a>
-<span class="sourceLineNo">609</span>        try {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>          // Return files and only files that match the editfile names pattern.<a name="line.610"></a>
-<span class="sourceLineNo">611</span>          // There can be other files in this directory other than edit files.<a name="line.611"></a>
-<span class="sourceLineNo">612</span>          // In particular, on error, we'll move aside the bad edit file giving<a name="line.612"></a>
-<span class="sourceLineNo">613</span>          // it a timestamp suffix. See moveAsideBadEditsFile.<a name="line.613"></a>
-<span class="sourceLineNo">614</span>          Matcher m = EDITFILES_NAME_PATTERN.matcher(p.getName());<a name="line.614"></a>
-<span class="sourceLineNo">615</span>          result = fs.isFile(p) &amp;&amp; m.matches();<a name="line.615"></a>
-<span class="sourceLineNo">616</span>          // Skip the file whose name ends with RECOVERED_LOG_TMPFILE_SUFFIX,<a name="line.616"></a>
-<span class="sourceLineNo">617</span>          // because it means splitwal thread is writting this file.<a name="line.617"></a>
-<span class="sourceLineNo">618</span>          if (p.getName().endsWith(RECOVERED_LOG_TMPFILE_SUFFIX)) {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>            result = false;<a name="line.619"></a>
-<span class="sourceLineNo">620</span>          }<a name="line.620"></a>
-<span class="sourceLineNo">621</span>          // Skip SeqId Files<a name="line.621"></a>
-<span class="sourceLineNo">622</span>          if (isSequenceIdFile(p)) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span>            result = false;<a name="line.623"></a>
-<span class="sourceLineNo">624</span>          }<a name="line.624"></a>
-<span class="sourceLineNo">625</span>        } catch (IOException e) {<a name="line.625"></a>
-<span class="sourceLineNo">626</span>          LOG.warn("Failed isFile check on " + p);<a name="line.626"></a>
-<span class="sourceLineNo">627</span>        }<a name="line.627"></a>
-<span class="sourceLineNo">628</span>        return result;<a name="line.628"></a>
-<span class="sourceLineNo">629</span>      }<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    });<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    if (files == null) {<a name="line.631"></a>
-<span class="sourceLineNo">632</span>      return filesSorted;<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    }<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    for (FileStatus status : files) {<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      filesSorted.add(status.getPath());<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    }<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    return filesSorted;<a name="line.637"></a>
-<span class="sourceLineNo">638</span>  }<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>   * Move aside a bad edits file.<a name="line.641"></a>
-<span class="sourceLineNo">642</span>   *<a name="line.642"></a>
-<span class="sourceLineNo">643</span>   * @param fs<a name="line.643"></a>
-<span class="sourceLineNo">644</span>   * @param edits<a name="line.644"></a>
-<span class="sourceLineNo">645</span>   *          Edits file to move aside.<a name="line.645"></a>
-<span class="sourceLineNo">646</span>   * @return The name of the moved aside file.<a name="line.646"></a>
-<span class="sourceLineNo">647</span>   * @throws IOException<a name="line.647"></a>
-<span class="sourceLineNo">648</span>   */<a name="line.648"></a>
-<span class="sourceLineNo">649</span>  public static Path moveAsideBadEditsFile(final FileSystem fs, final Path edits)<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      throws IOException {<a name="line.650"></a>
-<span class="sourceLineNo">651</span>    Path moveAsideName = new Path(edits.getParent(), edits.getName() + "."<a name="line.651"></a>
-<span class="sourceLineNo">652</span>        + System.currentTimeMillis());<a name="line.652"></a>
-<span class="sourceLineNo">653</span>    if (!fs.rename(edits, moveAsideName)) {<a name="line.653"></a>
-<span class="sourceLineNo">654</span>      LOG.warn("Rename failed from " + edits + " to " + moveAsideName);<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    }<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    return moveAsideName;<a name="line.656"></a>
-<span class="sourceLineNo">657</span>  }<a name="line.657"></a>
-<span class="sourceLineNo">658</span><a name="line.658"></a>
-<span class="sourceLineNo">659</span>  private static final String SEQUENCE_ID_FILE_SUFFIX = ".seqid";<a name="line.659"></a>
-<span class="sourceLineNo">660</span>  private static final String OLD_SEQUENCE_ID_FILE_SUFFIX = "_seqid";<a name="line.660"></a>
-<span class="sourceLineNo">661</span>  private static final int SEQUENCE_ID_FILE_SUFFIX_LENGTH = SEQUENCE_ID_FILE_SUFFIX.length();<a name="line.661"></a>
-<span class="sourceLineNo">662</span><a name="line.662"></a>
-<span class="sourceLineNo">663</span>  /**<a name="line.663"></a>
-<span class="sourceLineNo">664</span>   * Is the given file a region open sequence id file.<a name="line.664"></a>
-<span class="sourceLineNo">665</span>   */<a name="line.665"></a>
-<span class="sourceLineNo">666</span>  @VisibleForTesting<a name="line.666"></a>
-<span class="sourceLineNo">667</span>  public static boolean isSequenceIdFile(final Path file) {<a name="line.667"></a>
-<span class="sourceLineNo">668</span>    return file.getName().endsWith(SEQUENCE_ID_FILE_SUFFIX)<a name="line.668"></a>
-<span class="sourceLineNo">669</span>        || file.getName().endsWith(OLD_SEQUENCE_ID_FILE_SUFFIX);<a name="line.669"></a>
-<span class="sourceLineNo">670</span>  }<a name="line.670"></a>
+<span class="sourceLineNo">346</span>            regionMaxSeqIdInStores.put(encodedRegionNameAsStr, maxSeqIdInStores);<a name="line.346"></a>
+<span class="sourceLineNo">347</span>            lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.347"></a>
+<span class="sourceLineNo">348</span>            if (LOG.isDebugEnabled()) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>              LOG.debug("DLS Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.349"></a>
+<span class="sourceLineNo">350</span>                  TextFormat.shortDebugString(ids));<a name="line.350"></a>
+<span class="sourceLineNo">351</span>            }<a name="line.351"></a>
+<span class="sourceLineNo">352</span>          }<a name="line.352"></a>
+<span class="sourceLineNo">353</span>          if (lastFlushedSequenceId == null) {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>            lastFlushedSequenceId = -1L;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>          }<a name="line.355"></a>
+<span class="sourceLineNo">356</span>          lastFlushedSequenceIds.put(encodedRegionNameAsStr, lastFlushedSequenceId);<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        }<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        if (lastFlushedSequenceId &gt;= entry.getKey().getSequenceId()) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>          editsSkipped++;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>          continue;<a name="line.360"></a>
+<span class="sourceLineNo">361</span>        }<a name="line.361"></a>
+<span class="sourceLineNo">362</span>        entryBuffers.appendEntry(entry);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        editsCount++;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>        int moreWritersFromLastCheck = this.getNumOpenWriters() - numOpenedFilesLastCheck;<a name="line.364"></a>
+<span class="sourceLineNo">365</span>        // If sufficient edits have passed, check if we should report progress.<a name="line.365"></a>
+<span class="sourceLineNo">366</span>        if (editsCount % interval == 0<a name="line.366"></a>
+<span class="sourceLineNo">367</span>            || moreWritersFromLastCheck &gt; numOpenedFilesBeforeReporting) {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>          numOpenedFilesLastCheck = this.getNumOpenWriters();<a name="line.368"></a>
+<span class="sourceLineNo">369</span>          String countsStr = (editsCount - (editsSkipped + outputSink.getSkippedEdits()))<a name="line.369"></a>
+<span class="sourceLineNo">370</span>              + " edits, skipped " + editsSkipped + " edits.";<a name="line.370"></a>
+<span class="sourceLineNo">371</span>          status.setStatus("Split " + countsStr);<a name="line.371"></a>
+<span class="sourceLineNo">372</span>          if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>            progress_failed = true;<a name="line.373"></a>
+<span class="sourceLineNo">374</span>            return false;<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>      }<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    } catch (InterruptedException ie) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      IOException iie = new InterruptedIOException();<a name="line.379"></a>
+<span class="sourceLineNo">380</span>      iie.initCause(ie);<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      throw iie;<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    } catch (CorruptedLogFileException e) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      LOG.warn("Could not parse, corrupted log file " + logPath, e);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      csm.getSplitLogWorkerCoordination().markCorrupted(rootDir,<a name="line.384"></a>
+<span class="sourceLineNo">385</span>        logfile.getPath().getName(), fs);<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      isCorrupted = true;<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    } catch (IOException e) {<a name="line.387"></a>
+<span class="sourceLineNo">388</span>      e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      throw e;<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    } finally {<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      LOG.debug("Finishing writing output logs and closing down.");<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      try {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>        if (null != in) {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>          in.close();<a name="line.394"></a>
+<span class="sourceLineNo">395</span>        }<a name="line.395"></a>
+<span class="sourceLineNo">396</span>      } catch (IOException exception) {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>        LOG.warn("Could not close wal reader: " + exception.getMessage());<a name="line.397"></a>
+<span class="sourceLineNo">398</span>        LOG.debug("exception details", exception);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      }<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      try {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>        if (outputSinkStarted) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>          // Set progress_failed to true as the immediate following statement will reset its value<a name="line.402"></a>
+<span class="sourceLineNo">403</span>          // when finishWritingAndClose() throws exception, progress_failed has the right value<a name="line.403"></a>
+<span class="sourceLineNo">404</span>          progress_failed = true;<a name="line.404"></a>
+<span class="sourceLineNo">405</span>          progress_failed = outputSink.finishWritingAndClose() == null;<a name="line.405"></a>
+<span class="sourceLineNo">406</span>        }<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      } finally {<a name="line.407"></a>
+<span class="sourceLineNo">408</span>        String msg =<a name="line.408"></a>
+<span class="sourceLineNo">409</span>            "Processed " + editsCount + " edits across " + outputSink.getNumberOfRecoveredRegions()<a name="line.409"></a>
+<span class="sourceLineNo">410</span>                + " regions; edits skipped=" + editsSkipped + "; log file=" + logPath +<a name="line.410"></a>
+<span class="sourceLineNo">411</span>                ", length=" + logfile.getLen() + // See if length got updated post lease recovery<a name="line.411"></a>
+<span class="sourceLineNo">412</span>                ", corrupted=" + isCorrupted + ", progress failed=" + progress_failed;<a name="line.412"></a>
+<span class="sourceLineNo">413</span>        LOG.info(msg);<a name="line.413"></a>
+<span class="sourceLineNo">414</span>        status.markComplete(msg);<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>    return !progress_failed;<a name="line.417"></a>
+<span class="sourceLineNo">418</span>  }<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>   * Completes the work done by splitLogFile by archiving logs<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   * &lt;p&gt;<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   * It is invoked by SplitLogManager once it knows that one of the<a name="line.423"></a>
+<span class="sourceLineNo">424</span>   * SplitLogWorkers have completed the splitLogFile() part. If the master<a name="line.424"></a>
+<span class="sourceLineNo">425</span>   * crashes then this function might get called multiple times.<a name="line.425"></a>
+<span class="sourceLineNo">426</span>   * &lt;p&gt;<a name="line.426"></a>
+<span class="sourceLineNo">427</span>   * @param logfile<a name="line.427"></a>
+<span class="sourceLineNo">428</span>   * @param conf<a name="line.428"></a>
+<span class="sourceLineNo">429</span>   * @throws IOException<a name="line.429"></a>
+<span class="sourceLineNo">430</span>   */<a name="line.430"></a>
+<span class="sourceLineNo">431</span>  public static void finishSplitLogFile(String logfile,<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      Configuration conf)  throws IOException {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    Path rootdir = FSUtils.getRootDir(conf);<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    Path oldLogDir = new Path(rootdir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.434"></a>
+<span class="sourceLineNo">435</span>    Path logPath;<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    if (FSUtils.isStartingWithPath(rootdir, logfile)) {<a name="line.436"></a>
+<span class="sourceLineNo">437</span>      logPath = new Path(logfile);<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    } else {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>      logPath = new Path(rootdir, logfile);<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    }<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    finishSplitLogFile(rootdir, oldLogDir, logPath, conf);<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>  private static void finishSplitLogFile(Path rootdir, Path oldLogDir,<a name="line.444"></a>
+<span class="sourceLineNo">445</span>      Path logPath, Configuration conf) throws IOException {<a name="line.445"></a>
+<span class="sourceLineNo">446</span>    List&lt;Path&gt; processedLogs = new ArrayList&lt;Path&gt;();<a name="line.446"></a>
+<span class="sourceLineNo">447</span>    List&lt;Path&gt; corruptedLogs = new ArrayList&lt;Path&gt;();<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    FileSystem fs;<a name="line.448"></a>
+<span class="sourceLineNo">449</span>    fs = rootdir.getFileSystem(conf);<a name="line.449"></a>
+<span class="sourceLineNo">450</span>    if (ZKSplitLog.isCorrupted(rootdir, logPath.getName(), fs)) {<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      corruptedLogs.add(logPath);<a name="line.451"></a>
+<span class="sourceLineNo">452</span>    } else {<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      processedLogs.add(logPath);<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    }<a name="line.454"></a>
+<span class="sourceLineNo">455</span>    archiveLogs(corruptedLogs, processedLogs, oldLogDir, fs, conf);<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    Path stagingDir = ZKSplitLog.getSplitLogDir(rootdir, logPath.getName());<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    fs.delete(stagingDir, true);<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>  /**<a name="line.460"></a>
+<span class="sourceLineNo">461</span>   * Moves processed logs to a oldLogDir after successful processing Moves<a name="line.461"></a>
+<span class="sourceLineNo">462</span>   * corrupted logs (any log that couldn't be successfully parsed to corruptDir<a name="line.462"></a>
+<span class="sourceLineNo">463</span>   * (.corrupt) for later investigation<a name="line.463"></a>
+<span class="sourceLineNo">464</span>   *<a name="line.464"></a>
+<span class="sourceLineNo">465</span>   * @param corruptedLogs<a name="line.465"></a>
+<span class="sourceLineNo">466</span>   * @param processedLogs<a name="line.466"></a>
+<span class="sourceLineNo">467</span>   * @param oldLogDir<a name="line.467"></a>
+<span class="sourceLineNo">468</span>   * @param fs<a name="line.468"></a>
+<span class="sourceLineNo">469</span>   * @param conf<a name="line.469"></a>
+<span class="sourceLineNo">470</span>   * @throws IOException<a name="line.470"></a>
+<span class="sourceLineNo">471</span>   */<a name="line.471"></a>
+<span class="sourceLineNo">472</span>  private static void archiveLogs(<a name="line.472"></a>
+<span class="sourceLineNo">473</span>      final List&lt;Path&gt; corruptedLogs,<a name="line.473"></a>
+<span class="sourceLineNo">474</span>      final List&lt;Path&gt; processedLogs, final Path oldLogDir,<a name="line.474"></a>
+<span class="sourceLineNo">475</span>      final FileSystem fs, final Configuration conf) throws IOException {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    final Path corruptDir = new Path(FSUtils.getRootDir(conf), conf.get(<a name="line.476"></a>
+<span class="sourceLineNo">477</span>        "hbase.regionserver.hlog.splitlog.corrupt.dir",  HConstants.CORRUPT_DIR_NAME));<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>    if (!fs.mkdirs(corruptDir)) {<a name="line.479"></a>
+<span class="sourceLineNo">480</span>      LOG.info("Unable to mkdir " + corruptDir);<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    }<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    fs.mkdirs(oldLogDir);<a name="line.482"></a>
+<span class="sourceLineNo">483</span><a name="line.483"></a>
+<span class="sourceLineNo">484</span>    // this method can get restarted or called multiple times for archiving<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    // the same log files.<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    for (Path corrupted : corruptedLogs) {<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      Path p = new Path(corruptDir, corrupted.getName());<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      if (fs.exists(corrupted)) {<a name="line.488"></a>
+<span class="sourceLineNo">489</span>        if (!fs.rename(corrupted, p)) {<a name="line.489"></a>
+<span class="sourceLineNo">490</span>          LOG.warn("Unable to move corrupted log " + corrupted + " to " + p);<a name="line.490"></a>
+<span class="sourceLineNo">491</span>        } else {<a name="line.491"></a>
+<span class="sourceLineNo">492</span>          LOG.warn("Moved corrupted log " + corrupted + " to " + p);<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>    }<a name="line.495"></a>
+<span class="sourceLineNo">496</span><a name="line.496"></a>
+<span class="sourceLineNo">497</span>    for (Path p : processedLogs) {<a name="line.497"></a>
+<span class="sourceLineNo">498</span>      Path newPath = FSHLog.getWALArchivePath(oldLogDir, p);<a name="line.498"></a>
+<span class="sourceLineNo">499</span>      if (fs.exists(p)) {<a name="line.499"></a>
+<span class="sourceLineNo">500</span>        if (!FSUtils.renameAndSetModifyTime(fs, p, newPath)) {<a name="line.500"></a>
+<span class="sourceLineNo">501</span>          LOG.warn("Unable to move  " + p + " to " + newPath);<a name="line.501"></a>
+<span class="sourceLineNo">502</span>        } else {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>          LOG.info("Archived processed log " + p + " to " + newPath);<a name="line.503"></a>
+<span class="sourceLineNo">504</span>        }<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      }<a name="line.505"></a>
+<span class="sourceLineNo">506</span>    }<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>  /**<a name="line.509"></a>
+<span class="sourceLineNo">510</span>   * Path to a file under RECOVERED_EDITS_DIR directory of the region found in<a name="line.510"></a>
+<span class="sourceLineNo">511</span>   * &lt;code&gt;logEntry&lt;/code&gt; named for the sequenceid in the passed<a name="line.511"></a>
+<span class="sourceLineNo">512</span>   * &lt;code&gt;logEntry&lt;/code&gt;: e.g. /hbase/some_table/2323432434/recovered.edits/2332.<a name="line.512"></a>
+<span class="sourceLineNo">513</span>   * This method also ensures existence of RECOVERED_EDITS_DIR under the region<a name="line.513"></a>
+<span class="sourceLineNo">514</span>   * creating it if necessary.<a name="line.514"></a>
+<span class="sourceLineNo">515</span>   * @param fs<a name="line.515"></a>
+<span class="sourceLineNo">516</span>   * @param logEntry<a name="line.516"></a>
+<span class="sourceLineNo">517</span>   * @param rootDir HBase root dir.<a name="line.517"></a>
+<span class="sourceLineNo">518</span>   * @param fileBeingSplit the file being split currently. Used to generate tmp file name.<a name="line.518"></a>
+<span class="sourceLineNo">519</span>   * @return Path to file into which to dump split log edits.<a name="line.519"></a>
+<span class="sourceLineNo">520</span>   * @throws IOException<a name="line.520"></a>
+<span class="sourceLineNo">521</span>   */<a name="line.521"></a>
+<span class="sourceLineNo">522</span>  @SuppressWarnings("deprecation")<a name="line.522"></a>
+<span class="sourceLineNo">523</span>  private static Path getRegionSplitEditsPath(final FileSystem fs,<a name="line.523"></a>
+<span class="sourceLineNo">524</span>      final Entry logEntry, final Path rootDir, FileStatus fileBeingSplit)<a name="line.524"></a>
+<span class="sourceLineNo">525</span>  throws IOException {<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    Path tableDir = FSUtils.getTableDir(rootDir, logEntry.getKey().getTablename());<a name="line.526"></a>
+<span class="sourceLineNo">527</span>    String encodedRegionName = Bytes.toString(logEntry.getKey().getEncodedRegionName());<a name="line.527"></a>
+<span class="sourceLineNo">528</span>    Path regiondir = HRegion.getRegionDir(tableDir, encodedRegionName);<a name="line.528"></a>
+<span class="sourceLineNo">529</span>    Path dir = getRegionDirRecoveredEditsDir(regiondir);<a name="line.529"></a>
+<span class="sourceLineNo">530</span><a name="line.530"></a>
+<span class="sourceLineNo">531</span>    if (!fs.exists(regiondir)) {<a name="line.531"></a>
+<span class="sourceLineNo">532</span>      LOG.info("This region's directory doesn't exist: "<a name="line.532"></a>
+<span class="sourceLineNo">533</span>          + regiondir.toString() + ". It is very likely that it was" +<a name="line.533"></a>
+<span class="sourceLineNo">534</span>          " already split so it's safe to discard those edits.");<a name="line.534"></a>
+<span class="sourceLineNo">535</span>      return null;<a name="line.535"></a>
+<span class="sourceLineNo">536</span>    }<a name="line.536"></a>
+<span class="sourceLineNo">537</span>    if (fs.exists(dir) &amp;&amp; fs.isFile(dir)) {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      Path tmp = new Path("/tmp");<a name="line.538"></a>
+<span class="sourceLineNo">539</span>      if (!fs.exists(tmp)) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span>        fs.mkdirs(tmp);<a name="line.540"></a>
+<span class="sourceLineNo">541</span>      }<a name="line.541"></a>
+<span class="sourceLineNo">542</span>      tmp = new Path(tmp,<a name="line.542"></a>
+<span class="sourceLineNo">543</span>        HConstants.RECOVERED_EDITS_DIR + "_" + encodedRegionName);<a name="line.543"></a>
+<span class="sourceLineNo">544</span>      LOG.warn("Found existing old file: " + dir + ". It could be some "<a name="line.544"></a>
+<span class="sourceLineNo">545</span>        + "leftover of an old installation. It should be a folder instead. "<a name="line.545"></a>
+<span class="sourceLineNo">546</span>        + "So moving it to " + tmp);<a name="line.546"></a>
+<span class="sourceLineNo">547</span>      if (!fs.rename(dir, tmp)) {<a name="line.547"></a>
+<span class="sourceLineNo">548</span>        LOG.warn("Failed to sideline old file " + dir);<a name="line.548"></a>
+<span class="sourceLineNo">549</span>      }<a name="line.549"></a>
+<span class="sourceLineNo">550</span>    }<a name="line.550"></a>
+<span class="sourceLineNo">551</span><a name="line.551"></a>
+<span class="sourceLineNo">552</span>    if (!fs.exists(dir) 

<TRUNCATED>

[09/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/distribution-management.html
----------------------------------------------------------------------
diff --git a/distribution-management.html b/distribution-management.html
index 7640405..2c85db3 100644
--- a/distribution-management.html
+++ b/distribution-management.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Distribution Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -290,7 +290,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/export_control.html
----------------------------------------------------------------------
diff --git a/export_control.html b/export_control.html
index f1969d3..35737b2 100644
--- a/export_control.html
+++ b/export_control.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Export Control
@@ -330,7 +330,7 @@ for more details.</p>
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/hbase-annotations/checkstyle.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/checkstyle.html b/hbase-annotations/checkstyle.html
index 171f077..4736ae2 100644
--- a/hbase-annotations/checkstyle.html
+++ b/hbase-annotations/checkstyle.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-17 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-18 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-17</span>
+        <span id="publishDate">Last Published: 2016-02-18</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/hbase-annotations/dependencies.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/dependencies.html b/hbase-annotations/dependencies.html
index b666462..2e20851 100644
--- a/hbase-annotations/dependencies.html
+++ b/hbase-annotations/dependencies.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-17 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-18 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-17</span>
+        <span id="publishDate">Last Published: 2016-02-18</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/hbase-annotations/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/dependency-convergence.html b/hbase-annotations/dependency-convergence.html
index 7349296..8ce1d8d 100644
--- a/hbase-annotations/dependency-convergence.html
+++ b/hbase-annotations/dependency-convergence.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-17 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-18 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-17</span>
+        <span id="publishDate">Last Published: 2016-02-18</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/hbase-annotations/dependency-info.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/dependency-info.html b/hbase-annotations/dependency-info.html
index 94e6c88..fc469df 100644
--- a/hbase-annotations/dependency-info.html
+++ b/hbase-annotations/dependency-info.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-17 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-18 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-17</span>
+        <span id="publishDate">Last Published: 2016-02-18</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/hbase-annotations/dependency-management.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/dependency-management.html b/hbase-annotations/dependency-management.html
index ee04d0b..03a1745 100644
--- a/hbase-annotations/dependency-management.html
+++ b/hbase-annotations/dependency-management.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-17 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-18 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-17</span>
+        <span id="publishDate">Last Published: 2016-02-18</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/hbase-annotations/distribution-management.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/distribution-management.html b/hbase-annotations/distribution-management.html
index 4c319e6..2e78bd5 100644
--- a/hbase-annotations/distribution-management.html
+++ b/hbase-annotations/distribution-management.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-17 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-18 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-17</span>
+        <span id="publishDate">Last Published: 2016-02-18</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/hbase-annotations/index.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/index.html b/hbase-annotations/index.html
index 7d5f33c..803cc13 100644
--- a/hbase-annotations/index.html
+++ b/hbase-annotations/index.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-17 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-18 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-17</span>
+        <span id="publishDate">Last Published: 2016-02-18</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/hbase-annotations/integration.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/integration.html b/hbase-annotations/integration.html
index ef06cab..d8c9e71 100644
--- a/hbase-annotations/integration.html
+++ b/hbase-annotations/integration.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-17 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-18 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-17</span>
+        <span id="publishDate">Last Published: 2016-02-18</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/hbase-annotations/issue-tracking.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/issue-tracking.html b/hbase-annotations/issue-tracking.html
index 8dbb947..b7291fc 100644
--- a/hbase-annotations/issue-tracking.html
+++ b/hbase-annotations/issue-tracking.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-17 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-18 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-17</span>
+        <span id="publishDate">Last Published: 2016-02-18</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/hbase-annotations/license.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/license.html b/hbase-annotations/license.html
index c47939d..09e3025 100644
--- a/hbase-annotations/license.html
+++ b/hbase-annotations/license.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-17 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-18 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-17</span>
+        <span id="publishDate">Last Published: 2016-02-18</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/hbase-annotations/mail-lists.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/mail-lists.html b/hbase-annotations/mail-lists.html
index 9082a65..d75ba39 100644
--- a/hbase-annotations/mail-lists.html
+++ b/hbase-annotations/mail-lists.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-17 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-18 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-17</span>
+        <span id="publishDate">Last Published: 2016-02-18</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/hbase-annotations/plugin-management.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/plugin-management.html b/hbase-annotations/plugin-management.html
index 55c92a3..c72f827 100644
--- a/hbase-annotations/plugin-management.html
+++ b/hbase-annotations/plugin-management.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-17 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-18 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-17</span>
+        <span id="publishDate">Last Published: 2016-02-18</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/hbase-annotations/plugins.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/plugins.html b/hbase-annotations/plugins.html
index 24f0d5d..ed4322f 100644
--- a/hbase-annotations/plugins.html
+++ b/hbase-annotations/plugins.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-17 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-18 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-17</span>
+        <span id="publishDate">Last Published: 2016-02-18</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/hbase-annotations/project-info.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/project-info.html b/hbase-annotations/project-info.html
index 8f16b16..a96cd62 100644
--- a/hbase-annotations/project-info.html
+++ b/hbase-annotations/project-info.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-17 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-18 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-17</span>
+        <span id="publishDate">Last Published: 2016-02-18</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/hbase-annotations/project-reports.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/project-reports.html b/hbase-annotations/project-reports.html
index e14ca59..6fc48c1 100644
--- a/hbase-annotations/project-reports.html
+++ b/hbase-annotations/project-reports.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-17 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-18 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-17</span>
+        <span id="publishDate">Last Published: 2016-02-18</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/hbase-annotations/project-summary.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/project-summary.html b/hbase-annotations/project-summary.html
index 8bec760..0e60f09 100644
--- a/hbase-annotations/project-summary.html
+++ b/hbase-annotations/project-summary.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-17 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-18 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-17</span>
+        <span id="publishDate">Last Published: 2016-02-18</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/hbase-annotations/source-repository.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/source-repository.html b/hbase-annotations/source-repository.html
index fccde5c..10f3697 100644
--- a/hbase-annotations/source-repository.html
+++ b/hbase-annotations/source-repository.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-17 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-18 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-17</span>
+        <span id="publishDate">Last Published: 2016-02-18</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/hbase-annotations/team-list.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/team-list.html b/hbase-annotations/team-list.html
index fcc91c3..804729f 100644
--- a/hbase-annotations/team-list.html
+++ b/hbase-annotations/team-list.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-17 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-18 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-17</span>
+        <span id="publishDate">Last Published: 2016-02-18</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/hbase-spark/checkstyle.html
----------------------------------------------------------------------
diff --git a/hbase-spark/checkstyle.html b/hbase-spark/checkstyle.html
index 769cd0e..ca6789b 100644
--- a/hbase-spark/checkstyle.html
+++ b/hbase-spark/checkstyle.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-17 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-18 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-17</span>
+        <span id="publishDate">Last Published: 2016-02-18</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/hbase-spark/dependencies.html
----------------------------------------------------------------------
diff --git a/hbase-spark/dependencies.html b/hbase-spark/dependencies.html
index 44313d5..fae9464 100644
--- a/hbase-spark/dependencies.html
+++ b/hbase-spark/dependencies.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-17 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-18 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-17</span>
+        <span id="publishDate">Last Published: 2016-02-18</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/hbase-spark/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/hbase-spark/dependency-convergence.html b/hbase-spark/dependency-convergence.html
index 4e784eb..39d3364 100644
--- a/hbase-spark/dependency-convergence.html
+++ b/hbase-spark/dependency-convergence.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-17 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-18 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-17</span>
+        <span id="publishDate">Last Published: 2016-02-18</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/hbase-spark/dependency-info.html
----------------------------------------------------------------------
diff --git a/hbase-spark/dependency-info.html b/hbase-spark/dependency-info.html
index c2f284d..0e09933 100644
--- a/hbase-spark/dependency-info.html
+++ b/hbase-spark/dependency-info.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-17 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-18 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-17</span>
+        <span id="publishDate">Last Published: 2016-02-18</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/hbase-spark/dependency-management.html
----------------------------------------------------------------------
diff --git a/hbase-spark/dependency-management.html b/hbase-spark/dependency-management.html
index f76affb..2e600f6 100644
--- a/hbase-spark/dependency-management.html
+++ b/hbase-spark/dependency-management.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-17 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-18 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-17</span>
+        <span id="publishDate">Last Published: 2016-02-18</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/hbase-spark/distribution-management.html
----------------------------------------------------------------------
diff --git a/hbase-spark/distribution-management.html b/hbase-spark/distribution-management.html
index 4c1f757..8238ad7 100644
--- a/hbase-spark/distribution-management.html
+++ b/hbase-spark/distribution-management.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-17 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-18 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-17</span>
+        <span id="publishDate">Last Published: 2016-02-18</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/hbase-spark/index.html
----------------------------------------------------------------------
diff --git a/hbase-spark/index.html b/hbase-spark/index.html
index bd34714..c461d71 100644
--- a/hbase-spark/index.html
+++ b/hbase-spark/index.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-17 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-18 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-17</span>
+        <span id="publishDate">Last Published: 2016-02-18</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/hbase-spark/integration.html
----------------------------------------------------------------------
diff --git a/hbase-spark/integration.html b/hbase-spark/integration.html
index 32755fe..ca2da99 100644
--- a/hbase-spark/integration.html
+++ b/hbase-spark/integration.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-17 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-18 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-17</span>
+        <span id="publishDate">Last Published: 2016-02-18</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/hbase-spark/issue-tracking.html
----------------------------------------------------------------------
diff --git a/hbase-spark/issue-tracking.html b/hbase-spark/issue-tracking.html
index b232a47..3ad5eab 100644
--- a/hbase-spark/issue-tracking.html
+++ b/hbase-spark/issue-tracking.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-17 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-18 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-17</span>
+        <span id="publishDate">Last Published: 2016-02-18</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/hbase-spark/license.html
----------------------------------------------------------------------
diff --git a/hbase-spark/license.html b/hbase-spark/license.html
index 78911c9..dacdc54 100644
--- a/hbase-spark/license.html
+++ b/hbase-spark/license.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-17 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-18 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-17</span>
+        <span id="publishDate">Last Published: 2016-02-18</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/hbase-spark/mail-lists.html
----------------------------------------------------------------------
diff --git a/hbase-spark/mail-lists.html b/hbase-spark/mail-lists.html
index 889b0da..ee5793a 100644
--- a/hbase-spark/mail-lists.html
+++ b/hbase-spark/mail-lists.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-17 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-18 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-17</span>
+        <span id="publishDate">Last Published: 2016-02-18</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/hbase-spark/plugin-management.html
----------------------------------------------------------------------
diff --git a/hbase-spark/plugin-management.html b/hbase-spark/plugin-management.html
index 156144e..014cdca 100644
--- a/hbase-spark/plugin-management.html
+++ b/hbase-spark/plugin-management.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-17 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-18 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-17</span>
+        <span id="publishDate">Last Published: 2016-02-18</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/hbase-spark/plugins.html
----------------------------------------------------------------------
diff --git a/hbase-spark/plugins.html b/hbase-spark/plugins.html
index 86d7127..de1c22e 100644
--- a/hbase-spark/plugins.html
+++ b/hbase-spark/plugins.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-17 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-18 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-17</span>
+        <span id="publishDate">Last Published: 2016-02-18</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/hbase-spark/project-info.html
----------------------------------------------------------------------
diff --git a/hbase-spark/project-info.html b/hbase-spark/project-info.html
index dc50f29..71d099b 100644
--- a/hbase-spark/project-info.html
+++ b/hbase-spark/project-info.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-17 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-18 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-17</span>
+        <span id="publishDate">Last Published: 2016-02-18</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/hbase-spark/project-reports.html
----------------------------------------------------------------------
diff --git a/hbase-spark/project-reports.html b/hbase-spark/project-reports.html
index 646460d..f6e7c4b 100644
--- a/hbase-spark/project-reports.html
+++ b/hbase-spark/project-reports.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-17 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-18 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-17</span>
+        <span id="publishDate">Last Published: 2016-02-18</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/hbase-spark/project-summary.html
----------------------------------------------------------------------
diff --git a/hbase-spark/project-summary.html b/hbase-spark/project-summary.html
index a540ae7..2ee937f 100644
--- a/hbase-spark/project-summary.html
+++ b/hbase-spark/project-summary.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-17 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-18 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-17</span>
+        <span id="publishDate">Last Published: 2016-02-18</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/hbase-spark/source-repository.html
----------------------------------------------------------------------
diff --git a/hbase-spark/source-repository.html b/hbase-spark/source-repository.html
index ca9b291..4523e83 100644
--- a/hbase-spark/source-repository.html
+++ b/hbase-spark/source-repository.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-17 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-18 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-17</span>
+        <span id="publishDate">Last Published: 2016-02-18</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/hbase-spark/team-list.html
----------------------------------------------------------------------
diff --git a/hbase-spark/team-list.html b/hbase-spark/team-list.html
index f52580a..965e01f 100644
--- a/hbase-spark/team-list.html
+++ b/hbase-spark/team-list.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-17 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-18 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-17</span>
+        <span id="publishDate">Last Published: 2016-02-18</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/index.html
----------------------------------------------------------------------
diff --git a/index.html b/index.html
index 5903954..b19d468 100644
--- a/index.html
+++ b/index.html
@@ -1,13 +1,13 @@
 <!DOCTYPE html>
 <!--
- | Generated by Apache Maven Doxia Site Renderer 1.6
+ | Generated by Apache Maven Doxia Site Renderer 1.6 
  | Rendered using Apache Maven Fluido Skin 1.5-HBASE
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBaseâ„¢ Home</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -422,7 +422,7 @@ Apache HBase is an open-source, distributed, versioned, non-relational database
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/integration.html
----------------------------------------------------------------------
diff --git a/integration.html b/integration.html
index b4a7cdc..a67a79c 100644
--- a/integration.html
+++ b/integration.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Continuous Integration</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -290,7 +290,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/issue-tracking.html
----------------------------------------------------------------------
diff --git a/issue-tracking.html b/issue-tracking.html
index 9844b62..c5013ad 100644
--- a/issue-tracking.html
+++ b/issue-tracking.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Issue Tracking</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -287,7 +287,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/license.html
----------------------------------------------------------------------
diff --git a/license.html b/license.html
index 92a195a..3bf5c4e 100644
--- a/license.html
+++ b/license.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project License</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -490,7 +490,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/mail-lists.html
----------------------------------------------------------------------
diff --git a/mail-lists.html b/mail-lists.html
index cc541ec..f6dbe6c 100644
--- a/mail-lists.html
+++ b/mail-lists.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Mailing Lists</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -340,7 +340,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/metrics.html
----------------------------------------------------------------------
diff --git a/metrics.html b/metrics.html
index 28023b3..c5e8abc 100644
--- a/metrics.html
+++ b/metrics.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Apache HBase (TM) Metrics
@@ -458,7 +458,7 @@ export HBASE_REGIONSERVER_OPTS=&quot;$HBASE_JMX_OPTS -Dcom.sun.management.jmxrem
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/modules.html
----------------------------------------------------------------------
diff --git a/modules.html b/modules.html
index 6513cc2..8e17a70 100644
--- a/modules.html
+++ b/modules.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Modules</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -366,7 +366,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/old_news.html
----------------------------------------------------------------------
diff --git a/old_news.html b/old_news.html
index 2e336d5..5ed0608 100644
--- a/old_news.html
+++ b/old_news.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Old Apache HBase (TM) News
@@ -413,7 +413,7 @@ under the License. -->
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/plugin-management.html
----------------------------------------------------------------------
diff --git a/plugin-management.html b/plugin-management.html
index 14ba158..8b56a2c 100644
--- a/plugin-management.html
+++ b/plugin-management.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Plugin Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -423,7 +423,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/plugins.html
----------------------------------------------------------------------
diff --git a/plugins.html b/plugins.html
index 3b017f2..7f7cad1 100644
--- a/plugins.html
+++ b/plugins.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Build Plugins</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -366,7 +366,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/poweredbyhbase.html
----------------------------------------------------------------------
diff --git a/poweredbyhbase.html b/poweredbyhbase.html
index 67fd92a..6309e97 100644
--- a/poweredbyhbase.html
+++ b/poweredbyhbase.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Powered By Apache HBase™</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -768,7 +768,7 @@ under the License. -->
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/project-info.html
----------------------------------------------------------------------
diff --git a/project-info.html b/project-info.html
index b85c233..0c0ee1a 100644
--- a/project-info.html
+++ b/project-info.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -340,7 +340,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/project-reports.html
----------------------------------------------------------------------
diff --git a/project-reports.html b/project-reports.html
index 8f9388c..d246ac7 100644
--- a/project-reports.html
+++ b/project-reports.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Generated Reports</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -310,7 +310,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/project-summary.html
----------------------------------------------------------------------
diff --git a/project-summary.html b/project-summary.html
index 4e93c8e..08bfdae 100644
--- a/project-summary.html
+++ b/project-summary.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Summary</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -330,7 +330,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/pseudo-distributed.html
----------------------------------------------------------------------
diff --git a/pseudo-distributed.html b/pseudo-distributed.html
index 8d0f50a..0e6f4b2 100644
--- a/pseudo-distributed.html
+++ b/pseudo-distributed.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
 Running Apache HBase (TM) in pseudo-distributed mode
@@ -307,7 +307,7 @@ under the License. -->
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/replication.html
----------------------------------------------------------------------
diff --git a/replication.html b/replication.html
index 2ee4f87..a19b498 100644
--- a/replication.html
+++ b/replication.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Apache HBase (TM) Replication
@@ -302,7 +302,7 @@ under the License. -->
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/resources.html
----------------------------------------------------------------------
diff --git a/resources.html b/resources.html
index 8af09c8..339da94 100644
--- a/resources.html
+++ b/resources.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Other Apache HBase (TM) Resources</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -324,7 +324,7 @@ under the License. -->
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/source-repository.html
----------------------------------------------------------------------
diff --git a/source-repository.html b/source-repository.html
index 58e0a46..6a51bfe 100644
--- a/source-repository.html
+++ b/source-repository.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Source Repository</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -298,7 +298,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/sponsors.html
----------------------------------------------------------------------
diff --git a/sponsors.html b/sponsors.html
index 015949e..31d1f4b 100644
--- a/sponsors.html
+++ b/sponsors.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBase™ Sponsors</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -332,7 +332,7 @@ under the License. -->
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/supportingprojects.html
----------------------------------------------------------------------
diff --git a/supportingprojects.html b/supportingprojects.html
index 4d8376b..70130a0 100644
--- a/supportingprojects.html
+++ b/supportingprojects.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Supporting Projects</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -519,7 +519,7 @@ under the License. -->
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/team-list.html
----------------------------------------------------------------------
diff --git a/team-list.html b/team-list.html
index c779389..fe99cb8 100644
--- a/team-list.html
+++ b/team-list.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Team list</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -785,7 +785,7 @@ window.onLoad = init();
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-18</li>
             </p>
                 </div>
 


[36/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/src-html/org/apache/hadoop/hbase/client/Mutation.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/Mutation.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/Mutation.html
index 0030a24..d2a7403 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/Mutation.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/Mutation.html
@@ -90,429 +90,448 @@
 <span class="sourceLineNo">082</span>   */<a name="line.82"></a>
 <span class="sourceLineNo">083</span>  private static final String OP_ATTRIBUTE_TTL = "_ttl";<a name="line.83"></a>
 <span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>  protected byte [] row = null;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>  protected long ts = HConstants.LATEST_TIMESTAMP;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  protected Durability durability = Durability.USE_DEFAULT;<a name="line.87"></a>
-<span class="sourceLineNo">088</span><a name="line.88"></a>
-<span class="sourceLineNo">089</span>  // A Map sorted by column family.<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  protected NavigableMap&lt;byte [], List&lt;Cell&gt;&gt; familyMap =<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    new TreeMap&lt;byte [], List&lt;Cell&gt;&gt;(Bytes.BYTES_COMPARATOR);<a name="line.91"></a>
-<span class="sourceLineNo">092</span><a name="line.92"></a>
-<span class="sourceLineNo">093</span>  @Override<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  public CellScanner cellScanner() {<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    return CellUtil.createCellScanner(getFamilyCellMap());<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>   * Creates an empty list if one doesn't exist for the given column family<a name="line.99"></a>
-<span class="sourceLineNo">100</span>   * or else it returns the associated list of Cell objects.<a name="line.100"></a>
-<span class="sourceLineNo">101</span>   *<a name="line.101"></a>
-<span class="sourceLineNo">102</span>   * @param family column family<a name="line.102"></a>
-<span class="sourceLineNo">103</span>   * @return a list of Cell objects, returns an empty list if one doesn't exist.<a name="line.103"></a>
-<span class="sourceLineNo">104</span>   */<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  List&lt;Cell&gt; getCellList(byte[] family) {<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    List&lt;Cell&gt; list = this.familyMap.get(family);<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    if (list == null) {<a name="line.107"></a>
-<span class="sourceLineNo">108</span>      list = new ArrayList&lt;Cell&gt;();<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    }<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    return list;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  }<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>  /*<a name="line.113"></a>
-<span class="sourceLineNo">114</span>   * Create a KeyValue with this objects row key and the Put identifier.<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   *<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   * @return a KeyValue with this objects row key and the Put identifier.<a name="line.116"></a>
-<span class="sourceLineNo">117</span>   */<a name="line.117"></a>
-<span class="sourceLineNo">118</span>  KeyValue createPutKeyValue(byte[] family, byte[] qualifier, long ts, byte[] value) {<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    return new KeyValue(this.row, family, qualifier, ts, KeyValue.Type.Put, value);<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>  /**<a name="line.122"></a>
-<span class="sourceLineNo">123</span>   * Create a KeyValue with this objects row key and the Put identifier.<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   * @param family<a name="line.124"></a>
-<span class="sourceLineNo">125</span>   * @param qualifier<a name="line.125"></a>
-<span class="sourceLineNo">126</span>   * @param ts<a name="line.126"></a>
-<span class="sourceLineNo">127</span>   * @param value<a name="line.127"></a>
-<span class="sourceLineNo">128</span>   * @param tags - Specify the Tags as an Array<a name="line.128"></a>
-<span class="sourceLineNo">129</span>   * @return a KeyValue with this objects row key and the Put identifier.<a name="line.129"></a>
-<span class="sourceLineNo">130</span>   */<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  KeyValue createPutKeyValue(byte[] family, byte[] qualifier, long ts, byte[] value, Tag[] tags) {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    KeyValue kvWithTag = new KeyValue(this.row, family, qualifier, ts, value, tags);<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    return kvWithTag;<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>   * Create a KeyValue with this objects row key and the Put identifier.<a name="line.137"></a>
-<span class="sourceLineNo">138</span>   *<a name="line.138"></a>
-<span class="sourceLineNo">139</span>   * @return a KeyValue with this objects row key and the Put identifier.<a name="line.139"></a>
-<span class="sourceLineNo">140</span>   */<a name="line.140"></a>
-<span class="sourceLineNo">141</span>  KeyValue createPutKeyValue(byte[] family, ByteBuffer qualifier, long ts, ByteBuffer value,<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      Tag[] tags) {<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    return new KeyValue(this.row, 0, this.row == null ? 0 : this.row.length,<a name="line.143"></a>
-<span class="sourceLineNo">144</span>        family, 0, family == null ? 0 : family.length,<a name="line.144"></a>
-<span class="sourceLineNo">145</span>        qualifier, ts, KeyValue.Type.Put, value, tags != null ? Arrays.asList(tags) : 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>   * Compile the column family (i.e. schema) information<a name="line.149"></a>
-<span class="sourceLineNo">150</span>   * into a Map. Useful for parsing and aggregation by debugging,<a name="line.150"></a>
-<span class="sourceLineNo">151</span>   * logging, and administration tools.<a name="line.151"></a>
-<span class="sourceLineNo">152</span>   * @return Map<a name="line.152"></a>
-<span class="sourceLineNo">153</span>   */<a name="line.153"></a>
-<span class="sourceLineNo">154</span>  @Override<a name="line.154"></a>
-<span class="sourceLineNo">155</span>  public Map&lt;String, Object&gt; getFingerprint() {<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    Map&lt;String, Object&gt; map = new HashMap&lt;String, Object&gt;();<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    List&lt;String&gt; families = new ArrayList&lt;String&gt;();<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    // ideally, we would also include table information, but that information<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    // is not stored in each Operation instance.<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    map.put("families", families);<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    for (Map.Entry&lt;byte [], List&lt;Cell&gt;&gt; entry : this.familyMap.entrySet()) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      families.add(Bytes.toStringBinary(entry.getKey()));<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    }<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    return map;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>  }<a name="line.165"></a>
-<span class="sourceLineNo">166</span><a name="line.166"></a>
-<span class="sourceLineNo">167</span>  /**<a name="line.167"></a>
-<span class="sourceLineNo">168</span>   * Compile the details beyond the scope of getFingerprint (row, columns,<a name="line.168"></a>
-<span class="sourceLineNo">169</span>   * timestamps, etc.) into a Map along with the fingerprinted information.<a name="line.169"></a>
-<span class="sourceLineNo">170</span>   * Useful for debugging, logging, and administration tools.<a name="line.170"></a>
-<span class="sourceLineNo">171</span>   * @param maxCols a limit on the number of columns output prior to truncation<a name="line.171"></a>
-<span class="sourceLineNo">172</span>   * @return Map<a name="line.172"></a>
-<span class="sourceLineNo">173</span>   */<a name="line.173"></a>
-<span class="sourceLineNo">174</span>  @Override<a name="line.174"></a>
-<span class="sourceLineNo">175</span>  public Map&lt;String, Object&gt; toMap(int maxCols) {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    // we start with the fingerprint map and build on top of it.<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    Map&lt;String, Object&gt; map = getFingerprint();<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    // replace the fingerprint's simple list of families with a<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    // map from column families to lists of qualifiers and kv details<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    Map&lt;String, List&lt;Map&lt;String, Object&gt;&gt;&gt; columns =<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      new HashMap&lt;String, List&lt;Map&lt;String, Object&gt;&gt;&gt;();<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    map.put("families", columns);<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    map.put("row", Bytes.toStringBinary(this.row));<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    int colCount = 0;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    // iterate through all column families affected<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    for (Map.Entry&lt;byte [], List&lt;Cell&gt;&gt; entry : this.familyMap.entrySet()) {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      // map from this family to details for each cell affected within the family<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      List&lt;Map&lt;String, Object&gt;&gt; qualifierDetails = new ArrayList&lt;Map&lt;String, Object&gt;&gt;();<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      columns.put(Bytes.toStringBinary(entry.getKey()), qualifierDetails);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      colCount += entry.getValue().size();<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      if (maxCols &lt;= 0) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>        continue;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      }<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      // add details for each cell<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      for (Cell cell: entry.getValue()) {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>        if (--maxCols &lt;= 0) {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>          continue;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>        }<a name="line.198"></a>
-<span class="sourceLineNo">199</span>        Map&lt;String, Object&gt; cellMap = cellToStringMap(cell);<a name="line.199"></a>
-<span class="sourceLineNo">200</span>        qualifierDetails.add(cellMap);<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>    map.put("totalColumns", colCount);<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    // add the id if set<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    if (getId() != null) {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      map.put("id", getId());<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    }<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    // Add the TTL if set<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    // Long.MAX_VALUE is the default, and is interpreted to mean this attribute<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    // has not been set.<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    if (getTTL() != Long.MAX_VALUE) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      map.put("ttl", getTTL());<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    }<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    return map;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>  }<a name="line.215"></a>
-<span class="sourceLineNo">216</span><a name="line.216"></a>
-<span class="sourceLineNo">217</span>  private static Map&lt;String, Object&gt; cellToStringMap(Cell c) {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    Map&lt;String, Object&gt; stringMap = new HashMap&lt;String, Object&gt;();<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    stringMap.put("qualifier", Bytes.toStringBinary(c.getQualifierArray(), c.getQualifierOffset(),<a name="line.219"></a>
-<span class="sourceLineNo">220</span>                c.getQualifierLength()));<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    stringMap.put("timestamp", c.getTimestamp());<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    stringMap.put("vlen", c.getValueLength());<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    List&lt;Tag&gt; tags = CellUtil.getTags(c);<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    if (tags != null) {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      List&lt;String&gt; tagsString = new ArrayList&lt;String&gt;();<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      for (Tag t : tags) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>        tagsString.add((t.getType()) + ":" + Bytes.toStringBinary(TagUtil.cloneValue(t)));<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      }<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      stringMap.put("tag", tagsString);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    }<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    return stringMap;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>  }<a name="line.232"></a>
-<span class="sourceLineNo">233</span><a name="line.233"></a>
-<span class="sourceLineNo">234</span>  /**<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   * Set the durability for this mutation<a name="line.235"></a>
-<span class="sourceLineNo">236</span>   * @param d<a name="line.236"></a>
-<span class="sourceLineNo">237</span>   */<a name="line.237"></a>
-<span class="sourceLineNo">238</span>  public Mutation setDurability(Durability d) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    this.durability = d;<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    return this;<a name="line.240"></a>
-<span class="sourceLineNo">241</span>  }<a name="line.241"></a>
-<span class="sourceLineNo">242</span><a name="line.242"></a>
-<span class="sourceLineNo">243</span>  /** Get the current durability */<a name="line.243"></a>
-<span class="sourceLineNo">244</span>  public Durability getDurability() {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    return this.durability;<a name="line.245"></a>
-<span class="sourceLineNo">246</span>  }<a name="line.246"></a>
-<span class="sourceLineNo">247</span><a name="line.247"></a>
-<span class="sourceLineNo">248</span>  /**<a name="line.248"></a>
-<span class="sourceLineNo">249</span>   * Method for retrieving the put's familyMap<a name="line.249"></a>
-<span class="sourceLineNo">250</span>   * @return familyMap<a name="line.250"></a>
-<span class="sourceLineNo">251</span>   */<a name="line.251"></a>
-<span class="sourceLineNo">252</span>  public NavigableMap&lt;byte [], List&lt;Cell&gt;&gt; getFamilyCellMap() {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    return this.familyMap;<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>   * Method for setting the put's familyMap<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   */<a name="line.258"></a>
-<span class="sourceLineNo">259</span>  public Mutation setFamilyCellMap(NavigableMap&lt;byte [], List&lt;Cell&gt;&gt; map) {<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    // TODO: Shut this down or move it up to be a Constructor.  Get new object rather than change<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    // this internal data member.<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    this.familyMap = map;<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    return this;<a name="line.263"></a>
-<span class="sourceLineNo">264</span>  }<a name="line.264"></a>
-<span class="sourceLineNo">265</span><a name="line.265"></a>
-<span class="sourceLineNo">266</span>  /**<a name="line.266"></a>
-<span class="sourceLineNo">267</span>   * Method to check if the familyMap is empty<a name="line.267"></a>
-<span class="sourceLineNo">268</span>   * @return true if empty, false otherwise<a name="line.268"></a>
-<span class="sourceLineNo">269</span>   */<a name="line.269"></a>
-<span class="sourceLineNo">270</span>  public boolean isEmpty() {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    return familyMap.isEmpty();<a name="line.271"></a>
-<span class="sourceLineNo">272</span>  }<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span>  /**<a name="line.274"></a>
-<span class="sourceLineNo">275</span>   * Method for retrieving the delete's row<a name="line.275"></a>
-<span class="sourceLineNo">276</span>   * @return row<a name="line.276"></a>
-<span class="sourceLineNo">277</span>   */<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  @Override<a name="line.278"></a>
-<span class="sourceLineNo">279</span>  public byte [] getRow() {<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    return this.row;<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>  @Override<a name="line.283"></a>
-<span class="sourceLineNo">284</span>  public int compareTo(final Row d) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    return Bytes.compareTo(this.getRow(), d.getRow());<a name="line.285"></a>
-<span class="sourceLineNo">286</span>  }<a name="line.286"></a>
-<span class="sourceLineNo">287</span><a name="line.287"></a>
-<span class="sourceLineNo">288</span>  /**<a name="line.288"></a>
-<span class="sourceLineNo">289</span>   * Method for retrieving the timestamp<a name="line.289"></a>
-<span class="sourceLineNo">290</span>   * @return timestamp<a name="line.290"></a>
-<span class="sourceLineNo">291</span>   */<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  public long getTimeStamp() {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    return this.ts;<a name="line.293"></a>
-<span class="sourceLineNo">294</span>  }<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>   * Marks that the clusters with the given clusterIds have consumed the mutation<a name="line.297"></a>
-<span class="sourceLineNo">298</span>   * @param clusterIds of the clusters that have consumed the mutation<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   */<a name="line.299"></a>
-<span class="sourceLineNo">300</span>  public Mutation setClusterIds(List&lt;UUID&gt; clusterIds) {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    ByteArrayDataOutput out = ByteStreams.newDataOutput();<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    out.writeInt(clusterIds.size());<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    for (UUID clusterId : clusterIds) {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      out.writeLong(clusterId.getMostSignificantBits());<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      out.writeLong(clusterId.getLeastSignificantBits());<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    }<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    setAttribute(CONSUMED_CLUSTER_IDS, out.toByteArray());<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    return this;<a name="line.308"></a>
-<span class="sourceLineNo">309</span>  }<a name="line.309"></a>
-<span class="sourceLineNo">310</span><a name="line.310"></a>
-<span class="sourceLineNo">311</span>  /**<a name="line.311"></a>
-<span class="sourceLineNo">312</span>   * @return the set of clusterIds that have consumed the mutation<a name="line.312"></a>
-<span class="sourceLineNo">313</span>   */<a name="line.313"></a>
-<span class="sourceLineNo">314</span>  public List&lt;UUID&gt; getClusterIds() {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    List&lt;UUID&gt; clusterIds = new ArrayList&lt;UUID&gt;();<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    byte[] bytes = getAttribute(CONSUMED_CLUSTER_IDS);<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    if(bytes != null) {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      ByteArrayDataInput in = ByteStreams.newDataInput(bytes);<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      int numClusters = in.readInt();<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      for(int i=0; i&lt;numClusters; i++){<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        clusterIds.add(new UUID(in.readLong(), in.readLong()));<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>    return clusterIds;<a name="line.324"></a>
-<span class="sourceLineNo">325</span>  }<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span>  /**<a name="line.327"></a>
-<span class="sourceLineNo">328</span>   * Sets the visibility expression associated with cells in this Mutation.<a name="line.328"></a>
-<span class="sourceLineNo">329</span>   * It is illegal to set &lt;code&gt;CellVisibility&lt;/code&gt; on &lt;code&gt;Delete&lt;/code&gt; mutation.<a name="line.329"></a>
-<span class="sourceLineNo">330</span>   * @param expression<a name="line.330"></a>
-<span class="sourceLineNo">331</span>   */<a name="line.331"></a>
-<span class="sourceLineNo">332</span>  public Mutation setCellVisibility(CellVisibility expression) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    this.setAttribute(VisibilityConstants.VISIBILITY_LABELS_ATTR_KEY, ProtobufUtil<a name="line.333"></a>
-<span class="sourceLineNo">334</span>        .toCellVisibility(expression).toByteArray());<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    return this;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>  }<a name="line.336"></a>
-<span class="sourceLineNo">337</span><a name="line.337"></a>
-<span class="sourceLineNo">338</span>  /**<a name="line.338"></a>
-<span class="sourceLineNo">339</span>   * @return CellVisibility associated with cells in this Mutation.<a name="line.339"></a>
-<span class="sourceLineNo">340</span>   * @throws DeserializationException<a name="line.340"></a>
-<span class="sourceLineNo">341</span>   */<a name="line.341"></a>
-<span class="sourceLineNo">342</span>  public CellVisibility getCellVisibility() throws DeserializationException {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>    byte[] cellVisibilityBytes = this.getAttribute(VisibilityConstants.VISIBILITY_LABELS_ATTR_KEY);<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    if (cellVisibilityBytes == null) return null;<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    return ProtobufUtil.toCellVisibility(cellVisibilityBytes);<a name="line.345"></a>
-<span class="sourceLineNo">346</span>  }<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>   * Number of KeyValues carried by this Mutation.<a name="line.349"></a>
-<span class="sourceLineNo">350</span>   * @return the total number of KeyValues<a name="line.350"></a>
-<span class="sourceLineNo">351</span>   */<a name="line.351"></a>
-<span class="sourceLineNo">352</span>  public int size() {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    int size = 0;<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    for (List&lt;Cell&gt; cells : this.familyMap.values()) {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      size += cells.size();<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    }<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    return size;<a name="line.357"></a>
-<span class="sourceLineNo">358</span>  }<a name="line.358"></a>
-<span class="sourceLineNo">359</span><a name="line.359"></a>
-<span class="sourceLineNo">360</span>  /**<a name="line.360"></a>
-<span class="sourceLineNo">361</span>   * @return the number of different families<a name="line.361"></a>
-<span class="sourceLineNo">362</span>   */<a name="line.362"></a>
-<span class="sourceLineNo">363</span>  public int numFamilies() {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    return familyMap.size();<a name="line.364"></a>
-<span class="sourceLineNo">365</span>  }<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span>  /**<a name="line.367"></a>
-<span class="sourceLineNo">368</span>   * @return Calculate what Mutation adds to class heap size.<a name="line.368"></a>
-<span class="sourceLineNo">369</span>   */<a name="line.369"></a>
-<span class="sourceLineNo">370</span>  @Override<a name="line.370"></a>
-<span class="sourceLineNo">371</span>  public long heapSize() {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    long heapsize = MUTATION_OVERHEAD;<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    // Adding row<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    heapsize += ClassSize.align(ClassSize.ARRAY + this.row.length);<a name="line.374"></a>
-<span class="sourceLineNo">375</span><a name="line.375"></a>
-<span class="sourceLineNo">376</span>    // Adding map overhead<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    heapsize +=<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      ClassSize.align(this.familyMap.size() * ClassSize.MAP_ENTRY);<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    for(Map.Entry&lt;byte [], List&lt;Cell&gt;&gt; entry : this.familyMap.entrySet()) {<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      //Adding key overhead<a name="line.380"></a>
-<span class="sourceLineNo">381</span>      heapsize +=<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        ClassSize.align(ClassSize.ARRAY + entry.getKey().length);<a name="line.382"></a>
-<span class="sourceLineNo">383</span><a name="line.383"></a>
-<span class="sourceLineNo">384</span>      //This part is kinds tricky since the JVM can reuse references if you<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      //store the same value, but have a good match with SizeOf at the moment<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      //Adding value overhead<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      heapsize += ClassSize.align(ClassSize.ARRAYLIST);<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      int size = entry.getValue().size();<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      heapsize += ClassSize.align(ClassSize.ARRAY +<a name="line.389"></a>
-<span class="sourceLineNo">390</span>          size * ClassSize.REFERENCE);<a name="line.390"></a>
-<span class="sourceLineNo">391</span><a name="line.391"></a>
-<span class="sourceLineNo">392</span>      for(Cell cell : entry.getValue()) {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>        heapsize += CellUtil.estimatedHeapSizeOf(cell);<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>    heapsize += getAttributeSize();<a name="line.396"></a>
-<span class="sourceLineNo">397</span>    heapsize += extraHeapSize();<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    return ClassSize.align(heapsize);<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>  /**<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   * @return The serialized ACL for this operation, or null if none<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   */<a name="line.403"></a>
-<span class="sourceLineNo">404</span>  public byte[] getACL() {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    return getAttribute(AccessControlConstants.OP_ATTRIBUTE_ACL);<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>  /**<a name="line.408"></a>
-<span class="sourceLineNo">409</span>   * @param user User short name<a name="line.409"></a>
-<span class="sourceLineNo">410</span>   * @param perms Permissions for the user<a name="line.410"></a>
-<span class="sourceLineNo">411</span>   */<a name="line.411"></a>
-<span class="sourceLineNo">412</span>  public Mutation setACL(String user, Permission perms) {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    setAttribute(AccessControlConstants.OP_ATTRIBUTE_ACL,<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      ProtobufUtil.toUsersAndPermissions(user, perms).toByteArray());<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    return this;<a name="line.415"></a>
-<span class="sourceLineNo">416</span>  }<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>   * @param perms A map of permissions for a user or users<a name="line.419"></a>
-<span class="sourceLineNo">420</span>   */<a name="line.420"></a>
-<span class="sourceLineNo">421</span>  public Mutation setACL(Map&lt;String, Permission&gt; perms) {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    ListMultimap&lt;String, Permission&gt; permMap = ArrayListMultimap.create();<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    for (Map.Entry&lt;String, Permission&gt; entry : perms.entrySet()) {<a name="line.423"></a>
-<span class="sourceLineNo">424</span>      permMap.put(entry.getKey(), entry.getValue());<a name="line.424"></a>
-<span class="sourceLineNo">425</span>    }<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    setAttribute(AccessControlConstants.OP_ATTRIBUTE_ACL,<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      ProtobufUtil.toUsersAndPermissions(permMap).toByteArray());<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    return this;<a name="line.428"></a>
-<span class="sourceLineNo">429</span>  }<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span>  /**<a name="line.431"></a>
-<span class="sourceLineNo">432</span>   * Return the TTL requested for the result of the mutation, in milliseconds.<a name="line.432"></a>
-<span class="sourceLineNo">433</span>   * @return the TTL requested for the result of the mutation, in milliseconds,<a name="line.433"></a>
-<span class="sourceLineNo">434</span>   * or Long.MAX_VALUE if unset<a name="line.434"></a>
-<span class="sourceLineNo">435</span>   */<a name="line.435"></a>
-<span class="sourceLineNo">436</span>  public long getTTL() {<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    byte[] ttlBytes = getAttribute(OP_ATTRIBUTE_TTL);<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    if (ttlBytes != null) {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      return Bytes.toLong(ttlBytes);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    }<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    return Long.MAX_VALUE;<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>  /**<a name="line.444"></a>
-<span class="sourceLineNo">445</span>   * Set the TTL desired for the result of the mutation, in milliseconds.<a name="line.445"></a>
-<span class="sourceLineNo">446</span>   * @param ttl the TTL desired for the result of the mutation, in milliseconds<a name="line.446"></a>
-<span class="sourceLineNo">447</span>   * @return this<a name="line.447"></a>
-<span class="sourceLineNo">448</span>   */<a name="line.448"></a>
-<span class="sourceLineNo">449</span>  public Mutation setTTL(long ttl) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    setAttribute(OP_ATTRIBUTE_TTL, Bytes.toBytes(ttl));<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    return this;<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  }<a name="line.452"></a>
-<span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span>  /**<a name="line.454"></a>
-<span class="sourceLineNo">455</span>   * Subclasses should override this method to add the heap size of their own fields.<a name="line.455"></a>
-<span class="sourceLineNo">456</span>   * @return the heap size to add (will be aligned).<a name="line.456"></a>
-<span class="sourceLineNo">457</span>   */<a name="line.457"></a>
-<span class="sourceLineNo">458</span>  protected long extraHeapSize(){<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    return 0L;<a name="line.459"></a>
-<span class="sourceLineNo">460</span>  }<a name="line.460"></a>
-<span class="sourceLineNo">461</span><a name="line.461"></a>
-<span class="sourceLineNo">462</span><a name="line.462"></a>
-<span class="sourceLineNo">463</span>  /**<a name="line.463"></a>
-<span class="sourceLineNo">464</span>   * @param row Row to check<a name="line.464"></a>
-<span class="sourceLineNo">465</span>   * @throws IllegalArgumentException Thrown if &lt;code&gt;row&lt;/code&gt; is empty or null or<a name="line.465"></a>
-<span class="sourceLineNo">466</span>   * &amp;gt; {@link HConstants#MAX_ROW_LENGTH}<a name="line.466"></a>
-<span class="sourceLineNo">467</span>   * @return &lt;code&gt;row&lt;/code&gt;<a name="line.467"></a>
-<span class="sourceLineNo">468</span>   */<a name="line.468"></a>
-<span class="sourceLineNo">469</span>  static byte [] checkRow(final byte [] row) {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    return checkRow(row, 0, row == null? 0: row.length);<a name="line.470"></a>
+<span class="sourceLineNo">085</span>  private static final String RETURN_RESULTS = "_rr_";<a name="line.85"></a>
+<span class="sourceLineNo">086</span><a name="line.86"></a>
+<span class="sourceLineNo">087</span>  protected byte [] row = null;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>  protected long ts = HConstants.LATEST_TIMESTAMP;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>  protected Durability durability = Durability.USE_DEFAULT;<a name="line.89"></a>
+<span class="sourceLineNo">090</span><a name="line.90"></a>
+<span class="sourceLineNo">091</span>  // A Map sorted by column family.<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  protected NavigableMap&lt;byte [], List&lt;Cell&gt;&gt; familyMap =<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    new TreeMap&lt;byte [], List&lt;Cell&gt;&gt;(Bytes.BYTES_COMPARATOR);<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span>  @Override<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  public CellScanner cellScanner() {<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    return CellUtil.createCellScanner(getFamilyCellMap());<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>  /**<a name="line.100"></a>
+<span class="sourceLineNo">101</span>   * Creates an empty list if one doesn't exist for the given column family<a name="line.101"></a>
+<span class="sourceLineNo">102</span>   * or else it returns the associated list of Cell objects.<a name="line.102"></a>
+<span class="sourceLineNo">103</span>   *<a name="line.103"></a>
+<span class="sourceLineNo">104</span>   * @param family column family<a name="line.104"></a>
+<span class="sourceLineNo">105</span>   * @return a list of Cell objects, returns an empty list if one doesn't exist.<a name="line.105"></a>
+<span class="sourceLineNo">106</span>   */<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  List&lt;Cell&gt; getCellList(byte[] family) {<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    List&lt;Cell&gt; list = this.familyMap.get(family);<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    if (list == null) {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      list = new ArrayList&lt;Cell&gt;();<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    }<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    return list;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>  }<a name="line.113"></a>
+<span class="sourceLineNo">114</span><a name="line.114"></a>
+<span class="sourceLineNo">115</span>  /*<a name="line.115"></a>
+<span class="sourceLineNo">116</span>   * Create a KeyValue with this objects row key and the Put identifier.<a name="line.116"></a>
+<span class="sourceLineNo">117</span>   *<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   * @return a KeyValue with this objects row key and the Put identifier.<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   */<a name="line.119"></a>
+<span class="sourceLineNo">120</span>  KeyValue createPutKeyValue(byte[] family, byte[] qualifier, long ts, byte[] value) {<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    return new KeyValue(this.row, family, qualifier, ts, KeyValue.Type.Put, value);<a name="line.121"></a>
+<span class="sourceLineNo">122</span>  }<a name="line.122"></a>
+<span class="sourceLineNo">123</span><a name="line.123"></a>
+<span class="sourceLineNo">124</span>  /**<a name="line.124"></a>
+<span class="sourceLineNo">125</span>   * Create a KeyValue with this objects row key and the Put identifier.<a name="line.125"></a>
+<span class="sourceLineNo">126</span>   * @param family<a name="line.126"></a>
+<span class="sourceLineNo">127</span>   * @param qualifier<a name="line.127"></a>
+<span class="sourceLineNo">128</span>   * @param ts<a name="line.128"></a>
+<span class="sourceLineNo">129</span>   * @param value<a name="line.129"></a>
+<span class="sourceLineNo">130</span>   * @param tags - Specify the Tags as an Array<a name="line.130"></a>
+<span class="sourceLineNo">131</span>   * @return a KeyValue with this objects row key and the Put identifier.<a name="line.131"></a>
+<span class="sourceLineNo">132</span>   */<a name="line.132"></a>
+<span class="sourceLineNo">133</span>  KeyValue createPutKeyValue(byte[] family, byte[] qualifier, long ts, byte[] value, Tag[] tags) {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    KeyValue kvWithTag = new KeyValue(this.row, family, qualifier, ts, value, tags);<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    return kvWithTag;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  }<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>   * Create a KeyValue with this objects row key and the Put identifier.<a name="line.139"></a>
+<span class="sourceLineNo">140</span>   *<a name="line.140"></a>
+<span class="sourceLineNo">141</span>   * @return a KeyValue with this objects row key and the Put identifier.<a name="line.141"></a>
+<span class="sourceLineNo">142</span>   */<a name="line.142"></a>
+<span class="sourceLineNo">143</span>  KeyValue createPutKeyValue(byte[] family, ByteBuffer qualifier, long ts, ByteBuffer value,<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      Tag[] tags) {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    return new KeyValue(this.row, 0, this.row == null ? 0 : this.row.length,<a name="line.145"></a>
+<span class="sourceLineNo">146</span>        family, 0, family == null ? 0 : family.length,<a name="line.146"></a>
+<span class="sourceLineNo">147</span>        qualifier, ts, KeyValue.Type.Put, value, tags != null ? Arrays.asList(tags) : null);<a name="line.147"></a>
+<span class="sourceLineNo">148</span>  }<a name="line.148"></a>
+<span class="sourceLineNo">149</span><a name="line.149"></a>
+<span class="sourceLineNo">150</span>  /**<a name="line.150"></a>
+<span class="sourceLineNo">151</span>   * Compile the column family (i.e. schema) information<a name="line.151"></a>
+<span class="sourceLineNo">152</span>   * into a Map. Useful for parsing and aggregation by debugging,<a name="line.152"></a>
+<span class="sourceLineNo">153</span>   * logging, and administration tools.<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   * @return Map<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   */<a name="line.155"></a>
+<span class="sourceLineNo">156</span>  @Override<a name="line.156"></a>
+<span class="sourceLineNo">157</span>  public Map&lt;String, Object&gt; getFingerprint() {<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    Map&lt;String, Object&gt; map = new HashMap&lt;String, Object&gt;();<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    List&lt;String&gt; families = new ArrayList&lt;String&gt;();<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    // ideally, we would also include table information, but that information<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    // is not stored in each Operation instance.<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    map.put("families", families);<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    for (Map.Entry&lt;byte [], List&lt;Cell&gt;&gt; entry : this.familyMap.entrySet()) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      families.add(Bytes.toStringBinary(entry.getKey()));<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    }<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    return map;<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>  /**<a name="line.169"></a>
+<span class="sourceLineNo">170</span>   * Compile the details beyond the scope of getFingerprint (row, columns,<a name="line.170"></a>
+<span class="sourceLineNo">171</span>   * timestamps, etc.) into a Map along with the fingerprinted information.<a name="line.171"></a>
+<span class="sourceLineNo">172</span>   * Useful for debugging, logging, and administration tools.<a name="line.172"></a>
+<span class="sourceLineNo">173</span>   * @param maxCols a limit on the number of columns output prior to truncation<a name="line.173"></a>
+<span class="sourceLineNo">174</span>   * @return Map<a name="line.174"></a>
+<span class="sourceLineNo">175</span>   */<a name="line.175"></a>
+<span class="sourceLineNo">176</span>  @Override<a name="line.176"></a>
+<span class="sourceLineNo">177</span>  public Map&lt;String, Object&gt; toMap(int maxCols) {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    // we start with the fingerprint map and build on top of it.<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    Map&lt;String, Object&gt; map = getFingerprint();<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    // replace the fingerprint's simple list of families with a<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    // map from column families to lists of qualifiers and kv details<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    Map&lt;String, List&lt;Map&lt;String, Object&gt;&gt;&gt; columns =<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      new HashMap&lt;String, List&lt;Map&lt;String, Object&gt;&gt;&gt;();<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    map.put("families", columns);<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    map.put("row", Bytes.toStringBinary(this.row));<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    int colCount = 0;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    // iterate through all column families affected<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    for (Map.Entry&lt;byte [], List&lt;Cell&gt;&gt; entry : this.familyMap.entrySet()) {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      // map from this family to details for each cell affected within the family<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      List&lt;Map&lt;String, Object&gt;&gt; qualifierDetails = new ArrayList&lt;Map&lt;String, Object&gt;&gt;();<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      columns.put(Bytes.toStringBinary(entry.getKey()), qualifierDetails);<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      colCount += entry.getValue().size();<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      if (maxCols &lt;= 0) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>        continue;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      }<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      // add details for each cell<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      for (Cell cell: entry.getValue()) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        if (--maxCols &lt;= 0) {<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>        Map&lt;String, Object&gt; cellMap = cellToStringMap(cell);<a name="line.201"></a>
+<span class="sourceLineNo">202</span>        qualifierDetails.add(cellMap);<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>
+<span class="sourceLineNo">205</span>    map.put("totalColumns", colCount);<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    // add the id if set<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    if (getId() != null) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      map.put("id", getId());<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    }<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    // Add the TTL if set<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    // Long.MAX_VALUE is the default, and is interpreted to mean this attribute<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    // has not been set.<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    if (getTTL() != Long.MAX_VALUE) {<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      map.put("ttl", getTTL());<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    }<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    return map;<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>  private static Map&lt;String, Object&gt; cellToStringMap(Cell c) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    Map&lt;String, Object&gt; stringMap = new HashMap&lt;String, Object&gt;();<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    stringMap.put("qualifier", Bytes.toStringBinary(c.getQualifierArray(), c.getQualifierOffset(),<a name="line.221"></a>
+<span class="sourceLineNo">222</span>                c.getQualifierLength()));<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    stringMap.put("timestamp", c.getTimestamp());<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    stringMap.put("vlen", c.getValueLength());<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    List&lt;Tag&gt; tags = CellUtil.getTags(c);<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    if (tags != null) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      List&lt;String&gt; tagsString = new ArrayList&lt;String&gt;();<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      for (Tag t : tags) {<a name="line.228"></a>
+<span class="sourceLineNo">229</span>        tagsString.add((t.getType()) + ":" + Bytes.toStringBinary(TagUtil.cloneValue(t)));<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      }<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      stringMap.put("tag", tagsString);<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    }<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    return stringMap;<a name="line.233"></a>
+<span class="sourceLineNo">234</span>  }<a name="line.234"></a>
+<span class="sourceLineNo">235</span><a name="line.235"></a>
+<span class="sourceLineNo">236</span>  /**<a name="line.236"></a>
+<span class="sourceLineNo">237</span>   * Set the durability for this mutation<a name="line.237"></a>
+<span class="sourceLineNo">238</span>   * @param d<a name="line.238"></a>
+<span class="sourceLineNo">239</span>   */<a name="line.239"></a>
+<span class="sourceLineNo">240</span>  public Mutation setDurability(Durability d) {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    this.durability = d;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    return this;<a name="line.242"></a>
+<span class="sourceLineNo">243</span>  }<a name="line.243"></a>
+<span class="sourceLineNo">244</span><a name="line.244"></a>
+<span class="sourceLineNo">245</span>  /** Get the current durability */<a name="line.245"></a>
+<span class="sourceLineNo">246</span>  public Durability getDurability() {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    return this.durability;<a name="line.247"></a>
+<span class="sourceLineNo">248</span>  }<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span>  /**<a name="line.250"></a>
+<span class="sourceLineNo">251</span>   * Method for retrieving the put's familyMap<a name="line.251"></a>
+<span class="sourceLineNo">252</span>   * @return familyMap<a name="line.252"></a>
+<span class="sourceLineNo">253</span>   */<a name="line.253"></a>
+<span class="sourceLineNo">254</span>  public NavigableMap&lt;byte [], List&lt;Cell&gt;&gt; getFamilyCellMap() {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    return this.familyMap;<a name="line.255"></a>
+<span class="sourceLineNo">256</span>  }<a name="line.256"></a>
+<span class="sourceLineNo">257</span><a name="line.257"></a>
+<span class="sourceLineNo">258</span>  /**<a name="line.258"></a>
+<span class="sourceLineNo">259</span>   * Method for setting the put's familyMap<a name="line.259"></a>
+<span class="sourceLineNo">260</span>   */<a name="line.260"></a>
+<span class="sourceLineNo">261</span>  public Mutation setFamilyCellMap(NavigableMap&lt;byte [], List&lt;Cell&gt;&gt; map) {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    // TODO: Shut this down or move it up to be a Constructor.  Get new object rather than change<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    // this internal data member.<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    this.familyMap = map;<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    return this;<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>  /**<a name="line.268"></a>
+<span class="sourceLineNo">269</span>   * Method to check if the familyMap is empty<a name="line.269"></a>
+<span class="sourceLineNo">270</span>   * @return true if empty, false otherwise<a name="line.270"></a>
+<span class="sourceLineNo">271</span>   */<a name="line.271"></a>
+<span class="sourceLineNo">272</span>  public boolean isEmpty() {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    return familyMap.isEmpty();<a name="line.273"></a>
+<span class="sourceLineNo">274</span>  }<a name="line.274"></a>
+<span class="sourceLineNo">275</span><a name="line.275"></a>
+<span class="sourceLineNo">276</span>  /**<a name="line.276"></a>
+<span class="sourceLineNo">277</span>   * Method for retrieving the delete's row<a name="line.277"></a>
+<span class="sourceLineNo">278</span>   * @return row<a name="line.278"></a>
+<span class="sourceLineNo">279</span>   */<a name="line.279"></a>
+<span class="sourceLineNo">280</span>  @Override<a name="line.280"></a>
+<span class="sourceLineNo">281</span>  public byte [] getRow() {<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    return this.row;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  }<a name="line.283"></a>
+<span class="sourceLineNo">284</span><a name="line.284"></a>
+<span class="sourceLineNo">285</span>  @Override<a name="line.285"></a>
+<span class="sourceLineNo">286</span>  public int compareTo(final Row d) {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    return Bytes.compareTo(this.getRow(), d.getRow());<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>  /**<a name="line.290"></a>
+<span class="sourceLineNo">291</span>   * Method for retrieving the timestamp<a name="line.291"></a>
+<span class="sourceLineNo">292</span>   * @return timestamp<a name="line.292"></a>
+<span class="sourceLineNo">293</span>   */<a name="line.293"></a>
+<span class="sourceLineNo">294</span>  public long getTimeStamp() {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    return this.ts;<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>   * Marks that the clusters with the given clusterIds have consumed the mutation<a name="line.299"></a>
+<span class="sourceLineNo">300</span>   * @param clusterIds of the clusters that have consumed the mutation<a name="line.300"></a>
+<span class="sourceLineNo">301</span>   */<a name="line.301"></a>
+<span class="sourceLineNo">302</span>  public Mutation setClusterIds(List&lt;UUID&gt; clusterIds) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    ByteArrayDataOutput out = ByteStreams.newDataOutput();<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    out.writeInt(clusterIds.size());<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    for (UUID clusterId : clusterIds) {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      out.writeLong(clusterId.getMostSignificantBits());<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      out.writeLong(clusterId.getLeastSignificantBits());<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    }<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    setAttribute(CONSUMED_CLUSTER_IDS, out.toByteArray());<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    return this;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>  }<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>   * @return the set of clusterIds that have consumed the mutation<a name="line.314"></a>
+<span class="sourceLineNo">315</span>   */<a name="line.315"></a>
+<span class="sourceLineNo">316</span>  public List&lt;UUID&gt; getClusterIds() {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    List&lt;UUID&gt; clusterIds = new ArrayList&lt;UUID&gt;();<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    byte[] bytes = getAttribute(CONSUMED_CLUSTER_IDS);<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    if(bytes != null) {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      ByteArrayDataInput in = ByteStreams.newDataInput(bytes);<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      int numClusters = in.readInt();<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      for(int i=0; i&lt;numClusters; i++){<a name="line.322"></a>
+<span class="sourceLineNo">323</span>        clusterIds.add(new UUID(in.readLong(), in.readLong()));<a name="line.323"></a>
+<span class="sourceLineNo">324</span>      }<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    }<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    return clusterIds;<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>  /**<a name="line.329"></a>
+<span class="sourceLineNo">330</span>   * Sets the visibility expression associated with cells in this Mutation.<a name="line.330"></a>
+<span class="sourceLineNo">331</span>   * It is illegal to set &lt;code&gt;CellVisibility&lt;/code&gt; on &lt;code&gt;Delete&lt;/code&gt; mutation.<a name="line.331"></a>
+<span class="sourceLineNo">332</span>   * @param expression<a name="line.332"></a>
+<span class="sourceLineNo">333</span>   */<a name="line.333"></a>
+<span class="sourceLineNo">334</span>  public Mutation setCellVisibility(CellVisibility expression) {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    this.setAttribute(VisibilityConstants.VISIBILITY_LABELS_ATTR_KEY, ProtobufUtil<a name="line.335"></a>
+<span class="sourceLineNo">336</span>        .toCellVisibility(expression).toByteArray());<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    return this;<a name="line.337"></a>
+<span class="sourceLineNo">338</span>  }<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span>  /**<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   * @return CellVisibility associated with cells in this Mutation.<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   * @throws DeserializationException<a name="line.342"></a>
+<span class="sourceLineNo">343</span>   */<a name="line.343"></a>
+<span class="sourceLineNo">344</span>  public CellVisibility getCellVisibility() throws DeserializationException {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    byte[] cellVisibilityBytes = this.getAttribute(VisibilityConstants.VISIBILITY_LABELS_ATTR_KEY);<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    if (cellVisibilityBytes == null) return null;<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    return ProtobufUtil.toCellVisibility(cellVisibilityBytes);<a name="line.347"></a>
+<span class="sourceLineNo">348</span>  }<a name="line.348"></a>
+<span class="sourceLineNo">349</span><a name="line.349"></a>
+<span class="sourceLineNo">350</span>  /**<a name="line.350"></a>
+<span class="sourceLineNo">351</span>   * Number of KeyValues carried by this Mutation.<a name="line.351"></a>
+<span class="sourceLineNo">352</span>   * @return the total number of KeyValues<a name="line.352"></a>
+<span class="sourceLineNo">353</span>   */<a name="line.353"></a>
+<span class="sourceLineNo">354</span>  public int size() {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    int size = 0;<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    for (List&lt;Cell&gt; cells : this.familyMap.values()) {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      size += cells.size();<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    return size;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>  }<a name="line.360"></a>
+<span class="sourceLineNo">361</span><a name="line.361"></a>
+<span class="sourceLineNo">362</span>  /**<a name="line.362"></a>
+<span class="sourceLineNo">363</span>   * @return the number of different families<a name="line.363"></a>
+<span class="sourceLineNo">364</span>   */<a name="line.364"></a>
+<span class="sourceLineNo">365</span>  public int numFamilies() {<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    return familyMap.size();<a name="line.366"></a>
+<span class="sourceLineNo">367</span>  }<a name="line.367"></a>
+<span class="sourceLineNo">368</span><a name="line.368"></a>
+<span class="sourceLineNo">369</span>  /**<a name="line.369"></a>
+<span class="sourceLineNo">370</span>   * @return Calculate what Mutation adds to class heap size.<a name="line.370"></a>
+<span class="sourceLineNo">371</span>   */<a name="line.371"></a>
+<span class="sourceLineNo">372</span>  @Override<a name="line.372"></a>
+<span class="sourceLineNo">373</span>  public long heapSize() {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    long heapsize = MUTATION_OVERHEAD;<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    // Adding row<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    heapsize += ClassSize.align(ClassSize.ARRAY + this.row.length);<a name="line.376"></a>
+<span class="sourceLineNo">377</span><a name="line.377"></a>
+<span class="sourceLineNo">378</span>    // Adding map overhead<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    heapsize +=<a name="line.379"></a>
+<span class="sourceLineNo">380</span>      ClassSize.align(this.familyMap.size() * ClassSize.MAP_ENTRY);<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    for(Map.Entry&lt;byte [], List&lt;Cell&gt;&gt; entry : this.familyMap.entrySet()) {<a name="line.381"></a>
+<span class="sourceLineNo">382</span>      //Adding key overhead<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      heapsize +=<a name="line.383"></a>
+<span class="sourceLineNo">384</span>        ClassSize.align(ClassSize.ARRAY + entry.getKey().length);<a name="line.384"></a>
+<span class="sourceLineNo">385</span><a name="line.385"></a>
+<span class="sourceLineNo">386</span>      //This part is kinds tricky since the JVM can reuse references if you<a name="line.386"></a>
+<span class="sourceLineNo">387</span>      //store the same value, but have a good match with SizeOf at the moment<a name="line.387"></a>
+<span class="sourceLineNo">388</span>      //Adding value overhead<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      heapsize += ClassSize.align(ClassSize.ARRAYLIST);<a name="line.389"></a>
+<span class="sourceLineNo">390</span>      int size = entry.getValue().size();<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      heapsize += ClassSize.align(ClassSize.ARRAY +<a name="line.391"></a>
+<span class="sourceLineNo">392</span>          size * ClassSize.REFERENCE);<a name="line.392"></a>
+<span class="sourceLineNo">393</span><a name="line.393"></a>
+<span class="sourceLineNo">394</span>      for(Cell cell : entry.getValue()) {<a name="line.394"></a>
+<span class="sourceLineNo">395</span>        heapsize += CellUtil.estimatedHeapSizeOf(cell);<a name="line.395"></a>
+<span class="sourceLineNo">396</span>      }<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    }<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    heapsize += getAttributeSize();<a name="line.398"></a>
+<span class="sourceLineNo">399</span>    heapsize += extraHeapSize();<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    return ClassSize.align(heapsize);<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>  /**<a name="line.403"></a>
+<span class="sourceLineNo">404</span>   * @return The serialized ACL for this operation, or null if none<a name="line.404"></a>
+<span class="sourceLineNo">405</span>   */<a name="line.405"></a>
+<span class="sourceLineNo">406</span>  public byte[] getACL() {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    return getAttribute(AccessControlConstants.OP_ATTRIBUTE_ACL);<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>  /**<a name="line.410"></a>
+<span class="sourceLineNo">411</span>   * @param user User short name<a name="line.411"></a>
+<span class="sourceLineNo">412</span>   * @param perms Permissions for the user<a name="line.412"></a>
+<span class="sourceLineNo">413</span>   */<a name="line.413"></a>
+<span class="sourceLineNo">414</span>  public Mutation setACL(String user, Permission perms) {<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    setAttribute(AccessControlConstants.OP_ATTRIBUTE_ACL,<a name="line.415"></a>
+<span class="sourceLineNo">416</span>      ProtobufUtil.toUsersAndPermissions(user, perms).toByteArray());<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    return this;<a name="line.417"></a>
+<span class="sourceLineNo">418</span>  }<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>   * @param perms A map of permissions for a user or users<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   */<a name="line.422"></a>
+<span class="sourceLineNo">423</span>  public Mutation setACL(Map&lt;String, Permission&gt; perms) {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>    ListMultimap&lt;String, Permission&gt; permMap = ArrayListMultimap.create();<a name="line.424"></a>
+<span class="sourceLineNo">425</span>    for (Map.Entry&lt;String, Permission&gt; entry : perms.entrySet()) {<a name="line.425"></a>
+<span class="sourceLineNo">426</span>      permMap.put(entry.getKey(), entry.getValue());<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    }<a name="line.427"></a>
+<span class="sourceLineNo">428</span>    setAttribute(AccessControlConstants.OP_ATTRIBUTE_ACL,<a name="line.428"></a>
+<span class="sourceLineNo">429</span>      ProtobufUtil.toUsersAndPermissions(permMap).toByteArray());<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    return this;<a name="line.430"></a>
+<span class="sourceLineNo">431</span>  }<a name="line.431"></a>
+<span class="sourceLineNo">432</span><a name="line.432"></a>
+<span class="sourceLineNo">433</span>  /**<a name="line.433"></a>
+<span class="sourceLineNo">434</span>   * Return the TTL requested for the result of the mutation, in milliseconds.<a name="line.434"></a>
+<span class="sourceLineNo">435</span>   * @return the TTL requested for the result of the mutation, in milliseconds,<a name="line.435"></a>
+<span class="sourceLineNo">436</span>   * or Long.MAX_VALUE if unset<a name="line.436"></a>
+<span class="sourceLineNo">437</span>   */<a name="line.437"></a>
+<span class="sourceLineNo">438</span>  public long getTTL() {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>    byte[] ttlBytes = getAttribute(OP_ATTRIBUTE_TTL);<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    if (ttlBytes != null) {<a name="line.440"></a>
+<span class="sourceLineNo">441</span>      return Bytes.toLong(ttlBytes);<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    }<a name="line.442"></a>
+<span class="sourceLineNo">443</span>    return Long.MAX_VALUE;<a name="line.443"></a>
+<span class="sourceLineNo">444</span>  }<a name="line.444"></a>
+<span class="sourceLineNo">445</span><a name="line.445"></a>
+<span class="sourceLineNo">446</span>  /**<a name="line.446"></a>
+<span class="sourceLineNo">447</span>   * Set the TTL desired for the result of the mutation, in milliseconds.<a name="line.447"></a>
+<span class="sourceLineNo">448</span>   * @param ttl the TTL desired for the result of the mutation, in milliseconds<a name="line.448"></a>
+<span class="sourceLineNo">449</span>   * @return this<a name="line.449"></a>
+<span class="sourceLineNo">450</span>   */<a name="line.450"></a>
+<span class="sourceLineNo">451</span>  public Mutation setTTL(long ttl) {<a name="line.451"></a>
+<span class="sourceLineNo">452</span>    setAttribute(OP_ATTRIBUTE_TTL, Bytes.toBytes(ttl));<a name="line.452"></a>
+<span class="sourceLineNo">453</span>    return this;<a name="line.453"></a>
+<span class="sourceLineNo">454</span>  }<a name="line.454"></a>
+<span class="sourceLineNo">455</span><a name="line.455"></a>
+<span class="sourceLineNo">456</span>  /**<a name="line.456"></a>
+<span class="sourceLineNo">457</span>   * @return current value for returnResults<a name="line.457"></a>
+<span class="sourceLineNo">458</span>   */<a name="line.458"></a>
+<span class="sourceLineNo">459</span>  // Used by Increment and Append only.<a name="line.459"></a>
+<span class="sourceLineNo">460</span>  @InterfaceAudience.Private<a name="line.460"></a>
+<span class="sourceLineNo">461</span>  protected boolean isReturnResults() {<a name="line.461"></a>
+<span class="sourceLineNo">462</span>    byte[] v = getAttribute(RETURN_RESULTS);<a name="line.462"></a>
+<span class="sourceLineNo">463</span>    return v == null ? true : Bytes.toBoolean(v);<a name="line.463"></a>
+<span class="sourceLineNo">464</span>  }<a name="line.464"></a>
+<span class="sourceLineNo">465</span><a name="line.465"></a>
+<span class="sourceLineNo">466</span>  @InterfaceAudience.Private<a name="line.466"></a>
+<span class="sourceLineNo">467</span>  // Used by Increment and Append only.<a name="line.467"></a>
+<span class="sourceLineNo">468</span>  protected Mutation setReturnResults(boolean returnResults) {<a name="line.468"></a>
+<span class="sourceLineNo">469</span>    setAttribute(RETURN_RESULTS, Bytes.toBytes(returnResults));<a name="line.469"></a>
+<span class="sourceLineNo">470</span>    return this;<a name="line.470"></a>
 <span class="sourceLineNo">471</span>  }<a name="line.471"></a>
 <span class="sourceLineNo">472</span><a name="line.472"></a>
 <span class="sourceLineNo">473</span>  /**<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   * @param row Row to check<a name="line.474"></a>
-<span class="sourceLineNo">475</span>   * @param offset<a name="line.475"></a>
-<span class="sourceLineNo">476</span>   * @param length<a name="line.476"></a>
-<span class="sourceLineNo">477</span>   * @throws IllegalArgumentException Thrown if &lt;code&gt;row&lt;/code&gt; is empty or null or<a name="line.477"></a>
-<span class="sourceLineNo">478</span>   * &amp;gt; {@link HConstants#MAX_ROW_LENGTH}<a name="line.478"></a>
-<span class="sourceLineNo">479</span>   * @return &lt;code&gt;row&lt;/code&gt;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>   */<a name="line.480"></a>
-<span class="sourceLineNo">481</span>  static byte [] checkRow(final byte [] row, final int offset, final int length) {<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    if (row == null) {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      throw new IllegalArgumentException("Row buffer is null");<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    }<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    if (length == 0) {<a name="line.485"></a>
-<span class="sourceLineNo">486</span>      throw new IllegalArgumentException("Row length is 0");<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    }<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    if (length &gt; HConstants.MAX_ROW_LENGTH) {<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      throw new IllegalArgumentException("Row length " + length + " is &gt; " +<a name="line.489"></a>
-<span class="sourceLineNo">490</span>        HConstants.MAX_ROW_LENGTH);<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    }<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    return row;<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>  static void checkRow(ByteBuffer row) {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    if (row == null) {<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      throw new IllegalArgumentException("Row buffer is null");<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    }<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    if (row.remaining() == 0) {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      throw new IllegalArgumentException("Row length is 0");<a name="line.500"></a>
-<span class="sourceLineNo">501</span>    }<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    if (row.remaining() &gt; HConstants.MAX_ROW_LENGTH) {<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      throw new IllegalArgumentException("Row length " + row.remaining() + " is &gt; " +<a name="line.503"></a>
-<span class="sourceLineNo">504</span>          HConstants.MAX_ROW_LENGTH);<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    }<a name="line.505"></a>
-<span class="sourceLineNo">506</span>  }<a name="line.506"></a>
-<span class="sourceLineNo">507</span>}<a name="line.507"></a>
+<span class="sourceLineNo">474</span>   * Subclasses should override this method to add the heap size of their own fields.<a name="line.474"></a>
+<span class="sourceLineNo">475</span>   * @return the heap size to add (will be aligned).<a name="line.475"></a>
+<span class="sourceLineNo">476</span>   */<a name="line.476"></a>
+<span class="sourceLineNo">477</span>  protected long extraHeapSize(){<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    return 0L;<a name="line.478"></a>
+<span class="sourceLineNo">479</span>  }<a name="line.479"></a>
+<span class="sourceLineNo">480</span><a name="line.480"></a>
+<span class="sourceLineNo">481</span><a name="line.481"></a>
+<span class="sourceLineNo">482</span>  /**<a name="line.482"></a>
+<span class="sourceLineNo">483</span>   * @param row Row to check<a name="line.483"></a>
+<span class="sourceLineNo">484</span>   * @throws IllegalArgumentException Thrown if &lt;code&gt;row&lt;/code&gt; is empty or null or<a name="line.484"></a>
+<span class="sourceLineNo">485</span>   * &amp;gt; {@link HConstants#MAX_ROW_LENGTH}<a name="line.485"></a>
+<span class="sourceLineNo">486</span>   * @return &lt;code&gt;row&lt;/code&gt;<a name="line.486"></a>
+<span class="sourceLineNo">487</span>   */<a name="line.487"></a>
+<span class="sourceLineNo">488</span>  static byte [] checkRow(final byte [] row) {<a name="line.488"></a>
+<span class="sourceLineNo">489</span>    return checkRow(row, 0, row == null? 0: row.length);<a name="line.489"></a>
+<span class="sourceLineNo">490</span>  }<a name="line.490"></a>
+<span class="sourceLineNo">491</span><a name="line.491"></a>
+<span class="sourceLineNo">492</span>  /**<a name="line.492"></a>
+<span class="sourceLineNo">493</span>   * @param row Row to check<a name="line.493"></a>
+<span class="sourceLineNo">494</span>   * @param offset<a name="line.494"></a>
+<span class="sourceLineNo">495</span>   * @param length<a name="line.495"></a>
+<span class="sourceLineNo">496</span>   * @throws IllegalArgumentException Thrown if &lt;code&gt;row&lt;/code&gt; is empty or null or<a name="line.496"></a>
+<span class="sourceLineNo">497</span>   * &amp;gt; {@link HConstants#MAX_ROW_LENGTH}<a name="line.497"></a>
+<span class="sourceLineNo">498</span>   * @return &lt;code&gt;row&lt;/code&gt;<a name="line.498"></a>
+<span class="sourceLineNo">499</span>   */<a name="line.499"></a>
+<span class="sourceLineNo">500</span>  static byte [] checkRow(final byte [] row, final int offset, final int length) {<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    if (row == null) {<a name="line.501"></a>
+<span class="sourceLineNo">502</span>      throw new IllegalArgumentException("Row buffer is null");<a name="line.502"></a>
+<span class="sourceLineNo">503</span>    }<a name="line.503"></a>
+<span class="sourceLineNo">504</span>    if (length == 0) {<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      throw new IllegalArgumentException("Row length is 0");<a name="line.505"></a>
+<span class="sourceLineNo">506</span>    }<a name="line.506"></a>
+<span class="sourceLineNo">507</span>    if (length &gt; HConstants.MAX_ROW_LENGTH) {<a name="line.507"></a>
+<span class="sourceLineNo">508</span>      throw new IllegalArgumentException("Row length " + length + " is &gt; " +<a name="line.508"></a>
+<span class="sourceLineNo">509</span>        HConstants.MAX_ROW_LENGTH);<a name="line.509"></a>
+<span class="sourceLineNo">510</span>    }<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    return row;<a name="line.511"></a>
+<span class="sourceLineNo">512</span>  }<a name="line.512"></a>
+<span class="sourceLineNo">513</span><a name="line.513"></a>
+<span class="sourceLineNo">514</span>  static void checkRow(ByteBuffer row) {<a name="line.514"></a>
+<span class="sourceLineNo">515</span>    if (row == null) {<a name="line.515"></a>
+<span class="sourceLineNo">516</span>      throw new IllegalArgumentException("Row buffer is null");<a name="line.516"></a>
+<span class="sourceLineNo">517</span>    }<a name="line.517"></a>
+<span class="sourceLineNo">518</span>    if (row.remaining() == 0) {<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      throw new IllegalArgumentException("Row length is 0");<a name="line.519"></a>
+<span class="sourceLineNo">520</span>    }<a name="line.520"></a>
+<span class="sourceLineNo">521</span>    if (row.remaining() &gt; HConstants.MAX_ROW_LENGTH) {<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      throw new IllegalArgumentException("Row length " + row.remaining() + " is &gt; " +<a name="line.522"></a>
+<span class="sourceLineNo">523</span>          HConstants.MAX_ROW_LENGTH);<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    }<a name="line.524"></a>
+<span class="sourceLineNo">525</span>  }<a name="line.525"></a>
+<span class="sourceLineNo">526</span>}<a name="line.526"></a>
 
 
 


[12/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html
index 0597160..b444f46 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html
@@ -184,2145 +184,2183 @@
 <span class="sourceLineNo">176</span>  // Min batch size when replay WAL edits<a name="line.176"></a>
 <span class="sourceLineNo">177</span>  private final int minBatchSize;<a name="line.177"></a>
 <span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span>  WALSplitter(final WALFactory factory, Configuration conf, Path rootDir,<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      FileSystem fs, LastSequenceId idChecker,<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      CoordinatedStateManager csm, RecoveryMode mode) {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    this.conf = HBaseConfiguration.create(conf);<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    String codecClassName = conf<a name="line.183"></a>
-<span class="sourceLineNo">184</span>        .get(WALCellCodec.WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    this.conf.set(HConstants.RPC_CODEC_CONF_KEY, codecClassName);<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    this.rootDir = rootDir;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    this.fs = fs;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    this.sequenceIdChecker = idChecker;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    this.csm = (BaseCoordinatedStateManager)csm;<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    this.walFactory = factory;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    this.controller = new PipelineController();<a name="line.191"></a>
-<span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span>    entryBuffers = new EntryBuffers(controller,<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        this.conf.getInt("hbase.regionserver.hlog.splitlog.buffersize",<a name="line.194"></a>
-<span class="sourceLineNo">195</span>            128*1024*1024));<a name="line.195"></a>
+<span class="sourceLineNo">179</span>  // the file being split currently<a name="line.179"></a>
+<span class="sourceLineNo">180</span>  private FileStatus fileBeingSplit;<a name="line.180"></a>
+<span class="sourceLineNo">181</span><a name="line.181"></a>
+<span class="sourceLineNo">182</span>  @VisibleForTesting<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  WALSplitter(final WALFactory factory, Configuration conf, Path rootDir,<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      FileSystem fs, LastSequenceId idChecker,<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      CoordinatedStateManager csm, RecoveryMode mode) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    this.conf = HBaseConfiguration.create(conf);<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    String codecClassName = conf<a name="line.187"></a>
+<span class="sourceLineNo">188</span>        .get(WALCellCodec.WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    this.conf.set(HConstants.RPC_CODEC_CONF_KEY, codecClassName);<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    this.rootDir = rootDir;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    this.fs = fs;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    this.sequenceIdChecker = idChecker;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    this.csm = (BaseCoordinatedStateManager)csm;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    this.walFactory = factory;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    this.controller = new PipelineController();<a name="line.195"></a>
 <span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span>    // a larger minBatchSize may slow down recovery because replay writer has to wait for<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    // enough edits before replaying them<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    this.minBatchSize = this.conf.getInt("hbase.regionserver.wal.logreplay.batch.size", 64);<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    this.distributedLogReplay = (RecoveryMode.LOG_REPLAY == mode);<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>    this.numWriterThreads = this.conf.getInt("hbase.regionserver.hlog.splitlog.writer.threads", 3);<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    if (csm != null &amp;&amp; this.distributedLogReplay) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      outputSink = new LogReplayOutputSink(controller, entryBuffers, numWriterThreads);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    } else {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      if (this.distributedLogReplay) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        LOG.info("ZooKeeperWatcher is passed in as NULL so disable distrubitedLogRepaly.");<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      }<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      this.distributedLogReplay = false;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      outputSink = new LogRecoveredEditsOutputSink(controller, entryBuffers, numWriterThreads);<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>  }<a name="line.213"></a>
-<span class="sourceLineNo">214</span><a name="line.214"></a>
-<span class="sourceLineNo">215</span>  /**<a name="line.215"></a>
-<span class="sourceLineNo">216</span>   * Splits a WAL file into region's recovered-edits directory.<a name="line.216"></a>
-<span class="sourceLineNo">217</span>   * This is the main entry point for distributed log splitting from SplitLogWorker.<a name="line.217"></a>
-<span class="sourceLineNo">218</span>   * &lt;p&gt;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>   * If the log file has N regions then N recovered.edits files will be produced.<a name="line.219"></a>
-<span class="sourceLineNo">220</span>   * &lt;p&gt;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   * @param rootDir<a name="line.221"></a>
-<span class="sourceLineNo">222</span>   * @param logfile<a name="line.222"></a>
-<span class="sourceLineNo">223</span>   * @param fs<a name="line.223"></a>
-<span class="sourceLineNo">224</span>   * @param conf<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   * @param reporter<a name="line.225"></a>
-<span class="sourceLineNo">226</span>   * @param idChecker<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   * @param cp coordination state manager<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   * @return false if it is interrupted by the progress-able.<a name="line.228"></a>
-<span class="sourceLineNo">229</span>   * @throws IOException<a name="line.229"></a>
-<span class="sourceLineNo">230</span>   */<a name="line.230"></a>
-<span class="sourceLineNo">231</span>  public static boolean splitLogFile(Path rootDir, FileStatus logfile, FileSystem fs,<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      Configuration conf, CancelableProgressable reporter, LastSequenceId idChecker,<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      CoordinatedStateManager cp, RecoveryMode mode, final WALFactory factory) throws IOException {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, idChecker, cp, mode);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    return s.splitLogFile(logfile, reporter);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  }<a name="line.236"></a>
-<span class="sourceLineNo">237</span><a name="line.237"></a>
-<span class="sourceLineNo">238</span>  // A wrapper to split one log folder using the method used by distributed<a name="line.238"></a>
-<span class="sourceLineNo">239</span>  // log splitting. Used by tools and unit tests. It should be package private.<a name="line.239"></a>
-<span class="sourceLineNo">240</span>  // It is public only because TestWALObserver is in a different package,<a name="line.240"></a>
-<span class="sourceLineNo">241</span>  // which uses this method to do log splitting.<a name="line.241"></a>
-<span class="sourceLineNo">242</span>  @VisibleForTesting<a name="line.242"></a>
-<span class="sourceLineNo">243</span>  public static List&lt;Path&gt; split(Path rootDir, Path logDir, Path oldLogDir,<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      FileSystem fs, Configuration conf, final WALFactory factory) throws IOException {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    final FileStatus[] logfiles = SplitLogManager.getFileList(conf,<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        Collections.singletonList(logDir), null);<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    List&lt;Path&gt; splits = new ArrayList&lt;Path&gt;();<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    if (logfiles != null &amp;&amp; logfiles.length &gt; 0) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      for (FileStatus logfile: logfiles) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, null, null,<a name="line.250"></a>
-<span class="sourceLineNo">251</span>            RecoveryMode.LOG_SPLITTING);<a name="line.251"></a>
-<span class="sourceLineNo">252</span>        if (s.splitLogFile(logfile, null)) {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>          finishSplitLogFile(rootDir, oldLogDir, logfile.getPath(), conf);<a name="line.253"></a>
-<span class="sourceLineNo">254</span>          if (s.outputSink.splits != null) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>            splits.addAll(s.outputSink.splits);<a name="line.255"></a>
-<span class="sourceLineNo">256</span>          }<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        }<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      }<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    }<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    if (!fs.delete(logDir, true)) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      throw new IOException("Unable to delete src dir: " + logDir);<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    return splits;<a name="line.263"></a>
-<span class="sourceLineNo">264</span>  }<a name="line.264"></a>
-<span class="sourceLineNo">265</span><a name="line.265"></a>
-<span class="sourceLineNo">266</span>  /**<a name="line.266"></a>
-<span class="sourceLineNo">267</span>   * log splitting implementation, splits one log file.<a name="line.267"></a>
-<span class="sourceLineNo">268</span>   * @param logfile should be an actual log file.<a name="line.268"></a>
-<span class="sourceLineNo">269</span>   */<a name="line.269"></a>
-<span class="sourceLineNo">270</span>  boolean splitLogFile(FileStatus logfile, CancelableProgressable reporter) throws IOException {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    Preconditions.checkState(status == null);<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    Preconditions.checkArgument(logfile.isFile(),<a name="line.272"></a>
-<span class="sourceLineNo">273</span>        "passed in file status is for something other than a regular file.");<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    boolean isCorrupted = false;<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    boolean skipErrors = conf.getBoolean("hbase.hlog.split.skip.errors",<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      SPLIT_SKIP_ERRORS_DEFAULT);<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    int interval = conf.getInt("hbase.splitlog.report.interval.loglines", 1024);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    Path logPath = logfile.getPath();<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    boolean outputSinkStarted = false;<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    boolean progress_failed = false;<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    int editsCount = 0;<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    int editsSkipped = 0;<a name="line.282"></a>
-<span class="sourceLineNo">283</span><a name="line.283"></a>
-<span class="sourceLineNo">284</span>    status =<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        TaskMonitor.get().createStatus(<a name="line.285"></a>
-<span class="sourceLineNo">286</span>          "Splitting log file " + logfile.getPath() + "into a temporary staging area.");<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    Reader in = null;<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    try {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      long logLength = logfile.getLen();<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      LOG.info("Splitting wal: " + logPath + ", length=" + logLength);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      LOG.info("DistributedLogReplay = " + this.distributedLogReplay);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      status.setStatus("Opening log file");<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>        progress_failed = true;<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        return false;<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      }<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      try {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        in = getReader(logfile, skipErrors, reporter);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      } catch (CorruptedLogFileException e) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>        LOG.warn("Could not get reader, corrupted log file " + logPath, e);<a name="line.300"></a>
-<span class="sourceLineNo">301</span>        ZKSplitLog.markCorrupted(rootDir, logfile.getPath().getName(), fs);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>        isCorrupted = true;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      }<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      if (in == null) {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>        LOG.warn("Nothing to split in log file " + logPath);<a name="line.305"></a>
-<span class="sourceLineNo">306</span>        return true;<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      }<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      int numOpenedFilesBeforeReporting = conf.getInt("hbase.splitlog.report.openedfiles", 3);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      int numOpenedFilesLastCheck = 0;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      outputSink.setReporter(reporter);<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      outputSink.startWriterThreads();<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      outputSinkStarted = true;<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      Entry entry;<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      Long lastFlushedSequenceId = -1L;<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      ServerName serverName = DefaultWALProvider.getServerNameFromWALDirectoryName(logPath);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      failedServerName = (serverName == null) ? "" : serverName.getServerName();<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      while ((entry = getNextLogLine(in, logPath, skipErrors)) != null) {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>        byte[] region = entry.getKey().getEncodedRegionName();<a name="line.318"></a>
-<span class="sourceLineNo">319</span>        String encodedRegionNameAsStr = Bytes.toString(region);<a name="line.319"></a>
-<span class="sourceLineNo">320</span>        lastFlushedSequenceId = lastFlushedSequenceIds.get(encodedRegionNameAsStr);<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        if (lastFlushedSequenceId == null) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>          if (this.distributedLogReplay) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>            RegionStoreSequenceIds ids =<a name="line.323"></a>
-<span class="sourceLineNo">324</span>                csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.324"></a>
-<span class="sourceLineNo">325</span>                  encodedRegionNameAsStr);<a name="line.325"></a>
-<span class="sourceLineNo">326</span>            if (ids != null) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>              lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.327"></a>
-<span class="sourceLineNo">328</span>              if (LOG.isDebugEnabled()) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>                LOG.debug("DLR Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.329"></a>
-<span class="sourceLineNo">330</span>                  TextFormat.shortDebugString(ids));<a name="line.330"></a>
-<span class="sourceLineNo">331</span>              }<a name="line.331"></a>
-<span class="sourceLineNo">332</span>            }<a name="line.332"></a>
-<span class="sourceLineNo">333</span>          } else if (sequenceIdChecker != null) {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>            RegionStoreSequenceIds ids = sequenceIdChecker.getLastSequenceId(region);<a name="line.334"></a>
-<span class="sourceLineNo">335</span>            Map&lt;byte[], Long&gt; maxSeqIdInStores = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.335"></a>
-<span class="sourceLineNo">336</span>            for (StoreSequenceId storeSeqId : ids.getStoreSequenceIdList()) {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>              maxSeqIdInStores.put(storeSeqId.getFamilyName().toByteArray(),<a name="line.337"></a>
-<span class="sourceLineNo">338</span>                storeSeqId.getSequenceId());<a name="line.338"></a>
-<span class="sourceLineNo">339</span>            }<a name="line.339"></a>
-<span class="sourceLineNo">340</span>            regionMaxSeqIdInStores.put(encodedRegionNameAsStr, maxSeqIdInStores);<a name="line.340"></a>
-<span class="sourceLineNo">341</span>            lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.341"></a>
-<span class="sourceLineNo">342</span>            if (LOG.isDebugEnabled()) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>              LOG.debug("DLS Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.343"></a>
-<span class="sourceLineNo">344</span>                  TextFormat.shortDebugString(ids));<a name="line.344"></a>
+<span class="sourceLineNo">197</span>    entryBuffers = new EntryBuffers(controller,<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        this.conf.getInt("hbase.regionserver.hlog.splitlog.buffersize",<a name="line.198"></a>
+<span class="sourceLineNo">199</span>            128*1024*1024));<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>    // a larger minBatchSize may slow down recovery because replay writer has to wait for<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    // enough edits before replaying them<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    this.minBatchSize = this.conf.getInt("hbase.regionserver.wal.logreplay.batch.size", 64);<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    this.distributedLogReplay = (RecoveryMode.LOG_REPLAY == mode);<a name="line.204"></a>
+<span class="sourceLineNo">205</span><a name="line.205"></a>
+<span class="sourceLineNo">206</span>    this.numWriterThreads = this.conf.getInt("hbase.regionserver.hlog.splitlog.writer.threads", 3);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    if (csm != null &amp;&amp; this.distributedLogReplay) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      outputSink = new LogReplayOutputSink(controller, entryBuffers, numWriterThreads);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    } else {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      if (this.distributedLogReplay) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>        LOG.info("ZooKeeperWatcher is passed in as NULL so disable distrubitedLogRepaly.");<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      }<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      this.distributedLogReplay = false;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      outputSink = new LogRecoveredEditsOutputSink(controller, entryBuffers, numWriterThreads);<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    }<a name="line.215"></a>
+<span class="sourceLineNo">216</span><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>
+<span class="sourceLineNo">220</span>   * Splits a WAL file into region's recovered-edits directory.<a name="line.220"></a>
+<span class="sourceLineNo">221</span>   * This is the main entry point for distributed log splitting from SplitLogWorker.<a name="line.221"></a>
+<span class="sourceLineNo">222</span>   * &lt;p&gt;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>   * If the log file has N regions then N recovered.edits files will be produced.<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   * &lt;p&gt;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   * @param rootDir<a name="line.225"></a>
+<span class="sourceLineNo">226</span>   * @param logfile<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   * @param fs<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   * @param conf<a name="line.228"></a>
+<span class="sourceLineNo">229</span>   * @param reporter<a name="line.229"></a>
+<span class="sourceLineNo">230</span>   * @param idChecker<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   * @param cp coordination state manager<a name="line.231"></a>
+<span class="sourceLineNo">232</span>   * @return false if it is interrupted by the progress-able.<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   * @throws IOException<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   */<a name="line.234"></a>
+<span class="sourceLineNo">235</span>  public static boolean splitLogFile(Path rootDir, FileStatus logfile, FileSystem fs,<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      Configuration conf, CancelableProgressable reporter, LastSequenceId idChecker,<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      CoordinatedStateManager cp, RecoveryMode mode, final WALFactory factory) throws IOException {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, idChecker, cp, mode);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    return s.splitLogFile(logfile, reporter);<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>  // A wrapper to split one log folder using the method used by distributed<a name="line.242"></a>
+<span class="sourceLineNo">243</span>  // log splitting. Used by tools and unit tests. It should be package private.<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  // It is public only because TestWALObserver is in a different package,<a name="line.244"></a>
+<span class="sourceLineNo">245</span>  // which uses this method to do log splitting.<a name="line.245"></a>
+<span class="sourceLineNo">246</span>  @VisibleForTesting<a name="line.246"></a>
+<span class="sourceLineNo">247</span>  public static List&lt;Path&gt; split(Path rootDir, Path logDir, Path oldLogDir,<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      FileSystem fs, Configuration conf, final WALFactory factory) throws IOException {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    final FileStatus[] logfiles = SplitLogManager.getFileList(conf,<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        Collections.singletonList(logDir), null);<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    List&lt;Path&gt; splits = new ArrayList&lt;Path&gt;();<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    if (logfiles != null &amp;&amp; logfiles.length &gt; 0) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      for (FileStatus logfile: logfiles) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>        WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, null, null,<a name="line.254"></a>
+<span class="sourceLineNo">255</span>            RecoveryMode.LOG_SPLITTING);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>        if (s.splitLogFile(logfile, null)) {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>          finishSplitLogFile(rootDir, oldLogDir, logfile.getPath(), conf);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>          if (s.outputSink.splits != null) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>            splits.addAll(s.outputSink.splits);<a name="line.259"></a>
+<span class="sourceLineNo">260</span>          }<a name="line.260"></a>
+<span class="sourceLineNo">261</span>        }<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      }<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    }<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    if (!fs.delete(logDir, true)) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      throw new IOException("Unable to delete src dir: " + logDir);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    }<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    return splits;<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  }<a name="line.268"></a>
+<span class="sourceLineNo">269</span><a name="line.269"></a>
+<span class="sourceLineNo">270</span>  /**<a name="line.270"></a>
+<span class="sourceLineNo">271</span>   * log splitting implementation, splits one log file.<a name="line.271"></a>
+<span class="sourceLineNo">272</span>   * @param logfile should be an actual log file.<a name="line.272"></a>
+<span class="sourceLineNo">273</span>   */<a name="line.273"></a>
+<span class="sourceLineNo">274</span>  @VisibleForTesting<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  boolean splitLogFile(FileStatus logfile, CancelableProgressable reporter) throws IOException {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    Preconditions.checkState(status == null);<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    Preconditions.checkArgument(logfile.isFile(),<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        "passed in file status is for something other than a regular file.");<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    boolean isCorrupted = false;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    boolean skipErrors = conf.getBoolean("hbase.hlog.split.skip.errors",<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      SPLIT_SKIP_ERRORS_DEFAULT);<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    int interval = conf.getInt("hbase.splitlog.report.interval.loglines", 1024);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    Path logPath = logfile.getPath();<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    boolean outputSinkStarted = false;<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    boolean progress_failed = false;<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    int editsCount = 0;<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    int editsSkipped = 0;<a name="line.287"></a>
+<span class="sourceLineNo">288</span><a name="line.288"></a>
+<span class="sourceLineNo">289</span>    status =<a name="line.289"></a>
+<span class="sourceLineNo">290</span>        TaskMonitor.get().createStatus(<a name="line.290"></a>
+<span class="sourceLineNo">291</span>          "Splitting log file " + logfile.getPath() + "into a temporary staging area.");<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    Reader in = null;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    this.fileBeingSplit = logfile;<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    try {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      long logLength = logfile.getLen();<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      LOG.info("Splitting wal: " + logPath + ", length=" + logLength);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      LOG.info("DistributedLogReplay = " + this.distributedLogReplay);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      status.setStatus("Opening log file");<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>        progress_failed = true;<a name="line.300"></a>
+<span class="sourceLineNo">301</span>        return false;<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      }<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      try {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>        in = getReader(logfile, skipErrors, reporter);<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      } catch (CorruptedLogFileException e) {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>        LOG.warn("Could not get reader, corrupted log file " + logPath, e);<a name="line.306"></a>
+<span class="sourceLineNo">307</span>        ZKSplitLog.markCorrupted(rootDir, logfile.getPath().getName(), fs);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>        isCorrupted = true;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      }<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      if (in == null) {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        LOG.warn("Nothing to split in log file " + logPath);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        return true;<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      }<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      int numOpenedFilesBeforeReporting = conf.getInt("hbase.splitlog.report.openedfiles", 3);<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      int numOpenedFilesLastCheck = 0;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      outputSink.setReporter(reporter);<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      outputSink.startWriterThreads();<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      outputSinkStarted = true;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      Entry entry;<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      Long lastFlushedSequenceId = -1L;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      ServerName serverName = DefaultWALProvider.getServerNameFromWALDirectoryName(logPath);<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      failedServerName = (serverName == null) ? "" : serverName.getServerName();<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      while ((entry = getNextLogLine(in, logPath, skipErrors)) != null) {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>        byte[] region = entry.getKey().getEncodedRegionName();<a name="line.324"></a>
+<span class="sourceLineNo">325</span>        String encodedRegionNameAsStr = Bytes.toString(region);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>        lastFlushedSequenceId = lastFlushedSequenceIds.get(encodedRegionNameAsStr);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>        if (lastFlushedSequenceId == null) {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>          if (this.distributedLogReplay) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>            RegionStoreSequenceIds ids =<a name="line.329"></a>
+<span class="sourceLineNo">330</span>                csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.330"></a>
+<span class="sourceLineNo">331</span>                  encodedRegionNameAsStr);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>            if (ids != null) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span>              lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.333"></a>
+<span class="sourceLineNo">334</span>              if (LOG.isDebugEnabled()) {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>                LOG.debug("DLR Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.335"></a>
+<span class="sourceLineNo">336</span>                  TextFormat.shortDebugString(ids));<a name="line.336"></a>
+<span class="sourceLineNo">337</span>              }<a name="line.337"></a>
+<span class="sourceLineNo">338</span>            }<a name="line.338"></a>
+<span class="sourceLineNo">339</span>          } else if (sequenceIdChecker != null) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>            RegionStoreSequenceIds ids = sequenceIdChecker.getLastSequenceId(region);<a name="line.340"></a>
+<span class="sourceLineNo">341</span>            Map&lt;byte[], Long&gt; maxSeqIdInStores = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.341"></a>
+<span class="sourceLineNo">342</span>            for (StoreSequenceId storeSeqId : ids.getStoreSequenceIdList()) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>              maxSeqIdInStores.put(storeSeqId.getFamilyName().toByteArray(),<a name="line.343"></a>
+<span class="sourceLineNo">344</span>                storeSeqId.getSequenceId());<a name="line.344"></a>
 <span class="sourceLineNo">345</span>            }<a name="line.345"></a>
-<span class="sourceLineNo">346</span>          }<a name="line.346"></a>
-<span class="sourceLineNo">347</span>          if (lastFlushedSequenceId == null) {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>            lastFlushedSequenceId = -1L;<a name="line.348"></a>
-<span class="sourceLineNo">349</span>          }<a name="line.349"></a>
-<span class="sourceLineNo">350</span>          lastFlushedSequenceIds.put(encodedRegionNameAsStr, lastFlushedSequenceId);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        }<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        if (lastFlushedSequenceId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>          editsSkipped++;<a name="line.353"></a>
-<span class="sourceLineNo">354</span>          continue;<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        }<a name="line.355"></a>
-<span class="sourceLineNo">356</span>        entryBuffers.appendEntry(entry);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        editsCount++;<a name="line.357"></a>
-<span class="sourceLineNo">358</span>        int moreWritersFromLastCheck = this.getNumOpenWriters() - numOpenedFilesLastCheck;<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        // If sufficient edits have passed, check if we should report progress.<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        if (editsCount % interval == 0<a name="line.360"></a>
-<span class="sourceLineNo">361</span>            || moreWritersFromLastCheck &gt; numOpenedFilesBeforeReporting) {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>          numOpenedFilesLastCheck = this.getNumOpenWriters();<a name="line.362"></a>
-<span class="sourceLineNo">363</span>          String countsStr = (editsCount - (editsSkipped + outputSink.getSkippedEdits()))<a name="line.363"></a>
-<span class="sourceLineNo">364</span>              + " edits, skipped " + editsSkipped + " edits.";<a name="line.364"></a>
-<span class="sourceLineNo">365</span>          status.setStatus("Split " + countsStr);<a name="line.365"></a>
-<span class="sourceLineNo">366</span>          if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>            progress_failed = true;<a name="line.367"></a>
-<span class="sourceLineNo">368</span>            return false;<a name="line.368"></a>
-<span class="sourceLineNo">369</span>          }<a name="line.369"></a>
-<span class="sourceLineNo">370</span>        }<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      }<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    } catch (InterruptedException ie) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      IOException iie = new InterruptedIOException();<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      iie.initCause(ie);<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      throw iie;<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    } catch (CorruptedLogFileException e) {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      LOG.warn("Could not parse, corrupted log file " + logPath, e);<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      csm.getSplitLogWorkerCoordination().markCorrupted(rootDir,<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        logfile.getPath().getName(), fs);<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      isCorrupted = true;<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    } catch (IOException e) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      throw e;<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    } finally {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      LOG.debug("Finishing writing output logs and closing down.");<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      try {<a name="line.386"></a>
-<span class="sourceLineNo">387</span>        if (null != in) {<a name="line.387"></a>
-<span class="sourceLineNo">388</span>          in.close();<a name="line.388"></a>
-<span class="sourceLineNo">389</span>        }<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      } catch (IOException exception) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        LOG.warn("Could not close wal reader: " + exception.getMessage());<a name="line.391"></a>
-<span class="sourceLineNo">392</span>        LOG.debug("exception details", exception);<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      }<a name="line.393"></a>
-<span class="sourceLineNo">394</span>      try {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        if (outputSinkStarted) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>          // Set progress_failed to true as the immediate following statement will reset its value<a name="line.396"></a>
-<span class="sourceLineNo">397</span>          // when finishWritingAndClose() throws exception, progress_failed has the right value<a name="line.397"></a>
-<span class="sourceLineNo">398</span>          progress_failed = true;<a name="line.398"></a>
-<span class="sourceLineNo">399</span>          progress_failed = outputSink.finishWritingAndClose() == null;<a name="line.399"></a>
-<span class="sourceLineNo">400</span>        }<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      } finally {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        String msg =<a name="line.402"></a>
-<span class="sourceLineNo">403</span>            "Processed " + editsCount + " edits across " + outputSink.getNumberOfRecoveredRegions()<a name="line.403"></a>
-<span class="sourceLineNo">404</span>                + " regions; edits skipped=" + editsSkipped + "; log file=" + logPath +<a name="line.404"></a>
-<span class="sourceLineNo">405</span>                ", length=" + logfile.getLen() + // See if length got updated post lease recovery<a name="line.405"></a>
-<span class="sourceLineNo">406</span>                ", corrupted=" + isCorrupted + ", progress failed=" + progress_failed;<a name="line.406"></a>
-<span class="sourceLineNo">407</span>        LOG.info(msg);<a name="line.407"></a>
-<span class="sourceLineNo">408</span>        status.markComplete(msg);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      }<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    }<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    return !progress_failed;<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>   * Completes the work done by splitLogFile by archiving logs<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   * &lt;p&gt;<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * It is invoked by SplitLogManager once it knows that one of the<a name="line.417"></a>
-<span class="sourceLineNo">418</span>   * SplitLogWorkers have completed the splitLogFile() part. If the master<a name="line.418"></a>
-<span class="sourceLineNo">419</span>   * crashes then this function might get called multiple times.<a name="line.419"></a>
-<span class="sourceLineNo">420</span>   * &lt;p&gt;<a name="line.420"></a>
-<span class="sourceLineNo">421</span>   * @param logfile<a name="line.421"></a>
-<span class="sourceLineNo">422</span>   * @param conf<a name="line.422"></a>
-<span class="sourceLineNo">423</span>   * @throws IOException<a name="line.423"></a>
-<span class="sourceLineNo">424</span>   */<a name="line.424"></a>
-<span class="sourceLineNo">425</span>  public static void finishSplitLogFile(String logfile,<a name="line.425"></a>
-<span class="sourceLineNo">426</span>      Configuration conf)  throws IOException {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    Path rootdir = FSUtils.getRootDir(conf);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    Path oldLogDir = new Path(rootdir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    Path logPath;<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    if (FSUtils.isStartingWithPath(rootdir, logfile)) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      logPath = new Path(logfile);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    } else {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      logPath = new Path(rootdir, logfile);<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    }<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    finishSplitLogFile(rootdir, oldLogDir, logPath, conf);<a name="line.435"></a>
-<span class="sourceLineNo">436</span>  }<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>  static void finishSplitLogFile(Path rootdir, Path oldLogDir,<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      Path logPath, Configuration conf) throws IOException {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    List&lt;Path&gt; processedLogs = new ArrayList&lt;Path&gt;();<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    List&lt;Path&gt; corruptedLogs = new ArrayList&lt;Path&gt;();<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    FileSystem fs;<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    fs = rootdir.getFileSystem(conf);<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    if (ZKSplitLog.isCorrupted(rootdir, logPath.getName(), fs)) {<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      corruptedLogs.add(logPath);<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    } else {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      processedLogs.add(logPath);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    }<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    archiveLogs(corruptedLogs, processedLogs, oldLogDir, fs, conf);<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    Path stagingDir = ZKSplitLog.getSplitLogDir(rootdir, logPath.getName());<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    fs.delete(stagingDir, true);<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  }<a name="line.452"></a>
-<span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span>  /**<a name="line.454"></a>
-<span class="sourceLineNo">455</span>   * Moves processed logs to a oldLogDir after successful processing Moves<a name="line.455"></a>
-<span class="sourceLineNo">456</span>   * corrupted logs (any log that couldn't be successfully parsed to corruptDir<a name="line.456"></a>
-<span class="sourceLineNo">457</span>   * (.corrupt) for later investigation<a name="line.457"></a>
-<span class="sourceLineNo">458</span>   *<a name="line.458"></a>
-<span class="sourceLineNo">459</span>   * @param corruptedLogs<a name="line.459"></a>
-<span class="sourceLineNo">460</span>   * @param processedLogs<a name="line.460"></a>
-<span class="sourceLineNo">461</span>   * @param oldLogDir<a name="line.461"></a>
-<span class="sourceLineNo">462</span>   * @param fs<a name="line.462"></a>
-<span class="sourceLineNo">463</span>   * @param conf<a name="line.463"></a>
-<span class="sourceLineNo">464</span>   * @throws IOException<a name="line.464"></a>
-<span class="sourceLineNo">465</span>   */<a name="line.465"></a>
-<span class="sourceLineNo">466</span>  private static void archiveLogs(<a name="line.466"></a>
-<span class="sourceLineNo">467</span>      final List&lt;Path&gt; corruptedLogs,<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      final List&lt;Path&gt; processedLogs, final Path oldLogDir,<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      final FileSystem fs, final Configuration conf) throws IOException {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    final Path corruptDir = new Path(FSUtils.getRootDir(conf), conf.get(<a name="line.470"></a>
-<span class="sourceLineNo">471</span>        "hbase.regionserver.hlog.splitlog.corrupt.dir",  HConstants.CORRUPT_DIR_NAME));<a name="line.471"></a>
-<span class="sourceLineNo">472</span><a name="line.472"></a>
-<span class="sourceLineNo">473</span>    if (!fs.mkdirs(corruptDir)) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      LOG.info("Unable to mkdir " + corruptDir);<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    }<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    fs.mkdirs(oldLogDir);<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>    // this method can get restarted or called multiple times for archiving<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    // the same log files.<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    for (Path corrupted : corruptedLogs) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      Path p = new Path(corruptDir, corrupted.getName());<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      if (fs.exists(corrupted)) {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        if (!fs.rename(corrupted, p)) {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>          LOG.warn("Unable to move corrupted log " + corrupted + " to " + p);<a name="line.484"></a>
-<span class="sourceLineNo">485</span>        } else {<a name="line.485"></a>
-<span class="sourceLineNo">486</span>          LOG.warn("Moved corrupted log " + corrupted + " to " + p);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>        }<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      }<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    }<a name="line.489"></a>
-<span class="sourceLineNo">490</span><a name="line.490"></a>
-<span class="sourceLineNo">491</span>    for (Path p : processedLogs) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      Path newPath = FSHLog.getWALArchivePath(oldLogDir, p);<a name="line.492"></a>
-<span class="sourceLineNo">493</span>      if (fs.exists(p)) {<a name="line.493"></a>
-<span class="sourceLineNo">494</span>        if (!FSUtils.renameAndSetModifyTime(fs, p, newPath)) {<a name="line.494"></a>
-<span class="sourceLineNo">495</span>          LOG.warn("Unable to move  " + p + " to " + newPath);<a name="line.495"></a>
-<span class="sourceLineNo">496</span>        } else {<a name="line.496"></a>
-<span class="sourceLineNo">497</span>          LOG.info("Archived processed log " + p + " to " + newPath);<a name="line.497"></a>
-<span class="sourceLineNo">498</span>        }<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      }<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><a name="line.502"></a>
-<span class="sourceLineNo">503</span>  /**<a name="line.503"></a>
-<span class="sourceLineNo">504</span>   * Path to a file under RECOVERED_EDITS_DIR directory of the region found in<a name="line.504"></a>
-<span class="sourceLineNo">505</span>   * &lt;code&gt;logEntry&lt;/code&gt; named for the sequenceid in the passed<a name="line.505"></a>
-<span class="sourceLineNo">506</span>   * &lt;code&gt;logEntry&lt;/code&gt;: e.g. /hbase/some_table/2323432434/recovered.edits/2332.<a name="line.506"></a>
-<span class="sourceLineNo">507</span>   * This method also ensures existence of RECOVERED_EDITS_DIR under the region<a name="line.507"></a>
-<span class="sourceLineNo">508</span>   * creating it if necessary.<a name="line.508"></a>
-<span class="sourceLineNo">509</span>   * @param fs<a name="line.509"></a>
-<span class="sourceLineNo">510</span>   * @param logEntry<a name="line.510"></a>
-<span class="sourceLineNo">511</span>   * @param rootDir HBase root dir.<a name="line.511"></a>
-<span class="sourceLineNo">512</span>   * @return Path to file into which to dump split log edits.<a name="line.512"></a>
-<span class="sourceLineNo">513</span>   * @throws IOException<a name="line.513"></a>
-<span class="sourceLineNo">514</span>   */<a name="line.514"></a>
-<span class="sourceLineNo">515</span>  @SuppressWarnings("deprecation")<a name="line.515"></a>
-<span class="sourceLineNo">516</span>  static Path getRegionSplitEditsPath(final FileSystem fs,<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      final Entry logEntry, final Path rootDir, boolean isCreate)<a name="line.517"></a>
-<span class="sourceLineNo">518</span>  throws IOException {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    Path tableDir = FSUtils.getTableDir(rootDir, logEntry.getKey().getTablename());<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    String encodedRegionName = Bytes.toString(logEntry.getKey().getEncodedRegionName());<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    Path regiondir = HRegion.getRegionDir(tableDir, encodedRegionName);<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    Path dir = getRegionDirRecoveredEditsDir(regiondir);<a name="line.522"></a>
-<span class="sourceLineNo">523</span><a name="line.523"></a>
-<span class="sourceLineNo">524</span>    if (!fs.exists(regiondir)) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      LOG.info("This region's directory doesn't exist: "<a name="line.525"></a>
-<span class="sourceLineNo">526</span>          + regiondir.toString() + ". It is very likely that it was" +<a name="line.526"></a>
-<span class="sourceLineNo">527</span>          " already split so it's safe to discard those edits.");<a name="line.527"></a>
-<span class="sourceLineNo">528</span>      return null;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    }<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    if (fs.exists(dir) &amp;&amp; fs.isFile(dir)) {<a name="line.530"></a>
-<span class="sourceLineNo">531</span>      Path tmp = new Path("/tmp");<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      if (!fs.exists(tmp)) {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>        fs.mkdirs(tmp);<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      }<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      tmp = new Path(tmp,<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        HConstants.RECOVERED_EDITS_DIR + "_" + encodedRegionName);<a name="line.536"></a>
-<span class="sourceLineNo">537</span>      LOG.warn("Found existing old file: " + dir + ". It could be some "<a name="line.537"></a>
-<span class="sourceLineNo">538</span>        + "leftover of an old installation. It should be a folder instead. "<a name="line.538"></a>
-<span class="sourceLineNo">539</span>        + "So moving it to " + tmp);<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      if (!fs.rename(dir, tmp)) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        LOG.warn("Failed to sideline old file " + dir);<a name="line.541"></a>
-<span class="sourceLineNo">542</span>      }<a name="line.542"></a>
-<span class="sourceLineNo">543</span>    }<a name="line.543"></a>
-<span class="sourceLineNo">544</span><a name="line.544"></a>
-<span class="sourceLineNo">545</span>    if (isCreate &amp;&amp; !fs.exists(dir)) {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>      if (!fs.mkdirs(dir)) LOG.warn("mkdir failed on " + dir);<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    }<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    // Append file name ends with RECOVERED_LOG_TMPFILE_SUFFIX to ensure<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    // region's replayRecoveredEdits will not delete it<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    String fileName = formatRecoveredEditsFileName(logEntry.getKey().getLogSeqNum());<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    fileName = getTmpRecoveredEditsFileName(fileName);<a name="line.551"></a>
-<span class="sourceLineNo">552</span>    return new Path(dir, fileName);<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>  static String getTmpRecoveredEditsFileName(String fileName) {<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    return fileName + RECOVERED_LOG_TMPFILE_SUFFIX;<a name="line.556"></a>
-<span class="sourceLineNo">557</span>  }<a name="line.557"></a>
-<span class="sourceLineNo">558</span><a name="line.558"></a>
-<span class="sourceLineNo">559</span>  /**<a name="line.559"></a>
-<span class="sourceLineNo">560</span>   * Get the completed recovered edits file path, renaming it to be by last edit<a name="line.560"></a>
-<span class="sourceLineNo">561</span>   * in the file from its first edit. Then we could use the name to skip<a name="line.561"></a>
-<span class="sourceLineNo">562</span>   * recovered edits when doing {@link HRegion#replayRecoveredEditsIfAny}.<a name="line.562"></a>
-<span class="sourceLineNo">563</span>   * @param srcPath<a name="line.563"></a>
-<span class="sourceLineNo">564</span>   * @param maximumEditLogSeqNum<a name="line.564"></a>
-<span class="sourceLineNo">565</span>   * @return dstPath take file's last edit log seq num as the name<a name="line.565"></a>
-<span class="sourceLineNo">566</span>   */<a name="line.566"></a>
-<span class="sourceLineNo">567</span>  static Path getCompletedRecoveredEditsFilePath(Path srcPath,<a name="line.567"></a>
-<span class="sourceLineNo">568</span>      Long maximumEditLogSeqNum) {<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    String fileName = formatRecoveredEditsFileName(maximumEditLogSeqNum);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    return new Path(srcPath.getParent(), fileName);<a name="line.570"></a>
-<span class="sourceLineNo">571</span>  }<a name="line.571"></a>
-<span class="sourceLineNo">572</span><a name="line.572"></a>
-<span class="sourceLineNo">573</span>  static String formatRecoveredEditsFileName(final long seqid) {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    return String.format("%019d", seqid);<a name="line.574"></a>
-<span class="sourceLineNo">575</span>  }<a name="line.575"></a>
-<span class="sourceLineNo">576</span><a name="line.576"></a>
-<span class="sourceLineNo">577</span>  private static final Pattern EDITFILES_NAME_PATTERN = Pattern.compile("-?[0-9]+");<a name="line.577"></a>
-<span class="sourceLineNo">578</span>  private static final String RECOVERED_LOG_TMPFILE_SUFFIX = ".temp";<a name="line.578"></a>
-<span class="sourceLineNo">579</span><a name="line.579"></a>
-<span class="sourceLineNo">580</span>  /**<a name="line.580"></a>
-<span class="sourceLineNo">581</span>   * @param regiondir<a name="line.581"></a>
-<span class="sourceLineNo">582</span>   *          This regions directory in the filesystem.<a name="line.582"></a>
-<span class="sourceLineNo">583</span>   * @return The directory that holds recovered edits files for the region<a name="line.583"></a>
-<span class="sourceLineNo">584</span>   *         &lt;code&gt;regiondir&lt;/code&gt;<a name="line.584"></a>
-<span class="sourceLineNo">585</span>   */<a name="line.585"></a>
-<span class="sourceLineNo">586</span>  public static Path getRegionDirRecoveredEditsDir(final Path regiondir) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    return new Path(regiondir, HConstants.RECOVERED_EDITS_DIR);<a name="line.587"></a>
-<span class="sourceLineNo">588</span>  }<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span>  /**<a name="line.590"></a>
-<span class="sourceLineNo">591</span>   * Returns sorted set of edit files made by splitter, excluding files<a name="line.591"></a>
-<span class="sourceLineNo">592</span>   * with '.temp' suffix.<a name="line.592"></a>
-<span class="sourceLineNo">593</span>   *<a name="line.593"></a>
-<span class="sourceLineNo">594</span>   * @param fs<a name="line.594"></a>
-<span class="sourceLineNo">595</span>   * @param regiondir<a name="line.595"></a>
-<span class="sourceLineNo">596</span>   * @return Files in passed &lt;code&gt;regiondir&lt;/code&gt; as a sorted set.<a name="line.596"></a>
-<span class="sourceLineNo">597</span>   * @throws IOException<a name="line.597"></a>
-<span class="sourceLineNo">598</span>   */<a name="line.598"></a>
-<span class="sourceLineNo">599</span>  public static NavigableSet&lt;Path&gt; getSplitEditFilesSorted(final FileSystem fs,<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      final Path regiondir) throws IOException {<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    NavigableSet&lt;Path&gt; filesSorted = new TreeSet&lt;Path&gt;();<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    Path editsdir = getRegionDirRecoveredEditsDir(regiondir);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    if (!fs.exists(editsdir))<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      return filesSorted;<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    FileStatus[] files = FSUtils.listStatus(fs, editsdir, new PathFilter() {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      @Override<a name="line.606"></a>
-<span class="sourceLineNo">607</span>      public boolean accept(Path p) {<a name="line.607"></a>
-<span class="sourceLineNo">608</span>        boolean result = false;<a name="line.608"></a>
-<span class="sourceLineNo">609</span>        try {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>          // Return files and only files that match the editfile names pattern.<a name="line.610"></a>
-<span class="sourceLineNo">611</span>          // There can be other files in this directory other than edit files.<a name="line.611"></a>
-<span class="sourceLineNo">612</span>          // In particular, on error, we'll move aside the bad edit file giving<a name="line.612"></a>
-<span class="sourceLineNo">613</span>          // it a timestamp suffix. See moveAsideBadEditsFile.<a name="line.613"></a>
-<span class="sourceLineNo">614</span>          Matcher m = EDITFILES_NAME_PATTERN.matcher(p.getName());<a name="line.614"></a>
-<span class="sourceLineNo">615</span>          result = fs.isFile(p) &amp;&amp; m.matches();<a name="line.615"></a>
-<span class="sourceLineNo">616</span>          // Skip the file whose name ends with RECOVERED_LOG_TMPFILE_SUFFIX,<a name="line.616"></a>
-<span class="sourceLineNo">617</span>          // because it means splitwal thread is writting this file.<a name="line.617"></a>
-<span class="sourceLineNo">618</span>          if (p.getName().endsWith(RECOVERED_LOG_TMPFILE_SUFFIX)) {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>            result = false;<a name="line.619"></a>
-<span class="sourceLineNo">620</span>          }<a name="line.620"></a>
-<span class="sourceLineNo">621</span>          // Skip SeqId Files<a name="line.621"></a>
-<span class="sourceLineNo">622</span>          if (isSequenceIdFile(p)) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span>            result = false;<a name="line.623"></a>
-<span class="sourceLineNo">624</span>          }<a name="line.624"></a>
-<span class="sourceLineNo">625</span>        } catch (IOException e) {<a name="line.625"></a>
-<span class="sourceLineNo">626</span>          LOG.warn("Failed isFile check on " + p);<a name="line.626"></a>
-<span class="sourceLineNo">627</span>        }<a name="line.627"></a>
-<span class="sourceLineNo">628</span>        return result;<a name="line.628"></a>
-<span class="sourceLineNo">629</span>      }<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    });<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    if (files == null) {<a name="line.631"></a>
-<span class="sourceLineNo">632</span>      return filesSorted;<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    }<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    for (FileStatus status : files) {<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      filesSorted.add(status.getPath());<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    }<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    return filesSorted;<a name="line.637"></a>
-<span class="sourceLineNo">638</span>  }<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>   * Move aside a bad edits file.<a name="line.641"></a>
-<span class="sourceLineNo">642</span>   *<a name="line.642"></a>
-<span class="sourceLineNo">643</span>   * @param fs<a name="line.643"></a>
-<span class="sourceLineNo">644</span>   * @param edits<a name="line.644"></a>
-<span class="sourceLineNo">645</span>   *          Edits file to move aside.<a name="line.645"></a>
-<span class="sourceLineNo">646</span>   * @return The name of the moved aside file.<a name="line.646"></a>
-<span class="sourceLineNo">647</span>   * @throws IOException<a name="line.647"></a>
-<span class="sourceLineNo">648</span>   */<a name="line.648"></a>
-<span class="sourceLineNo">649</span>  public static Path moveAsideBadEditsFile(final FileSystem fs, final Path edits)<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      throws IOException {<a name="line.650"></a>
-<span class="sourceLineNo">651</span>    Path moveAsideName = new Path(edits.getParent(), edits.getName() + "."<a name="line.651"></a>
-<span class="sourceLineNo">652</span>        + System.currentTimeMillis());<a name="line.652"></a>
-<span class="sourceLineNo">653</span>    if (!fs.rename(edits, moveAsideName)) {<a name="line.653"></a>
-<span class="sourceLineNo">654</span>      LOG.warn("Rename failed from " + edits + " to " + moveAsideName);<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    }<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    return moveAsideName;<a name="line.656"></a>
-<span class="sourceLineNo">657</span>  }<a name="line.657"></a>
-<span class="sourceLineNo">658</span><a name="line.658"></a>
-<span class="sourceLineNo">659</span>  private static final String SEQUENCE_ID_FILE_SUFFIX = ".seqid";<a name="line.659"></a>
-<span class="sourceLineNo">660</span>  private static final String OLD_SEQUENCE_ID_FILE_SUFFIX = "_seqid";<a name="line.660"></a>
-<span class="sourceLineNo">661</span>  private static final int SEQUENCE_ID_FILE_SUFFIX_LENGTH = SEQUENCE_ID_FILE_SUFFIX.length();<a name="line.661"></a>
-<span class="sourceLineNo">662</span><a name="line.662"></a>
-<span class="sourceLineNo">663</span>  /**<a name="line.663"></a>
-<span class="sourceLineNo">664</span>   * Is the given file a region open sequence id file.<a name="line.664"></a>
-<span class="sourceLineNo">665</span>   */<a name="line.665"></a>
-<span class="sourceLineNo">666</span>  @VisibleForTesting<a name="line.666"></a>
-<span class="sourceLineNo">667</span>  public static boolean isSequenceIdFile(final Path file) {<a name="line.667"></a>
-<span class="sourceLineNo">668</span>    return file.getName().endsWith(SEQUENCE_ID_FILE_SUFFIX)<a name="line.668"></a>
-<span class="sourceLineNo">669</span>        || file.getName().endsWith(OLD_SEQUENCE_ID_FILE_SUFFIX);<a name="line.669"></a>
-<span class="sourceLineNo">670</span>  }<a name="line.670"></a>
+<span class="sourceLineNo">346</span>            regionMaxSeqIdInStores.put(encodedRegionNameAsStr, maxSeqIdInStores);<a name="line.346"></a>
+<span class="sourceLineNo">347</span>            lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.347"></a>
+<span class="sourceLineNo">348</span>            if (LOG.isDebugEnabled()) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>              LOG.debug("DLS Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.349"></a>
+<span class="sourceLineNo">350</span>                  TextFormat.shortDebugString(ids));<a name="line.350"></a>
+<span class="sourceLineNo">351</span>            }<a name="line.351"></a>
+<span class="sourceLineNo">352</span>          }<a name="line.352"></a>
+<span class="sourceLineNo">353</span>          if (lastFlushedSequenceId == null) {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>            lastFlushedSequenceId = -1L;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>          }<a name="line.355"></a>
+<span class="sourceLineNo">356</span>          lastFlushedSequenceIds.put(encodedRegionNameAsStr, lastFlushedSequenceId);<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        }<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        if (lastFlushedSequenceId &gt;= entry.getKey().getSequenceId()) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>          editsSkipped++;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>          continue;<a name="line.360"></a>
+<span class="sourceLineNo">361</span>        }<a name="line.361"></a>
+<span class="sourceLineNo">362</span>        entryBuffers.appendEntry(entry);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        editsCount++;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>        int moreWritersFromLastCheck = this.getNumOpenWriters() - numOpenedFilesLastCheck;<a name="line.364"></a>
+<span class="sourceLineNo">365</span>        // If sufficient edits have passed, check if we should report progress.<a name="line.365"></a>
+<span class="sourceLineNo">366</span>        if (editsCount % interval == 0<a name="line.366"></a>
+<span class="sourceLineNo">367</span>            || moreWritersFromLastCheck &gt; numOpenedFilesBeforeReporting) {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>          numOpenedFilesLastCheck = this.getNumOpenWriters();<a name="line.368"></a>
+<span class="sourceLineNo">369</span>          String countsStr = (editsCount - (editsSkipped + outputSink.getSkippedEdits()))<a name="line.369"></a>
+<span class="sourceLineNo">370</span>              + " edits, skipped " + editsSkipped + " edits.";<a name="line.370"></a>
+<span class="sourceLineNo">371</span>          status.setStatus("Split " + countsStr);<a name="line.371"></a>
+<span class="sourceLineNo">372</span>          if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>            progress_failed = true;<a name="line.373"></a>
+<span class="sourceLineNo">374</span>            return false;<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>      }<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    } catch (InterruptedException ie) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      IOException iie = new InterruptedIOException();<a name="line.379"></a>
+<span class="sourceLineNo">380</span>      iie.initCause(ie);<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      throw iie;<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    } catch (CorruptedLogFileException e) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      LOG.warn("Could not parse, corrupted log file " + logPath, e);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      csm.getSplitLogWorkerCoordination().markCorrupted(rootDir,<a name="line.384"></a>
+<span class="sourceLineNo">385</span>        logfile.getPath().getName(), fs);<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      isCorrupted = true;<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    } catch (IOException e) {<a name="line.387"></a>
+<span class="sourceLineNo">388</span>      e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      throw e;<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    } finally {<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      LOG.debug("Finishing writing output logs and closing down.");<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      try {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>        if (null != in) {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>          in.close();<a name="line.394"></a>
+<span class="sourceLineNo">395</span>        }<a name="line.395"></a>
+<span class="sourceLineNo">396</span>      } catch (IOException exception) {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>        LOG.warn("Could not close wal reader: " + exception.getMessage());<a name="line.397"></a>
+<span class="sourceLineNo">398</span>        LOG.debug("exception details", exception);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      }<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      try {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>        if (outputSinkStarted) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>          // Set progress_failed to true as the immediate following statement will reset its value<a name="line.402"></a>
+<span class="sourceLineNo">403</span>          // when finishWritingAndClose() throws exception, progress_failed has the right value<a name="line.403"></a>
+<span class="sourceLineNo">404</span>          progress_failed = true;<a name="line.404"></a>
+<span class="sourceLineNo">405</span>          progress_failed = outputSink.finishWritingAndClose() == null;<a name="line.405"></a>
+<span class="sourceLineNo">406</span>        }<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      } finally {<a name="line.407"></a>
+<span class="sourceLineNo">408</span>        String msg =<a name="line.408"></a>
+<span class="sourceLineNo">409</span>            "Processed " + editsCount + " edits across " + outputSink.getNumberOfRecoveredRegions()<a name="line.409"></a>
+<span class="sourceLineNo">410</span>                + " regions; edits skipped=" + editsSkipped + "; log file=" + logPath +<a name="line.410"></a>
+<span class="sourceLineNo">411</span>                ", length=" + logfile.getLen() + // See if length got updated post lease recovery<a name="line.411"></a>
+<span class="sourceLineNo">412</span>                ", corrupted=" + isCorrupted + ", progress failed=" + progress_failed;<a name="line.412"></a>
+<span class="sourceLineNo">413</span>        LOG.info(msg);<a name="line.413"></a>
+<span class="sourceLineNo">414</span>        status.markComplete(msg);<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>    return !progress_failed;<a name="line.417"></a>
+<span class="sourceLineNo">418</span>  }<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>   * Completes the work done by splitLogFile by archiving logs<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   * &lt;p&gt;<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   * It is invoked by SplitLogManager once it knows that one of the<a name="line.423"></a>
+<span class="sourceLineNo">424</span>   * SplitLogWorkers have completed the splitLogFile() part. If the master<a name="line.424"></a>
+<span class="sourceLineNo">425</span>   * crashes then this function might get called multiple times.<a name="line.425"></a>
+<span class="sourceLineNo">426</span>   * &lt;p&gt;<a name="line.426"></a>
+<span class="sourceLineNo">427</span>   * @param logfile<a name="line.427"></a>
+<span class="sourceLineNo">428</span>   * @param conf<a name="line.428"></a>
+<span class="sourceLineNo">429</span>   * @throws IOException<a name="line.429"></a>
+<span class="sourceLineNo">430</span>   */<a name="line.430"></a>
+<span class="sourceLineNo">431</span>  public static void finishSplitLogFile(String logfile,<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      Configuration conf)  throws IOException {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    Path rootdir = FSUtils.getRootDir(conf);<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    Path oldLogDir = new Path(rootdir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.434"></a>
+<span class="sourceLineNo">435</span>    Path logPath;<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    if (FSUtils.isStartingWithPath(rootdir, logfile)) {<a name="line.436"></a>
+<span class="sourceLineNo">437</span>      logPath = new Path(logfile);<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    } else {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>      logPath = new Path(rootdir, logfile);<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    }<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    finishSplitLogFile(rootdir, oldLogDir, logPath, conf);<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>  private static void finishSplitLogFile(Path rootdir, Path oldLogDir,<a name="line.444"></a>
+<span class="sourceLineNo">445</span>      Path logPath, Configuration conf) throws IOException {<a name="line.445"></a>
+<span class="sourceLineNo">446</span>    List&lt;Path&gt; processedLogs = new ArrayList&lt;Path&gt;();<a name="line.446"></a>
+<span class="sourceLineNo">447</span>    List&lt;Path&gt; corruptedLogs = new ArrayList&lt;Path&gt;();<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    FileSystem fs;<a name="line.448"></a>
+<span class="sourceLineNo">449</span>    fs = rootdir.getFileSystem(conf);<a name="line.449"></a>
+<span class="sourceLineNo">450</span>    if (ZKSplitLog.isCorrupted(rootdir, logPath.getName(), fs)) {<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      corruptedLogs.add(logPath);<a name="line.451"></a>
+<span class="sourceLineNo">452</span>    } else {<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      processedLogs.add(logPath);<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    }<a name="line.454"></a>
+<span class="sourceLineNo">455</span>    archiveLogs(corruptedLogs, processedLogs, oldLogDir, fs, conf);<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    Path stagingDir = ZKSplitLog.getSplitLogDir(rootdir, logPath.getName());<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    fs.delete(stagingDir, true);<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>  /**<a name="line.460"></a>
+<span class="sourceLineNo">461</span>   * Moves processed logs to a oldLogDir after successful processing Moves<a name="line.461"></a>
+<span class="sourceLineNo">462</span>   * corrupted logs (any log that couldn't be successfully parsed to corruptDir<a name="line.462"></a>
+<span class="sourceLineNo">463</span>   * (.corrupt) for later investigation<a name="line.463"></a>
+<span class="sourceLineNo">464</span>   *<a name="line.464"></a>
+<span class="sourceLineNo">465</span>   * @param corruptedLogs<a name="line.465"></a>
+<span class="sourceLineNo">466</span>   * @param processedLogs<a name="line.466"></a>
+<span class="sourceLineNo">467</span>   * @param oldLogDir<a name="line.467"></a>
+<span class="sourceLineNo">468</span>   * @param fs<a name="line.468"></a>
+<span class="sourceLineNo">469</span>   * @param conf<a name="line.469"></a>
+<span class="sourceLineNo">470</span>   * @throws IOException<a name="line.470"></a>
+<span class="sourceLineNo">471</span>   */<a name="line.471"></a>
+<span class="sourceLineNo">472</span>  private static void archiveLogs(<a name="line.472"></a>
+<span class="sourceLineNo">473</span>      final List&lt;Path&gt; corruptedLogs,<a name="line.473"></a>
+<span class="sourceLineNo">474</span>      final List&lt;Path&gt; processedLogs, final Path oldLogDir,<a name="line.474"></a>
+<span class="sourceLineNo">475</span>      final FileSystem fs, final Configuration conf) throws IOException {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    final Path corruptDir = new Path(FSUtils.getRootDir(conf), conf.get(<a name="line.476"></a>
+<span class="sourceLineNo">477</span>        "hbase.regionserver.hlog.splitlog.corrupt.dir",  HConstants.CORRUPT_DIR_NAME));<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>    if (!fs.mkdirs(corruptDir)) {<a name="line.479"></a>
+<span class="sourceLineNo">480</span>      LOG.info("Unable to mkdir " + corruptDir);<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    }<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    fs.mkdirs(oldLogDir);<a name="line.482"></a>
+<span class="sourceLineNo">483</span><a name="line.483"></a>
+<span class="sourceLineNo">484</span>    // this method can get restarted or called multiple times for archiving<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    // the same log files.<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    for (Path corrupted : corruptedLogs) {<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      Path p = new Path(corruptDir, corrupted.getName());<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      if (fs.exists(corrupted)) {<a name="line.488"></a>
+<span class="sourceLineNo">489</span>        if (!fs.rename(corrupted, p)) {<a name="line.489"></a>
+<span class="sourceLineNo">490</span>          LOG.warn("Unable to move corrupted log " + corrupted + " to " + p);<a name="line.490"></a>
+<span class="sourceLineNo">491</span>        } else {<a name="line.491"></a>
+<span class="sourceLineNo">492</span>          LOG.warn("Moved corrupted log " + corrupted + " to " + p);<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>    }<a name="line.495"></a>
+<span class="sourceLineNo">496</span><a name="line.496"></a>
+<span class="sourceLineNo">497</span>    for (Path p : processedLogs) {<a name="line.497"></a>
+<span class="sourceLineNo">498</span>      Path newPath = FSHLog.getWALArchivePath(oldLogDir, p);<a name="line.498"></a>
+<span class="sourceLineNo">499</span>      if (fs.exists(p)) {<a name="line.499"></a>
+<span class="sourceLineNo">500</span>        if (!FSUtils.renameAndSetModifyTime(fs, p, newPath)) {<a name="line.500"></a>
+<span class="sourceLineNo">501</span>          LOG.warn("Unable to move  " + p + " to " + newPath);<a name="line.501"></a>
+<span class="sourceLineNo">502</span>        } else {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>          LOG.info("Archived processed log " + p + " to " + newPath);<a name="line.503"></a>
+<span class="sourceLineNo">504</span>        }<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      }<a name="line.505"></a>
+<span class="sourceLineNo">506</span>    }<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>  /**<a name="line.509"></a>
+<span class="sourceLineNo">510</span>   * Path to a file under RECOVERED_EDITS_DIR directory of the region found in<a name="line.510"></a>
+<span class="sourceLineNo">511</span>   * &lt;code&gt;logEntry&lt;/code&gt; named for the sequenceid in the passed<a name="line.511"></a>
+<span class="sourceLineNo">512</span>   * &lt;code&gt;logEntry&lt;/code&gt;: e.g. /hbase/some_table/2323432434/recovered.edits/2332.<a name="line.512"></a>
+<span class="sourceLineNo">513</span>   * This method also ensures existence of RECOVERED_EDITS_DIR under the region<a name="line.513"></a>
+<span class="sourceLineNo">514</span>   * creating it if necessary.<a name="line.514"></a>
+<span class="sourceLineNo">515</span>   * @param fs<a name="line.515"></a>
+<span class="sourceLineNo">516</span>   * @param logEntry<a name="line.516"></a>
+<span class="sourceLineNo">517</span>   * @param rootDir HBase root dir.<a name="line.517"></a>
+<span class="sourceLineNo">518</span>   * @param fileBeingSplit the file being split currently. Used to generate tmp file name.<a name="line.518"></a>
+<span class="sourceLineNo">519</span>   * @return Path to file into which to dump split log edits.<a name="line.519"></a>
+<span class="sourceLineNo">520</span>   * @throws IOException<a name="line.520"></a>
+<span class="sourceLineNo">521</span>   */<a name="line.521"></a>
+<span class="sourceLineNo">522</span>  @SuppressWarnings("deprecation")<a name="line.522"></a>
+<span class="sourceLineNo">523</span>  private static Path getRegionSplitEditsPath(final FileSystem fs,<a name="line.523"></a>
+<span class="sourceLineNo">524</span>      final Entry logEntry, final Path rootDir, FileStatus fileBeingSplit)<a name="line.524"></a>
+<span class="sourceLineNo">525</span>  throws IOException {<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    Path tableDir = FSUtils.getTableDir(rootDir, logEntry.getKey().getTablename());<a name="line.526"></a>
+<span class="sourceLineNo">527</span>    String encodedRegionName = Bytes.toString(logEntry.getKey().getEncodedRegionName());<a name="line.527"></a>
+<span class="sourceLineNo">528</span>    Path regiondir = HRegion.getRegionDir(tableDir, encodedRegionName);<a name="line.528"></a>
+<span class="sourceLineNo">529</span>    Path dir = getRegionDirRecoveredEditsDir(regiondir);<a name="line.529"></a>
+<span class="sourceLineNo">530</span><a name="line.530"></a>
+<span class="sourceLineNo">531</span>    if (!fs.exists(regiondir)) {<a name="line.531"></a>
+<span class="sourceLineNo">532</span>      LOG.info("This region's directory doesn't exist: "<a name="line.532"></a>
+<span class="sourceLineNo">533</span>          + regiondir.toString() + ". It is very likely that it was" +<a name="line.533"></a>
+<span class="sourceLineNo">534</span>          " already split so it's safe to discard those edits.");<a name="line.534"></a>
+<span class="sourceLineNo">535</span>      return null;<a name="line.535"></a>
+<span class="sourceLineNo">536</span>    }<a name="line.536"></a>
+<span class="sourceLineNo">537</span>    if (fs.exists(dir) &amp;&amp; fs.isFile(dir)) {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      Path tmp = new Path("/tmp");<a name="line.538"></a>
+<span class="sourceLineNo">539</span>      if (!fs.exists(tmp)) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span>        fs.mkdirs(tmp);<a name="line.540"></a>
+<span class="sourceLineNo">541</span>      }<a name="line.541"></a>
+<span class="sourceLineNo">542</span>      tmp = new Path(tmp,<a name="line.542"></a>
+<span class="sourceLineNo">543</span>        HConstants.RECOVERED_EDITS_DIR + "_" + encodedRegionName);<a name="line.543"></a>
+<span class="sourceLineNo">544</span>      LOG.warn("Found existing old file: " + dir + ". It could be some "<a name="line.544"></a>
+<span class="sourceLineNo">545</span>        + "leftover of an old installation. It should be a folder instead. "<a name="line.545"></a>
+<span class="sourceLineNo">546</span>        + "So moving it to " + tmp);<a name="line.546"></a>
+<span class="sourceLineNo">547</span>      if (!fs.rename(dir, tmp)) {<a name="line.547"></a>
+<span class="sourceLineNo">548</span>        LOG.warn("Failed to sideline old file " + dir);<a name="line.548"></a>
+<span class="sourceLineNo">549</span>      }<a name="line.549"></a>
+<span class="sourceLineNo">550</span>    }<a name="line.550"></a>
+<span class="sourceLineNo">551</span><a name="line.551"></a>
+<span class="sourceLineNo">552</span>    if (!fs.exists(dir) &amp;&amp; !fs.mkdirs(dir)) {<

<TRUNCATED>

[43/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/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 aaa2515..b5f4032 100644
--- a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
@@ -161,14 +161,14 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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/7/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/FilterWrapper.FilterRowRetCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="strong">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="strong">FilterList.Operator</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="strong">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="strong">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="strong">FilterWrapper.FilterRowRetCode</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="strong">FuzzyRowFilter.Order</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="strong">FilterList.Operator</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="strong">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="strong">RegexStringComparator.EngineType</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="strong">CompareFilter.CompareOp</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="strong">Filter.ReturnCode</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/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 646fd64..73842d3 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -270,12 +270,12 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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/7/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="strong">BlockPriority</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="strong">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="strong">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="strong">HFileBlock.Writer.State</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="strong">Cacheable.MemoryType</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="strong">BlockType.BlockCategory</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="strong">BlockPriority</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="strong">BlockType</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="strong">CacheConfig.ExternalBlockCaches</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/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 e166280..e9cdbb2 100644
--- a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
@@ -267,8 +267,8 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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/7/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/SyncTable.SyncMapper.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="strong">SyncTable.SyncMapper.Counter</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="strong">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="strong">SyncTable.SyncMapper.Counter</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="strong">CellCounter.CellCounterMapper.Counters</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="strong">RowCounter.RowCounterMapper.Counters</span></a></li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/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 615e647..5261c33 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
@@ -319,10 +319,10 @@
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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/7/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/MasterRpcServices.BalanceSwitchMode.html" title="enum in org.apache.hadoop.hbase.master"><span class="strong">MasterRpcServices.BalanceSwitchMode</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="strong">SplitLogManager.TerminationStatus</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="strong">RegionState.State</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="strong">SplitLogManager.ResubmitDirective</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="strong">MetricsMasterSourceFactoryImpl.FactoryStorage</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="strong">SplitLogManager.TerminationStatus</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/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 ecf9de1..409bb8a 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
@@ -145,8 +145,8 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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/7/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/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="strong">TableProcedureInterface.TableOperationType</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="strong">ServerProcedureInterface.ServerOperationType</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="strong">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="strong">DisableTableProcedure.MarkRegionOfflineOpResult</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/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 3ce2650..e8dd975 100644
--- a/devapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -352,8 +352,8 @@
 </ul>
 <h2 title="Annotation Type Hierarchy">Annotation Type Hierarchy</h2>
 <ul>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MetaMutationAnnotation.html" title="annotation in org.apache.hadoop.hbase"><span class="strong">MetaMutationAnnotation</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/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.<a href="../../../../org/apache/hadoop/hbase/VersionAnnotation.html" title="annotation in org.apache.hadoop.hbase"><span class="strong">VersionAnnotation</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/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.<a href="../../../../org/apache/hadoop/hbase/MetaMutationAnnotation.html" title="annotation in org.apache.hadoop.hbase"><span class="strong">MetaMutationAnnotation</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
 </ul>
 <h2 title="Enum Hierarchy">Enum Hierarchy</h2>
 <ul>
@@ -362,13 +362,13 @@
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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/7/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/HealthChecker.HealthCheckerExitStatus.html" title="enum in org.apache.hadoop.hbase"><span class="strong">HealthChecker.HealthCheckerExitStatus</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="strong">HConstants.OperationStatusCode</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="strong">CompatibilitySingletonFactory.SingletonStorage</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="strong">HConstants.Modify</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="strong">KeyValue.Type</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="strong">KeepDeletedCells</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="strong">Coprocessor.State</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="strong">MetaTableAccessor.QueryType</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="strong">CompatibilitySingletonFactory.SingletonStorage</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="strong">HConstants.OperationStatusCode</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="strong">KeepDeletedCells</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="strong">KeyValue.Type</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/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 19ef617..a73d0a7 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -120,8 +120,8 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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/7/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/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="strong">StateMachineProcedure.Flow</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="strong">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="strong">StateMachineProcedure.Flow</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/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 87e2bf6..f5a04fa 100644
--- a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
@@ -172,10 +172,10 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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/7/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/QuotaScope.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="strong">QuotaScope</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="strong">ThrottlingException.Type</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="strong">QuotaType</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="strong">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="strong">QuotaScope</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="strong">OperationQuota.OperationType</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/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 49c82a0..72d75ab 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.html
@@ -2920,7 +2920,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>FIXED_OVERHEAD</h4>
-<pre>public static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7338">FIXED_OVERHEAD</a></pre>
+<pre>public static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7340">FIXED_OVERHEAD</a></pre>
 </li>
 </ul>
 <a name="DEEP_OVERHEAD">
@@ -2929,7 +2929,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>DEEP_OVERHEAD</h4>
-<pre>public static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7355">DEEP_OVERHEAD</a></pre>
+<pre>public static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7357">DEEP_OVERHEAD</a></pre>
 </li>
 </ul>
 <a name="MOCKED_LIST">
@@ -2938,7 +2938,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/7/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.7745">MOCKED_LIST</a></pre>
+<pre>private static final&nbsp;<a href="http://docs.oracle.com/javase/7/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.7747">MOCKED_LIST</a></pre>
 <div class="block">A mocked list implementation - discards all updates.</div>
 </li>
 </ul>
@@ -6148,7 +6148,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>doWALAppend</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.WriteEntry.html" title="class in org.apache.hadoop.hbase.regionserver">MultiVersionConcurrencyControl.WriteEntry</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7029">doWALAppend</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALEdit</a>&nbsp;walEdit,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.WriteEntry.html" title="class in org.apache.hadoop.hbase.regionserver">MultiVersionConcurrencyControl.WriteEntry</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7031">doWALAppend</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALEdit</a>&nbsp;walEdit,
                                                     <a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;durability,
                                                     long&nbsp;nonceGroup,
                                                     long&nbsp;nonce)
@@ -6163,7 +6163,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>doWALAppend</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.WriteEntry.html" title="class in org.apache.hadoop.hbase.regionserver">MultiVersionConcurrencyControl.WriteEntry</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7039">doWALAppend</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALEdit</a>&nbsp;walEdit,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.WriteEntry.html" title="class in org.apache.hadoop.hbase.regionserver">MultiVersionConcurrencyControl.WriteEntry</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7041">doWALAppend</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALEdit</a>&nbsp;walEdit,
                                                     <a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;durability,
                                                     <a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a>&gt;&nbsp;clusterIds,
                                                     long&nbsp;now,
@@ -6181,7 +6181,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>doCoprocessorPreCall</h4>
-<pre>private&nbsp;<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/HRegion.html#line.7067">doCoprocessorPreCall</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.Operation</a>&nbsp;op,
+<pre>private&nbsp;<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/HRegion.html#line.7069">doCoprocessorPreCall</a>(<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)
                              throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Do coprocessor pre-increment or pre-append call.</div>
@@ -6197,7 +6197,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>reckonDeltas</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALEdit</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7094">reckonDeltas</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.Operation</a>&nbsp;op,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALEdit</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7096">reckonDeltas</a>(<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,
                    <a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;effectiveDurability,
                    <a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a>,<a href="http://docs.oracle.com/javase/7/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;forMemStore,
@@ -6219,7 +6219,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>reckonDeltasByStore</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/HRegion.html#line.7137">reckonDeltasByStore</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a>&nbsp;store,
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/HRegion.html#line.7139">reckonDeltasByStore</a>(<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,
                              <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;mutation,
                              <a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;effectiveDurability,
@@ -6246,7 +6246,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>reckonIncrement</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7203">reckonIncrement</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;delta,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7205">reckonIncrement</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;delta,
                    long&nbsp;deltaAmount,
                    <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;currentValue,
                    byte[]&nbsp;columnFamily,
@@ -6266,7 +6266,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>reckonAppend</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7228">reckonAppend</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;delta,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7230">reckonAppend</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;delta,
                 <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;currentValue,
                 long&nbsp;now,
                 <a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;mutation)
@@ -6281,7 +6281,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getLongValue</h4>
-<pre>private static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7279">getLongValue</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)
+<pre>private static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7281">getLongValue</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)
                           throws <a href="../../../../../org/apache/hadoop/hbase/DoNotRetryIOException.html" title="class in org.apache.hadoop.hbase">DoNotRetryIOException</a></pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>Get the long out of the passed in Cell</dd>
 <dt><span class="strong">Throws:</span></dt>
@@ -6294,7 +6294,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>get</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/HRegion.html#line.7295">get</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;mutation,
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/HRegion.html#line.7297">get</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;mutation,
              <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a>&nbsp;store,
              <a href="http://docs.oracle.com/javase/7/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;coordinates,
              <a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client">IsolationLevel</a>&nbsp;isolation,
@@ -6313,7 +6313,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>sort</h4>
-<pre>private static&nbsp;<a href="http://docs.oracle.com/javase/7/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/HRegion.html#line.7320">sort</a>(<a href="http://docs.oracle.com/javase/7/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;cells,
+<pre>private static&nbsp;<a href="http://docs.oracle.com/javase/7/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/HRegion.html#line.7322">sort</a>(<a href="http://docs.oracle.com/javase/7/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;cells,
               <a href="http://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;comparator)</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>Sorted list of <code>cells</code> using <code>comparator</code></dd></dl>
 </li>
@@ -6324,7 +6324,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>checkFamily</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7329">checkFamily</a>(byte[]&nbsp;family)
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7331">checkFamily</a>(byte[]&nbsp;family)
            throws <a href="../../../../../org/apache/hadoop/hbase/regionserver/NoSuchColumnFamilyException.html" title="class in org.apache.hadoop.hbase.regionserver">NoSuchColumnFamilyException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/NoSuchColumnFamilyException.html" title="class in org.apache.hadoop.hbase.regionserver">NoSuchColumnFamilyException</a></code></dd></dl>
@@ -6336,7 +6336,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>heapSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7369">heapSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7371">heapSize</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html#heapSize()">heapSize</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a></code></dd>
@@ -6350,7 +6350,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>registerService</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7379">registerService</a>(com.google.protobuf.Service&nbsp;instance)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7381">registerService</a>(com.google.protobuf.Service&nbsp;instance)</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#registerService(com.google.protobuf.Service)">Region</a></code></strong></div>
 <div class="block">Registers a new protocol buffer <code>Service</code> subclass as a coprocessor endpoint to
  be available for handling
@@ -6377,7 +6377,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>execService</h4>
-<pre>public&nbsp;com.google.protobuf.Message&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7401">execService</a>(com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;com.google.protobuf.Message&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7403">execService</a>(com.google.protobuf.RpcController&nbsp;controller,
                                       org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceCall&nbsp;call)
                                         throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#execService(com.google.protobuf.RpcController,%20org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceCall)">Region</a></code></strong></div>
@@ -6402,7 +6402,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldForceSplit</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7451">shouldForceSplit</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7453">shouldForceSplit</a>()</pre>
 </li>
 </ul>
 <a name="getExplicitSplitPoint()">
@@ -6411,7 +6411,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getExplicitSplitPoint</h4>
-<pre>byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7455">getExplicitSplitPoint</a>()</pre>
+<pre>byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7457">getExplicitSplitPoint</a>()</pre>
 </li>
 </ul>
 <a name="forceSplit(byte[])">
@@ -6420,7 +6420,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>forceSplit</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7459">forceSplit</a>(byte[]&nbsp;sp)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7461">forceSplit</a>(byte[]&nbsp;sp)</pre>
 </li>
 </ul>
 <a name="clearSplit()">
@@ -6429,7 +6429,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>clearSplit</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7468">clearSplit</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7470">clearSplit</a>()</pre>
 </li>
 </ul>
 <a name="prepareToSplit()">
@@ -6438,7 +6438,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>prepareToSplit</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7476">prepareToSplit</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7478">prepareToSplit</a>()</pre>
 <div class="block">Give the region a chance to prepare before it is split.</div>
 </li>
 </ul>
@@ -6448,7 +6448,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>checkSplit</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7486">checkSplit</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7488">checkSplit</a>()</pre>
 <div class="block">Return the splitpoint. null indicates the region isn't splittable
  If the splitpoint isn't explicitly specified, it will go over the stores
  to find the best splitpoint. Currently the criteria of best splitpoint
@@ -6461,7 +6461,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getCompactPriority</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7522">getCompactPriority</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7524">getCompactPriority</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>The priority that this region should have in the compaction queue</dd></dl>
 </li>
 </ul>
@@ -6471,7 +6471,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getCoprocessorHost</h4>
-<pre>public&nbsp;<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/HRegion.html#line.7533">getCoprocessorHost</a>()</pre>
+<pre>public&nbsp;<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/HRegion.html#line.7535">getCoprocessorHost</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getCoprocessorHost()">getCoprocessorHost</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>
@@ -6484,7 +6484,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>setCoprocessorHost</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7538">setCoprocessorHost</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver">RegionCoprocessorHost</a>&nbsp;coprocessorHost)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7540">setCoprocessorHost</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver">RegionCoprocessorHost</a>&nbsp;coprocessorHost)</pre>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>coprocessorHost</code> - the new coprocessor host</dd></dl>
 </li>
 </ul>
@@ -6494,7 +6494,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>startRegionOperation</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7543">startRegionOperation</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7545">startRegionOperation</a>()
                           throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#startRegionOperation()">Region</a></code></strong></div>
 <div class="block">This method needs to be called before any public call that reads or
@@ -6515,7 +6515,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>startRegionOperation</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7550">startRegionOperation</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.Operation</a>&nbsp;op)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7552">startRegionOperation</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/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#startRegionOperation(org.apache.hadoop.hbase.regionserver.Region.Operation)">Region</a></code></strong></div>
 <div class="block">This method needs to be called before any public call that reads or
@@ -6537,7 +6537,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.7598">closeRegionOperation</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7600">closeRegionOperation</a>()
                           throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#closeRegionOperation()">Region</a></code></strong></div>
 <div class="block">Closes the region operation lock.</div>
@@ -6554,7 +6554,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.7607">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.7609">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/7/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
  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>
@@ -6568,7 +6568,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.7623">startBulkRegionOperation</a>(boolean&nbsp;writeLockNeeded)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7625">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/7/docs/api/java/io/InterruptedIOException.html?is-external=true" title="class or interface in java.io">InterruptedIOException</a></pre>
@@ -6588,7 +6588,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.7641">closeBulkRegionOperation</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7643">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>
@@ -6599,7 +6599,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.7650">recordMutationWithoutWal</a>(<a href="http://docs.oracle.com/javase/7/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/7/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.7652">recordMutationWithoutWal</a>(<a href="http://docs.oracle.com/javase/7/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/7/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 counters for number of puts without wal and the size of possible data loss.
  These information are exposed by the region server metrics.</div>
 </li>
@@ -6610,7 +6610,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.7671">lock</a>(<a href="http://docs.oracle.com/javase/7/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.7673">lock</a>(<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/io/InterruptedIOException.html?is-external=true" title="class or interface in java.io">InterruptedIOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -6624,7 +6624,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.7681">lock</a>(<a href="http://docs.oracle.com/javase/7/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.7683">lock</a>(<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/io/InterruptedIOException.html?is-external=true" title="class or interface in java.io">InterruptedIOException</a></pre>
@@ -6642,7 +6642,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.7707">sync</a>(long&nbsp;txid,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7709">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/7/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>
@@ -6657,7 +6657,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.7738">shouldSyncWAL</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7740">shouldSyncWAL</a>()</pre>
 <div class="block">Check whether we should sync the wal from the table's durability settings</div>
 </li>
 </ul>
@@ -6667,7 +6667,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.7769">getOpenSeqNum</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7771">getOpenSeqNum</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></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>
@@ -6680,7 +6680,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/7/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/7/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.7774">getMaxStoreSeqId</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/7/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.7776">getMaxStoreSeqId</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></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>
@@ -6694,7 +6694,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.7779">getOldestSeqIdOfStore</a>(byte[]&nbsp;familyName)</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7781">getOldestSeqIdOfStore</a>(byte[]&nbsp;familyName)</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getOldestSeqIdOfStore(byte[])">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>
@@ -6709,7 +6709,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.protobuf.generated.AdminProtos.GetRegionInfoResponse.CompactionState&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7784">getCompactionState</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoResponse.CompactionState&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7786">getCompactionState</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></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>
@@ -6722,7 +6722,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.7790">reportCompactionRequestStart</a>(boolean&nbsp;isMajor)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7792">reportCompactionRequestStart</a>(boolean&nbsp;isMajor)</pre>
 </li>
 </ul>
 <a name="reportCompactionRequestEnd(boolean, int, long)">
@@ -6731,7 +6731,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.7794">reportCompactionRequestEnd</a>(boolean&nbsp;isMajor,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7796">reportCompactionRequestEnd</a>(boolean&nbsp;isMajor,
                               int&nbsp;numFiles,
                               long&nbsp;filesSizeCompacted)</pre>
 </li>
@@ -6742,7 +6742,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.7806">getReadPoint</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7808">getReadPoint</a>()</pre>
 </li>
 </ul>
 <a name="onConfigurationChange(org.apache.hadoop.conf.Configuration)">
@@ -6751,7 +6751,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.7814">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.7816">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>
@@ -6766,7 +6766,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.7822">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.7824">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><strong>Specified by:</strong></dt>
@@ -6780,7 +6780,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.7833">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.7835">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><strong>Specified by:</strong></dt>
@@ -6794,7 +6794,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getCellCompartor</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.7840">getCellCompartor</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.7842">getCellCompartor</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getCellCompartor()">Region</a></code></strong></div>
 <div class="block">The comparator to be used with the region</div>
 <dl>
@@ -6809,7 +6809,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getMemstoreFlushSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7845">getMemstoreFlushSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7847">getMemstoreFlushSize</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/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 7e81359..adc8021 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -629,24 +629,24 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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/7/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/MemStoreScanner.Type.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">MemStoreScanner.Type</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="strong">FlushType</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="strong">MetricsRegionServerSourceFactoryImpl.FactoryStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionMergeTransaction.RegionMergeTransactionPhase.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">RegionMergeTransaction.RegionMergeTransactionPhase</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DeleteTracker.DeleteResult.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">DeleteTracker.DeleteResult</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="strong">RegionOpeningState</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="strong">ScanType</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="strong">Region.Operation</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="strong">DefaultHeapMemoryTuner.StepDirection</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="strong">ScannerContext.NextState</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="strong">StoreScanner.StoreScannerCompactionRace</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="strong">SplitLogWorker.TaskExecutor.Status</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.MatchCode.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">ScanQueryMatcher.MatchCode</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="strong">BloomType</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="strong">Region.FlushResult.Result</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="strong">ScannerContext.NextState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitTransaction.SplitTransactionPhase.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">SplitTransaction.SplitTransactionPhase</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="strong">SplitLogWorker.TaskExecutor.Status</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="strong">MetricsRegionServerSourceFactoryImpl.FactoryStorage</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="strong">RegionOpeningState</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="strong">FlushType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DeleteTracker.DeleteCompare.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">DeleteTracker.DeleteCompare</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.MatchCode.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">ScanQueryMatcher.MatchCode</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="strong">ScannerContext.LimitScope</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="strong">BloomType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionMergeTransaction.RegionMergeTransactionPhase.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">RegionMergeTransaction.RegionMergeTransactionPhase</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="strong">DefaultHeapMemoryTuner.StepDirection</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="strong">StoreScanner.StoreScannerCompactionRace</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="strong">Region.Operation</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreScanner.Type.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">MemStoreScanner.Type</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="strong">ScanType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/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 86e9213..b606bf6 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
@@ -141,8 +141,8 @@
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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/7/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="strong">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="strong">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="strong">AccessControlFilter.Strategy</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="strong">Permission.Action</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/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 86f4d59..9869b17 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
@@ -153,8 +153,8 @@
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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/7/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/AuthMethod.html" title="enum in org.apache.hadoop.hbase.security"><span class="strong">AuthMethod</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="strong">SaslStatus</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="strong">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="strong">SaslStatus</span></a></li>
 </ul>
 </li>
 </ul>


[47/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/apidocs/src-html/org/apache/hadoop/hbase/util/OrderedBytes.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/util/OrderedBytes.html b/apidocs/src-html/org/apache/hadoop/hbase/util/OrderedBytes.html
index 4e66df3..804d5fb 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/util/OrderedBytes.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/util/OrderedBytes.html
@@ -1511,242 +1511,261 @@
 <span class="sourceLineNo">1503</span>   * false otherwise.<a name="line.1503"></a>
 <span class="sourceLineNo">1504</span>   */<a name="line.1504"></a>
 <span class="sourceLineNo">1505</span>  public static boolean isEncodedValue(PositionedByteRange src) {<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>    return isNull(src) || isNumeric(src) || isFixedInt32(src) || isFixedInt64(src)<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>        || isFixedFloat32(src) || isFixedFloat64(src) || isText(src) || isBlobCopy(src)<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>        || isBlobVar(src);<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>  }<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span><a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>  /**<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>   * Return true when the next encoded value in {@code src} is null, false<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>   * otherwise.<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>   */<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>  public static boolean isNull(PositionedByteRange src) {<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>    return NULL ==<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>        (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>  }<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span><a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>  /**<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>   * Return true when the next encoded value in {@code src} uses Numeric<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>   * encoding, false otherwise. {@code NaN}, {@code +/-Inf} are valid Numeric<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>   * values.<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>   */<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>  public static boolean isNumeric(PositionedByteRange src) {<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>    byte x = (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>    return x &gt;= NEG_INF &amp;&amp; x &lt;= NAN;<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>  }<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span><a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>  /**<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>   * Return true when the next encoded value in {@code src} uses Numeric<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>   * encoding and is {@code Infinite}, false otherwise.<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>   */<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span>  public static boolean isNumericInfinite(PositionedByteRange src) {<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>    byte x = (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>    return NEG_INF == x || POS_INF == x;<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>  }<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span><a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>  /**<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>   * Return true when the next encoded value in {@code src} uses Numeric<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>   * encoding and is {@code NaN}, false otherwise.<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>   */<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>  public static boolean isNumericNaN(PositionedByteRange src) {<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>    return NAN == (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>  }<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span><a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>  /**<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>   * Return true when the next encoded value in {@code src} uses Numeric<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>   * encoding and is {@code 0}, false otherwise.<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>   */<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>  public static boolean isNumericZero(PositionedByteRange src) {<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>    return ZERO ==<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>        (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>  }<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span><a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>  /**<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>   * Return true when the next encoded value in {@code src} uses fixed-width<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>   * Int32 encoding, false otherwise.<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>   */<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>  public static boolean isFixedInt32(PositionedByteRange src) {<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>    return FIXED_INT32 ==<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>        (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>  }<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span><a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>  /**<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>   * Return true when the next encoded value in {@code src} uses fixed-width<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>   * Int64 encoding, false otherwise.<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>   */<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>  public static boolean isFixedInt64(PositionedByteRange src) {<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>    return FIXED_INT64 ==<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>        (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>  }<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span><a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>  /**<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>   * Return true when the next encoded value in {@code src} uses fixed-width<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>   * Float32 encoding, false otherwise.<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>   */<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>  public static boolean isFixedFloat32(PositionedByteRange src) {<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>    return FIXED_FLOAT32 ==<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>        (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>  }<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span><a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>  /**<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>   * Return true when the next encoded value in {@code src} uses fixed-width<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>   * Float64 encoding, false otherwise.<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>   */<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>  public static boolean isFixedFloat64(PositionedByteRange src) {<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>    return FIXED_FLOAT64 ==<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>        (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>  }<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span><a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>  /**<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>   * Return true when the next encoded value in {@code src} uses Text encoding,<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>   * false otherwise.<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>   */<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>  public static boolean isText(PositionedByteRange src) {<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>    return TEXT ==<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>        (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>  }<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span><a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>  /**<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>   * Return true when the next encoded value in {@code src} uses BlobVar<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>   * encoding, false otherwise.<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>   */<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>  public static boolean isBlobVar(PositionedByteRange src) {<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>    return BLOB_VAR ==<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>        (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>  }<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span><a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>  /**<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>   * Return true when the next encoded value in {@code src} uses BlobCopy<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>   * encoding, false otherwise.<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>   */<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>  public static boolean isBlobCopy(PositionedByteRange src) {<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>    return BLOB_COPY ==<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>        (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>  }<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span><a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>  /**<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>   * Skip {@code buff}'s position forward over one encoded value.<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>   * @return number of bytes skipped.<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>   */<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>  public static int skip(PositionedByteRange src) {<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>    final int start = src.getPosition();<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>    byte header = src.get();<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>    Order ord = (-1 == Integer.signum(header)) ? DESCENDING : ASCENDING;<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>    header = ord.apply(header);<a name="line.1627"></a>
+<span class="sourceLineNo">1506</span>    return isNull(src) || isNumeric(src) || isFixedInt8(src) || isFixedInt16(src)<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>        || isFixedInt32(src) || isFixedInt64(src)<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>        || isFixedFloat32(src) || isFixedFloat64(src) || isText(src) || isBlobCopy(src)<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>        || isBlobVar(src);<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>  }<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span><a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>  /**<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>   * Return true when the next encoded value in {@code src} is null, false<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>   * otherwise.<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>   */<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>  public static boolean isNull(PositionedByteRange src) {<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>    return NULL ==<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>        (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>  }<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span><a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>  /**<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>   * Return true when the next encoded value in {@code src} uses Numeric<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>   * encoding, false otherwise. {@code NaN}, {@code +/-Inf} are valid Numeric<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>   * values.<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>   */<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>  public static boolean isNumeric(PositionedByteRange src) {<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>    byte x = (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>    return x &gt;= NEG_INF &amp;&amp; x &lt;= NAN;<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>  }<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span><a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>  /**<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>   * Return true when the next encoded value in {@code src} uses Numeric<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>   * encoding and is {@code Infinite}, false otherwise.<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>   */<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>  public static boolean isNumericInfinite(PositionedByteRange src) {<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>    byte x = (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>    return NEG_INF == x || POS_INF == x;<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>  }<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span><a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>  /**<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>   * Return true when the next encoded value in {@code src} uses Numeric<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>   * encoding and is {@code NaN}, false otherwise.<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>   */<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>  public static boolean isNumericNaN(PositionedByteRange src) {<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>    return NAN == (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>  }<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span><a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>  /**<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>   * Return true when the next encoded value in {@code src} uses Numeric<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>   * encoding and is {@code 0}, false otherwise.<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>   */<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>  public static boolean isNumericZero(PositionedByteRange src) {<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>    return ZERO ==<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>        (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>  }<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span><a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>  /**<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>   * Return true when the next encoded value in {@code src} uses fixed-width<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>   * Int8 encoding, false otherwise.<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>   */<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>  public static boolean isFixedInt8(PositionedByteRange src) {<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>    return FIXED_INT8 ==<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>        (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>  }<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span><a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>  /**<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>   * Return true when the next encoded value in {@code src} uses fixed-width<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>   * Int16 encoding, false otherwise.<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>   */<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>  public static boolean isFixedInt16(PositionedByteRange src) {<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>    return FIXED_INT16 ==<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>        (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>  }<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span><a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>  /**<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>   * Return true when the next encoded value in {@code src} uses fixed-width<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>   * Int32 encoding, false otherwise.<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>   */<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>  public static boolean isFixedInt32(PositionedByteRange src) {<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>    return FIXED_INT32 ==<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>        (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>  }<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span><a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>  /**<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>   * Return true when the next encoded value in {@code src} uses fixed-width<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>   * Int64 encoding, false otherwise.<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>   */<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>  public static boolean isFixedInt64(PositionedByteRange src) {<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>    return FIXED_INT64 ==<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>        (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span>  }<a name="line.1591"></a>
+<span class="sourceLineNo">1592</span><a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>  /**<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>   * Return true when the next encoded value in {@code src} uses fixed-width<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>   * Float32 encoding, false otherwise.<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>   */<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>  public static boolean isFixedFloat32(PositionedByteRange src) {<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>    return FIXED_FLOAT32 ==<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>        (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>  }<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span><a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>  /**<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>   * Return true when the next encoded value in {@code src} uses fixed-width<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>   * Float64 encoding, false otherwise.<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>   */<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>  public static boolean isFixedFloat64(PositionedByteRange src) {<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>    return FIXED_FLOAT64 ==<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>        (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>  }<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span><a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>  /**<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>   * Return true when the next encoded value in {@code src} uses Text encoding,<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>   * false otherwise.<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>   */<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>  public static boolean isText(PositionedByteRange src) {<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>    return TEXT ==<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span>        (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span>  }<a name="line.1618"></a>
+<span class="sourceLineNo">1619</span><a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>  /**<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>   * Return true when the next encoded value in {@code src} uses BlobVar<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>   * encoding, false otherwise.<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span>   */<a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>  public static boolean isBlobVar(PositionedByteRange src) {<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>    return BLOB_VAR ==<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>        (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span>  }<a name="line.1627"></a>
 <span class="sourceLineNo">1628</span><a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>    switch (header) {<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>      case NULL:<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>      case NEG_INF:<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>        return 1;<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span>      case NEG_LARGE: /* Large negative number: 0x08, ~E, ~M */<a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>        skipVaruint64(src, DESCENDING != ord);<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>        skipSignificand(src, DESCENDING != ord);<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>        return src.getPosition() - start;<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>      case NEG_MED_MIN: /* Medium negative number: 0x13-E, ~M */<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>      case NEG_MED_MIN + 0x01:<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>      case NEG_MED_MIN + 0x02:<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>      case NEG_MED_MIN + 0x03:<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>      case NEG_MED_MIN + 0x04:<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>      case NEG_MED_MIN + 0x05:<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>      case NEG_MED_MIN + 0x06:<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>      case NEG_MED_MIN + 0x07:<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>      case NEG_MED_MIN + 0x08:<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>      case NEG_MED_MIN + 0x09:<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>      case NEG_MED_MAX:<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span>        skipSignificand(src, DESCENDING != ord);<a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>        return src.getPosition() - start;<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>      case NEG_SMALL: /* Small negative number: 0x14, -E, ~M */<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span>        skipVaruint64(src, DESCENDING == ord);<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>        skipSignificand(src, DESCENDING != ord);<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>        return src.getPosition() - start;<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span>      case ZERO:<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>        return 1;<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>      case POS_SMALL: /* Small positive number: 0x16, ~-E, M */<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>        skipVaruint64(src, DESCENDING != ord);<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span>        skipSignificand(src, DESCENDING == ord);<a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>        return src.getPosition() - start;<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>      case POS_MED_MIN: /* Medium positive number: 0x17+E, M */<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>      case POS_MED_MIN + 0x01:<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>      case POS_MED_MIN + 0x02:<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>      case POS_MED_MIN + 0x03:<a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>      case POS_MED_MIN + 0x04:<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>      case POS_MED_MIN + 0x05:<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>      case POS_MED_MIN + 0x06:<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>      case POS_MED_MIN + 0x07:<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>      case POS_MED_MIN + 0x08:<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>      case POS_MED_MIN + 0x09:<a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>      case POS_MED_MAX:<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>        skipSignificand(src, DESCENDING == ord);<a name="line.1671"></a>
+<span class="sourceLineNo">1629</span>  /**<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span>   * Return true when the next encoded value in {@code src} uses BlobCopy<a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>   * encoding, false otherwise.<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span>   */<a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>  public static boolean isBlobCopy(PositionedByteRange src) {<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>    return BLOB_COPY ==<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>        (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>  }<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span><a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>  /**<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span>   * Skip {@code buff}'s position forward over one encoded value.<a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>   * @return number of bytes skipped.<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>   */<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>  public static int skip(PositionedByteRange src) {<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>    final int start = src.getPosition();<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>    byte header = src.get();<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>    Order ord = (-1 == Integer.signum(header)) ? DESCENDING : ASCENDING;<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>    header = ord.apply(header);<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span><a name="line.1647"></a>
+<span class="sourceLineNo">1648</span>    switch (header) {<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>      case NULL:<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>      case NEG_INF:<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>        return 1;<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>      case NEG_LARGE: /* Large negative number: 0x08, ~E, ~M */<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span>        skipVaruint64(src, DESCENDING != ord);<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>        skipSignificand(src, DESCENDING != ord);<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span>        return src.getPosition() - start;<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>      case NEG_MED_MIN: /* Medium negative number: 0x13-E, ~M */<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span>      case NEG_MED_MIN + 0x01:<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>      case NEG_MED_MIN + 0x02:<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>      case NEG_MED_MIN + 0x03:<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>      case NEG_MED_MIN + 0x04:<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>      case NEG_MED_MIN + 0x05:<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>      case NEG_MED_MIN + 0x06:<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>      case NEG_MED_MIN + 0x07:<a name="line.1663"></a>
+<span class="sourceLineNo">1664</span>      case NEG_MED_MIN + 0x08:<a name="line.1664"></a>
+<span class="sourceLineNo">1665</span>      case NEG_MED_MIN + 0x09:<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>      case NEG_MED_MAX:<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>        skipSignificand(src, DESCENDING != ord);<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>        return src.getPosition() - start;<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>      case NEG_SMALL: /* Small negative number: 0x14, -E, ~M */<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>        skipVaruint64(src, DESCENDING == ord);<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>        skipSignificand(src, DESCENDING != ord);<a name="line.1671"></a>
 <span class="sourceLineNo">1672</span>        return src.getPosition() - start;<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>      case POS_LARGE: /* Large positive number: 0x22, E, M */<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>        skipVaruint64(src, DESCENDING == ord);<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>        skipSignificand(src, DESCENDING == ord);<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>        return src.getPosition() - start;<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>      case POS_INF:<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>        return 1;<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>      case NAN:<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>        return 1;<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span>      case FIXED_INT8:<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>        src.setPosition(src.getPosition() + 1);<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>        return src.getPosition() - start;<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>      case FIXED_INT16:<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>        src.setPosition(src.getPosition() + 2);<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>        return src.getPosition() - start;<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>      case FIXED_INT32:<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>        src.setPosition(src.getPosition() + 4);<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>        return src.getPosition() - start;<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>      case FIXED_INT64:<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>        src.setPosition(src.getPosition() + 8);<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>        return src.getPosition() - start;<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>      case FIXED_FLOAT32:<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>        src.setPosition(src.getPosition() + 4);<a name="line.1694"></a>
+<span class="sourceLineNo">1673</span>      case ZERO:<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>        return 1;<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span>      case POS_SMALL: /* Small positive number: 0x16, ~-E, M */<a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>        skipVaruint64(src, DESCENDING != ord);<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>        skipSignificand(src, DESCENDING == ord);<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>        return src.getPosition() - start;<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>      case POS_MED_MIN: /* Medium positive number: 0x17+E, M */<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>      case POS_MED_MIN + 0x01:<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>      case POS_MED_MIN + 0x02:<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>      case POS_MED_MIN + 0x03:<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span>      case POS_MED_MIN + 0x04:<a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>      case POS_MED_MIN + 0x05:<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>      case POS_MED_MIN + 0x06:<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span>      case POS_MED_MIN + 0x07:<a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>      case POS_MED_MIN + 0x08:<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>      case POS_MED_MIN + 0x09:<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>      case POS_MED_MAX:<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>        skipSignificand(src, DESCENDING == ord);<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>        return src.getPosition() - start;<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>      case POS_LARGE: /* Large positive number: 0x22, E, M */<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span>        skipVaruint64(src, DESCENDING == ord);<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>        skipSignificand(src, DESCENDING == ord);<a name="line.1694"></a>
 <span class="sourceLineNo">1695</span>        return src.getPosition() - start;<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>      case FIXED_FLOAT64:<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>        src.setPosition(src.getPosition() + 8);<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>        return src.getPosition() - start;<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>      case TEXT:<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>        // for null-terminated values, skip to the end.<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>        do {<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>          header = ord.apply(src.get());<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>        } while (header != TERM);<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>        return src.getPosition() - start;<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>      case BLOB_VAR:<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>        // read until we find a 0 in the MSB<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>        do {<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>          header = ord.apply(src.get());<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>        } while ((byte) (header &amp; 0x80) != TERM);<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>        return src.getPosition() - start;<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>      case BLOB_COPY:<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>        if (Order.DESCENDING == ord) {<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span>          // if descending, read to termination byte.<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>          do {<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>            header = ord.apply(src.get());<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>          } while (header != TERM);<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>          return src.getPosition() - start;<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span>        } else {<a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>          // otherwise, just skip to the end.<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>          src.setPosition(src.getLength());<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span>          return src.getPosition() - start;<a name="line.1721"></a>
-<span class="sourceLineNo">1722</span>        }<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span>      default:<a name="line.1723"></a>
-<span class="sourceLineNo">1724</span>        throw unexpectedHeader(header);<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>    }<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>  }<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span><a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>  /**<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>   * Return the number of encoded entries remaining in {@code buff}. The<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>   * state of {@code buff} is not modified through use of this method.<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>   */<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>  public static int length(PositionedByteRange buff) {<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>    PositionedByteRange b =<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>        new SimplePositionedMutableByteRange(buff.getBytes(), buff.getOffset(), buff.getLength());<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>    b.setPosition(buff.getPosition());<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>    int cnt = 0;<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>    for (; isEncodedValue(b); skip(buff), cnt++)<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>      ;<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>    return cnt;<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>  }<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>}<a name="line.1741"></a>
+<span class="sourceLineNo">1696</span>      case POS_INF:<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>        return 1;<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>      case NAN:<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span>        return 1;<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>      case FIXED_INT8:<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>        src.setPosition(src.getPosition() + 1);<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>        return src.getPosition() - start;<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>      case FIXED_INT16:<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>        src.setPosition(src.getPosition() + 2);<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>        return src.getPosition() - start;<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>      case FIXED_INT32:<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>        src.setPosition(src.getPosition() + 4);<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>        return src.getPosition() - start;<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>      case FIXED_INT64:<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span>        src.setPosition(src.getPosition() + 8);<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>        return src.getPosition() - start;<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>      case FIXED_FLOAT32:<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>        src.setPosition(src.getPosition() + 4);<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>        return src.getPosition() - start;<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>      case FIXED_FLOAT64:<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>        src.setPosition(src.getPosition() + 8);<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>        return src.getPosition() - start;<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>      case TEXT:<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span>        // for null-terminated values, skip to the end.<a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>        do {<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>          header = ord.apply(src.get());<a name="line.1721"></a>
+<span class="sourceLineNo">1722</span>        } while (header != TERM);<a name="line.1722"></a>
+<span class="sourceLineNo">1723</span>        return src.getPosition() - start;<a name="line.1723"></a>
+<span class="sourceLineNo">1724</span>      case BLOB_VAR:<a name="line.1724"></a>
+<span class="sourceLineNo">1725</span>        // read until we find a 0 in the MSB<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>        do {<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>          header = ord.apply(src.get());<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>        } while ((byte) (header &amp; 0x80) != TERM);<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>        return src.getPosition() - start;<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span>      case BLOB_COPY:<a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>        if (Order.DESCENDING == ord) {<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>          // if descending, read to termination byte.<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>          do {<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>            header = ord.apply(src.get());<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>          } while (header != TERM);<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>          return src.getPosition() - start;<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>        } else {<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span>          // otherwise, just skip to the end.<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>          src.setPosition(src.getLength());<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>          return src.getPosition() - start;<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>        }<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>      default:<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>        throw unexpectedHeader(header);<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>    }<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>  }<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span><a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>  /**<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>   * Return the number of encoded entries remaining in {@code buff}. The<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span>   * state of {@code buff} is not modified through use of this method.<a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>   */<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>  public static int length(PositionedByteRange buff) {<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>    PositionedByteRange b =<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>        new SimplePositionedMutableByteRange(buff.getBytes(), buff.getOffset(), buff.getLength());<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>    b.setPosition(buff.getPosition());<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>    int cnt = 0;<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>    for (; isEncodedValue(b); skip(b), cnt++)<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>      ;<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>    return cnt;<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>  }<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>}<a name="line.1760"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/book.html
----------------------------------------------------------------------
diff --git a/book.html b/book.html
index d6231b9..e44b00b 100644
--- a/book.html
+++ b/book.html
@@ -33120,7 +33120,7 @@ The server will return cellblocks compressed using this same compressor as long
 <div id="footer">
 <div id="footer-text">
 Version 2.0.0-SNAPSHOT<br>
-Last updated 2016-02-17 14:35:27 UTC
+Last updated 2016-02-18 14:49:11 UTC
 </div>
 </div>
 </body>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/bulk-loads.html
----------------------------------------------------------------------
diff --git a/bulk-loads.html b/bulk-loads.html
index e925531..d99094b 100644
--- a/bulk-loads.html
+++ b/bulk-loads.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Bulk Loads in Apache HBase (TM)
@@ -305,7 +305,7 @@ under the License. -->
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-18</li>
             </p>
                 </div>
 


[17/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html
index 0597160..b444f46 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html
@@ -184,2145 +184,2183 @@
 <span class="sourceLineNo">176</span>  // Min batch size when replay WAL edits<a name="line.176"></a>
 <span class="sourceLineNo">177</span>  private final int minBatchSize;<a name="line.177"></a>
 <span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span>  WALSplitter(final WALFactory factory, Configuration conf, Path rootDir,<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      FileSystem fs, LastSequenceId idChecker,<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      CoordinatedStateManager csm, RecoveryMode mode) {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    this.conf = HBaseConfiguration.create(conf);<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    String codecClassName = conf<a name="line.183"></a>
-<span class="sourceLineNo">184</span>        .get(WALCellCodec.WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    this.conf.set(HConstants.RPC_CODEC_CONF_KEY, codecClassName);<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    this.rootDir = rootDir;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    this.fs = fs;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    this.sequenceIdChecker = idChecker;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    this.csm = (BaseCoordinatedStateManager)csm;<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    this.walFactory = factory;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    this.controller = new PipelineController();<a name="line.191"></a>
-<span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span>    entryBuffers = new EntryBuffers(controller,<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        this.conf.getInt("hbase.regionserver.hlog.splitlog.buffersize",<a name="line.194"></a>
-<span class="sourceLineNo">195</span>            128*1024*1024));<a name="line.195"></a>
+<span class="sourceLineNo">179</span>  // the file being split currently<a name="line.179"></a>
+<span class="sourceLineNo">180</span>  private FileStatus fileBeingSplit;<a name="line.180"></a>
+<span class="sourceLineNo">181</span><a name="line.181"></a>
+<span class="sourceLineNo">182</span>  @VisibleForTesting<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  WALSplitter(final WALFactory factory, Configuration conf, Path rootDir,<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      FileSystem fs, LastSequenceId idChecker,<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      CoordinatedStateManager csm, RecoveryMode mode) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    this.conf = HBaseConfiguration.create(conf);<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    String codecClassName = conf<a name="line.187"></a>
+<span class="sourceLineNo">188</span>        .get(WALCellCodec.WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    this.conf.set(HConstants.RPC_CODEC_CONF_KEY, codecClassName);<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    this.rootDir = rootDir;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    this.fs = fs;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    this.sequenceIdChecker = idChecker;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    this.csm = (BaseCoordinatedStateManager)csm;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    this.walFactory = factory;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    this.controller = new PipelineController();<a name="line.195"></a>
 <span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span>    // a larger minBatchSize may slow down recovery because replay writer has to wait for<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    // enough edits before replaying them<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    this.minBatchSize = this.conf.getInt("hbase.regionserver.wal.logreplay.batch.size", 64);<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    this.distributedLogReplay = (RecoveryMode.LOG_REPLAY == mode);<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>    this.numWriterThreads = this.conf.getInt("hbase.regionserver.hlog.splitlog.writer.threads", 3);<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    if (csm != null &amp;&amp; this.distributedLogReplay) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      outputSink = new LogReplayOutputSink(controller, entryBuffers, numWriterThreads);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    } else {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      if (this.distributedLogReplay) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        LOG.info("ZooKeeperWatcher is passed in as NULL so disable distrubitedLogRepaly.");<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      }<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      this.distributedLogReplay = false;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      outputSink = new LogRecoveredEditsOutputSink(controller, entryBuffers, numWriterThreads);<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>  }<a name="line.213"></a>
-<span class="sourceLineNo">214</span><a name="line.214"></a>
-<span class="sourceLineNo">215</span>  /**<a name="line.215"></a>
-<span class="sourceLineNo">216</span>   * Splits a WAL file into region's recovered-edits directory.<a name="line.216"></a>
-<span class="sourceLineNo">217</span>   * This is the main entry point for distributed log splitting from SplitLogWorker.<a name="line.217"></a>
-<span class="sourceLineNo">218</span>   * &lt;p&gt;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>   * If the log file has N regions then N recovered.edits files will be produced.<a name="line.219"></a>
-<span class="sourceLineNo">220</span>   * &lt;p&gt;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   * @param rootDir<a name="line.221"></a>
-<span class="sourceLineNo">222</span>   * @param logfile<a name="line.222"></a>
-<span class="sourceLineNo">223</span>   * @param fs<a name="line.223"></a>
-<span class="sourceLineNo">224</span>   * @param conf<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   * @param reporter<a name="line.225"></a>
-<span class="sourceLineNo">226</span>   * @param idChecker<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   * @param cp coordination state manager<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   * @return false if it is interrupted by the progress-able.<a name="line.228"></a>
-<span class="sourceLineNo">229</span>   * @throws IOException<a name="line.229"></a>
-<span class="sourceLineNo">230</span>   */<a name="line.230"></a>
-<span class="sourceLineNo">231</span>  public static boolean splitLogFile(Path rootDir, FileStatus logfile, FileSystem fs,<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      Configuration conf, CancelableProgressable reporter, LastSequenceId idChecker,<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      CoordinatedStateManager cp, RecoveryMode mode, final WALFactory factory) throws IOException {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, idChecker, cp, mode);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    return s.splitLogFile(logfile, reporter);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  }<a name="line.236"></a>
-<span class="sourceLineNo">237</span><a name="line.237"></a>
-<span class="sourceLineNo">238</span>  // A wrapper to split one log folder using the method used by distributed<a name="line.238"></a>
-<span class="sourceLineNo">239</span>  // log splitting. Used by tools and unit tests. It should be package private.<a name="line.239"></a>
-<span class="sourceLineNo">240</span>  // It is public only because TestWALObserver is in a different package,<a name="line.240"></a>
-<span class="sourceLineNo">241</span>  // which uses this method to do log splitting.<a name="line.241"></a>
-<span class="sourceLineNo">242</span>  @VisibleForTesting<a name="line.242"></a>
-<span class="sourceLineNo">243</span>  public static List&lt;Path&gt; split(Path rootDir, Path logDir, Path oldLogDir,<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      FileSystem fs, Configuration conf, final WALFactory factory) throws IOException {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    final FileStatus[] logfiles = SplitLogManager.getFileList(conf,<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        Collections.singletonList(logDir), null);<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    List&lt;Path&gt; splits = new ArrayList&lt;Path&gt;();<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    if (logfiles != null &amp;&amp; logfiles.length &gt; 0) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      for (FileStatus logfile: logfiles) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, null, null,<a name="line.250"></a>
-<span class="sourceLineNo">251</span>            RecoveryMode.LOG_SPLITTING);<a name="line.251"></a>
-<span class="sourceLineNo">252</span>        if (s.splitLogFile(logfile, null)) {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>          finishSplitLogFile(rootDir, oldLogDir, logfile.getPath(), conf);<a name="line.253"></a>
-<span class="sourceLineNo">254</span>          if (s.outputSink.splits != null) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>            splits.addAll(s.outputSink.splits);<a name="line.255"></a>
-<span class="sourceLineNo">256</span>          }<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        }<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      }<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    }<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    if (!fs.delete(logDir, true)) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      throw new IOException("Unable to delete src dir: " + logDir);<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    return splits;<a name="line.263"></a>
-<span class="sourceLineNo">264</span>  }<a name="line.264"></a>
-<span class="sourceLineNo">265</span><a name="line.265"></a>
-<span class="sourceLineNo">266</span>  /**<a name="line.266"></a>
-<span class="sourceLineNo">267</span>   * log splitting implementation, splits one log file.<a name="line.267"></a>
-<span class="sourceLineNo">268</span>   * @param logfile should be an actual log file.<a name="line.268"></a>
-<span class="sourceLineNo">269</span>   */<a name="line.269"></a>
-<span class="sourceLineNo">270</span>  boolean splitLogFile(FileStatus logfile, CancelableProgressable reporter) throws IOException {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    Preconditions.checkState(status == null);<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    Preconditions.checkArgument(logfile.isFile(),<a name="line.272"></a>
-<span class="sourceLineNo">273</span>        "passed in file status is for something other than a regular file.");<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    boolean isCorrupted = false;<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    boolean skipErrors = conf.getBoolean("hbase.hlog.split.skip.errors",<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      SPLIT_SKIP_ERRORS_DEFAULT);<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    int interval = conf.getInt("hbase.splitlog.report.interval.loglines", 1024);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    Path logPath = logfile.getPath();<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    boolean outputSinkStarted = false;<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    boolean progress_failed = false;<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    int editsCount = 0;<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    int editsSkipped = 0;<a name="line.282"></a>
-<span class="sourceLineNo">283</span><a name="line.283"></a>
-<span class="sourceLineNo">284</span>    status =<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        TaskMonitor.get().createStatus(<a name="line.285"></a>
-<span class="sourceLineNo">286</span>          "Splitting log file " + logfile.getPath() + "into a temporary staging area.");<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    Reader in = null;<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    try {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      long logLength = logfile.getLen();<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      LOG.info("Splitting wal: " + logPath + ", length=" + logLength);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      LOG.info("DistributedLogReplay = " + this.distributedLogReplay);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      status.setStatus("Opening log file");<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>        progress_failed = true;<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        return false;<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      }<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      try {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        in = getReader(logfile, skipErrors, reporter);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      } catch (CorruptedLogFileException e) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>        LOG.warn("Could not get reader, corrupted log file " + logPath, e);<a name="line.300"></a>
-<span class="sourceLineNo">301</span>        ZKSplitLog.markCorrupted(rootDir, logfile.getPath().getName(), fs);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>        isCorrupted = true;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      }<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      if (in == null) {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>        LOG.warn("Nothing to split in log file " + logPath);<a name="line.305"></a>
-<span class="sourceLineNo">306</span>        return true;<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      }<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      int numOpenedFilesBeforeReporting = conf.getInt("hbase.splitlog.report.openedfiles", 3);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      int numOpenedFilesLastCheck = 0;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      outputSink.setReporter(reporter);<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      outputSink.startWriterThreads();<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      outputSinkStarted = true;<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      Entry entry;<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      Long lastFlushedSequenceId = -1L;<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      ServerName serverName = DefaultWALProvider.getServerNameFromWALDirectoryName(logPath);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      failedServerName = (serverName == null) ? "" : serverName.getServerName();<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      while ((entry = getNextLogLine(in, logPath, skipErrors)) != null) {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>        byte[] region = entry.getKey().getEncodedRegionName();<a name="line.318"></a>
-<span class="sourceLineNo">319</span>        String encodedRegionNameAsStr = Bytes.toString(region);<a name="line.319"></a>
-<span class="sourceLineNo">320</span>        lastFlushedSequenceId = lastFlushedSequenceIds.get(encodedRegionNameAsStr);<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        if (lastFlushedSequenceId == null) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>          if (this.distributedLogReplay) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>            RegionStoreSequenceIds ids =<a name="line.323"></a>
-<span class="sourceLineNo">324</span>                csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.324"></a>
-<span class="sourceLineNo">325</span>                  encodedRegionNameAsStr);<a name="line.325"></a>
-<span class="sourceLineNo">326</span>            if (ids != null) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>              lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.327"></a>
-<span class="sourceLineNo">328</span>              if (LOG.isDebugEnabled()) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>                LOG.debug("DLR Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.329"></a>
-<span class="sourceLineNo">330</span>                  TextFormat.shortDebugString(ids));<a name="line.330"></a>
-<span class="sourceLineNo">331</span>              }<a name="line.331"></a>
-<span class="sourceLineNo">332</span>            }<a name="line.332"></a>
-<span class="sourceLineNo">333</span>          } else if (sequenceIdChecker != null) {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>            RegionStoreSequenceIds ids = sequenceIdChecker.getLastSequenceId(region);<a name="line.334"></a>
-<span class="sourceLineNo">335</span>            Map&lt;byte[], Long&gt; maxSeqIdInStores = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.335"></a>
-<span class="sourceLineNo">336</span>            for (StoreSequenceId storeSeqId : ids.getStoreSequenceIdList()) {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>              maxSeqIdInStores.put(storeSeqId.getFamilyName().toByteArray(),<a name="line.337"></a>
-<span class="sourceLineNo">338</span>                storeSeqId.getSequenceId());<a name="line.338"></a>
-<span class="sourceLineNo">339</span>            }<a name="line.339"></a>
-<span class="sourceLineNo">340</span>            regionMaxSeqIdInStores.put(encodedRegionNameAsStr, maxSeqIdInStores);<a name="line.340"></a>
-<span class="sourceLineNo">341</span>            lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.341"></a>
-<span class="sourceLineNo">342</span>            if (LOG.isDebugEnabled()) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>              LOG.debug("DLS Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.343"></a>
-<span class="sourceLineNo">344</span>                  TextFormat.shortDebugString(ids));<a name="line.344"></a>
+<span class="sourceLineNo">197</span>    entryBuffers = new EntryBuffers(controller,<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        this.conf.getInt("hbase.regionserver.hlog.splitlog.buffersize",<a name="line.198"></a>
+<span class="sourceLineNo">199</span>            128*1024*1024));<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>    // a larger minBatchSize may slow down recovery because replay writer has to wait for<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    // enough edits before replaying them<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    this.minBatchSize = this.conf.getInt("hbase.regionserver.wal.logreplay.batch.size", 64);<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    this.distributedLogReplay = (RecoveryMode.LOG_REPLAY == mode);<a name="line.204"></a>
+<span class="sourceLineNo">205</span><a name="line.205"></a>
+<span class="sourceLineNo">206</span>    this.numWriterThreads = this.conf.getInt("hbase.regionserver.hlog.splitlog.writer.threads", 3);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    if (csm != null &amp;&amp; this.distributedLogReplay) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      outputSink = new LogReplayOutputSink(controller, entryBuffers, numWriterThreads);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    } else {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      if (this.distributedLogReplay) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>        LOG.info("ZooKeeperWatcher is passed in as NULL so disable distrubitedLogRepaly.");<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      }<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      this.distributedLogReplay = false;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      outputSink = new LogRecoveredEditsOutputSink(controller, entryBuffers, numWriterThreads);<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    }<a name="line.215"></a>
+<span class="sourceLineNo">216</span><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>
+<span class="sourceLineNo">220</span>   * Splits a WAL file into region's recovered-edits directory.<a name="line.220"></a>
+<span class="sourceLineNo">221</span>   * This is the main entry point for distributed log splitting from SplitLogWorker.<a name="line.221"></a>
+<span class="sourceLineNo">222</span>   * &lt;p&gt;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>   * If the log file has N regions then N recovered.edits files will be produced.<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   * &lt;p&gt;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   * @param rootDir<a name="line.225"></a>
+<span class="sourceLineNo">226</span>   * @param logfile<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   * @param fs<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   * @param conf<a name="line.228"></a>
+<span class="sourceLineNo">229</span>   * @param reporter<a name="line.229"></a>
+<span class="sourceLineNo">230</span>   * @param idChecker<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   * @param cp coordination state manager<a name="line.231"></a>
+<span class="sourceLineNo">232</span>   * @return false if it is interrupted by the progress-able.<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   * @throws IOException<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   */<a name="line.234"></a>
+<span class="sourceLineNo">235</span>  public static boolean splitLogFile(Path rootDir, FileStatus logfile, FileSystem fs,<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      Configuration conf, CancelableProgressable reporter, LastSequenceId idChecker,<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      CoordinatedStateManager cp, RecoveryMode mode, final WALFactory factory) throws IOException {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, idChecker, cp, mode);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    return s.splitLogFile(logfile, reporter);<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>  // A wrapper to split one log folder using the method used by distributed<a name="line.242"></a>
+<span class="sourceLineNo">243</span>  // log splitting. Used by tools and unit tests. It should be package private.<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  // It is public only because TestWALObserver is in a different package,<a name="line.244"></a>
+<span class="sourceLineNo">245</span>  // which uses this method to do log splitting.<a name="line.245"></a>
+<span class="sourceLineNo">246</span>  @VisibleForTesting<a name="line.246"></a>
+<span class="sourceLineNo">247</span>  public static List&lt;Path&gt; split(Path rootDir, Path logDir, Path oldLogDir,<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      FileSystem fs, Configuration conf, final WALFactory factory) throws IOException {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    final FileStatus[] logfiles = SplitLogManager.getFileList(conf,<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        Collections.singletonList(logDir), null);<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    List&lt;Path&gt; splits = new ArrayList&lt;Path&gt;();<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    if (logfiles != null &amp;&amp; logfiles.length &gt; 0) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      for (FileStatus logfile: logfiles) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>        WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, null, null,<a name="line.254"></a>
+<span class="sourceLineNo">255</span>            RecoveryMode.LOG_SPLITTING);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>        if (s.splitLogFile(logfile, null)) {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>          finishSplitLogFile(rootDir, oldLogDir, logfile.getPath(), conf);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>          if (s.outputSink.splits != null) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>            splits.addAll(s.outputSink.splits);<a name="line.259"></a>
+<span class="sourceLineNo">260</span>          }<a name="line.260"></a>
+<span class="sourceLineNo">261</span>        }<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      }<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    }<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    if (!fs.delete(logDir, true)) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      throw new IOException("Unable to delete src dir: " + logDir);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    }<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    return splits;<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  }<a name="line.268"></a>
+<span class="sourceLineNo">269</span><a name="line.269"></a>
+<span class="sourceLineNo">270</span>  /**<a name="line.270"></a>
+<span class="sourceLineNo">271</span>   * log splitting implementation, splits one log file.<a name="line.271"></a>
+<span class="sourceLineNo">272</span>   * @param logfile should be an actual log file.<a name="line.272"></a>
+<span class="sourceLineNo">273</span>   */<a name="line.273"></a>
+<span class="sourceLineNo">274</span>  @VisibleForTesting<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  boolean splitLogFile(FileStatus logfile, CancelableProgressable reporter) throws IOException {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    Preconditions.checkState(status == null);<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    Preconditions.checkArgument(logfile.isFile(),<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        "passed in file status is for something other than a regular file.");<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    boolean isCorrupted = false;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    boolean skipErrors = conf.getBoolean("hbase.hlog.split.skip.errors",<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      SPLIT_SKIP_ERRORS_DEFAULT);<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    int interval = conf.getInt("hbase.splitlog.report.interval.loglines", 1024);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    Path logPath = logfile.getPath();<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    boolean outputSinkStarted = false;<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    boolean progress_failed = false;<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    int editsCount = 0;<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    int editsSkipped = 0;<a name="line.287"></a>
+<span class="sourceLineNo">288</span><a name="line.288"></a>
+<span class="sourceLineNo">289</span>    status =<a name="line.289"></a>
+<span class="sourceLineNo">290</span>        TaskMonitor.get().createStatus(<a name="line.290"></a>
+<span class="sourceLineNo">291</span>          "Splitting log file " + logfile.getPath() + "into a temporary staging area.");<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    Reader in = null;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    this.fileBeingSplit = logfile;<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    try {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      long logLength = logfile.getLen();<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      LOG.info("Splitting wal: " + logPath + ", length=" + logLength);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      LOG.info("DistributedLogReplay = " + this.distributedLogReplay);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      status.setStatus("Opening log file");<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>        progress_failed = true;<a name="line.300"></a>
+<span class="sourceLineNo">301</span>        return false;<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      }<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      try {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>        in = getReader(logfile, skipErrors, reporter);<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      } catch (CorruptedLogFileException e) {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>        LOG.warn("Could not get reader, corrupted log file " + logPath, e);<a name="line.306"></a>
+<span class="sourceLineNo">307</span>        ZKSplitLog.markCorrupted(rootDir, logfile.getPath().getName(), fs);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>        isCorrupted = true;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      }<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      if (in == null) {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        LOG.warn("Nothing to split in log file " + logPath);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        return true;<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      }<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      int numOpenedFilesBeforeReporting = conf.getInt("hbase.splitlog.report.openedfiles", 3);<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      int numOpenedFilesLastCheck = 0;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      outputSink.setReporter(reporter);<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      outputSink.startWriterThreads();<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      outputSinkStarted = true;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      Entry entry;<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      Long lastFlushedSequenceId = -1L;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      ServerName serverName = DefaultWALProvider.getServerNameFromWALDirectoryName(logPath);<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      failedServerName = (serverName == null) ? "" : serverName.getServerName();<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      while ((entry = getNextLogLine(in, logPath, skipErrors)) != null) {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>        byte[] region = entry.getKey().getEncodedRegionName();<a name="line.324"></a>
+<span class="sourceLineNo">325</span>        String encodedRegionNameAsStr = Bytes.toString(region);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>        lastFlushedSequenceId = lastFlushedSequenceIds.get(encodedRegionNameAsStr);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>        if (lastFlushedSequenceId == null) {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>          if (this.distributedLogReplay) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>            RegionStoreSequenceIds ids =<a name="line.329"></a>
+<span class="sourceLineNo">330</span>                csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.330"></a>
+<span class="sourceLineNo">331</span>                  encodedRegionNameAsStr);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>            if (ids != null) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span>              lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.333"></a>
+<span class="sourceLineNo">334</span>              if (LOG.isDebugEnabled()) {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>                LOG.debug("DLR Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.335"></a>
+<span class="sourceLineNo">336</span>                  TextFormat.shortDebugString(ids));<a name="line.336"></a>
+<span class="sourceLineNo">337</span>              }<a name="line.337"></a>
+<span class="sourceLineNo">338</span>            }<a name="line.338"></a>
+<span class="sourceLineNo">339</span>          } else if (sequenceIdChecker != null) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>            RegionStoreSequenceIds ids = sequenceIdChecker.getLastSequenceId(region);<a name="line.340"></a>
+<span class="sourceLineNo">341</span>            Map&lt;byte[], Long&gt; maxSeqIdInStores = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.341"></a>
+<span class="sourceLineNo">342</span>            for (StoreSequenceId storeSeqId : ids.getStoreSequenceIdList()) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>              maxSeqIdInStores.put(storeSeqId.getFamilyName().toByteArray(),<a name="line.343"></a>
+<span class="sourceLineNo">344</span>                storeSeqId.getSequenceId());<a name="line.344"></a>
 <span class="sourceLineNo">345</span>            }<a name="line.345"></a>
-<span class="sourceLineNo">346</span>          }<a name="line.346"></a>
-<span class="sourceLineNo">347</span>          if (lastFlushedSequenceId == null) {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>            lastFlushedSequenceId = -1L;<a name="line.348"></a>
-<span class="sourceLineNo">349</span>          }<a name="line.349"></a>
-<span class="sourceLineNo">350</span>          lastFlushedSequenceIds.put(encodedRegionNameAsStr, lastFlushedSequenceId);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        }<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        if (lastFlushedSequenceId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>          editsSkipped++;<a name="line.353"></a>
-<span class="sourceLineNo">354</span>          continue;<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        }<a name="line.355"></a>
-<span class="sourceLineNo">356</span>        entryBuffers.appendEntry(entry);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        editsCount++;<a name="line.357"></a>
-<span class="sourceLineNo">358</span>        int moreWritersFromLastCheck = this.getNumOpenWriters() - numOpenedFilesLastCheck;<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        // If sufficient edits have passed, check if we should report progress.<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        if (editsCount % interval == 0<a name="line.360"></a>
-<span class="sourceLineNo">361</span>            || moreWritersFromLastCheck &gt; numOpenedFilesBeforeReporting) {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>          numOpenedFilesLastCheck = this.getNumOpenWriters();<a name="line.362"></a>
-<span class="sourceLineNo">363</span>          String countsStr = (editsCount - (editsSkipped + outputSink.getSkippedEdits()))<a name="line.363"></a>
-<span class="sourceLineNo">364</span>              + " edits, skipped " + editsSkipped + " edits.";<a name="line.364"></a>
-<span class="sourceLineNo">365</span>          status.setStatus("Split " + countsStr);<a name="line.365"></a>
-<span class="sourceLineNo">366</span>          if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>            progress_failed = true;<a name="line.367"></a>
-<span class="sourceLineNo">368</span>            return false;<a name="line.368"></a>
-<span class="sourceLineNo">369</span>          }<a name="line.369"></a>
-<span class="sourceLineNo">370</span>        }<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      }<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    } catch (InterruptedException ie) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      IOException iie = new InterruptedIOException();<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      iie.initCause(ie);<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      throw iie;<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    } catch (CorruptedLogFileException e) {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      LOG.warn("Could not parse, corrupted log file " + logPath, e);<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      csm.getSplitLogWorkerCoordination().markCorrupted(rootDir,<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        logfile.getPath().getName(), fs);<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      isCorrupted = true;<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    } catch (IOException e) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      throw e;<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    } finally {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      LOG.debug("Finishing writing output logs and closing down.");<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      try {<a name="line.386"></a>
-<span class="sourceLineNo">387</span>        if (null != in) {<a name="line.387"></a>
-<span class="sourceLineNo">388</span>          in.close();<a name="line.388"></a>
-<span class="sourceLineNo">389</span>        }<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      } catch (IOException exception) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        LOG.warn("Could not close wal reader: " + exception.getMessage());<a name="line.391"></a>
-<span class="sourceLineNo">392</span>        LOG.debug("exception details", exception);<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      }<a name="line.393"></a>
-<span class="sourceLineNo">394</span>      try {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        if (outputSinkStarted) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>          // Set progress_failed to true as the immediate following statement will reset its value<a name="line.396"></a>
-<span class="sourceLineNo">397</span>          // when finishWritingAndClose() throws exception, progress_failed has the right value<a name="line.397"></a>
-<span class="sourceLineNo">398</span>          progress_failed = true;<a name="line.398"></a>
-<span class="sourceLineNo">399</span>          progress_failed = outputSink.finishWritingAndClose() == null;<a name="line.399"></a>
-<span class="sourceLineNo">400</span>        }<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      } finally {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        String msg =<a name="line.402"></a>
-<span class="sourceLineNo">403</span>            "Processed " + editsCount + " edits across " + outputSink.getNumberOfRecoveredRegions()<a name="line.403"></a>
-<span class="sourceLineNo">404</span>                + " regions; edits skipped=" + editsSkipped + "; log file=" + logPath +<a name="line.404"></a>
-<span class="sourceLineNo">405</span>                ", length=" + logfile.getLen() + // See if length got updated post lease recovery<a name="line.405"></a>
-<span class="sourceLineNo">406</span>                ", corrupted=" + isCorrupted + ", progress failed=" + progress_failed;<a name="line.406"></a>
-<span class="sourceLineNo">407</span>        LOG.info(msg);<a name="line.407"></a>
-<span class="sourceLineNo">408</span>        status.markComplete(msg);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      }<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    }<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    return !progress_failed;<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>   * Completes the work done by splitLogFile by archiving logs<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   * &lt;p&gt;<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * It is invoked by SplitLogManager once it knows that one of the<a name="line.417"></a>
-<span class="sourceLineNo">418</span>   * SplitLogWorkers have completed the splitLogFile() part. If the master<a name="line.418"></a>
-<span class="sourceLineNo">419</span>   * crashes then this function might get called multiple times.<a name="line.419"></a>
-<span class="sourceLineNo">420</span>   * &lt;p&gt;<a name="line.420"></a>
-<span class="sourceLineNo">421</span>   * @param logfile<a name="line.421"></a>
-<span class="sourceLineNo">422</span>   * @param conf<a name="line.422"></a>
-<span class="sourceLineNo">423</span>   * @throws IOException<a name="line.423"></a>
-<span class="sourceLineNo">424</span>   */<a name="line.424"></a>
-<span class="sourceLineNo">425</span>  public static void finishSplitLogFile(String logfile,<a name="line.425"></a>
-<span class="sourceLineNo">426</span>      Configuration conf)  throws IOException {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    Path rootdir = FSUtils.getRootDir(conf);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    Path oldLogDir = new Path(rootdir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    Path logPath;<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    if (FSUtils.isStartingWithPath(rootdir, logfile)) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      logPath = new Path(logfile);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    } else {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      logPath = new Path(rootdir, logfile);<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    }<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    finishSplitLogFile(rootdir, oldLogDir, logPath, conf);<a name="line.435"></a>
-<span class="sourceLineNo">436</span>  }<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>  static void finishSplitLogFile(Path rootdir, Path oldLogDir,<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      Path logPath, Configuration conf) throws IOException {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    List&lt;Path&gt; processedLogs = new ArrayList&lt;Path&gt;();<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    List&lt;Path&gt; corruptedLogs = new ArrayList&lt;Path&gt;();<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    FileSystem fs;<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    fs = rootdir.getFileSystem(conf);<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    if (ZKSplitLog.isCorrupted(rootdir, logPath.getName(), fs)) {<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      corruptedLogs.add(logPath);<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    } else {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      processedLogs.add(logPath);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    }<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    archiveLogs(corruptedLogs, processedLogs, oldLogDir, fs, conf);<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    Path stagingDir = ZKSplitLog.getSplitLogDir(rootdir, logPath.getName());<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    fs.delete(stagingDir, true);<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  }<a name="line.452"></a>
-<span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span>  /**<a name="line.454"></a>
-<span class="sourceLineNo">455</span>   * Moves processed logs to a oldLogDir after successful processing Moves<a name="line.455"></a>
-<span class="sourceLineNo">456</span>   * corrupted logs (any log that couldn't be successfully parsed to corruptDir<a name="line.456"></a>
-<span class="sourceLineNo">457</span>   * (.corrupt) for later investigation<a name="line.457"></a>
-<span class="sourceLineNo">458</span>   *<a name="line.458"></a>
-<span class="sourceLineNo">459</span>   * @param corruptedLogs<a name="line.459"></a>
-<span class="sourceLineNo">460</span>   * @param processedLogs<a name="line.460"></a>
-<span class="sourceLineNo">461</span>   * @param oldLogDir<a name="line.461"></a>
-<span class="sourceLineNo">462</span>   * @param fs<a name="line.462"></a>
-<span class="sourceLineNo">463</span>   * @param conf<a name="line.463"></a>
-<span class="sourceLineNo">464</span>   * @throws IOException<a name="line.464"></a>
-<span class="sourceLineNo">465</span>   */<a name="line.465"></a>
-<span class="sourceLineNo">466</span>  private static void archiveLogs(<a name="line.466"></a>
-<span class="sourceLineNo">467</span>      final List&lt;Path&gt; corruptedLogs,<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      final List&lt;Path&gt; processedLogs, final Path oldLogDir,<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      final FileSystem fs, final Configuration conf) throws IOException {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    final Path corruptDir = new Path(FSUtils.getRootDir(conf), conf.get(<a name="line.470"></a>
-<span class="sourceLineNo">471</span>        "hbase.regionserver.hlog.splitlog.corrupt.dir",  HConstants.CORRUPT_DIR_NAME));<a name="line.471"></a>
-<span class="sourceLineNo">472</span><a name="line.472"></a>
-<span class="sourceLineNo">473</span>    if (!fs.mkdirs(corruptDir)) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      LOG.info("Unable to mkdir " + corruptDir);<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    }<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    fs.mkdirs(oldLogDir);<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>    // this method can get restarted or called multiple times for archiving<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    // the same log files.<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    for (Path corrupted : corruptedLogs) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      Path p = new Path(corruptDir, corrupted.getName());<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      if (fs.exists(corrupted)) {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        if (!fs.rename(corrupted, p)) {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>          LOG.warn("Unable to move corrupted log " + corrupted + " to " + p);<a name="line.484"></a>
-<span class="sourceLineNo">485</span>        } else {<a name="line.485"></a>
-<span class="sourceLineNo">486</span>          LOG.warn("Moved corrupted log " + corrupted + " to " + p);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>        }<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      }<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    }<a name="line.489"></a>
-<span class="sourceLineNo">490</span><a name="line.490"></a>
-<span class="sourceLineNo">491</span>    for (Path p : processedLogs) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      Path newPath = FSHLog.getWALArchivePath(oldLogDir, p);<a name="line.492"></a>
-<span class="sourceLineNo">493</span>      if (fs.exists(p)) {<a name="line.493"></a>
-<span class="sourceLineNo">494</span>        if (!FSUtils.renameAndSetModifyTime(fs, p, newPath)) {<a name="line.494"></a>
-<span class="sourceLineNo">495</span>          LOG.warn("Unable to move  " + p + " to " + newPath);<a name="line.495"></a>
-<span class="sourceLineNo">496</span>        } else {<a name="line.496"></a>
-<span class="sourceLineNo">497</span>          LOG.info("Archived processed log " + p + " to " + newPath);<a name="line.497"></a>
-<span class="sourceLineNo">498</span>        }<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      }<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><a name="line.502"></a>
-<span class="sourceLineNo">503</span>  /**<a name="line.503"></a>
-<span class="sourceLineNo">504</span>   * Path to a file under RECOVERED_EDITS_DIR directory of the region found in<a name="line.504"></a>
-<span class="sourceLineNo">505</span>   * &lt;code&gt;logEntry&lt;/code&gt; named for the sequenceid in the passed<a name="line.505"></a>
-<span class="sourceLineNo">506</span>   * &lt;code&gt;logEntry&lt;/code&gt;: e.g. /hbase/some_table/2323432434/recovered.edits/2332.<a name="line.506"></a>
-<span class="sourceLineNo">507</span>   * This method also ensures existence of RECOVERED_EDITS_DIR under the region<a name="line.507"></a>
-<span class="sourceLineNo">508</span>   * creating it if necessary.<a name="line.508"></a>
-<span class="sourceLineNo">509</span>   * @param fs<a name="line.509"></a>
-<span class="sourceLineNo">510</span>   * @param logEntry<a name="line.510"></a>
-<span class="sourceLineNo">511</span>   * @param rootDir HBase root dir.<a name="line.511"></a>
-<span class="sourceLineNo">512</span>   * @return Path to file into which to dump split log edits.<a name="line.512"></a>
-<span class="sourceLineNo">513</span>   * @throws IOException<a name="line.513"></a>
-<span class="sourceLineNo">514</span>   */<a name="line.514"></a>
-<span class="sourceLineNo">515</span>  @SuppressWarnings("deprecation")<a name="line.515"></a>
-<span class="sourceLineNo">516</span>  static Path getRegionSplitEditsPath(final FileSystem fs,<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      final Entry logEntry, final Path rootDir, boolean isCreate)<a name="line.517"></a>
-<span class="sourceLineNo">518</span>  throws IOException {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    Path tableDir = FSUtils.getTableDir(rootDir, logEntry.getKey().getTablename());<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    String encodedRegionName = Bytes.toString(logEntry.getKey().getEncodedRegionName());<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    Path regiondir = HRegion.getRegionDir(tableDir, encodedRegionName);<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    Path dir = getRegionDirRecoveredEditsDir(regiondir);<a name="line.522"></a>
-<span class="sourceLineNo">523</span><a name="line.523"></a>
-<span class="sourceLineNo">524</span>    if (!fs.exists(regiondir)) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      LOG.info("This region's directory doesn't exist: "<a name="line.525"></a>
-<span class="sourceLineNo">526</span>          + regiondir.toString() + ". It is very likely that it was" +<a name="line.526"></a>
-<span class="sourceLineNo">527</span>          " already split so it's safe to discard those edits.");<a name="line.527"></a>
-<span class="sourceLineNo">528</span>      return null;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    }<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    if (fs.exists(dir) &amp;&amp; fs.isFile(dir)) {<a name="line.530"></a>
-<span class="sourceLineNo">531</span>      Path tmp = new Path("/tmp");<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      if (!fs.exists(tmp)) {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>        fs.mkdirs(tmp);<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      }<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      tmp = new Path(tmp,<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        HConstants.RECOVERED_EDITS_DIR + "_" + encodedRegionName);<a name="line.536"></a>
-<span class="sourceLineNo">537</span>      LOG.warn("Found existing old file: " + dir + ". It could be some "<a name="line.537"></a>
-<span class="sourceLineNo">538</span>        + "leftover of an old installation. It should be a folder instead. "<a name="line.538"></a>
-<span class="sourceLineNo">539</span>        + "So moving it to " + tmp);<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      if (!fs.rename(dir, tmp)) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        LOG.warn("Failed to sideline old file " + dir);<a name="line.541"></a>
-<span class="sourceLineNo">542</span>      }<a name="line.542"></a>
-<span class="sourceLineNo">543</span>    }<a name="line.543"></a>
-<span class="sourceLineNo">544</span><a name="line.544"></a>
-<span class="sourceLineNo">545</span>    if (isCreate &amp;&amp; !fs.exists(dir)) {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>      if (!fs.mkdirs(dir)) LOG.warn("mkdir failed on " + dir);<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    }<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    // Append file name ends with RECOVERED_LOG_TMPFILE_SUFFIX to ensure<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    // region's replayRecoveredEdits will not delete it<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    String fileName = formatRecoveredEditsFileName(logEntry.getKey().getLogSeqNum());<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    fileName = getTmpRecoveredEditsFileName(fileName);<a name="line.551"></a>
-<span class="sourceLineNo">552</span>    return new Path(dir, fileName);<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>  static String getTmpRecoveredEditsFileName(String fileName) {<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    return fileName + RECOVERED_LOG_TMPFILE_SUFFIX;<a name="line.556"></a>
-<span class="sourceLineNo">557</span>  }<a name="line.557"></a>
-<span class="sourceLineNo">558</span><a name="line.558"></a>
-<span class="sourceLineNo">559</span>  /**<a name="line.559"></a>
-<span class="sourceLineNo">560</span>   * Get the completed recovered edits file path, renaming it to be by last edit<a name="line.560"></a>
-<span class="sourceLineNo">561</span>   * in the file from its first edit. Then we could use the name to skip<a name="line.561"></a>
-<span class="sourceLineNo">562</span>   * recovered edits when doing {@link HRegion#replayRecoveredEditsIfAny}.<a name="line.562"></a>
-<span class="sourceLineNo">563</span>   * @param srcPath<a name="line.563"></a>
-<span class="sourceLineNo">564</span>   * @param maximumEditLogSeqNum<a name="line.564"></a>
-<span class="sourceLineNo">565</span>   * @return dstPath take file's last edit log seq num as the name<a name="line.565"></a>
-<span class="sourceLineNo">566</span>   */<a name="line.566"></a>
-<span class="sourceLineNo">567</span>  static Path getCompletedRecoveredEditsFilePath(Path srcPath,<a name="line.567"></a>
-<span class="sourceLineNo">568</span>      Long maximumEditLogSeqNum) {<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    String fileName = formatRecoveredEditsFileName(maximumEditLogSeqNum);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    return new Path(srcPath.getParent(), fileName);<a name="line.570"></a>
-<span class="sourceLineNo">571</span>  }<a name="line.571"></a>
-<span class="sourceLineNo">572</span><a name="line.572"></a>
-<span class="sourceLineNo">573</span>  static String formatRecoveredEditsFileName(final long seqid) {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    return String.format("%019d", seqid);<a name="line.574"></a>
-<span class="sourceLineNo">575</span>  }<a name="line.575"></a>
-<span class="sourceLineNo">576</span><a name="line.576"></a>
-<span class="sourceLineNo">577</span>  private static final Pattern EDITFILES_NAME_PATTERN = Pattern.compile("-?[0-9]+");<a name="line.577"></a>
-<span class="sourceLineNo">578</span>  private static final String RECOVERED_LOG_TMPFILE_SUFFIX = ".temp";<a name="line.578"></a>
-<span class="sourceLineNo">579</span><a name="line.579"></a>
-<span class="sourceLineNo">580</span>  /**<a name="line.580"></a>
-<span class="sourceLineNo">581</span>   * @param regiondir<a name="line.581"></a>
-<span class="sourceLineNo">582</span>   *          This regions directory in the filesystem.<a name="line.582"></a>
-<span class="sourceLineNo">583</span>   * @return The directory that holds recovered edits files for the region<a name="line.583"></a>
-<span class="sourceLineNo">584</span>   *         &lt;code&gt;regiondir&lt;/code&gt;<a name="line.584"></a>
-<span class="sourceLineNo">585</span>   */<a name="line.585"></a>
-<span class="sourceLineNo">586</span>  public static Path getRegionDirRecoveredEditsDir(final Path regiondir) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    return new Path(regiondir, HConstants.RECOVERED_EDITS_DIR);<a name="line.587"></a>
-<span class="sourceLineNo">588</span>  }<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span>  /**<a name="line.590"></a>
-<span class="sourceLineNo">591</span>   * Returns sorted set of edit files made by splitter, excluding files<a name="line.591"></a>
-<span class="sourceLineNo">592</span>   * with '.temp' suffix.<a name="line.592"></a>
-<span class="sourceLineNo">593</span>   *<a name="line.593"></a>
-<span class="sourceLineNo">594</span>   * @param fs<a name="line.594"></a>
-<span class="sourceLineNo">595</span>   * @param regiondir<a name="line.595"></a>
-<span class="sourceLineNo">596</span>   * @return Files in passed &lt;code&gt;regiondir&lt;/code&gt; as a sorted set.<a name="line.596"></a>
-<span class="sourceLineNo">597</span>   * @throws IOException<a name="line.597"></a>
-<span class="sourceLineNo">598</span>   */<a name="line.598"></a>
-<span class="sourceLineNo">599</span>  public static NavigableSet&lt;Path&gt; getSplitEditFilesSorted(final FileSystem fs,<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      final Path regiondir) throws IOException {<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    NavigableSet&lt;Path&gt; filesSorted = new TreeSet&lt;Path&gt;();<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    Path editsdir = getRegionDirRecoveredEditsDir(regiondir);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    if (!fs.exists(editsdir))<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      return filesSorted;<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    FileStatus[] files = FSUtils.listStatus(fs, editsdir, new PathFilter() {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      @Override<a name="line.606"></a>
-<span class="sourceLineNo">607</span>      public boolean accept(Path p) {<a name="line.607"></a>
-<span class="sourceLineNo">608</span>        boolean result = false;<a name="line.608"></a>
-<span class="sourceLineNo">609</span>        try {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>          // Return files and only files that match the editfile names pattern.<a name="line.610"></a>
-<span class="sourceLineNo">611</span>          // There can be other files in this directory other than edit files.<a name="line.611"></a>
-<span class="sourceLineNo">612</span>          // In particular, on error, we'll move aside the bad edit file giving<a name="line.612"></a>
-<span class="sourceLineNo">613</span>          // it a timestamp suffix. See moveAsideBadEditsFile.<a name="line.613"></a>
-<span class="sourceLineNo">614</span>          Matcher m = EDITFILES_NAME_PATTERN.matcher(p.getName());<a name="line.614"></a>
-<span class="sourceLineNo">615</span>          result = fs.isFile(p) &amp;&amp; m.matches();<a name="line.615"></a>
-<span class="sourceLineNo">616</span>          // Skip the file whose name ends with RECOVERED_LOG_TMPFILE_SUFFIX,<a name="line.616"></a>
-<span class="sourceLineNo">617</span>          // because it means splitwal thread is writting this file.<a name="line.617"></a>
-<span class="sourceLineNo">618</span>          if (p.getName().endsWith(RECOVERED_LOG_TMPFILE_SUFFIX)) {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>            result = false;<a name="line.619"></a>
-<span class="sourceLineNo">620</span>          }<a name="line.620"></a>
-<span class="sourceLineNo">621</span>          // Skip SeqId Files<a name="line.621"></a>
-<span class="sourceLineNo">622</span>          if (isSequenceIdFile(p)) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span>            result = false;<a name="line.623"></a>
-<span class="sourceLineNo">624</span>          }<a name="line.624"></a>
-<span class="sourceLineNo">625</span>        } catch (IOException e) {<a name="line.625"></a>
-<span class="sourceLineNo">626</span>          LOG.warn("Failed isFile check on " + p);<a name="line.626"></a>
-<span class="sourceLineNo">627</span>        }<a name="line.627"></a>
-<span class="sourceLineNo">628</span>        return result;<a name="line.628"></a>
-<span class="sourceLineNo">629</span>      }<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    });<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    if (files == null) {<a name="line.631"></a>
-<span class="sourceLineNo">632</span>      return filesSorted;<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    }<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    for (FileStatus status : files) {<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      filesSorted.add(status.getPath());<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    }<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    return filesSorted;<a name="line.637"></a>
-<span class="sourceLineNo">638</span>  }<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>   * Move aside a bad edits file.<a name="line.641"></a>
-<span class="sourceLineNo">642</span>   *<a name="line.642"></a>
-<span class="sourceLineNo">643</span>   * @param fs<a name="line.643"></a>
-<span class="sourceLineNo">644</span>   * @param edits<a name="line.644"></a>
-<span class="sourceLineNo">645</span>   *          Edits file to move aside.<a name="line.645"></a>
-<span class="sourceLineNo">646</span>   * @return The name of the moved aside file.<a name="line.646"></a>
-<span class="sourceLineNo">647</span>   * @throws IOException<a name="line.647"></a>
-<span class="sourceLineNo">648</span>   */<a name="line.648"></a>
-<span class="sourceLineNo">649</span>  public static Path moveAsideBadEditsFile(final FileSystem fs, final Path edits)<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      throws IOException {<a name="line.650"></a>
-<span class="sourceLineNo">651</span>    Path moveAsideName = new Path(edits.getParent(), edits.getName() + "."<a name="line.651"></a>
-<span class="sourceLineNo">652</span>        + System.currentTimeMillis());<a name="line.652"></a>
-<span class="sourceLineNo">653</span>    if (!fs.rename(edits, moveAsideName)) {<a name="line.653"></a>
-<span class="sourceLineNo">654</span>      LOG.warn("Rename failed from " + edits + " to " + moveAsideName);<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    }<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    return moveAsideName;<a name="line.656"></a>
-<span class="sourceLineNo">657</span>  }<a name="line.657"></a>
-<span class="sourceLineNo">658</span><a name="line.658"></a>
-<span class="sourceLineNo">659</span>  private static final String SEQUENCE_ID_FILE_SUFFIX = ".seqid";<a name="line.659"></a>
-<span class="sourceLineNo">660</span>  private static final String OLD_SEQUENCE_ID_FILE_SUFFIX = "_seqid";<a name="line.660"></a>
-<span class="sourceLineNo">661</span>  private static final int SEQUENCE_ID_FILE_SUFFIX_LENGTH = SEQUENCE_ID_FILE_SUFFIX.length();<a name="line.661"></a>
-<span class="sourceLineNo">662</span><a name="line.662"></a>
-<span class="sourceLineNo">663</span>  /**<a name="line.663"></a>
-<span class="sourceLineNo">664</span>   * Is the given file a region open sequence id file.<a name="line.664"></a>
-<span class="sourceLineNo">665</span>   */<a name="line.665"></a>
-<span class="sourceLineNo">666</span>  @VisibleForTesting<a name="line.666"></a>
-<span class="sourceLineNo">667</span>  public static boolean isSequenceIdFile(final Path file) {<a name="line.667"></a>
-<span class="sourceLineNo">668</span>    return file.getName().endsWith(SEQUENCE_ID_FILE_SUFFIX)<a name="line.668"></a>
-<span class="sourceLineNo">669</span>        || file.getName().endsWith(OLD_SEQUENCE_ID_FILE_SUFFIX);<a name="line.669"></a>
-<span class="sourceLineNo">670</span>  }<a name="line.670"></a>
+<span class="sourceLineNo">346</span>            regionMaxSeqIdInStores.put(encodedRegionNameAsStr, maxSeqIdInStores);<a name="line.346"></a>
+<span class="sourceLineNo">347</span>            lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.347"></a>
+<span class="sourceLineNo">348</span>            if (LOG.isDebugEnabled()) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>              LOG.debug("DLS Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.349"></a>
+<span class="sourceLineNo">350</span>                  TextFormat.shortDebugString(ids));<a name="line.350"></a>
+<span class="sourceLineNo">351</span>            }<a name="line.351"></a>
+<span class="sourceLineNo">352</span>          }<a name="line.352"></a>
+<span class="sourceLineNo">353</span>          if (lastFlushedSequenceId == null) {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>            lastFlushedSequenceId = -1L;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>          }<a name="line.355"></a>
+<span class="sourceLineNo">356</span>          lastFlushedSequenceIds.put(encodedRegionNameAsStr, lastFlushedSequenceId);<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        }<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        if (lastFlushedSequenceId &gt;= entry.getKey().getSequenceId()) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>          editsSkipped++;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>          continue;<a name="line.360"></a>
+<span class="sourceLineNo">361</span>        }<a name="line.361"></a>
+<span class="sourceLineNo">362</span>        entryBuffers.appendEntry(entry);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        editsCount++;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>        int moreWritersFromLastCheck = this.getNumOpenWriters() - numOpenedFilesLastCheck;<a name="line.364"></a>
+<span class="sourceLineNo">365</span>        // If sufficient edits have passed, check if we should report progress.<a name="line.365"></a>
+<span class="sourceLineNo">366</span>        if (editsCount % interval == 0<a name="line.366"></a>
+<span class="sourceLineNo">367</span>            || moreWritersFromLastCheck &gt; numOpenedFilesBeforeReporting) {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>          numOpenedFilesLastCheck = this.getNumOpenWriters();<a name="line.368"></a>
+<span class="sourceLineNo">369</span>          String countsStr = (editsCount - (editsSkipped + outputSink.getSkippedEdits()))<a name="line.369"></a>
+<span class="sourceLineNo">370</span>              + " edits, skipped " + editsSkipped + " edits.";<a name="line.370"></a>
+<span class="sourceLineNo">371</span>          status.setStatus("Split " + countsStr);<a name="line.371"></a>
+<span class="sourceLineNo">372</span>          if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>            progress_failed = true;<a name="line.373"></a>
+<span class="sourceLineNo">374</span>            return false;<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>      }<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    } catch (InterruptedException ie) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      IOException iie = new InterruptedIOException();<a name="line.379"></a>
+<span class="sourceLineNo">380</span>      iie.initCause(ie);<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      throw iie;<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    } catch (CorruptedLogFileException e) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      LOG.warn("Could not parse, corrupted log file " + logPath, e);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      csm.getSplitLogWorkerCoordination().markCorrupted(rootDir,<a name="line.384"></a>
+<span class="sourceLineNo">385</span>        logfile.getPath().getName(), fs);<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      isCorrupted = true;<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    } catch (IOException e) {<a name="line.387"></a>
+<span class="sourceLineNo">388</span>      e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      throw e;<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    } finally {<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      LOG.debug("Finishing writing output logs and closing down.");<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      try {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>        if (null != in) {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>          in.close();<a name="line.394"></a>
+<span class="sourceLineNo">395</span>        }<a name="line.395"></a>
+<span class="sourceLineNo">396</span>      } catch (IOException exception) {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>        LOG.warn("Could not close wal reader: " + exception.getMessage());<a name="line.397"></a>
+<span class="sourceLineNo">398</span>        LOG.debug("exception details", exception);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      }<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      try {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>        if (outputSinkStarted) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>          // Set progress_failed to true as the immediate following statement will reset its value<a name="line.402"></a>
+<span class="sourceLineNo">403</span>          // when finishWritingAndClose() throws exception, progress_failed has the right value<a name="line.403"></a>
+<span class="sourceLineNo">404</span>          progress_failed = true;<a name="line.404"></a>
+<span class="sourceLineNo">405</span>          progress_failed = outputSink.finishWritingAndClose() == null;<a name="line.405"></a>
+<span class="sourceLineNo">406</span>        }<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      } finally {<a name="line.407"></a>
+<span class="sourceLineNo">408</span>        String msg =<a name="line.408"></a>
+<span class="sourceLineNo">409</span>            "Processed " + editsCount + " edits across " + outputSink.getNumberOfRecoveredRegions()<a name="line.409"></a>
+<span class="sourceLineNo">410</span>                + " regions; edits skipped=" + editsSkipped + "; log file=" + logPath +<a name="line.410"></a>
+<span class="sourceLineNo">411</span>                ", length=" + logfile.getLen() + // See if length got updated post lease recovery<a name="line.411"></a>
+<span class="sourceLineNo">412</span>                ", corrupted=" + isCorrupted + ", progress failed=" + progress_failed;<a name="line.412"></a>
+<span class="sourceLineNo">413</span>        LOG.info(msg);<a name="line.413"></a>
+<span class="sourceLineNo">414</span>        status.markComplete(msg);<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>    return !progress_failed;<a name="line.417"></a>
+<span class="sourceLineNo">418</span>  }<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>   * Completes the work done by splitLogFile by archiving logs<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   * &lt;p&gt;<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   * It is invoked by SplitLogManager once it knows that one of the<a name="line.423"></a>
+<span class="sourceLineNo">424</span>   * SplitLogWorkers have completed the splitLogFile() part. If the master<a name="line.424"></a>
+<span class="sourceLineNo">425</span>   * crashes then this function might get called multiple times.<a name="line.425"></a>
+<span class="sourceLineNo">426</span>   * &lt;p&gt;<a name="line.426"></a>
+<span class="sourceLineNo">427</span>   * @param logfile<a name="line.427"></a>
+<span class="sourceLineNo">428</span>   * @param conf<a name="line.428"></a>
+<span class="sourceLineNo">429</span>   * @throws IOException<a name="line.429"></a>
+<span class="sourceLineNo">430</span>   */<a name="line.430"></a>
+<span class="sourceLineNo">431</span>  public static void finishSplitLogFile(String logfile,<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      Configuration conf)  throws IOException {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    Path rootdir = FSUtils.getRootDir(conf);<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    Path oldLogDir = new Path(rootdir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.434"></a>
+<span class="sourceLineNo">435</span>    Path logPath;<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    if (FSUtils.isStartingWithPath(rootdir, logfile)) {<a name="line.436"></a>
+<span class="sourceLineNo">437</span>      logPath = new Path(logfile);<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    } else {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>      logPath = new Path(rootdir, logfile);<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    }<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    finishSplitLogFile(rootdir, oldLogDir, logPath, conf);<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>  private static void finishSplitLogFile(Path rootdir, Path oldLogDir,<a name="line.444"></a>
+<span class="sourceLineNo">445</span>      Path logPath, Configuration conf) throws IOException {<a name="line.445"></a>
+<span class="sourceLineNo">446</span>    List&lt;Path&gt; processedLogs = new ArrayList&lt;Path&gt;();<a name="line.446"></a>
+<span class="sourceLineNo">447</span>    List&lt;Path&gt; corruptedLogs = new ArrayList&lt;Path&gt;();<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    FileSystem fs;<a name="line.448"></a>
+<span class="sourceLineNo">449</span>    fs = rootdir.getFileSystem(conf);<a name="line.449"></a>
+<span class="sourceLineNo">450</span>    if (ZKSplitLog.isCorrupted(rootdir, logPath.getName(), fs)) {<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      corruptedLogs.add(logPath);<a name="line.451"></a>
+<span class="sourceLineNo">452</span>    } else {<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      processedLogs.add(logPath);<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    }<a name="line.454"></a>
+<span class="sourceLineNo">455</span>    archiveLogs(corruptedLogs, processedLogs, oldLogDir, fs, conf);<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    Path stagingDir = ZKSplitLog.getSplitLogDir(rootdir, logPath.getName());<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    fs.delete(stagingDir, true);<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>  /**<a name="line.460"></a>
+<span class="sourceLineNo">461</span>   * Moves processed logs to a oldLogDir after successful processing Moves<a name="line.461"></a>
+<span class="sourceLineNo">462</span>   * corrupted logs (any log that couldn't be successfully parsed to corruptDir<a name="line.462"></a>
+<span class="sourceLineNo">463</span>   * (.corrupt) for later investigation<a name="line.463"></a>
+<span class="sourceLineNo">464</span>   *<a name="line.464"></a>
+<span class="sourceLineNo">465</span>   * @param corruptedLogs<a name="line.465"></a>
+<span class="sourceLineNo">466</span>   * @param processedLogs<a name="line.466"></a>
+<span class="sourceLineNo">467</span>   * @param oldLogDir<a name="line.467"></a>
+<span class="sourceLineNo">468</span>   * @param fs<a name="line.468"></a>
+<span class="sourceLineNo">469</span>   * @param conf<a name="line.469"></a>
+<span class="sourceLineNo">470</span>   * @throws IOException<a name="line.470"></a>
+<span class="sourceLineNo">471</span>   */<a name="line.471"></a>
+<span class="sourceLineNo">472</span>  private static void archiveLogs(<a name="line.472"></a>
+<span class="sourceLineNo">473</span>      final List&lt;Path&gt; corruptedLogs,<a name="line.473"></a>
+<span class="sourceLineNo">474</span>      final List&lt;Path&gt; processedLogs, final Path oldLogDir,<a name="line.474"></a>
+<span class="sourceLineNo">475</span>      final FileSystem fs, final Configuration conf) throws IOException {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    final Path corruptDir = new Path(FSUtils.getRootDir(conf), conf.get(<a name="line.476"></a>
+<span class="sourceLineNo">477</span>        "hbase.regionserver.hlog.splitlog.corrupt.dir",  HConstants.CORRUPT_DIR_NAME));<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>    if (!fs.mkdirs(corruptDir)) {<a name="line.479"></a>
+<span class="sourceLineNo">480</span>      LOG.info("Unable to mkdir " + corruptDir);<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    }<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    fs.mkdirs(oldLogDir);<a name="line.482"></a>
+<span class="sourceLineNo">483</span><a name="line.483"></a>
+<span class="sourceLineNo">484</span>    // this method can get restarted or called multiple times for archiving<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    // the same log files.<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    for (Path corrupted : corruptedLogs) {<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      Path p = new Path(corruptDir, corrupted.getName());<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      if (fs.exists(corrupted)) {<a name="line.488"></a>
+<span class="sourceLineNo">489</span>        if (!fs.rename(corrupted, p)) {<a name="line.489"></a>
+<span class="sourceLineNo">490</span>          LOG.warn("Unable to move corrupted log " + corrupted + " to " + p);<a name="line.490"></a>
+<span class="sourceLineNo">491</span>        } else {<a name="line.491"></a>
+<span class="sourceLineNo">492</span>          LOG.warn("Moved corrupted log " + corrupted + " to " + p);<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>    }<a name="line.495"></a>
+<span class="sourceLineNo">496</span><a name="line.496"></a>
+<span class="sourceLineNo">497</span>    for (Path p : processedLogs) {<a name="line.497"></a>
+<span class="sourceLineNo">498</span>      Path newPath = FSHLog.getWALArchivePath(oldLogDir, p);<a name="line.498"></a>
+<span class="sourceLineNo">499</span>      if (fs.exists(p)) {<a name="line.499"></a>
+<span class="sourceLineNo">500</span>        if (!FSUtils.renameAndSetModifyTime(fs, p, newPath)) {<a name="line.500"></a>
+<span class="sourceLineNo">501</span>          LOG.warn("Unable to move  " + p + " to " + newPath);<a name="line.501"></a>
+<span class="sourceLineNo">502</span>        } else {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>          LOG.info("Archived processed log " + p + " to " + newPath);<a name="line.503"></a>
+<span class="sourceLineNo">504</span>        }<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      }<a name="line.505"></a>
+<span class="sourceLineNo">506</span>    }<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>  /**<a name="line.509"></a>
+<span class="sourceLineNo">510</span>   * Path to a file under RECOVERED_EDITS_DIR directory of the region found in<a name="line.510"></a>
+<span class="sourceLineNo">511</span>   * &lt;code&gt;logEntry&lt;/code&gt; named for the sequenceid in the passed<a name="line.511"></a>
+<span class="sourceLineNo">512</span>   * &lt;code&gt;logEntry&lt;/code&gt;: e.g. /hbase/some_table/2323432434/recovered.edits/2332.<a name="line.512"></a>
+<span class="sourceLineNo">513</span>   * This method also ensures existence of RECOVERED_EDITS_DIR under the region<a name="line.513"></a>
+<span class="sourceLineNo">514</span>   * creating it if necessary.<a name="line.514"></a>
+<span class="sourceLineNo">515</span>   * @param fs<a name="line.515"></a>
+<span class="sourceLineNo">516</span>   * @param logEntry<a name="line.516"></a>
+<span class="sourceLineNo">517</span>   * @param rootDir HBase root dir.<a name="line.517"></a>
+<span class="sourceLineNo">518</span>   * @param fileBeingSplit the file being split currently. Used to generate tmp file name.<a name="line.518"></a>
+<span class="sourceLineNo">519</span>   * @return Path to file into which to dump split log edits.<a name="line.519"></a>
+<span class="sourceLineNo">520</span>   * @throws IOException<a name="line.520"></a>
+<span class="sourceLineNo">521</span>   */<a name="line.521"></a>
+<span class="sourceLineNo">522</span>  @SuppressWarnings("deprecation")<a name="line.522"></a>
+<span class="sourceLineNo">523</span>  private static Path getRegionSplitEditsPath(final FileSystem fs,<a name="line.523"></a>
+<span class="sourceLineNo">524</span>      final Entry logEntry, final Path rootDir, FileStatus fileBeingSplit)<a name="line.524"></a>
+<span class="sourceLineNo">525</span>  throws IOException {<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    Path tableDir = FSUtils.getTableDir(rootDir, logEntry.getKey().getTablename());<a name="line.526"></a>
+<span class="sourceLineNo">527</span>    String encodedRegionName = Bytes.toString(logEntry.getKey().getEncodedRegionName());<a name="line.527"></a>
+<span class="sourceLineNo">528</span>    Path regiondir = HRegion.getRegionDir(tableDir, encodedRegionName);<a name="line.528"></a>
+<span class="sourceLineNo">529</span>    Path dir = getRegionDirRecoveredEditsDir(regiondir);<a name="line.529"></a>
+<span class="sourceLineNo">530</span><a name="line.530"></a>
+<span class="sourceLineNo">531</span>    if (!fs.exists(regiondir)) {<a name="line.531"></a>
+<span class="sourceLineNo">532</span>      LOG.info("This region's directory doesn't exist: "<a name="line.532"></a>
+<span class="sourceLineNo">533</span>          + regiondir.toString() + ". It is very likely that it was" +<a name="line.533"></a>
+<span class="sourceLineNo">534</span>          " already split so it's safe to discard those edits.");<a name="line.534"></a>
+<span class="sourceLineNo">535</span>      return null;<a name="line.535"></a>
+<span class="sourceLineNo">536</span>    }<a name="line.536"></a>
+<span class="sourceLineNo">537</span>    if (fs.exists(dir) &amp;&amp; fs.isFile(dir)) {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      Path tmp = new Path("/tmp");<a name="line.538"></a>
+<span class="sourceLineNo">539</span>      if (!fs.exists(tmp)) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span>        fs.mkdirs(tmp);<a name="line.540"></a>
+<span class="sourceLineNo">541</span>      }<a name="line.541"></a>
+<span class="sourceLineNo">542</span>      tmp = new Path(tmp,<a name="line.542"></a>
+<span class="sourceLineNo">543</span>        HConstants.RECOVERED_EDITS_DIR + "_" + encodedRegionName);<a name="line.543"></a>
+<span class="sourceLineNo">544</span>      LOG.warn("Found existing old file: " + dir + ". It could be some "<a name="line.544"></a>
+<span class="sourceLineNo">545</span>        + "leftover of an old installation. It should be a folder instead. "<a name="line.545"></a>
+<span class="sourceLineNo">546</span>        + "So moving it to " + tmp);<a name="line.546"></a>
+<span class="sourceLineNo">547</span>      if (!fs.rename(dir, tmp)) {<a name="line.547"></a>
+<span class="sourceLineNo">548</span>        LOG.warn("Failed to sideline old file " + dir);<a name="line.548"></a>
+<span class="sourceLineNo">549</span>      }<a name="line.549"></a>
+<span class="sourceLineNo">550</span>    }<a name="line.550"></a>
+<span class="sourceLineNo">551</span><a name="line.551"></a>
+<span class="sourceLineNo">552</span>    if (!fs.exists(dir) &amp;&amp; !fs.mkdirs(dir)) {<a name="line.55

<TRUNCATED>

[13/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html
index 0597160..b444f46 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html
@@ -184,2145 +184,2183 @@
 <span class="sourceLineNo">176</span>  // Min batch size when replay WAL edits<a name="line.176"></a>
 <span class="sourceLineNo">177</span>  private final int minBatchSize;<a name="line.177"></a>
 <span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span>  WALSplitter(final WALFactory factory, Configuration conf, Path rootDir,<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      FileSystem fs, LastSequenceId idChecker,<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      CoordinatedStateManager csm, RecoveryMode mode) {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    this.conf = HBaseConfiguration.create(conf);<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    String codecClassName = conf<a name="line.183"></a>
-<span class="sourceLineNo">184</span>        .get(WALCellCodec.WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    this.conf.set(HConstants.RPC_CODEC_CONF_KEY, codecClassName);<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    this.rootDir = rootDir;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    this.fs = fs;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    this.sequenceIdChecker = idChecker;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    this.csm = (BaseCoordinatedStateManager)csm;<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    this.walFactory = factory;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    this.controller = new PipelineController();<a name="line.191"></a>
-<span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span>    entryBuffers = new EntryBuffers(controller,<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        this.conf.getInt("hbase.regionserver.hlog.splitlog.buffersize",<a name="line.194"></a>
-<span class="sourceLineNo">195</span>            128*1024*1024));<a name="line.195"></a>
+<span class="sourceLineNo">179</span>  // the file being split currently<a name="line.179"></a>
+<span class="sourceLineNo">180</span>  private FileStatus fileBeingSplit;<a name="line.180"></a>
+<span class="sourceLineNo">181</span><a name="line.181"></a>
+<span class="sourceLineNo">182</span>  @VisibleForTesting<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  WALSplitter(final WALFactory factory, Configuration conf, Path rootDir,<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      FileSystem fs, LastSequenceId idChecker,<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      CoordinatedStateManager csm, RecoveryMode mode) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    this.conf = HBaseConfiguration.create(conf);<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    String codecClassName = conf<a name="line.187"></a>
+<span class="sourceLineNo">188</span>        .get(WALCellCodec.WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    this.conf.set(HConstants.RPC_CODEC_CONF_KEY, codecClassName);<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    this.rootDir = rootDir;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    this.fs = fs;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    this.sequenceIdChecker = idChecker;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    this.csm = (BaseCoordinatedStateManager)csm;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    this.walFactory = factory;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    this.controller = new PipelineController();<a name="line.195"></a>
 <span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span>    // a larger minBatchSize may slow down recovery because replay writer has to wait for<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    // enough edits before replaying them<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    this.minBatchSize = this.conf.getInt("hbase.regionserver.wal.logreplay.batch.size", 64);<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    this.distributedLogReplay = (RecoveryMode.LOG_REPLAY == mode);<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>    this.numWriterThreads = this.conf.getInt("hbase.regionserver.hlog.splitlog.writer.threads", 3);<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    if (csm != null &amp;&amp; this.distributedLogReplay) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      outputSink = new LogReplayOutputSink(controller, entryBuffers, numWriterThreads);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    } else {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      if (this.distributedLogReplay) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        LOG.info("ZooKeeperWatcher is passed in as NULL so disable distrubitedLogRepaly.");<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      }<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      this.distributedLogReplay = false;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      outputSink = new LogRecoveredEditsOutputSink(controller, entryBuffers, numWriterThreads);<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>  }<a name="line.213"></a>
-<span class="sourceLineNo">214</span><a name="line.214"></a>
-<span class="sourceLineNo">215</span>  /**<a name="line.215"></a>
-<span class="sourceLineNo">216</span>   * Splits a WAL file into region's recovered-edits directory.<a name="line.216"></a>
-<span class="sourceLineNo">217</span>   * This is the main entry point for distributed log splitting from SplitLogWorker.<a name="line.217"></a>
-<span class="sourceLineNo">218</span>   * &lt;p&gt;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>   * If the log file has N regions then N recovered.edits files will be produced.<a name="line.219"></a>
-<span class="sourceLineNo">220</span>   * &lt;p&gt;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   * @param rootDir<a name="line.221"></a>
-<span class="sourceLineNo">222</span>   * @param logfile<a name="line.222"></a>
-<span class="sourceLineNo">223</span>   * @param fs<a name="line.223"></a>
-<span class="sourceLineNo">224</span>   * @param conf<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   * @param reporter<a name="line.225"></a>
-<span class="sourceLineNo">226</span>   * @param idChecker<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   * @param cp coordination state manager<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   * @return false if it is interrupted by the progress-able.<a name="line.228"></a>
-<span class="sourceLineNo">229</span>   * @throws IOException<a name="line.229"></a>
-<span class="sourceLineNo">230</span>   */<a name="line.230"></a>
-<span class="sourceLineNo">231</span>  public static boolean splitLogFile(Path rootDir, FileStatus logfile, FileSystem fs,<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      Configuration conf, CancelableProgressable reporter, LastSequenceId idChecker,<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      CoordinatedStateManager cp, RecoveryMode mode, final WALFactory factory) throws IOException {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, idChecker, cp, mode);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    return s.splitLogFile(logfile, reporter);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  }<a name="line.236"></a>
-<span class="sourceLineNo">237</span><a name="line.237"></a>
-<span class="sourceLineNo">238</span>  // A wrapper to split one log folder using the method used by distributed<a name="line.238"></a>
-<span class="sourceLineNo">239</span>  // log splitting. Used by tools and unit tests. It should be package private.<a name="line.239"></a>
-<span class="sourceLineNo">240</span>  // It is public only because TestWALObserver is in a different package,<a name="line.240"></a>
-<span class="sourceLineNo">241</span>  // which uses this method to do log splitting.<a name="line.241"></a>
-<span class="sourceLineNo">242</span>  @VisibleForTesting<a name="line.242"></a>
-<span class="sourceLineNo">243</span>  public static List&lt;Path&gt; split(Path rootDir, Path logDir, Path oldLogDir,<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      FileSystem fs, Configuration conf, final WALFactory factory) throws IOException {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    final FileStatus[] logfiles = SplitLogManager.getFileList(conf,<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        Collections.singletonList(logDir), null);<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    List&lt;Path&gt; splits = new ArrayList&lt;Path&gt;();<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    if (logfiles != null &amp;&amp; logfiles.length &gt; 0) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      for (FileStatus logfile: logfiles) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, null, null,<a name="line.250"></a>
-<span class="sourceLineNo">251</span>            RecoveryMode.LOG_SPLITTING);<a name="line.251"></a>
-<span class="sourceLineNo">252</span>        if (s.splitLogFile(logfile, null)) {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>          finishSplitLogFile(rootDir, oldLogDir, logfile.getPath(), conf);<a name="line.253"></a>
-<span class="sourceLineNo">254</span>          if (s.outputSink.splits != null) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>            splits.addAll(s.outputSink.splits);<a name="line.255"></a>
-<span class="sourceLineNo">256</span>          }<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        }<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      }<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    }<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    if (!fs.delete(logDir, true)) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      throw new IOException("Unable to delete src dir: " + logDir);<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    return splits;<a name="line.263"></a>
-<span class="sourceLineNo">264</span>  }<a name="line.264"></a>
-<span class="sourceLineNo">265</span><a name="line.265"></a>
-<span class="sourceLineNo">266</span>  /**<a name="line.266"></a>
-<span class="sourceLineNo">267</span>   * log splitting implementation, splits one log file.<a name="line.267"></a>
-<span class="sourceLineNo">268</span>   * @param logfile should be an actual log file.<a name="line.268"></a>
-<span class="sourceLineNo">269</span>   */<a name="line.269"></a>
-<span class="sourceLineNo">270</span>  boolean splitLogFile(FileStatus logfile, CancelableProgressable reporter) throws IOException {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    Preconditions.checkState(status == null);<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    Preconditions.checkArgument(logfile.isFile(),<a name="line.272"></a>
-<span class="sourceLineNo">273</span>        "passed in file status is for something other than a regular file.");<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    boolean isCorrupted = false;<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    boolean skipErrors = conf.getBoolean("hbase.hlog.split.skip.errors",<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      SPLIT_SKIP_ERRORS_DEFAULT);<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    int interval = conf.getInt("hbase.splitlog.report.interval.loglines", 1024);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    Path logPath = logfile.getPath();<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    boolean outputSinkStarted = false;<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    boolean progress_failed = false;<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    int editsCount = 0;<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    int editsSkipped = 0;<a name="line.282"></a>
-<span class="sourceLineNo">283</span><a name="line.283"></a>
-<span class="sourceLineNo">284</span>    status =<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        TaskMonitor.get().createStatus(<a name="line.285"></a>
-<span class="sourceLineNo">286</span>          "Splitting log file " + logfile.getPath() + "into a temporary staging area.");<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    Reader in = null;<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    try {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      long logLength = logfile.getLen();<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      LOG.info("Splitting wal: " + logPath + ", length=" + logLength);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      LOG.info("DistributedLogReplay = " + this.distributedLogReplay);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      status.setStatus("Opening log file");<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>        progress_failed = true;<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        return false;<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      }<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      try {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        in = getReader(logfile, skipErrors, reporter);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      } catch (CorruptedLogFileException e) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>        LOG.warn("Could not get reader, corrupted log file " + logPath, e);<a name="line.300"></a>
-<span class="sourceLineNo">301</span>        ZKSplitLog.markCorrupted(rootDir, logfile.getPath().getName(), fs);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>        isCorrupted = true;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      }<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      if (in == null) {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>        LOG.warn("Nothing to split in log file " + logPath);<a name="line.305"></a>
-<span class="sourceLineNo">306</span>        return true;<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      }<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      int numOpenedFilesBeforeReporting = conf.getInt("hbase.splitlog.report.openedfiles", 3);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      int numOpenedFilesLastCheck = 0;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      outputSink.setReporter(reporter);<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      outputSink.startWriterThreads();<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      outputSinkStarted = true;<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      Entry entry;<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      Long lastFlushedSequenceId = -1L;<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      ServerName serverName = DefaultWALProvider.getServerNameFromWALDirectoryName(logPath);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      failedServerName = (serverName == null) ? "" : serverName.getServerName();<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      while ((entry = getNextLogLine(in, logPath, skipErrors)) != null) {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>        byte[] region = entry.getKey().getEncodedRegionName();<a name="line.318"></a>
-<span class="sourceLineNo">319</span>        String encodedRegionNameAsStr = Bytes.toString(region);<a name="line.319"></a>
-<span class="sourceLineNo">320</span>        lastFlushedSequenceId = lastFlushedSequenceIds.get(encodedRegionNameAsStr);<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        if (lastFlushedSequenceId == null) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>          if (this.distributedLogReplay) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>            RegionStoreSequenceIds ids =<a name="line.323"></a>
-<span class="sourceLineNo">324</span>                csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.324"></a>
-<span class="sourceLineNo">325</span>                  encodedRegionNameAsStr);<a name="line.325"></a>
-<span class="sourceLineNo">326</span>            if (ids != null) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>              lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.327"></a>
-<span class="sourceLineNo">328</span>              if (LOG.isDebugEnabled()) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>                LOG.debug("DLR Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.329"></a>
-<span class="sourceLineNo">330</span>                  TextFormat.shortDebugString(ids));<a name="line.330"></a>
-<span class="sourceLineNo">331</span>              }<a name="line.331"></a>
-<span class="sourceLineNo">332</span>            }<a name="line.332"></a>
-<span class="sourceLineNo">333</span>          } else if (sequenceIdChecker != null) {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>            RegionStoreSequenceIds ids = sequenceIdChecker.getLastSequenceId(region);<a name="line.334"></a>
-<span class="sourceLineNo">335</span>            Map&lt;byte[], Long&gt; maxSeqIdInStores = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.335"></a>
-<span class="sourceLineNo">336</span>            for (StoreSequenceId storeSeqId : ids.getStoreSequenceIdList()) {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>              maxSeqIdInStores.put(storeSeqId.getFamilyName().toByteArray(),<a name="line.337"></a>
-<span class="sourceLineNo">338</span>                storeSeqId.getSequenceId());<a name="line.338"></a>
-<span class="sourceLineNo">339</span>            }<a name="line.339"></a>
-<span class="sourceLineNo">340</span>            regionMaxSeqIdInStores.put(encodedRegionNameAsStr, maxSeqIdInStores);<a name="line.340"></a>
-<span class="sourceLineNo">341</span>            lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.341"></a>
-<span class="sourceLineNo">342</span>            if (LOG.isDebugEnabled()) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>              LOG.debug("DLS Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.343"></a>
-<span class="sourceLineNo">344</span>                  TextFormat.shortDebugString(ids));<a name="line.344"></a>
+<span class="sourceLineNo">197</span>    entryBuffers = new EntryBuffers(controller,<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        this.conf.getInt("hbase.regionserver.hlog.splitlog.buffersize",<a name="line.198"></a>
+<span class="sourceLineNo">199</span>            128*1024*1024));<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>    // a larger minBatchSize may slow down recovery because replay writer has to wait for<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    // enough edits before replaying them<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    this.minBatchSize = this.conf.getInt("hbase.regionserver.wal.logreplay.batch.size", 64);<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    this.distributedLogReplay = (RecoveryMode.LOG_REPLAY == mode);<a name="line.204"></a>
+<span class="sourceLineNo">205</span><a name="line.205"></a>
+<span class="sourceLineNo">206</span>    this.numWriterThreads = this.conf.getInt("hbase.regionserver.hlog.splitlog.writer.threads", 3);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    if (csm != null &amp;&amp; this.distributedLogReplay) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      outputSink = new LogReplayOutputSink(controller, entryBuffers, numWriterThreads);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    } else {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      if (this.distributedLogReplay) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>        LOG.info("ZooKeeperWatcher is passed in as NULL so disable distrubitedLogRepaly.");<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      }<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      this.distributedLogReplay = false;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      outputSink = new LogRecoveredEditsOutputSink(controller, entryBuffers, numWriterThreads);<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    }<a name="line.215"></a>
+<span class="sourceLineNo">216</span><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>
+<span class="sourceLineNo">220</span>   * Splits a WAL file into region's recovered-edits directory.<a name="line.220"></a>
+<span class="sourceLineNo">221</span>   * This is the main entry point for distributed log splitting from SplitLogWorker.<a name="line.221"></a>
+<span class="sourceLineNo">222</span>   * &lt;p&gt;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>   * If the log file has N regions then N recovered.edits files will be produced.<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   * &lt;p&gt;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   * @param rootDir<a name="line.225"></a>
+<span class="sourceLineNo">226</span>   * @param logfile<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   * @param fs<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   * @param conf<a name="line.228"></a>
+<span class="sourceLineNo">229</span>   * @param reporter<a name="line.229"></a>
+<span class="sourceLineNo">230</span>   * @param idChecker<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   * @param cp coordination state manager<a name="line.231"></a>
+<span class="sourceLineNo">232</span>   * @return false if it is interrupted by the progress-able.<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   * @throws IOException<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   */<a name="line.234"></a>
+<span class="sourceLineNo">235</span>  public static boolean splitLogFile(Path rootDir, FileStatus logfile, FileSystem fs,<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      Configuration conf, CancelableProgressable reporter, LastSequenceId idChecker,<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      CoordinatedStateManager cp, RecoveryMode mode, final WALFactory factory) throws IOException {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, idChecker, cp, mode);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    return s.splitLogFile(logfile, reporter);<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>  // A wrapper to split one log folder using the method used by distributed<a name="line.242"></a>
+<span class="sourceLineNo">243</span>  // log splitting. Used by tools and unit tests. It should be package private.<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  // It is public only because TestWALObserver is in a different package,<a name="line.244"></a>
+<span class="sourceLineNo">245</span>  // which uses this method to do log splitting.<a name="line.245"></a>
+<span class="sourceLineNo">246</span>  @VisibleForTesting<a name="line.246"></a>
+<span class="sourceLineNo">247</span>  public static List&lt;Path&gt; split(Path rootDir, Path logDir, Path oldLogDir,<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      FileSystem fs, Configuration conf, final WALFactory factory) throws IOException {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    final FileStatus[] logfiles = SplitLogManager.getFileList(conf,<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        Collections.singletonList(logDir), null);<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    List&lt;Path&gt; splits = new ArrayList&lt;Path&gt;();<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    if (logfiles != null &amp;&amp; logfiles.length &gt; 0) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      for (FileStatus logfile: logfiles) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>        WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, null, null,<a name="line.254"></a>
+<span class="sourceLineNo">255</span>            RecoveryMode.LOG_SPLITTING);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>        if (s.splitLogFile(logfile, null)) {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>          finishSplitLogFile(rootDir, oldLogDir, logfile.getPath(), conf);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>          if (s.outputSink.splits != null) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>            splits.addAll(s.outputSink.splits);<a name="line.259"></a>
+<span class="sourceLineNo">260</span>          }<a name="line.260"></a>
+<span class="sourceLineNo">261</span>        }<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      }<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    }<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    if (!fs.delete(logDir, true)) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      throw new IOException("Unable to delete src dir: " + logDir);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    }<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    return splits;<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  }<a name="line.268"></a>
+<span class="sourceLineNo">269</span><a name="line.269"></a>
+<span class="sourceLineNo">270</span>  /**<a name="line.270"></a>
+<span class="sourceLineNo">271</span>   * log splitting implementation, splits one log file.<a name="line.271"></a>
+<span class="sourceLineNo">272</span>   * @param logfile should be an actual log file.<a name="line.272"></a>
+<span class="sourceLineNo">273</span>   */<a name="line.273"></a>
+<span class="sourceLineNo">274</span>  @VisibleForTesting<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  boolean splitLogFile(FileStatus logfile, CancelableProgressable reporter) throws IOException {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    Preconditions.checkState(status == null);<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    Preconditions.checkArgument(logfile.isFile(),<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        "passed in file status is for something other than a regular file.");<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    boolean isCorrupted = false;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    boolean skipErrors = conf.getBoolean("hbase.hlog.split.skip.errors",<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      SPLIT_SKIP_ERRORS_DEFAULT);<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    int interval = conf.getInt("hbase.splitlog.report.interval.loglines", 1024);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    Path logPath = logfile.getPath();<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    boolean outputSinkStarted = false;<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    boolean progress_failed = false;<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    int editsCount = 0;<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    int editsSkipped = 0;<a name="line.287"></a>
+<span class="sourceLineNo">288</span><a name="line.288"></a>
+<span class="sourceLineNo">289</span>    status =<a name="line.289"></a>
+<span class="sourceLineNo">290</span>        TaskMonitor.get().createStatus(<a name="line.290"></a>
+<span class="sourceLineNo">291</span>          "Splitting log file " + logfile.getPath() + "into a temporary staging area.");<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    Reader in = null;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    this.fileBeingSplit = logfile;<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    try {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      long logLength = logfile.getLen();<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      LOG.info("Splitting wal: " + logPath + ", length=" + logLength);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      LOG.info("DistributedLogReplay = " + this.distributedLogReplay);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      status.setStatus("Opening log file");<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>        progress_failed = true;<a name="line.300"></a>
+<span class="sourceLineNo">301</span>        return false;<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      }<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      try {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>        in = getReader(logfile, skipErrors, reporter);<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      } catch (CorruptedLogFileException e) {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>        LOG.warn("Could not get reader, corrupted log file " + logPath, e);<a name="line.306"></a>
+<span class="sourceLineNo">307</span>        ZKSplitLog.markCorrupted(rootDir, logfile.getPath().getName(), fs);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>        isCorrupted = true;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      }<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      if (in == null) {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        LOG.warn("Nothing to split in log file " + logPath);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        return true;<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      }<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      int numOpenedFilesBeforeReporting = conf.getInt("hbase.splitlog.report.openedfiles", 3);<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      int numOpenedFilesLastCheck = 0;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      outputSink.setReporter(reporter);<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      outputSink.startWriterThreads();<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      outputSinkStarted = true;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      Entry entry;<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      Long lastFlushedSequenceId = -1L;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      ServerName serverName = DefaultWALProvider.getServerNameFromWALDirectoryName(logPath);<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      failedServerName = (serverName == null) ? "" : serverName.getServerName();<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      while ((entry = getNextLogLine(in, logPath, skipErrors)) != null) {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>        byte[] region = entry.getKey().getEncodedRegionName();<a name="line.324"></a>
+<span class="sourceLineNo">325</span>        String encodedRegionNameAsStr = Bytes.toString(region);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>        lastFlushedSequenceId = lastFlushedSequenceIds.get(encodedRegionNameAsStr);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>        if (lastFlushedSequenceId == null) {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>          if (this.distributedLogReplay) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>            RegionStoreSequenceIds ids =<a name="line.329"></a>
+<span class="sourceLineNo">330</span>                csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.330"></a>
+<span class="sourceLineNo">331</span>                  encodedRegionNameAsStr);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>            if (ids != null) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span>              lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.333"></a>
+<span class="sourceLineNo">334</span>              if (LOG.isDebugEnabled()) {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>                LOG.debug("DLR Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.335"></a>
+<span class="sourceLineNo">336</span>                  TextFormat.shortDebugString(ids));<a name="line.336"></a>
+<span class="sourceLineNo">337</span>              }<a name="line.337"></a>
+<span class="sourceLineNo">338</span>            }<a name="line.338"></a>
+<span class="sourceLineNo">339</span>          } else if (sequenceIdChecker != null) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>            RegionStoreSequenceIds ids = sequenceIdChecker.getLastSequenceId(region);<a name="line.340"></a>
+<span class="sourceLineNo">341</span>            Map&lt;byte[], Long&gt; maxSeqIdInStores = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.341"></a>
+<span class="sourceLineNo">342</span>            for (StoreSequenceId storeSeqId : ids.getStoreSequenceIdList()) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>              maxSeqIdInStores.put(storeSeqId.getFamilyName().toByteArray(),<a name="line.343"></a>
+<span class="sourceLineNo">344</span>                storeSeqId.getSequenceId());<a name="line.344"></a>
 <span class="sourceLineNo">345</span>            }<a name="line.345"></a>
-<span class="sourceLineNo">346</span>          }<a name="line.346"></a>
-<span class="sourceLineNo">347</span>          if (lastFlushedSequenceId == null) {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>            lastFlushedSequenceId = -1L;<a name="line.348"></a>
-<span class="sourceLineNo">349</span>          }<a name="line.349"></a>
-<span class="sourceLineNo">350</span>          lastFlushedSequenceIds.put(encodedRegionNameAsStr, lastFlushedSequenceId);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        }<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        if (lastFlushedSequenceId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>          editsSkipped++;<a name="line.353"></a>
-<span class="sourceLineNo">354</span>          continue;<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        }<a name="line.355"></a>
-<span class="sourceLineNo">356</span>        entryBuffers.appendEntry(entry);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        editsCount++;<a name="line.357"></a>
-<span class="sourceLineNo">358</span>        int moreWritersFromLastCheck = this.getNumOpenWriters() - numOpenedFilesLastCheck;<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        // If sufficient edits have passed, check if we should report progress.<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        if (editsCount % interval == 0<a name="line.360"></a>
-<span class="sourceLineNo">361</span>            || moreWritersFromLastCheck &gt; numOpenedFilesBeforeReporting) {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>          numOpenedFilesLastCheck = this.getNumOpenWriters();<a name="line.362"></a>
-<span class="sourceLineNo">363</span>          String countsStr = (editsCount - (editsSkipped + outputSink.getSkippedEdits()))<a name="line.363"></a>
-<span class="sourceLineNo">364</span>              + " edits, skipped " + editsSkipped + " edits.";<a name="line.364"></a>
-<span class="sourceLineNo">365</span>          status.setStatus("Split " + countsStr);<a name="line.365"></a>
-<span class="sourceLineNo">366</span>          if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>            progress_failed = true;<a name="line.367"></a>
-<span class="sourceLineNo">368</span>            return false;<a name="line.368"></a>
-<span class="sourceLineNo">369</span>          }<a name="line.369"></a>
-<span class="sourceLineNo">370</span>        }<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      }<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    } catch (InterruptedException ie) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      IOException iie = new InterruptedIOException();<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      iie.initCause(ie);<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      throw iie;<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    } catch (CorruptedLogFileException e) {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      LOG.warn("Could not parse, corrupted log file " + logPath, e);<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      csm.getSplitLogWorkerCoordination().markCorrupted(rootDir,<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        logfile.getPath().getName(), fs);<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      isCorrupted = true;<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    } catch (IOException e) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      throw e;<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    } finally {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      LOG.debug("Finishing writing output logs and closing down.");<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      try {<a name="line.386"></a>
-<span class="sourceLineNo">387</span>        if (null != in) {<a name="line.387"></a>
-<span class="sourceLineNo">388</span>          in.close();<a name="line.388"></a>
-<span class="sourceLineNo">389</span>        }<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      } catch (IOException exception) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        LOG.warn("Could not close wal reader: " + exception.getMessage());<a name="line.391"></a>
-<span class="sourceLineNo">392</span>        LOG.debug("exception details", exception);<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      }<a name="line.393"></a>
-<span class="sourceLineNo">394</span>      try {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        if (outputSinkStarted) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>          // Set progress_failed to true as the immediate following statement will reset its value<a name="line.396"></a>
-<span class="sourceLineNo">397</span>          // when finishWritingAndClose() throws exception, progress_failed has the right value<a name="line.397"></a>
-<span class="sourceLineNo">398</span>          progress_failed = true;<a name="line.398"></a>
-<span class="sourceLineNo">399</span>          progress_failed = outputSink.finishWritingAndClose() == null;<a name="line.399"></a>
-<span class="sourceLineNo">400</span>        }<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      } finally {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        String msg =<a name="line.402"></a>
-<span class="sourceLineNo">403</span>            "Processed " + editsCount + " edits across " + outputSink.getNumberOfRecoveredRegions()<a name="line.403"></a>
-<span class="sourceLineNo">404</span>                + " regions; edits skipped=" + editsSkipped + "; log file=" + logPath +<a name="line.404"></a>
-<span class="sourceLineNo">405</span>                ", length=" + logfile.getLen() + // See if length got updated post lease recovery<a name="line.405"></a>
-<span class="sourceLineNo">406</span>                ", corrupted=" + isCorrupted + ", progress failed=" + progress_failed;<a name="line.406"></a>
-<span class="sourceLineNo">407</span>        LOG.info(msg);<a name="line.407"></a>
-<span class="sourceLineNo">408</span>        status.markComplete(msg);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      }<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    }<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    return !progress_failed;<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>   * Completes the work done by splitLogFile by archiving logs<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   * &lt;p&gt;<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * It is invoked by SplitLogManager once it knows that one of the<a name="line.417"></a>
-<span class="sourceLineNo">418</span>   * SplitLogWorkers have completed the splitLogFile() part. If the master<a name="line.418"></a>
-<span class="sourceLineNo">419</span>   * crashes then this function might get called multiple times.<a name="line.419"></a>
-<span class="sourceLineNo">420</span>   * &lt;p&gt;<a name="line.420"></a>
-<span class="sourceLineNo">421</span>   * @param logfile<a name="line.421"></a>
-<span class="sourceLineNo">422</span>   * @param conf<a name="line.422"></a>
-<span class="sourceLineNo">423</span>   * @throws IOException<a name="line.423"></a>
-<span class="sourceLineNo">424</span>   */<a name="line.424"></a>
-<span class="sourceLineNo">425</span>  public static void finishSplitLogFile(String logfile,<a name="line.425"></a>
-<span class="sourceLineNo">426</span>      Configuration conf)  throws IOException {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    Path rootdir = FSUtils.getRootDir(conf);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    Path oldLogDir = new Path(rootdir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    Path logPath;<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    if (FSUtils.isStartingWithPath(rootdir, logfile)) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      logPath = new Path(logfile);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    } else {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      logPath = new Path(rootdir, logfile);<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    }<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    finishSplitLogFile(rootdir, oldLogDir, logPath, conf);<a name="line.435"></a>
-<span class="sourceLineNo">436</span>  }<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>  static void finishSplitLogFile(Path rootdir, Path oldLogDir,<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      Path logPath, Configuration conf) throws IOException {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    List&lt;Path&gt; processedLogs = new ArrayList&lt;Path&gt;();<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    List&lt;Path&gt; corruptedLogs = new ArrayList&lt;Path&gt;();<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    FileSystem fs;<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    fs = rootdir.getFileSystem(conf);<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    if (ZKSplitLog.isCorrupted(rootdir, logPath.getName(), fs)) {<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      corruptedLogs.add(logPath);<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    } else {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      processedLogs.add(logPath);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    }<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    archiveLogs(corruptedLogs, processedLogs, oldLogDir, fs, conf);<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    Path stagingDir = ZKSplitLog.getSplitLogDir(rootdir, logPath.getName());<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    fs.delete(stagingDir, true);<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  }<a name="line.452"></a>
-<span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span>  /**<a name="line.454"></a>
-<span class="sourceLineNo">455</span>   * Moves processed logs to a oldLogDir after successful processing Moves<a name="line.455"></a>
-<span class="sourceLineNo">456</span>   * corrupted logs (any log that couldn't be successfully parsed to corruptDir<a name="line.456"></a>
-<span class="sourceLineNo">457</span>   * (.corrupt) for later investigation<a name="line.457"></a>
-<span class="sourceLineNo">458</span>   *<a name="line.458"></a>
-<span class="sourceLineNo">459</span>   * @param corruptedLogs<a name="line.459"></a>
-<span class="sourceLineNo">460</span>   * @param processedLogs<a name="line.460"></a>
-<span class="sourceLineNo">461</span>   * @param oldLogDir<a name="line.461"></a>
-<span class="sourceLineNo">462</span>   * @param fs<a name="line.462"></a>
-<span class="sourceLineNo">463</span>   * @param conf<a name="line.463"></a>
-<span class="sourceLineNo">464</span>   * @throws IOException<a name="line.464"></a>
-<span class="sourceLineNo">465</span>   */<a name="line.465"></a>
-<span class="sourceLineNo">466</span>  private static void archiveLogs(<a name="line.466"></a>
-<span class="sourceLineNo">467</span>      final List&lt;Path&gt; corruptedLogs,<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      final List&lt;Path&gt; processedLogs, final Path oldLogDir,<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      final FileSystem fs, final Configuration conf) throws IOException {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    final Path corruptDir = new Path(FSUtils.getRootDir(conf), conf.get(<a name="line.470"></a>
-<span class="sourceLineNo">471</span>        "hbase.regionserver.hlog.splitlog.corrupt.dir",  HConstants.CORRUPT_DIR_NAME));<a name="line.471"></a>
-<span class="sourceLineNo">472</span><a name="line.472"></a>
-<span class="sourceLineNo">473</span>    if (!fs.mkdirs(corruptDir)) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      LOG.info("Unable to mkdir " + corruptDir);<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    }<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    fs.mkdirs(oldLogDir);<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>    // this method can get restarted or called multiple times for archiving<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    // the same log files.<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    for (Path corrupted : corruptedLogs) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      Path p = new Path(corruptDir, corrupted.getName());<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      if (fs.exists(corrupted)) {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        if (!fs.rename(corrupted, p)) {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>          LOG.warn("Unable to move corrupted log " + corrupted + " to " + p);<a name="line.484"></a>
-<span class="sourceLineNo">485</span>        } else {<a name="line.485"></a>
-<span class="sourceLineNo">486</span>          LOG.warn("Moved corrupted log " + corrupted + " to " + p);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>        }<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      }<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    }<a name="line.489"></a>
-<span class="sourceLineNo">490</span><a name="line.490"></a>
-<span class="sourceLineNo">491</span>    for (Path p : processedLogs) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      Path newPath = FSHLog.getWALArchivePath(oldLogDir, p);<a name="line.492"></a>
-<span class="sourceLineNo">493</span>      if (fs.exists(p)) {<a name="line.493"></a>
-<span class="sourceLineNo">494</span>        if (!FSUtils.renameAndSetModifyTime(fs, p, newPath)) {<a name="line.494"></a>
-<span class="sourceLineNo">495</span>          LOG.warn("Unable to move  " + p + " to " + newPath);<a name="line.495"></a>
-<span class="sourceLineNo">496</span>        } else {<a name="line.496"></a>
-<span class="sourceLineNo">497</span>          LOG.info("Archived processed log " + p + " to " + newPath);<a name="line.497"></a>
-<span class="sourceLineNo">498</span>        }<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      }<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><a name="line.502"></a>
-<span class="sourceLineNo">503</span>  /**<a name="line.503"></a>
-<span class="sourceLineNo">504</span>   * Path to a file under RECOVERED_EDITS_DIR directory of the region found in<a name="line.504"></a>
-<span class="sourceLineNo">505</span>   * &lt;code&gt;logEntry&lt;/code&gt; named for the sequenceid in the passed<a name="line.505"></a>
-<span class="sourceLineNo">506</span>   * &lt;code&gt;logEntry&lt;/code&gt;: e.g. /hbase/some_table/2323432434/recovered.edits/2332.<a name="line.506"></a>
-<span class="sourceLineNo">507</span>   * This method also ensures existence of RECOVERED_EDITS_DIR under the region<a name="line.507"></a>
-<span class="sourceLineNo">508</span>   * creating it if necessary.<a name="line.508"></a>
-<span class="sourceLineNo">509</span>   * @param fs<a name="line.509"></a>
-<span class="sourceLineNo">510</span>   * @param logEntry<a name="line.510"></a>
-<span class="sourceLineNo">511</span>   * @param rootDir HBase root dir.<a name="line.511"></a>
-<span class="sourceLineNo">512</span>   * @return Path to file into which to dump split log edits.<a name="line.512"></a>
-<span class="sourceLineNo">513</span>   * @throws IOException<a name="line.513"></a>
-<span class="sourceLineNo">514</span>   */<a name="line.514"></a>
-<span class="sourceLineNo">515</span>  @SuppressWarnings("deprecation")<a name="line.515"></a>
-<span class="sourceLineNo">516</span>  static Path getRegionSplitEditsPath(final FileSystem fs,<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      final Entry logEntry, final Path rootDir, boolean isCreate)<a name="line.517"></a>
-<span class="sourceLineNo">518</span>  throws IOException {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    Path tableDir = FSUtils.getTableDir(rootDir, logEntry.getKey().getTablename());<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    String encodedRegionName = Bytes.toString(logEntry.getKey().getEncodedRegionName());<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    Path regiondir = HRegion.getRegionDir(tableDir, encodedRegionName);<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    Path dir = getRegionDirRecoveredEditsDir(regiondir);<a name="line.522"></a>
-<span class="sourceLineNo">523</span><a name="line.523"></a>
-<span class="sourceLineNo">524</span>    if (!fs.exists(regiondir)) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      LOG.info("This region's directory doesn't exist: "<a name="line.525"></a>
-<span class="sourceLineNo">526</span>          + regiondir.toString() + ". It is very likely that it was" +<a name="line.526"></a>
-<span class="sourceLineNo">527</span>          " already split so it's safe to discard those edits.");<a name="line.527"></a>
-<span class="sourceLineNo">528</span>      return null;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    }<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    if (fs.exists(dir) &amp;&amp; fs.isFile(dir)) {<a name="line.530"></a>
-<span class="sourceLineNo">531</span>      Path tmp = new Path("/tmp");<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      if (!fs.exists(tmp)) {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>        fs.mkdirs(tmp);<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      }<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      tmp = new Path(tmp,<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        HConstants.RECOVERED_EDITS_DIR + "_" + encodedRegionName);<a name="line.536"></a>
-<span class="sourceLineNo">537</span>      LOG.warn("Found existing old file: " + dir + ". It could be some "<a name="line.537"></a>
-<span class="sourceLineNo">538</span>        + "leftover of an old installation. It should be a folder instead. "<a name="line.538"></a>
-<span class="sourceLineNo">539</span>        + "So moving it to " + tmp);<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      if (!fs.rename(dir, tmp)) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        LOG.warn("Failed to sideline old file " + dir);<a name="line.541"></a>
-<span class="sourceLineNo">542</span>      }<a name="line.542"></a>
-<span class="sourceLineNo">543</span>    }<a name="line.543"></a>
-<span class="sourceLineNo">544</span><a name="line.544"></a>
-<span class="sourceLineNo">545</span>    if (isCreate &amp;&amp; !fs.exists(dir)) {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>      if (!fs.mkdirs(dir)) LOG.warn("mkdir failed on " + dir);<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    }<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    // Append file name ends with RECOVERED_LOG_TMPFILE_SUFFIX to ensure<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    // region's replayRecoveredEdits will not delete it<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    String fileName = formatRecoveredEditsFileName(logEntry.getKey().getLogSeqNum());<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    fileName = getTmpRecoveredEditsFileName(fileName);<a name="line.551"></a>
-<span class="sourceLineNo">552</span>    return new Path(dir, fileName);<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>  static String getTmpRecoveredEditsFileName(String fileName) {<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    return fileName + RECOVERED_LOG_TMPFILE_SUFFIX;<a name="line.556"></a>
-<span class="sourceLineNo">557</span>  }<a name="line.557"></a>
-<span class="sourceLineNo">558</span><a name="line.558"></a>
-<span class="sourceLineNo">559</span>  /**<a name="line.559"></a>
-<span class="sourceLineNo">560</span>   * Get the completed recovered edits file path, renaming it to be by last edit<a name="line.560"></a>
-<span class="sourceLineNo">561</span>   * in the file from its first edit. Then we could use the name to skip<a name="line.561"></a>
-<span class="sourceLineNo">562</span>   * recovered edits when doing {@link HRegion#replayRecoveredEditsIfAny}.<a name="line.562"></a>
-<span class="sourceLineNo">563</span>   * @param srcPath<a name="line.563"></a>
-<span class="sourceLineNo">564</span>   * @param maximumEditLogSeqNum<a name="line.564"></a>
-<span class="sourceLineNo">565</span>   * @return dstPath take file's last edit log seq num as the name<a name="line.565"></a>
-<span class="sourceLineNo">566</span>   */<a name="line.566"></a>
-<span class="sourceLineNo">567</span>  static Path getCompletedRecoveredEditsFilePath(Path srcPath,<a name="line.567"></a>
-<span class="sourceLineNo">568</span>      Long maximumEditLogSeqNum) {<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    String fileName = formatRecoveredEditsFileName(maximumEditLogSeqNum);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    return new Path(srcPath.getParent(), fileName);<a name="line.570"></a>
-<span class="sourceLineNo">571</span>  }<a name="line.571"></a>
-<span class="sourceLineNo">572</span><a name="line.572"></a>
-<span class="sourceLineNo">573</span>  static String formatRecoveredEditsFileName(final long seqid) {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    return String.format("%019d", seqid);<a name="line.574"></a>
-<span class="sourceLineNo">575</span>  }<a name="line.575"></a>
-<span class="sourceLineNo">576</span><a name="line.576"></a>
-<span class="sourceLineNo">577</span>  private static final Pattern EDITFILES_NAME_PATTERN = Pattern.compile("-?[0-9]+");<a name="line.577"></a>
-<span class="sourceLineNo">578</span>  private static final String RECOVERED_LOG_TMPFILE_SUFFIX = ".temp";<a name="line.578"></a>
-<span class="sourceLineNo">579</span><a name="line.579"></a>
-<span class="sourceLineNo">580</span>  /**<a name="line.580"></a>
-<span class="sourceLineNo">581</span>   * @param regiondir<a name="line.581"></a>
-<span class="sourceLineNo">582</span>   *          This regions directory in the filesystem.<a name="line.582"></a>
-<span class="sourceLineNo">583</span>   * @return The directory that holds recovered edits files for the region<a name="line.583"></a>
-<span class="sourceLineNo">584</span>   *         &lt;code&gt;regiondir&lt;/code&gt;<a name="line.584"></a>
-<span class="sourceLineNo">585</span>   */<a name="line.585"></a>
-<span class="sourceLineNo">586</span>  public static Path getRegionDirRecoveredEditsDir(final Path regiondir) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    return new Path(regiondir, HConstants.RECOVERED_EDITS_DIR);<a name="line.587"></a>
-<span class="sourceLineNo">588</span>  }<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span>  /**<a name="line.590"></a>
-<span class="sourceLineNo">591</span>   * Returns sorted set of edit files made by splitter, excluding files<a name="line.591"></a>
-<span class="sourceLineNo">592</span>   * with '.temp' suffix.<a name="line.592"></a>
-<span class="sourceLineNo">593</span>   *<a name="line.593"></a>
-<span class="sourceLineNo">594</span>   * @param fs<a name="line.594"></a>
-<span class="sourceLineNo">595</span>   * @param regiondir<a name="line.595"></a>
-<span class="sourceLineNo">596</span>   * @return Files in passed &lt;code&gt;regiondir&lt;/code&gt; as a sorted set.<a name="line.596"></a>
-<span class="sourceLineNo">597</span>   * @throws IOException<a name="line.597"></a>
-<span class="sourceLineNo">598</span>   */<a name="line.598"></a>
-<span class="sourceLineNo">599</span>  public static NavigableSet&lt;Path&gt; getSplitEditFilesSorted(final FileSystem fs,<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      final Path regiondir) throws IOException {<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    NavigableSet&lt;Path&gt; filesSorted = new TreeSet&lt;Path&gt;();<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    Path editsdir = getRegionDirRecoveredEditsDir(regiondir);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    if (!fs.exists(editsdir))<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      return filesSorted;<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    FileStatus[] files = FSUtils.listStatus(fs, editsdir, new PathFilter() {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      @Override<a name="line.606"></a>
-<span class="sourceLineNo">607</span>      public boolean accept(Path p) {<a name="line.607"></a>
-<span class="sourceLineNo">608</span>        boolean result = false;<a name="line.608"></a>
-<span class="sourceLineNo">609</span>        try {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>          // Return files and only files that match the editfile names pattern.<a name="line.610"></a>
-<span class="sourceLineNo">611</span>          // There can be other files in this directory other than edit files.<a name="line.611"></a>
-<span class="sourceLineNo">612</span>          // In particular, on error, we'll move aside the bad edit file giving<a name="line.612"></a>
-<span class="sourceLineNo">613</span>          // it a timestamp suffix. See moveAsideBadEditsFile.<a name="line.613"></a>
-<span class="sourceLineNo">614</span>          Matcher m = EDITFILES_NAME_PATTERN.matcher(p.getName());<a name="line.614"></a>
-<span class="sourceLineNo">615</span>          result = fs.isFile(p) &amp;&amp; m.matches();<a name="line.615"></a>
-<span class="sourceLineNo">616</span>          // Skip the file whose name ends with RECOVERED_LOG_TMPFILE_SUFFIX,<a name="line.616"></a>
-<span class="sourceLineNo">617</span>          // because it means splitwal thread is writting this file.<a name="line.617"></a>
-<span class="sourceLineNo">618</span>          if (p.getName().endsWith(RECOVERED_LOG_TMPFILE_SUFFIX)) {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>            result = false;<a name="line.619"></a>
-<span class="sourceLineNo">620</span>          }<a name="line.620"></a>
-<span class="sourceLineNo">621</span>          // Skip SeqId Files<a name="line.621"></a>
-<span class="sourceLineNo">622</span>          if (isSequenceIdFile(p)) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span>            result = false;<a name="line.623"></a>
-<span class="sourceLineNo">624</span>          }<a name="line.624"></a>
-<span class="sourceLineNo">625</span>        } catch (IOException e) {<a name="line.625"></a>
-<span class="sourceLineNo">626</span>          LOG.warn("Failed isFile check on " + p);<a name="line.626"></a>
-<span class="sourceLineNo">627</span>        }<a name="line.627"></a>
-<span class="sourceLineNo">628</span>        return result;<a name="line.628"></a>
-<span class="sourceLineNo">629</span>      }<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    });<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    if (files == null) {<a name="line.631"></a>
-<span class="sourceLineNo">632</span>      return filesSorted;<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    }<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    for (FileStatus status : files) {<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      filesSorted.add(status.getPath());<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    }<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    return filesSorted;<a name="line.637"></a>
-<span class="sourceLineNo">638</span>  }<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>   * Move aside a bad edits file.<a name="line.641"></a>
-<span class="sourceLineNo">642</span>   *<a name="line.642"></a>
-<span class="sourceLineNo">643</span>   * @param fs<a name="line.643"></a>
-<span class="sourceLineNo">644</span>   * @param edits<a name="line.644"></a>
-<span class="sourceLineNo">645</span>   *          Edits file to move aside.<a name="line.645"></a>
-<span class="sourceLineNo">646</span>   * @return The name of the moved aside file.<a name="line.646"></a>
-<span class="sourceLineNo">647</span>   * @throws IOException<a name="line.647"></a>
-<span class="sourceLineNo">648</span>   */<a name="line.648"></a>
-<span class="sourceLineNo">649</span>  public static Path moveAsideBadEditsFile(final FileSystem fs, final Path edits)<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      throws IOException {<a name="line.650"></a>
-<span class="sourceLineNo">651</span>    Path moveAsideName = new Path(edits.getParent(), edits.getName() + "."<a name="line.651"></a>
-<span class="sourceLineNo">652</span>        + System.currentTimeMillis());<a name="line.652"></a>
-<span class="sourceLineNo">653</span>    if (!fs.rename(edits, moveAsideName)) {<a name="line.653"></a>
-<span class="sourceLineNo">654</span>      LOG.warn("Rename failed from " + edits + " to " + moveAsideName);<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    }<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    return moveAsideName;<a name="line.656"></a>
-<span class="sourceLineNo">657</span>  }<a name="line.657"></a>
-<span class="sourceLineNo">658</span><a name="line.658"></a>
-<span class="sourceLineNo">659</span>  private static final String SEQUENCE_ID_FILE_SUFFIX = ".seqid";<a name="line.659"></a>
-<span class="sourceLineNo">660</span>  private static final String OLD_SEQUENCE_ID_FILE_SUFFIX = "_seqid";<a name="line.660"></a>
-<span class="sourceLineNo">661</span>  private static final int SEQUENCE_ID_FILE_SUFFIX_LENGTH = SEQUENCE_ID_FILE_SUFFIX.length();<a name="line.661"></a>
-<span class="sourceLineNo">662</span><a name="line.662"></a>
-<span class="sourceLineNo">663</span>  /**<a name="line.663"></a>
-<span class="sourceLineNo">664</span>   * Is the given file a region open sequence id file.<a name="line.664"></a>
-<span class="sourceLineNo">665</span>   */<a name="line.665"></a>
-<span class="sourceLineNo">666</span>  @VisibleForTesting<a name="line.666"></a>
-<span class="sourceLineNo">667</span>  public static boolean isSequenceIdFile(final Path file) {<a name="line.667"></a>
-<span class="sourceLineNo">668</span>    return file.getName().endsWith(SEQUENCE_ID_FILE_SUFFIX)<a name="line.668"></a>
-<span class="sourceLineNo">669</span>        || file.getName().endsWith(OLD_SEQUENCE_ID_FILE_SUFFIX);<a name="line.669"></a>
-<span class="sourceLineNo">670</span>  }<a name="line.670"></a>
+<span class="sourceLineNo">346</span>            regionMaxSeqIdInStores.put(encodedRegionNameAsStr, maxSeqIdInStores);<a name="line.346"></a>
+<span class="sourceLineNo">347</span>            lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.347"></a>
+<span class="sourceLineNo">348</span>            if (LOG.isDebugEnabled()) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>              LOG.debug("DLS Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.349"></a>
+<span class="sourceLineNo">350</span>                  TextFormat.shortDebugString(ids));<a name="line.350"></a>
+<span class="sourceLineNo">351</span>            }<a name="line.351"></a>
+<span class="sourceLineNo">352</span>          }<a name="line.352"></a>
+<span class="sourceLineNo">353</span>          if (lastFlushedSequenceId == null) {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>            lastFlushedSequenceId = -1L;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>          }<a name="line.355"></a>
+<span class="sourceLineNo">356</span>          lastFlushedSequenceIds.put(encodedRegionNameAsStr, lastFlushedSequenceId);<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        }<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        if (lastFlushedSequenceId &gt;= entry.getKey().getSequenceId()) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>          editsSkipped++;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>          continue;<a name="line.360"></a>
+<span class="sourceLineNo">361</span>        }<a name="line.361"></a>
+<span class="sourceLineNo">362</span>        entryBuffers.appendEntry(entry);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        editsCount++;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>        int moreWritersFromLastCheck = this.getNumOpenWriters() - numOpenedFilesLastCheck;<a name="line.364"></a>
+<span class="sourceLineNo">365</span>        // If sufficient edits have passed, check if we should report progress.<a name="line.365"></a>
+<span class="sourceLineNo">366</span>        if (editsCount % interval == 0<a name="line.366"></a>
+<span class="sourceLineNo">367</span>            || moreWritersFromLastCheck &gt; numOpenedFilesBeforeReporting) {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>          numOpenedFilesLastCheck = this.getNumOpenWriters();<a name="line.368"></a>
+<span class="sourceLineNo">369</span>          String countsStr = (editsCount - (editsSkipped + outputSink.getSkippedEdits()))<a name="line.369"></a>
+<span class="sourceLineNo">370</span>              + " edits, skipped " + editsSkipped + " edits.";<a name="line.370"></a>
+<span class="sourceLineNo">371</span>          status.setStatus("Split " + countsStr);<a name="line.371"></a>
+<span class="sourceLineNo">372</span>          if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>            progress_failed = true;<a name="line.373"></a>
+<span class="sourceLineNo">374</span>            return false;<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>      }<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    } catch (InterruptedException ie) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      IOException iie = new InterruptedIOException();<a name="line.379"></a>
+<span class="sourceLineNo">380</span>      iie.initCause(ie);<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      throw iie;<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    } catch (CorruptedLogFileException e) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      LOG.warn("Could not parse, corrupted log file " + logPath, e);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      csm.getSplitLogWorkerCoordination().markCorrupted(rootDir,<a name="line.384"></a>
+<span class="sourceLineNo">385</span>        logfile.getPath().getName(), fs);<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      isCorrupted = true;<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    } catch (IOException e) {<a name="line.387"></a>
+<span class="sourceLineNo">388</span>      e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      throw e;<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    } finally {<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      LOG.debug("Finishing writing output logs and closing down.");<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      try {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>        if (null != in) {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>          in.close();<a name="line.394"></a>
+<span class="sourceLineNo">395</span>        }<a name="line.395"></a>
+<span class="sourceLineNo">396</span>      } catch (IOException exception) {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>        LOG.warn("Could not close wal reader: " + exception.getMessage());<a name="line.397"></a>
+<span class="sourceLineNo">398</span>        LOG.debug("exception details", exception);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      }<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      try {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>        if (outputSinkStarted) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>          // Set progress_failed to true as the immediate following statement will reset its value<a name="line.402"></a>
+<span class="sourceLineNo">403</span>          // when finishWritingAndClose() throws exception, progress_failed has the right value<a name="line.403"></a>
+<span class="sourceLineNo">404</span>          progress_failed = true;<a name="line.404"></a>
+<span class="sourceLineNo">405</span>          progress_failed = outputSink.finishWritingAndClose() == null;<a name="line.405"></a>
+<span class="sourceLineNo">406</span>        }<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      } finally {<a name="line.407"></a>
+<span class="sourceLineNo">408</span>        String msg =<a name="line.408"></a>
+<span class="sourceLineNo">409</span>            "Processed " + editsCount + " edits across " + outputSink.getNumberOfRecoveredRegions()<a name="line.409"></a>
+<span class="sourceLineNo">410</span>                + " regions; edits skipped=" + editsSkipped + "; log file=" + logPath +<a name="line.410"></a>
+<span class="sourceLineNo">411</span>                ", length=" + logfile.getLen() + // See if length got updated post lease recovery<a name="line.411"></a>
+<span class="sourceLineNo">412</span>                ", corrupted=" + isCorrupted + ", progress failed=" + progress_failed;<a name="line.412"></a>
+<span class="sourceLineNo">413</span>        LOG.info(msg);<a name="line.413"></a>
+<span class="sourceLineNo">414</span>        status.markComplete(msg);<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>    return !progress_failed;<a name="line.417"></a>
+<span class="sourceLineNo">418</span>  }<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>   * Completes the work done by splitLogFile by archiving logs<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   * &lt;p&gt;<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   * It is invoked by SplitLogManager once it knows that one of the<a name="line.423"></a>
+<span class="sourceLineNo">424</span>   * SplitLogWorkers have completed the splitLogFile() part. If the master<a name="line.424"></a>
+<span class="sourceLineNo">425</span>   * crashes then this function might get called multiple times.<a name="line.425"></a>
+<span class="sourceLineNo">426</span>   * &lt;p&gt;<a name="line.426"></a>
+<span class="sourceLineNo">427</span>   * @param logfile<a name="line.427"></a>
+<span class="sourceLineNo">428</span>   * @param conf<a name="line.428"></a>
+<span class="sourceLineNo">429</span>   * @throws IOException<a name="line.429"></a>
+<span class="sourceLineNo">430</span>   */<a name="line.430"></a>
+<span class="sourceLineNo">431</span>  public static void finishSplitLogFile(String logfile,<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      Configuration conf)  throws IOException {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    Path rootdir = FSUtils.getRootDir(conf);<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    Path oldLogDir = new Path(rootdir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.434"></a>
+<span class="sourceLineNo">435</span>    Path logPath;<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    if (FSUtils.isStartingWithPath(rootdir, logfile)) {<a name="line.436"></a>
+<span class="sourceLineNo">437</span>      logPath = new Path(logfile);<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    } else {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>      logPath = new Path(rootdir, logfile);<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    }<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    finishSplitLogFile(rootdir, oldLogDir, logPath, conf);<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>  private static void finishSplitLogFile(Path rootdir, Path oldLogDir,<a name="line.444"></a>
+<span class="sourceLineNo">445</span>      Path logPath, Configuration conf) throws IOException {<a name="line.445"></a>
+<span class="sourceLineNo">446</span>    List&lt;Path&gt; processedLogs = new ArrayList&lt;Path&gt;();<a name="line.446"></a>
+<span class="sourceLineNo">447</span>    List&lt;Path&gt; corruptedLogs = new ArrayList&lt;Path&gt;();<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    FileSystem fs;<a name="line.448"></a>
+<span class="sourceLineNo">449</span>    fs = rootdir.getFileSystem(conf);<a name="line.449"></a>
+<span class="sourceLineNo">450</span>    if (ZKSplitLog.isCorrupted(rootdir, logPath.getName(), fs)) {<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      corruptedLogs.add(logPath);<a name="line.451"></a>
+<span class="sourceLineNo">452</span>    } else {<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      processedLogs.add(logPath);<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    }<a name="line.454"></a>
+<span class="sourceLineNo">455</span>    archiveLogs(corruptedLogs, processedLogs, oldLogDir, fs, conf);<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    Path stagingDir = ZKSplitLog.getSplitLogDir(rootdir, logPath.getName());<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    fs.delete(stagingDir, true);<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>  /**<a name="line.460"></a>
+<span class="sourceLineNo">461</span>   * Moves processed logs to a oldLogDir after successful processing Moves<a name="line.461"></a>
+<span class="sourceLineNo">462</span>   * corrupted logs (any log that couldn't be successfully parsed to corruptDir<a name="line.462"></a>
+<span class="sourceLineNo">463</span>   * (.corrupt) for later investigation<a name="line.463"></a>
+<span class="sourceLineNo">464</span>   *<a name="line.464"></a>
+<span class="sourceLineNo">465</span>   * @param corruptedLogs<a name="line.465"></a>
+<span class="sourceLineNo">466</span>   * @param processedLogs<a name="line.466"></a>
+<span class="sourceLineNo">467</span>   * @param oldLogDir<a name="line.467"></a>
+<span class="sourceLineNo">468</span>   * @param fs<a name="line.468"></a>
+<span class="sourceLineNo">469</span>   * @param conf<a name="line.469"></a>
+<span class="sourceLineNo">470</span>   * @throws IOException<a name="line.470"></a>
+<span class="sourceLineNo">471</span>   */<a name="line.471"></a>
+<span class="sourceLineNo">472</span>  private static void archiveLogs(<a name="line.472"></a>
+<span class="sourceLineNo">473</span>      final List&lt;Path&gt; corruptedLogs,<a name="line.473"></a>
+<span class="sourceLineNo">474</span>      final List&lt;Path&gt; processedLogs, final Path oldLogDir,<a name="line.474"></a>
+<span class="sourceLineNo">475</span>      final FileSystem fs, final Configuration conf) throws IOException {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    final Path corruptDir = new Path(FSUtils.getRootDir(conf), conf.get(<a name="line.476"></a>
+<span class="sourceLineNo">477</span>        "hbase.regionserver.hlog.splitlog.corrupt.dir",  HConstants.CORRUPT_DIR_NAME));<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>    if (!fs.mkdirs(corruptDir)) {<a name="line.479"></a>
+<span class="sourceLineNo">480</span>      LOG.info("Unable to mkdir " + corruptDir);<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    }<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    fs.mkdirs(oldLogDir);<a name="line.482"></a>
+<span class="sourceLineNo">483</span><a name="line.483"></a>
+<span class="sourceLineNo">484</span>    // this method can get restarted or called multiple times for archiving<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    // the same log files.<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    for (Path corrupted : corruptedLogs) {<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      Path p = new Path(corruptDir, corrupted.getName());<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      if (fs.exists(corrupted)) {<a name="line.488"></a>
+<span class="sourceLineNo">489</span>        if (!fs.rename(corrupted, p)) {<a name="line.489"></a>
+<span class="sourceLineNo">490</span>          LOG.warn("Unable to move corrupted log " + corrupted + " to " + p);<a name="line.490"></a>
+<span class="sourceLineNo">491</span>        } else {<a name="line.491"></a>
+<span class="sourceLineNo">492</span>          LOG.warn("Moved corrupted log " + corrupted + " to " + p);<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>    }<a name="line.495"></a>
+<span class="sourceLineNo">496</span><a name="line.496"></a>
+<span class="sourceLineNo">497</span>    for (Path p : processedLogs) {<a name="line.497"></a>
+<span class="sourceLineNo">498</span>      Path newPath = FSHLog.getWALArchivePath(oldLogDir, p);<a name="line.498"></a>
+<span class="sourceLineNo">499</span>      if (fs.exists(p)) {<a name="line.499"></a>
+<span class="sourceLineNo">500</span>        if (!FSUtils.renameAndSetModifyTime(fs, p, newPath)) {<a name="line.500"></a>
+<span class="sourceLineNo">501</span>          LOG.warn("Unable to move  " + p + " to " + newPath);<a name="line.501"></a>
+<span class="sourceLineNo">502</span>        } else {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>          LOG.info("Archived processed log " + p + " to " + newPath);<a name="line.503"></a>
+<span class="sourceLineNo">504</span>        }<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      }<a name="line.505"></a>
+<span class="sourceLineNo">506</span>    }<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>  /**<a name="line.509"></a>
+<span class="sourceLineNo">510</span>   * Path to a file under RECOVERED_EDITS_DIR directory of the region found in<a name="line.510"></a>
+<span class="sourceLineNo">511</span>   * &lt;code&gt;logEntry&lt;/code&gt; named for the sequenceid in the passed<a name="line.511"></a>
+<span class="sourceLineNo">512</span>   * &lt;code&gt;logEntry&lt;/code&gt;: e.g. /hbase/some_table/2323432434/recovered.edits/2332.<a name="line.512"></a>
+<span class="sourceLineNo">513</span>   * This method also ensures existence of RECOVERED_EDITS_DIR under the region<a name="line.513"></a>
+<span class="sourceLineNo">514</span>   * creating it if necessary.<a name="line.514"></a>
+<span class="sourceLineNo">515</span>   * @param fs<a name="line.515"></a>
+<span class="sourceLineNo">516</span>   * @param logEntry<a name="line.516"></a>
+<span class="sourceLineNo">517</span>   * @param rootDir HBase root dir.<a name="line.517"></a>
+<span class="sourceLineNo">518</span>   * @param fileBeingSplit the file being split currently. Used to generate tmp file name.<a name="line.518"></a>
+<span class="sourceLineNo">519</span>   * @return Path to file into which to dump split log edits.<a name="line.519"></a>
+<span class="sourceLineNo">520</span>   * @throws IOException<a name="line.520"></a>
+<span class="sourceLineNo">521</span>   */<a name="line.521"></a>
+<span class="sourceLineNo">522</span>  @SuppressWarnings("deprecation")<a name="line.522"></a>
+<span class="sourceLineNo">523</span>  private static Path getRegionSplitEditsPath(final FileSystem fs,<a name="line.523"></a>
+<span class="sourceLineNo">524</span>      final Entry logEntry, final Path rootDir, FileStatus fileBeingSplit)<a name="line.524"></a>
+<span class="sourceLineNo">525</span>  throws IOException {<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    Path tableDir = FSUtils.getTableDir(rootDir, logEntry.getKey().getTablename());<a name="line.526"></a>
+<span class="sourceLineNo">527</span>    String encodedRegionName = Bytes.toString(logEntry.getKey().getEncodedRegionName());<a name="line.527"></a>
+<span class="sourceLineNo">528</span>    Path regiondir = HRegion.getRegionDir(tableDir, encodedRegionName);<a name="line.528"></a>
+<span class="sourceLineNo">529</span>    Path dir = getRegionDirRecoveredEditsDir(regiondir);<a name="line.529"></a>
+<span class="sourceLineNo">530</span><a name="line.530"></a>
+<span class="sourceLineNo">531</span>    if (!fs.exists(regiondir)) {<a name="line.531"></a>
+<span class="sourceLineNo">532</span>      LOG.info("This region's directory doesn't exist: "<a name="line.532"></a>
+<span class="sourceLineNo">533</span>          + regiondir.toString() + ". It is very likely that it was" +<a name="line.533"></a>
+<span class="sourceLineNo">534</span>          " already split so it's safe to discard those edits.");<a name="line.534"></a>
+<span class="sourceLineNo">535</span>      return null;<a name="line.535"></a>
+<span class="sourceLineNo">536</span>    }<a name="line.536"></a>
+<span class="sourceLineNo">537</span>    if (fs.exists(dir) &amp;&amp; fs.isFile(dir)) {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      Path tmp = new Path("/tmp");<a name="line.538"></a>
+<span class="sourceLineNo">539</span>      if (!fs.exists(tmp)) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span>        fs.mkdirs(tmp);<a name="line.540"></a>
+<span class="sourceLineNo">541</span>      }<a name="line.541"></a>
+<span class="sourceLineNo">542</span>      tmp = new Path(tmp,<a name="line.542"></a>
+<span class="sourceLineNo">543</span>        HConstants.RECOVERED_EDITS_DIR + "_" + encodedRegionName);<a name="line.543"></a>
+<span class="sourceLineNo">544</span>      LOG.warn("Found existing old file: " + dir + ". It could be some "<a name="line.544"></a>
+<span class="sourceLineNo">545</span>        + "leftover of an old installation. It should be a folder instead. "<a name="line.545"></a>
+<span class="sourceLineNo">546</span>        + "So moving it to " + tmp);<a name="line.546"></a>
+<span class="sourceLineNo">547</span>      if (!fs.rename(dir, tmp)) {<a name="line.547"></a>
+<span class="sourceLineNo">548</span>        LOG.warn("Failed to sideline old file " + dir);<a name="line.548"></a>
+<span class="sourceLineNo">549</span>      }<a name="line.549"></a>
+<span class="sourceLineNo">550</span>    }<a name="line.550"></a>
+<span class="sourceLineNo">551</span><a name="line.551"></a>
+<span class="sourceLineNo">552</span>    if (!fs.exists(dir) &amp;&amp; !fs.mkdirs(dir)) {<a name="line.55

<TRUNCATED>

[44/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/org/apache/hadoop/hbase/client/Increment.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/Increment.html b/devapidocs/org/apache/hadoop/hbase/client/Increment.html
index 8dc1466..6fb7a0a 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/Increment.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/Increment.html
@@ -152,10 +152,6 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/Increment.html#HEAP_OVERHEAD">HEAP_OVERHEAD</a></strong></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>private static <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/Increment.html#RETURN_RESULTS">RETURN_RESULTS</a></strong></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/io/TimeRange.html" title="class in org.apache.hadoop.hbase.io">TimeRange</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/Increment.html#tr">tr</a></strong></code>&nbsp;</td>
 </tr>
@@ -402,23 +398,13 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <pre>private static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.54">HEAP_OVERHEAD</a></pre>
 </li>
 </ul>
-<a name="RETURN_RESULTS">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>RETURN_RESULTS</h4>
-<pre>private static final&nbsp;<a href="http://docs.oracle.com/javase/7/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/client/Increment.html#line.56">RETURN_RESULTS</a></pre>
-<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.client.Increment.RETURN_RESULTS">Constant Field Values</a></dd></dl>
-</li>
-</ul>
 <a name="tr">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>tr</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/TimeRange.html" title="class in org.apache.hadoop.hbase.io">TimeRange</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.58">tr</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/TimeRange.html" title="class in org.apache.hadoop.hbase.io">TimeRange</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.55">tr</a></pre>
 </li>
 </ul>
 </li>
@@ -435,7 +421,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>Increment</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.66">Increment</a>(byte[]&nbsp;row)</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.63">Increment</a>(byte[]&nbsp;row)</pre>
 <div class="block">Create a Increment operation for the specified row.
  <p>
  At least one column must be incremented.</div>
@@ -448,7 +434,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>Increment</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.76">Increment</a>(byte[]&nbsp;row,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.73">Increment</a>(byte[]&nbsp;row,
          int&nbsp;offset,
          int&nbsp;length)</pre>
 <div class="block">Create a Increment operation for the specified row.
@@ -463,7 +449,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockListLast">
 <li class="blockList">
 <h4>Increment</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.84">Increment</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;i)</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.81">Increment</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;i)</pre>
 <div class="block">Copy constructor</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>i</code> - </dd></dl>
 </li>
@@ -482,7 +468,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>add</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.100">add</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.97">add</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)
               throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Add the specified KeyValue to this operation.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>cell</code> - individual Cell</dd>
@@ -497,7 +483,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>addColumn</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.125">addColumn</a>(byte[]&nbsp;family,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.122">addColumn</a>(byte[]&nbsp;family,
                   byte[]&nbsp;qualifier,
                   long&nbsp;amount)</pre>
 <div class="block">Increment the column from the specific family with the specified qualifier
@@ -514,7 +500,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>getTimeRange</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/TimeRange.html" title="class in org.apache.hadoop.hbase.io">TimeRange</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.143">getTimeRange</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/TimeRange.html" title="class in org.apache.hadoop.hbase.io">TimeRange</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.140">getTimeRange</a>()</pre>
 <div class="block">Gets the TimeRange used for this increment.</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>TimeRange</dd></dl>
 </li>
@@ -525,7 +511,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>setTimeRange</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.161">setTimeRange</a>(long&nbsp;minStamp,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.158">setTimeRange</a>(long&nbsp;minStamp,
                      long&nbsp;maxStamp)
                        throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Sets the TimeRange to be used on the Get for this increment.
@@ -548,8 +534,11 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>setReturnResults</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.172">setReturnResults</a>(boolean&nbsp;returnResults)</pre>
-<dl><dt><span class="strong">Parameters:</span></dt><dd><code>returnResults</code> - True (default) if the increment operation should return the results. A
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.169">setReturnResults</a>(boolean&nbsp;returnResults)</pre>
+<dl>
+<dt><strong>Overrides:</strong></dt>
+<dd><code><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#setReturnResults(boolean)">setReturnResults</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a></code></dd>
+<dt><span class="strong">Parameters:</span></dt><dd><code>returnResults</code> - True (default) if the increment operation should return the results. A
           client that is not interested in the result can save network bandwidth setting this
           to false.</dd></dl>
 </li>
@@ -560,8 +549,11 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>isReturnResults</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.180">isReturnResults</a>()</pre>
-<dl><dt><span class="strong">Returns:</span></dt><dd>current value for returnResults</dd></dl>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.178">isReturnResults</a>()</pre>
+<dl>
+<dt><strong>Overrides:</strong></dt>
+<dd><code><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#isReturnResults()">isReturnResults</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a></code></dd>
+<dt><span class="strong">Returns:</span></dt><dd>current setting for returnResults</dd></dl>
 </li>
 </ul>
 <a name="numFamilies()">
@@ -570,7 +562,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>numFamilies</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.190">numFamilies</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.187">numFamilies</a>()</pre>
 <div class="block">Method for retrieving the number of families to increment from</div>
 <dl>
 <dt><strong>Overrides:</strong></dt>
@@ -584,7 +576,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>hasFamilies</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.198">hasFamilies</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.195">hasFamilies</a>()</pre>
 <div class="block">Method for checking if any families have been inserted into this Increment</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>true if familyMap is non empty false otherwise</dd></dl>
 </li>
@@ -595,7 +587,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>getFamilyMapOfLongs</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a>&lt;byte[],<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.210">getFamilyMapOfLongs</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a>&lt;byte[],<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.207">getFamilyMapOfLongs</a>()</pre>
 <div class="block">Before 0.95, when you called Increment#getFamilyMap(), you got back
  a map of families to a list of Longs.  Now, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#getFamilyCellMap()"><code>Mutation.getFamilyCellMap()</code></a> returns
  families by list of Cells.  This method has been added so you can have the
@@ -610,7 +602,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>toString</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/client/Increment.html#line.229">toString</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/client/Increment.html#line.226">toString</a>()</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Operation.html#toString()">Operation</a></code></strong></div>
 <div class="block">Produces a string representation of this Operation. It defaults to a JSON
  representation, but falls back to a string representation of the
@@ -627,7 +619,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>compareTo</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.271">compareTo</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Row.html" title="interface in org.apache.hadoop.hbase.client">Row</a>&nbsp;i)</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.268">compareTo</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Row.html" title="interface in org.apache.hadoop.hbase.client">Row</a>&nbsp;i)</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html?is-external=true#compareTo(T)" title="class or interface in java.lang">compareTo</a></code>&nbsp;in interface&nbsp;<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Row.html" title="interface in org.apache.hadoop.hbase.client">Row</a>&gt;</code></dd>
@@ -642,7 +634,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>hashCode</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.277">hashCode</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.274">hashCode</a>()</pre>
 <dl>
 <dt><strong>Overrides:</strong></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a></code>&nbsp;in class&nbsp;<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
@@ -655,7 +647,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>equals</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.284">equals</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;obj)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.281">equals</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;obj)</pre>
 <dl>
 <dt><strong>Overrides:</strong></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a></code>&nbsp;in class&nbsp;<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
@@ -668,7 +660,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>extraHeapSize</h4>
-<pre>protected&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.297">extraHeapSize</a>()</pre>
+<pre>protected&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.294">extraHeapSize</a>()</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#extraHeapSize()">Mutation</a></code></strong></div>
 <div class="block">Subclasses should override this method to add the heap size of their own fields.</div>
 <dl>
@@ -683,7 +675,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>setAttribute</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.302">setAttribute</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.299">setAttribute</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
                      byte[]&nbsp;value)</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Attributes.html#setAttribute(java.lang.String,%20byte[])">Attributes</a></code></strong></div>
 <div class="block">Sets an attribute.
@@ -703,7 +695,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>setId</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.307">setId</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;id)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.304">setId</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;id)</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/OperationWithAttributes.html#setId(java.lang.String)">OperationWithAttributes</a></code></strong></div>
 <div class="block">This method allows you to set an identifier on an operation. The original
  motivation for this was to allow the identifier to be used in slow query
@@ -722,7 +714,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>setDurability</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.312">setDurability</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;d)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.309">setDurability</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;d)</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#setDurability(org.apache.hadoop.hbase.client.Durability)">Mutation</a></code></strong></div>
 <div class="block">Set the durability for this mutation</div>
 <dl>
@@ -737,7 +729,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>setFamilyCellMap</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.317">setFamilyCellMap</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a>&lt;byte[],<a href="http://docs.oracle.com/javase/7/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;map)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.314">setFamilyCellMap</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a>&lt;byte[],<a href="http://docs.oracle.com/javase/7/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;map)</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#setFamilyCellMap(java.util.NavigableMap)">Mutation</a></code></strong></div>
 <div class="block">Method for setting the put's familyMap</div>
 <dl>
@@ -752,7 +744,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>setClusterIds</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.322">setClusterIds</a>(<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a>&gt;&nbsp;clusterIds)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.319">setClusterIds</a>(<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a>&gt;&nbsp;clusterIds)</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#setClusterIds(java.util.List)">Mutation</a></code></strong></div>
 <div class="block">Marks that the clusters with the given clusterIds have consumed the mutation</div>
 <dl>
@@ -767,7 +759,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>setCellVisibility</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.327">setCellVisibility</a>(<a href="../../../../../org/apache/hadoop/hbase/security/visibility/CellVisibility.html" title="class in org.apache.hadoop.hbase.security.visibility">CellVisibility</a>&nbsp;expression)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.324">setCellVisibility</a>(<a href="../../../../../org/apache/hadoop/hbase/security/visibility/CellVisibility.html" title="class in org.apache.hadoop.hbase.security.visibility">CellVisibility</a>&nbsp;expression)</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#setCellVisibility(org.apache.hadoop.hbase.security.visibility.CellVisibility)">Mutation</a></code></strong></div>
 <div class="block">Sets the visibility expression associated with cells in this Mutation.
  It is illegal to set <code>CellVisibility</code> on <code>Delete</code> mutation.</div>
@@ -783,7 +775,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>setACL</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.332">setACL</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.329">setACL</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
                <a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&nbsp;perms)</pre>
 <dl>
 <dt><strong>Overrides:</strong></dt>
@@ -797,7 +789,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>setACL</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.337">setACL</a>(<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;&nbsp;perms)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.334">setACL</a>(<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;&nbsp;perms)</pre>
 <dl>
 <dt><strong>Overrides:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#setACL(java.util.Map)">setACL</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a></code></dd>
@@ -810,7 +802,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockListLast">
 <li class="blockList">
 <h4>setTTL</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.342">setTTL</a>(long&nbsp;ttl)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.339">setTTL</a>(long&nbsp;ttl)</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#setTTL(long)">Mutation</a></code></strong></div>
 <div class="block">Set the TTL desired for the result of the mutation, in milliseconds.</div>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/org/apache/hadoop/hbase/client/Mutation.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/Mutation.html b/devapidocs/org/apache/hadoop/hbase/client/Mutation.html
index ad93d1b..db3229b 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/Mutation.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/Mutation.html
@@ -161,10 +161,14 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 </td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>private static <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#RETURN_RESULTS">RETURN_RESULTS</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>protected byte[]</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#row">row</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#ts">ts</a></strong></code>&nbsp;</td>
 </tr>
@@ -330,42 +334,50 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 </td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>protected boolean</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#isReturnResults()">isReturnResults</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#numFamilies()">numFamilies</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#setACL(java.util.Map)">setACL</a></strong>(<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;&nbsp;perms)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#setACL(java.lang.String,%20org.apache.hadoop.hbase.security.access.Permission)">setACL</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
             <a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&nbsp;perms)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#setCellVisibility(org.apache.hadoop.hbase.security.visibility.CellVisibility)">setCellVisibility</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/security/visibility/CellVisibility.html" title="class in org.apache.hadoop.hbase.security.visibility">CellVisibility</a>&nbsp;expression)</code>
 <div class="block">Sets the visibility expression associated with cells in this Mutation.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#setClusterIds(java.util.List)">setClusterIds</a></strong>(<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a>&gt;&nbsp;clusterIds)</code>
 <div class="block">Marks that the clusters with the given clusterIds have consumed the mutation</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#setDurability(org.apache.hadoop.hbase.client.Durability)">setDurability</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;d)</code>
 <div class="block">Set the durability for this mutation</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#setFamilyCellMap(java.util.NavigableMap)">setFamilyCellMap</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a>&lt;byte[],<a href="http://docs.oracle.com/javase/7/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;map)</code>
 <div class="block">Method for setting the put's familyMap</div>
 </td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#setReturnResults(boolean)">setReturnResults</a></strong>(boolean&nbsp;returnResults)</code>&nbsp;</td>
+</tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#setTTL(long)">setTTL</a></strong>(long&nbsp;ttl)</code>
@@ -452,13 +464,23 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.client.Mutation.OP_ATTRIBUTE_TTL">Constant Field Values</a></dd></dl>
 </li>
 </ul>
+<a name="RETURN_RESULTS">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>RETURN_RESULTS</h4>
+<pre>private static final&nbsp;<a href="http://docs.oracle.com/javase/7/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/client/Mutation.html#line.85">RETURN_RESULTS</a></pre>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.client.Mutation.RETURN_RESULTS">Constant Field Values</a></dd></dl>
+</li>
+</ul>
 <a name="row">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>row</h4>
-<pre>protected&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.85">row</a></pre>
+<pre>protected&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.87">row</a></pre>
 </li>
 </ul>
 <a name="ts">
@@ -467,7 +489,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>ts</h4>
-<pre>protected&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.86">ts</a></pre>
+<pre>protected&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.88">ts</a></pre>
 </li>
 </ul>
 <a name="durability">
@@ -476,7 +498,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>durability</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.87">durability</a></pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.89">durability</a></pre>
 </li>
 </ul>
 <a name="familyMap">
@@ -485,7 +507,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockListLast">
 <li class="blockList">
 <h4>familyMap</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a>&lt;byte[],<a href="http://docs.oracle.com/javase/7/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; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.90">familyMap</a></pre>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a>&lt;byte[],<a href="http://docs.oracle.com/javase/7/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; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.92">familyMap</a></pre>
 </li>
 </ul>
 </li>
@@ -519,7 +541,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>cellScanner</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/CellScanner.html" title="interface in org.apache.hadoop.hbase">CellScanner</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.94">cellScanner</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/CellScanner.html" title="interface in org.apache.hadoop.hbase">CellScanner</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.96">cellScanner</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/CellScannable.html#cellScanner()">cellScanner</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/CellScannable.html" title="interface in org.apache.hadoop.hbase">CellScannable</a></code></dd>
@@ -532,7 +554,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>getCellList</h4>
-<pre><a href="http://docs.oracle.com/javase/7/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/client/Mutation.html#line.105">getCellList</a>(byte[]&nbsp;family)</pre>
+<pre><a href="http://docs.oracle.com/javase/7/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/client/Mutation.html#line.107">getCellList</a>(byte[]&nbsp;family)</pre>
 <div class="block">Creates an empty list if one doesn't exist for the given column family
  or else it returns the associated list of Cell objects.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>family</code> - column family</dd>
@@ -545,7 +567,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>createPutKeyValue</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/KeyValue.html" title="class in org.apache.hadoop.hbase">KeyValue</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.118">createPutKeyValue</a>(byte[]&nbsp;family,
+<pre><a href="../../../../../org/apache/hadoop/hbase/KeyValue.html" title="class in org.apache.hadoop.hbase">KeyValue</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.120">createPutKeyValue</a>(byte[]&nbsp;family,
                          byte[]&nbsp;qualifier,
                          long&nbsp;ts,
                          byte[]&nbsp;value)</pre>
@@ -557,7 +579,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>createPutKeyValue</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/KeyValue.html" title="class in org.apache.hadoop.hbase">KeyValue</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.131">createPutKeyValue</a>(byte[]&nbsp;family,
+<pre><a href="../../../../../org/apache/hadoop/hbase/KeyValue.html" title="class in org.apache.hadoop.hbase">KeyValue</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.133">createPutKeyValue</a>(byte[]&nbsp;family,
                          byte[]&nbsp;qualifier,
                          long&nbsp;ts,
                          byte[]&nbsp;value,
@@ -573,7 +595,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>createPutKeyValue</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/KeyValue.html" title="class in org.apache.hadoop.hbase">KeyValue</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.141">createPutKeyValue</a>(byte[]&nbsp;family,
+<pre><a href="../../../../../org/apache/hadoop/hbase/KeyValue.html" title="class in org.apache.hadoop.hbase">KeyValue</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.143">createPutKeyValue</a>(byte[]&nbsp;family,
                          <a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;qualifier,
                          long&nbsp;ts,
                          <a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;value,
@@ -586,7 +608,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>getFingerprint</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.155">getFingerprint</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.157">getFingerprint</a>()</pre>
 <div class="block">Compile the column family (i.e. schema) information
  into a Map. Useful for parsing and aggregation by debugging,
  logging, and administration tools.</div>
@@ -602,7 +624,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>toMap</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.175">toMap</a>(int&nbsp;maxCols)</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.177">toMap</a>(int&nbsp;maxCols)</pre>
 <div class="block">Compile the details beyond the scope of getFingerprint (row, columns,
  timestamps, etc.) into a Map along with the fingerprinted information.
  Useful for debugging, logging, and administration tools.</div>
@@ -619,7 +641,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>cellToStringMap</h4>
-<pre>private static&nbsp;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.217">cellToStringMap</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;c)</pre>
+<pre>private static&nbsp;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.219">cellToStringMap</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;c)</pre>
 </li>
 </ul>
 <a name="setDurability(org.apache.hadoop.hbase.client.Durability)">
@@ -628,7 +650,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>setDurability</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.238">setDurability</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;d)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.240">setDurability</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;d)</pre>
 <div class="block">Set the durability for this mutation</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>d</code> - </dd></dl>
 </li>
@@ -639,7 +661,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>getDurability</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.244">getDurability</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.246">getDurability</a>()</pre>
 <div class="block">Get the current durability</div>
 </li>
 </ul>
@@ -649,7 +671,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>getFamilyCellMap</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a>&lt;byte[],<a href="http://docs.oracle.com/javase/7/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;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.252">getFamilyCellMap</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a>&lt;byte[],<a href="http://docs.oracle.com/javase/7/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;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.254">getFamilyCellMap</a>()</pre>
 <div class="block">Method for retrieving the put's familyMap</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>familyMap</dd></dl>
 </li>
@@ -660,7 +682,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>setFamilyCellMap</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.259">setFamilyCellMap</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a>&lt;byte[],<a href="http://docs.oracle.com/javase/7/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;map)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.261">setFamilyCellMap</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a>&lt;byte[],<a href="http://docs.oracle.com/javase/7/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;map)</pre>
 <div class="block">Method for setting the put's familyMap</div>
 </li>
 </ul>
@@ -670,7 +692,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>isEmpty</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.270">isEmpty</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.272">isEmpty</a>()</pre>
 <div class="block">Method to check if the familyMap is empty</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>true if empty, false otherwise</dd></dl>
 </li>
@@ -681,7 +703,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>getRow</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.279">getRow</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.281">getRow</a>()</pre>
 <div class="block">Method for retrieving the delete's row</div>
 <dl>
 <dt><strong>Specified by:</strong></dt>
@@ -695,7 +717,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>compareTo</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.284">compareTo</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Row.html" title="interface in org.apache.hadoop.hbase.client">Row</a>&nbsp;d)</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.286">compareTo</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Row.html" title="interface in org.apache.hadoop.hbase.client">Row</a>&nbsp;d)</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html?is-external=true#compareTo(T)" title="class or interface in java.lang">compareTo</a></code>&nbsp;in interface&nbsp;<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Row.html" title="interface in org.apache.hadoop.hbase.client">Row</a>&gt;</code></dd>
@@ -708,7 +730,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>getTimeStamp</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.292">getTimeStamp</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.294">getTimeStamp</a>()</pre>
 <div class="block">Method for retrieving the timestamp</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>timestamp</dd></dl>
 </li>
@@ -719,7 +741,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>setClusterIds</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.300">setClusterIds</a>(<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a>&gt;&nbsp;clusterIds)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.302">setClusterIds</a>(<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a>&gt;&nbsp;clusterIds)</pre>
 <div class="block">Marks that the clusters with the given clusterIds have consumed the mutation</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>clusterIds</code> - of the clusters that have consumed the mutation</dd></dl>
 </li>
@@ -730,7 +752,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>getClusterIds</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.314">getClusterIds</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.316">getClusterIds</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>the set of clusterIds that have consumed the mutation</dd></dl>
 </li>
 </ul>
@@ -740,7 +762,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>setCellVisibility</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.332">setCellVisibility</a>(<a href="../../../../../org/apache/hadoop/hbase/security/visibility/CellVisibility.html" title="class in org.apache.hadoop.hbase.security.visibility">CellVisibility</a>&nbsp;expression)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.334">setCellVisibility</a>(<a href="../../../../../org/apache/hadoop/hbase/security/visibility/CellVisibility.html" title="class in org.apache.hadoop.hbase.security.visibility">CellVisibility</a>&nbsp;expression)</pre>
 <div class="block">Sets the visibility expression associated with cells in this Mutation.
  It is illegal to set <code>CellVisibility</code> on <code>Delete</code> mutation.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>expression</code> - </dd></dl>
@@ -752,7 +774,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>getCellVisibility</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/visibility/CellVisibility.html" title="class in org.apache.hadoop.hbase.security.visibility">CellVisibility</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.342">getCellVisibility</a>()
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/visibility/CellVisibility.html" title="class in org.apache.hadoop.hbase.security.visibility">CellVisibility</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.344">getCellVisibility</a>()
                                  throws <a href="../../../../../org/apache/hadoop/hbase/exceptions/DeserializationException.html" title="class in org.apache.hadoop.hbase.exceptions">DeserializationException</a></pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>CellVisibility associated with cells in this Mutation.</dd>
 <dt><span class="strong">Throws:</span></dt>
@@ -765,7 +787,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>size</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.352">size</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.354">size</a>()</pre>
 <div class="block">Number of KeyValues carried by this Mutation.</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>the total number of KeyValues</dd></dl>
 </li>
@@ -776,7 +798,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>numFamilies</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.363">numFamilies</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.365">numFamilies</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>the number of different families</dd></dl>
 </li>
 </ul>
@@ -786,7 +808,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>heapSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.371">heapSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.373">heapSize</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html#heapSize()">heapSize</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a></code></dd>
@@ -799,7 +821,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>getACL</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.404">getACL</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.406">getACL</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>The serialized ACL for this operation, or null if none</dd></dl>
 </li>
 </ul>
@@ -809,7 +831,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>setACL</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.412">setACL</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.414">setACL</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
               <a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&nbsp;perms)</pre>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>user</code> - User short name</dd><dd><code>perms</code> - Permissions for the user</dd></dl>
 </li>
@@ -820,7 +842,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>setACL</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.421">setACL</a>(<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;&nbsp;perms)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.423">setACL</a>(<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;&nbsp;perms)</pre>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>perms</code> - A map of permissions for a user or users</dd></dl>
 </li>
 </ul>
@@ -830,7 +852,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>getTTL</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.436">getTTL</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.438">getTTL</a>()</pre>
 <div class="block">Return the TTL requested for the result of the mutation, in milliseconds.</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>the TTL requested for the result of the mutation, in milliseconds,
  or Long.MAX_VALUE if unset</dd></dl>
@@ -842,19 +864,40 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>setTTL</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.449">setTTL</a>(long&nbsp;ttl)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.451">setTTL</a>(long&nbsp;ttl)</pre>
 <div class="block">Set the TTL desired for the result of the mutation, in milliseconds.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>ttl</code> - the TTL desired for the result of the mutation, in milliseconds</dd>
 <dt><span class="strong">Returns:</span></dt><dd>this</dd></dl>
 </li>
 </ul>
+<a name="isReturnResults()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>isReturnResults</h4>
+<pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
+protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.461">isReturnResults</a>()</pre>
+<dl><dt><span class="strong">Returns:</span></dt><dd>current value for returnResults</dd></dl>
+</li>
+</ul>
+<a name="setReturnResults(boolean)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setReturnResults</h4>
+<pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
+protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.468">setReturnResults</a>(boolean&nbsp;returnResults)</pre>
+</li>
+</ul>
 <a name="extraHeapSize()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>extraHeapSize</h4>
-<pre>protected&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.458">extraHeapSize</a>()</pre>
+<pre>protected&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.477">extraHeapSize</a>()</pre>
 <div class="block">Subclasses should override this method to add the heap size of their own fields.</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>the heap size to add (will be aligned).</dd></dl>
 </li>
@@ -865,7 +908,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>checkRow</h4>
-<pre>static&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.469">checkRow</a>(byte[]&nbsp;row)</pre>
+<pre>static&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.488">checkRow</a>(byte[]&nbsp;row)</pre>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>row</code> - Row to check</dd>
 <dt><span class="strong">Returns:</span></dt><dd><code>row</code></dd>
 <dt><span class="strong">Throws:</span></dt>
@@ -879,7 +922,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>checkRow</h4>
-<pre>static&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.481">checkRow</a>(byte[]&nbsp;row,
+<pre>static&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.500">checkRow</a>(byte[]&nbsp;row,
               int&nbsp;offset,
               int&nbsp;length)</pre>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>row</code> - Row to check</dd><dd><code>offset</code> - </dd><dd><code>length</code> - </dd>
@@ -895,7 +938,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockListLast">
 <li class="blockList">
 <h4>checkRow</h4>
-<pre>static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.495">checkRow</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;row)</pre>
+<pre>static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.514">checkRow</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;row)</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/org/apache/hadoop/hbase/client/Put.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/Put.html b/devapidocs/org/apache/hadoop/hbase/client/Put.html
index f490349..356f792 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/Put.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/Put.html
@@ -415,7 +415,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" tit
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#cellScanner()">cellScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#checkRow(byte[])">checkRow</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#checkRow(byte[],%20int,%20int)">checkRow</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#checkRow(java.nio.ByteBuffer)">checkRow</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#compareTo(org.apache.hadoop.hbase.client.Row)">compareTo</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#createPutKeyValue(byte[],%20byte[],%20long,%20byte[])">createPutKeyValue</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#createPutKeyValue(byte[],%20byte[],%20long,%20byte[],%20org.apache.hadoop.hbase.Tag[])">createPutKeyValue</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#createPutKeyValue(byte[],%20java.
 nio.ByteBuffer,%20long,%20java.nio.ByteBuffer,%20org.apache.hadoop.hbase.Tag[])">createPutKeyValue</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#extraHeapSize()">extraHeapSize</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#getACL()">getACL</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#getCellList(byte[])">getCellList</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#getCellVisibility()">getCellVisibility</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#getClusterIds()">getClusterIds</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#getDurability()">getDurability</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#getFamilyCellMap()">getFamilyCellMap</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#getFingerprint()">getFingerprint</a>, <a href="../../../../../org/apache/hadoop/hbase/c
 lient/Mutation.html#getRow()">getRow</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#getTimeStamp()">getTimeStamp</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#getTTL()">getTTL</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#heapSize()">heapSize</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#isEmpty()">isEmpty</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#numFamilies()">numFamilies</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#size()">size</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#toMap(int)">toMap</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#cellScanner()">cellScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#checkRow(byte[])">checkRow</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#checkRow(byte[],%20int,%20int)">checkRow</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#checkRow(java.nio.ByteBuffer)">checkRow</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#compareTo(org.apache.hadoop.hbase.client.Row)">compareTo</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#createPutKeyValue(byte[],%20byte[],%20long,%20byte[])">createPutKeyValue</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#createPutKeyValue(byte[],%20byte[],%20long,%20byte[],%20org.apache.hadoop.hbase.Tag[])">createPutKeyValue</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#createPutKeyValue(byte[],%20java.
 nio.ByteBuffer,%20long,%20java.nio.ByteBuffer,%20org.apache.hadoop.hbase.Tag[])">createPutKeyValue</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#extraHeapSize()">extraHeapSize</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#getACL()">getACL</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#getCellList(byte[])">getCellList</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#getCellVisibility()">getCellVisibility</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#getClusterIds()">getClusterIds</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#getDurability()">getDurability</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#getFamilyCellMap()">getFamilyCellMap</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#getFingerprint()">getFingerprint</a>, <a href="../../../../../org/apache/hadoop/hbase/c
 lient/Mutation.html#getRow()">getRow</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#getTimeStamp()">getTimeStamp</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#getTTL()">getTTL</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#heapSize()">heapSize</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#isEmpty()">isEmpty</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#isReturnResults()">isReturnResults</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#numFamilies()">numFamilies</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#setReturnResults(boolean)">setReturnResults</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#size()">size</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#toMap(int)">toMap</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_org.apache.hadoop.hbase.client.OperationWithAttributes">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/org/apache/hadoop/hbase/client/class-use/Mutation.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/class-use/Mutation.html b/devapidocs/org/apache/hadoop/hbase/client/class-use/Mutation.html
index 393e407..5a3ef4b 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/class-use/Mutation.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/class-use/Mutation.html
@@ -271,6 +271,10 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 </td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a></code></td>
+<td class="colLast"><span class="strong">Mutation.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/client/Mutation.html#setReturnResults(boolean)">setReturnResults</a></strong>(boolean&nbsp;returnResults)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a></code></td>
 <td class="colLast"><span class="strong">Mutation.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/client/Mutation.html#setTTL(long)">setTTL</a></strong>(long&nbsp;ttl)</code>
 <div class="block">Set the TTL desired for the result of the mutation, in milliseconds.</div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/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 0f78a6e..ee742e4 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
@@ -389,12 +389,12 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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/7/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/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client"><span class="strong">IsolationLevel</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="strong">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="strong">Durability</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcess.Retry.html" title="enum in org.apache.hadoop.hbase.client"><span class="strong">AsyncProcess.Retry</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Admin.CompactType.html" title="enum in org.apache.hadoop.hbase.client"><span class="strong">Admin.CompactType</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="strong">IsolationLevel</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="strong">TableState.State</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="strong">Durability</span></a></li>
 </ul>
 </li>
 </ul>


[31/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/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 1d64963..a232cc8 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
@@ -6980,880 +6980,882 @@
 <span class="sourceLineNo">6972</span>      lock(this.updatesLock.readLock());<a name="line.6972"></a>
 <span class="sourceLineNo">6973</span>      try {<a name="line.6973"></a>
 <span class="sourceLineNo">6974</span>        Result cpResult = doCoprocessorPreCall(op, mutation);<a name="line.6974"></a>
-<span class="sourceLineNo">6975</span>        if (cpResult != null) return cpResult;<a name="line.6975"></a>
-<span class="sourceLineNo">6976</span>        Durability effectiveDurability = getEffectiveDurability(mutation.getDurability());<a name="line.6976"></a>
-<span class="sourceLineNo">6977</span>        Map&lt;Store, List&lt;Cell&gt;&gt; forMemStore =<a name="line.6977"></a>
-<span class="sourceLineNo">6978</span>            new HashMap&lt;Store, List&lt;Cell&gt;&gt;(mutation.getFamilyCellMap().size());<a name="line.6978"></a>
-<span class="sourceLineNo">6979</span>        // Reckon Cells to apply to WAL --  in returned walEdit -- and what to add to memstore and<a name="line.6979"></a>
-<span class="sourceLineNo">6980</span>        // what to return back to the client (in 'forMemStore' and 'results' respectively).<a name="line.6980"></a>
-<span class="sourceLineNo">6981</span>        WALEdit walEdit = reckonDeltas(op, mutation, effectiveDurability, forMemStore, results);<a name="line.6981"></a>
-<span class="sourceLineNo">6982</span>        // Actually write to WAL now if a walEdit to apply.<a name="line.6982"></a>
-<span class="sourceLineNo">6983</span>        if (walEdit != null &amp;&amp; !walEdit.isEmpty()) {<a name="line.6983"></a>
-<span class="sourceLineNo">6984</span>          writeEntry = doWALAppend(walEdit, durability, nonceGroup, nonce);<a name="line.6984"></a>
-<span class="sourceLineNo">6985</span>        } else {<a name="line.6985"></a>
-<span class="sourceLineNo">6986</span>          // If walEdits is empty, it means we skipped the WAL; update counters and start an mvcc<a name="line.6986"></a>
-<span class="sourceLineNo">6987</span>          // transaction.<a name="line.6987"></a>
-<span class="sourceLineNo">6988</span>          recordMutationWithoutWal(mutation.getFamilyCellMap());<a name="line.6988"></a>
-<span class="sourceLineNo">6989</span>          writeEntry = mvcc.begin();<a name="line.6989"></a>
-<span class="sourceLineNo">6990</span>        }<a name="line.6990"></a>
-<span class="sourceLineNo">6991</span>        // Now write to MemStore. Do it a column family at a time.<a name="line.6991"></a>
-<span class="sourceLineNo">6992</span>        long sequenceId = writeEntry.getWriteNumber();<a name="line.6992"></a>
-<span class="sourceLineNo">6993</span>        for (Map.Entry&lt;Store, List&lt;Cell&gt;&gt; e: forMemStore.entrySet()) {<a name="line.6993"></a>
-<span class="sourceLineNo">6994</span>          accumulatedResultSize +=<a name="line.6994"></a>
-<span class="sourceLineNo">6995</span>              applyToMemstore(e.getKey(), e.getValue(), true, false, sequenceId);<a name="line.6995"></a>
-<span class="sourceLineNo">6996</span>        }<a name="line.6996"></a>
-<span class="sourceLineNo">6997</span>        mvcc.completeAndWait(writeEntry);<a name="line.6997"></a>
-<span class="sourceLineNo">6998</span>        writeEntry = null;<a name="line.6998"></a>
-<span class="sourceLineNo">6999</span>      } finally {<a name="line.6999"></a>
-<span class="sourceLineNo">7000</span>        this.updatesLock.readLock().unlock();<a name="line.7000"></a>
-<span class="sourceLineNo">7001</span>      }<a name="line.7001"></a>
-<span class="sourceLineNo">7002</span>      // If results is null, then client asked that we not return the calculated results.<a name="line.7002"></a>
-<span class="sourceLineNo">7003</span>      return results !=  null? Result.create(results): null;<a name="line.7003"></a>
-<span class="sourceLineNo">7004</span>    } finally {<a name="line.7004"></a>
-<span class="sourceLineNo">7005</span>      // Call complete always, even on success. doDelta is doing a Get READ_UNCOMMITTED when it goes<a name="line.7005"></a>
-<span class="sourceLineNo">7006</span>      // to get current value under an exclusive lock so no need so no need to wait to return to<a name="line.7006"></a>
-<span class="sourceLineNo">7007</span>      // the client. Means only way to read-your-own-increment or append is to come in with an<a name="line.7007"></a>
-<span class="sourceLineNo">7008</span>      // a 0 increment.<a name="line.7008"></a>
-<span class="sourceLineNo">7009</span>      if (writeEntry != null) mvcc.complete(writeEntry);<a name="line.7009"></a>
-<span class="sourceLineNo">7010</span>      rowLock.release();<a name="line.7010"></a>
-<span class="sourceLineNo">7011</span>      // Request a cache flush if over the limit.  Do it outside update lock.<a name="line.7011"></a>
-<span class="sourceLineNo">7012</span>      if (isFlushSize(this.addAndGetGlobalMemstoreSize(accumulatedResultSize))) requestFlush();<a name="line.7012"></a>
-<span class="sourceLineNo">7013</span>      closeRegionOperation(op);<a name="line.7013"></a>
-<span class="sourceLineNo">7014</span>      if (this.metricsRegion != null) {<a name="line.7014"></a>
-<span class="sourceLineNo">7015</span>        switch (op) {<a name="line.7015"></a>
-<span class="sourceLineNo">7016</span>          case INCREMENT:<a name="line.7016"></a>
-<span class="sourceLineNo">7017</span>            this.metricsRegion.updateIncrement();<a name="line.7017"></a>
-<span class="sourceLineNo">7018</span>            break;<a name="line.7018"></a>
-<span class="sourceLineNo">7019</span>          case APPEND:<a name="line.7019"></a>
-<span class="sourceLineNo">7020</span>            this.metricsRegion.updateAppend();<a name="line.7020"></a>
-<span class="sourceLineNo">7021</span>            break;<a name="line.7021"></a>
-<span class="sourceLineNo">7022</span>          default:<a name="line.7022"></a>
+<span class="sourceLineNo">6975</span>        if (cpResult != null) {<a name="line.6975"></a>
+<span class="sourceLineNo">6976</span>          return returnResults? cpResult: null;<a name="line.6976"></a>
+<span class="sourceLineNo">6977</span>        }<a name="line.6977"></a>
+<span class="sourceLineNo">6978</span>        Durability effectiveDurability = getEffectiveDurability(mutation.getDurability());<a name="line.6978"></a>
+<span class="sourceLineNo">6979</span>        Map&lt;Store, List&lt;Cell&gt;&gt; forMemStore =<a name="line.6979"></a>
+<span class="sourceLineNo">6980</span>            new HashMap&lt;Store, List&lt;Cell&gt;&gt;(mutation.getFamilyCellMap().size());<a name="line.6980"></a>
+<span class="sourceLineNo">6981</span>        // Reckon Cells to apply to WAL --  in returned walEdit -- and what to add to memstore and<a name="line.6981"></a>
+<span class="sourceLineNo">6982</span>        // what to return back to the client (in 'forMemStore' and 'results' respectively).<a name="line.6982"></a>
+<span class="sourceLineNo">6983</span>        WALEdit walEdit = reckonDeltas(op, mutation, effectiveDurability, forMemStore, results);<a name="line.6983"></a>
+<span class="sourceLineNo">6984</span>        // Actually write to WAL now if a walEdit to apply.<a name="line.6984"></a>
+<span class="sourceLineNo">6985</span>        if (walEdit != null &amp;&amp; !walEdit.isEmpty()) {<a name="line.6985"></a>
+<span class="sourceLineNo">6986</span>          writeEntry = doWALAppend(walEdit, durability, nonceGroup, nonce);<a name="line.6986"></a>
+<span class="sourceLineNo">6987</span>        } else {<a name="line.6987"></a>
+<span class="sourceLineNo">6988</span>          // If walEdits is empty, it means we skipped the WAL; update counters and start an mvcc<a name="line.6988"></a>
+<span class="sourceLineNo">6989</span>          // transaction.<a name="line.6989"></a>
+<span class="sourceLineNo">6990</span>          recordMutationWithoutWal(mutation.getFamilyCellMap());<a name="line.6990"></a>
+<span class="sourceLineNo">6991</span>          writeEntry = mvcc.begin();<a name="line.6991"></a>
+<span class="sourceLineNo">6992</span>        }<a name="line.6992"></a>
+<span class="sourceLineNo">6993</span>        // Now write to MemStore. Do it a column family at a time.<a name="line.6993"></a>
+<span class="sourceLineNo">6994</span>        long sequenceId = writeEntry.getWriteNumber();<a name="line.6994"></a>
+<span class="sourceLineNo">6995</span>        for (Map.Entry&lt;Store, List&lt;Cell&gt;&gt; e: forMemStore.entrySet()) {<a name="line.6995"></a>
+<span class="sourceLineNo">6996</span>          accumulatedResultSize +=<a name="line.6996"></a>
+<span class="sourceLineNo">6997</span>              applyToMemstore(e.getKey(), e.getValue(), true, false, sequenceId);<a name="line.6997"></a>
+<span class="sourceLineNo">6998</span>        }<a name="line.6998"></a>
+<span class="sourceLineNo">6999</span>        mvcc.completeAndWait(writeEntry);<a name="line.6999"></a>
+<span class="sourceLineNo">7000</span>        writeEntry = null;<a name="line.7000"></a>
+<span class="sourceLineNo">7001</span>      } finally {<a name="line.7001"></a>
+<span class="sourceLineNo">7002</span>        this.updatesLock.readLock().unlock();<a name="line.7002"></a>
+<span class="sourceLineNo">7003</span>      }<a name="line.7003"></a>
+<span class="sourceLineNo">7004</span>      // If results is null, then client asked that we not return the calculated results.<a name="line.7004"></a>
+<span class="sourceLineNo">7005</span>      return results != null &amp;&amp; returnResults? Result.create(results): null;<a name="line.7005"></a>
+<span class="sourceLineNo">7006</span>    } finally {<a name="line.7006"></a>
+<span class="sourceLineNo">7007</span>      // Call complete always, even on success. doDelta is doing a Get READ_UNCOMMITTED when it goes<a name="line.7007"></a>
+<span class="sourceLineNo">7008</span>      // to get current value under an exclusive lock so no need so no need to wait to return to<a name="line.7008"></a>
+<span class="sourceLineNo">7009</span>      // the client. Means only way to read-your-own-increment or append is to come in with an<a name="line.7009"></a>
+<span class="sourceLineNo">7010</span>      // a 0 increment.<a name="line.7010"></a>
+<span class="sourceLineNo">7011</span>      if (writeEntry != null) mvcc.complete(writeEntry);<a name="line.7011"></a>
+<span class="sourceLineNo">7012</span>      rowLock.release();<a name="line.7012"></a>
+<span class="sourceLineNo">7013</span>      // Request a cache flush if over the limit.  Do it outside update lock.<a name="line.7013"></a>
+<span class="sourceLineNo">7014</span>      if (isFlushSize(this.addAndGetGlobalMemstoreSize(accumulatedResultSize))) requestFlush();<a name="line.7014"></a>
+<span class="sourceLineNo">7015</span>      closeRegionOperation(op);<a name="line.7015"></a>
+<span class="sourceLineNo">7016</span>      if (this.metricsRegion != null) {<a name="line.7016"></a>
+<span class="sourceLineNo">7017</span>        switch (op) {<a name="line.7017"></a>
+<span class="sourceLineNo">7018</span>          case INCREMENT:<a name="line.7018"></a>
+<span class="sourceLineNo">7019</span>            this.metricsRegion.updateIncrement();<a name="line.7019"></a>
+<span class="sourceLineNo">7020</span>            break;<a name="line.7020"></a>
+<span class="sourceLineNo">7021</span>          case APPEND:<a name="line.7021"></a>
+<span class="sourceLineNo">7022</span>            this.metricsRegion.updateAppend();<a name="line.7022"></a>
 <span class="sourceLineNo">7023</span>            break;<a name="line.7023"></a>
-<span class="sourceLineNo">7024</span>        }<a name="line.7024"></a>
-<span class="sourceLineNo">7025</span>      }<a name="line.7025"></a>
-<span class="sourceLineNo">7026</span>    }<a name="line.7026"></a>
-<span class="sourceLineNo">7027</span>  }<a name="line.7027"></a>
-<span class="sourceLineNo">7028</span><a name="line.7028"></a>
-<span class="sourceLineNo">7029</span>  private WriteEntry doWALAppend(WALEdit walEdit, Durability durability, long nonceGroup,<a name="line.7029"></a>
-<span class="sourceLineNo">7030</span>      long nonce)<a name="line.7030"></a>
-<span class="sourceLineNo">7031</span>  throws IOException {<a name="line.7031"></a>
-<span class="sourceLineNo">7032</span>    return doWALAppend(walEdit, durability, WALKey.EMPTY_UUIDS, System.currentTimeMillis(),<a name="line.7032"></a>
-<span class="sourceLineNo">7033</span>      nonceGroup, nonce);<a name="line.7033"></a>
-<span class="sourceLineNo">7034</span>  }<a name="line.7034"></a>
-<span class="sourceLineNo">7035</span><a name="line.7035"></a>
-<span class="sourceLineNo">7036</span>  /**<a name="line.7036"></a>
-<span class="sourceLineNo">7037</span>   * @return writeEntry associated with this append<a name="line.7037"></a>
-<span class="sourceLineNo">7038</span>   */<a name="line.7038"></a>
-<span class="sourceLineNo">7039</span>  private WriteEntry doWALAppend(WALEdit walEdit, Durability durability, List&lt;UUID&gt; clusterIds,<a name="line.7039"></a>
-<span class="sourceLineNo">7040</span>      long now, long nonceGroup, long nonce)<a name="line.7040"></a>
-<span class="sourceLineNo">7041</span>  throws IOException {<a name="line.7041"></a>
-<span class="sourceLineNo">7042</span>    WriteEntry writeEntry = null;<a name="line.7042"></a>
-<span class="sourceLineNo">7043</span>    // Using default cluster id, as this can only happen in the originating cluster.<a name="line.7043"></a>
-<span class="sourceLineNo">7044</span>    // A slave cluster receives the final value (not the delta) as a Put. We use HLogKey<a name="line.7044"></a>
-<span class="sourceLineNo">7045</span>    // here instead of WALKey directly to support legacy coprocessors.<a name="line.7045"></a>
-<span class="sourceLineNo">7046</span>    WALKey walKey = new WALKey(this.getRegionInfo().getEncodedNameAsBytes(),<a name="line.7046"></a>
-<span class="sourceLineNo">7047</span>      this.htableDescriptor.getTableName(), WALKey.NO_SEQUENCE_ID, now, clusterIds,<a name="line.7047"></a>
-<span class="sourceLineNo">7048</span>      nonceGroup, nonce, mvcc);<a name="line.7048"></a>
-<span class="sourceLineNo">7049</span>    try {<a name="line.7049"></a>
-<span class="sourceLineNo">7050</span>      long txid =<a name="line.7050"></a>
-<span class="sourceLineNo">7051</span>        this.wal.append(this.htableDescriptor, this.getRegionInfo(), walKey, walEdit, true);<a name="line.7051"></a>
-<span class="sourceLineNo">7052</span>      // Call sync on our edit.<a name="line.7052"></a>
-<span class="sourceLineNo">7053</span>      if (txid != 0) sync(txid, durability);<a name="line.7053"></a>
-<span class="sourceLineNo">7054</span>      writeEntry = walKey.getWriteEntry();<a name="line.7054"></a>
-<span class="sourceLineNo">7055</span>    } catch (IOException ioe) {<a name="line.7055"></a>
-<span class="sourceLineNo">7056</span>      if (walKey != null) mvcc.complete(walKey.getWriteEntry());<a name="line.7056"></a>
-<span class="sourceLineNo">7057</span>      throw ioe;<a name="line.7057"></a>
-<span class="sourceLineNo">7058</span>    }<a name="line.7058"></a>
-<span class="sourceLineNo">7059</span>    return writeEntry;<a name="line.7059"></a>
-<span class="sourceLineNo">7060</span>  }<a name="line.7060"></a>
-<span class="sourceLineNo">7061</span><a name="line.7061"></a>
-<span class="sourceLineNo">7062</span>  /**<a name="line.7062"></a>
-<span class="sourceLineNo">7063</span>   * Do coprocessor pre-increment or pre-append call.<a name="line.7063"></a>
-<span class="sourceLineNo">7064</span>   * @return Result returned out of the coprocessor, which means bypass all further processing and<a name="line.7064"></a>
-<span class="sourceLineNo">7065</span>   *  return the proffered Result instead, or null which means proceed.<a name="line.7065"></a>
-<span class="sourceLineNo">7066</span>   */<a name="line.7066"></a>
-<span class="sourceLineNo">7067</span>  private Result doCoprocessorPreCall(final Operation op, final Mutation mutation)<a name="line.7067"></a>
-<span class="sourceLineNo">7068</span>  throws IOException {<a name="line.7068"></a>
-<span class="sourceLineNo">7069</span>    Result result = null;<a name="line.7069"></a>
-<span class="sourceLineNo">7070</span>    if (this.coprocessorHost != null) {<a name="line.7070"></a>
-<span class="sourceLineNo">7071</span>      switch(op) {<a name="line.7071"></a>
-<span class="sourceLineNo">7072</span>        case INCREMENT:<a name="line.7072"></a>
-<span class="sourceLineNo">7073</span>          result = this.coprocessorHost.preIncrementAfterRowLock((Increment)mutation);<a name="line.7073"></a>
-<span class="sourceLineNo">7074</span>          break;<a name="line.7074"></a>
-<span class="sourceLineNo">7075</span>        case APPEND:<a name="line.7075"></a>
-<span class="sourceLineNo">7076</span>          result = this.coprocessorHost.preAppendAfterRowLock((Append)mutation);<a name="line.7076"></a>
-<span class="sourceLineNo">7077</span>          break;<a name="line.7077"></a>
-<span class="sourceLineNo">7078</span>        default: throw new UnsupportedOperationException(op.toString());<a name="line.7078"></a>
-<span class="sourceLineNo">7079</span>      }<a name="line.7079"></a>
-<span class="sourceLineNo">7080</span>    }<a name="line.7080"></a>
-<span class="sourceLineNo">7081</span>    return result;<a name="line.7081"></a>
-<span class="sourceLineNo">7082</span>  }<a name="line.7082"></a>
-<span class="sourceLineNo">7083</span><a name="line.7083"></a>
-<span class="sourceLineNo">7084</span>  /**<a name="line.7084"></a>
-<span class="sourceLineNo">7085</span>   * Reckon the Cells to apply to WAL, memstore, and to return to the Client; these Sets are not<a name="line.7085"></a>
-<span class="sourceLineNo">7086</span>   * always the same dependent on whether to write WAL or if the amount to increment is zero (in<a name="line.7086"></a>
-<span class="sourceLineNo">7087</span>   * this case we write back nothing, just return latest Cell value to the client).<a name="line.7087"></a>
-<span class="sourceLineNo">7088</span>   *<a name="line.7088"></a>
-<span class="sourceLineNo">7089</span>   * @param results Fill in here what goes back to the Client if it is non-null (if null, client<a name="line.7089"></a>
-<span class="sourceLineNo">7090</span>   *  doesn't want results).<a name="line.7090"></a>
-<span class="sourceLineNo">7091</span>   * @param forMemStore Fill in here what to apply to the MemStore (by Store).<a name="line.7091"></a>
-<span class="sourceLineNo">7092</span>   * @return A WALEdit to apply to WAL or null if we are to skip the WAL.<a name="line.7092"></a>
-<span class="sourceLineNo">7093</span>   */<a name="line.7093"></a>
-<span class="sourceLineNo">7094</span>  private WALEdit reckonDeltas(final Operation op, final Mutation mutation,<a name="line.7094"></a>
-<span class="sourceLineNo">7095</span>      final Durability effectiveDurability, final Map&lt;Store, List&lt;Cell&gt;&gt; forMemStore,<a name="line.7095"></a>
-<span class="sourceLineNo">7096</span>      final List&lt;Cell&gt; results)<a name="line.7096"></a>
-<span class="sourceLineNo">7097</span>  throws IOException {<a name="line.7097"></a>
-<span class="sourceLineNo">7098</span>    WALEdit walEdit = null;<a name="line.7098"></a>
-<span class="sourceLineNo">7099</span>    long now = EnvironmentEdgeManager.currentTime();<a name="line.7099"></a>
-<span class="sourceLineNo">7100</span>    final boolean writeToWAL = effectiveDurability != Durability.SKIP_WAL;<a name="line.7100"></a>
-<span class="sourceLineNo">7101</span>    // Process a Store/family at a time.<a name="line.7101"></a>
-<span class="sourceLineNo">7102</span>    for (Map.Entry&lt;byte [], List&lt;Cell&gt;&gt; entry: mutation.getFamilyCellMap().entrySet()) {<a name="line.7102"></a>
-<span class="sourceLineNo">7103</span>      final byte [] columnFamilyName = entry.getKey();<a name="line.7103"></a>
-<span class="sourceLineNo">7104</span>      List&lt;Cell&gt; deltas = entry.getValue();<a name="line.7104"></a>
-<span class="sourceLineNo">7105</span>      Store store = this.stores.get(columnFamilyName);<a name="line.7105"></a>
-<span class="sourceLineNo">7106</span>      // Reckon for the Store what to apply to WAL and MemStore.<a name="line.7106"></a>
-<span class="sourceLineNo">7107</span>      List&lt;Cell&gt; toApply =<a name="line.7107"></a>
-<span class="sourceLineNo">7108</span>        reckonDeltasByStore(store, op, mutation, effectiveDurability, now, deltas, results);<a name="line.7108"></a>
-<span class="sourceLineNo">7109</span>      if (!toApply.isEmpty()) {<a name="line.7109"></a>
-<span class="sourceLineNo">7110</span>        forMemStore.put(store, toApply);<a name="line.7110"></a>
-<span class="sourceLineNo">7111</span>        if (writeToWAL) {<a name="line.7111"></a>
-<span class="sourceLineNo">7112</span>          if (walEdit == null) {<a name="line.7112"></a>
-<span class="sourceLineNo">7113</span>            walEdit = new WALEdit();<a name="line.7113"></a>
-<span class="sourceLineNo">7114</span>          }<a name="line.7114"></a>
-<span class="sourceLineNo">7115</span>          walEdit.getCells().addAll(toApply);<a name="line.7115"></a>
-<span class="sourceLineNo">7116</span>        }<a name="line.7116"></a>
-<span class="sourceLineNo">7117</span>      }<a name="line.7117"></a>
-<span class="sourceLineNo">7118</span>    }<a name="line.7118"></a>
-<span class="sourceLineNo">7119</span>    return walEdit;<a name="line.7119"></a>
-<span class="sourceLineNo">7120</span>  }<a name="line.7120"></a>
-<span class="sourceLineNo">7121</span><a name="line.7121"></a>
-<span class="sourceLineNo">7122</span>  /**<a name="line.7122"></a>
-<span class="sourceLineNo">7123</span>   * Reckon the Cells to apply to WAL, memstore, and to return to the Client in passed<a name="line.7123"></a>
-<span class="sourceLineNo">7124</span>   * column family/Store.<a name="line.7124"></a>
-<span class="sourceLineNo">7125</span>   *<a name="line.7125"></a>
-<span class="sourceLineNo">7126</span>   * Does Get of current value and then adds passed in deltas for this Store returning the result.<a name="line.7126"></a>
+<span class="sourceLineNo">7024</span>          default:<a name="line.7024"></a>
+<span class="sourceLineNo">7025</span>            break;<a name="line.7025"></a>
+<span class="sourceLineNo">7026</span>        }<a name="line.7026"></a>
+<span class="sourceLineNo">7027</span>      }<a name="line.7027"></a>
+<span class="sourceLineNo">7028</span>    }<a name="line.7028"></a>
+<span class="sourceLineNo">7029</span>  }<a name="line.7029"></a>
+<span class="sourceLineNo">7030</span><a name="line.7030"></a>
+<span class="sourceLineNo">7031</span>  private WriteEntry doWALAppend(WALEdit walEdit, Durability durability, long nonceGroup,<a name="line.7031"></a>
+<span class="sourceLineNo">7032</span>      long nonce)<a name="line.7032"></a>
+<span class="sourceLineNo">7033</span>  throws IOException {<a name="line.7033"></a>
+<span class="sourceLineNo">7034</span>    return doWALAppend(walEdit, durability, WALKey.EMPTY_UUIDS, System.currentTimeMillis(),<a name="line.7034"></a>
+<span class="sourceLineNo">7035</span>      nonceGroup, nonce);<a name="line.7035"></a>
+<span class="sourceLineNo">7036</span>  }<a name="line.7036"></a>
+<span class="sourceLineNo">7037</span><a name="line.7037"></a>
+<span class="sourceLineNo">7038</span>  /**<a name="line.7038"></a>
+<span class="sourceLineNo">7039</span>   * @return writeEntry associated with this append<a name="line.7039"></a>
+<span class="sourceLineNo">7040</span>   */<a name="line.7040"></a>
+<span class="sourceLineNo">7041</span>  private WriteEntry doWALAppend(WALEdit walEdit, Durability durability, List&lt;UUID&gt; clusterIds,<a name="line.7041"></a>
+<span class="sourceLineNo">7042</span>      long now, long nonceGroup, long nonce)<a name="line.7042"></a>
+<span class="sourceLineNo">7043</span>  throws IOException {<a name="line.7043"></a>
+<span class="sourceLineNo">7044</span>    WriteEntry writeEntry = null;<a name="line.7044"></a>
+<span class="sourceLineNo">7045</span>    // Using default cluster id, as this can only happen in the originating cluster.<a name="line.7045"></a>
+<span class="sourceLineNo">7046</span>    // A slave cluster receives the final value (not the delta) as a Put. We use HLogKey<a name="line.7046"></a>
+<span class="sourceLineNo">7047</span>    // here instead of WALKey directly to support legacy coprocessors.<a name="line.7047"></a>
+<span class="sourceLineNo">7048</span>    WALKey walKey = new WALKey(this.getRegionInfo().getEncodedNameAsBytes(),<a name="line.7048"></a>
+<span class="sourceLineNo">7049</span>      this.htableDescriptor.getTableName(), WALKey.NO_SEQUENCE_ID, now, clusterIds,<a name="line.7049"></a>
+<span class="sourceLineNo">7050</span>      nonceGroup, nonce, mvcc);<a name="line.7050"></a>
+<span class="sourceLineNo">7051</span>    try {<a name="line.7051"></a>
+<span class="sourceLineNo">7052</span>      long txid =<a name="line.7052"></a>
+<span class="sourceLineNo">7053</span>        this.wal.append(this.htableDescriptor, this.getRegionInfo(), walKey, walEdit, true);<a name="line.7053"></a>
+<span class="sourceLineNo">7054</span>      // Call sync on our edit.<a name="line.7054"></a>
+<span class="sourceLineNo">7055</span>      if (txid != 0) sync(txid, durability);<a name="line.7055"></a>
+<span class="sourceLineNo">7056</span>      writeEntry = walKey.getWriteEntry();<a name="line.7056"></a>
+<span class="sourceLineNo">7057</span>    } catch (IOException ioe) {<a name="line.7057"></a>
+<span class="sourceLineNo">7058</span>      if (walKey != null) mvcc.complete(walKey.getWriteEntry());<a name="line.7058"></a>
+<span class="sourceLineNo">7059</span>      throw ioe;<a name="line.7059"></a>
+<span class="sourceLineNo">7060</span>    }<a name="line.7060"></a>
+<span class="sourceLineNo">7061</span>    return writeEntry;<a name="line.7061"></a>
+<span class="sourceLineNo">7062</span>  }<a name="line.7062"></a>
+<span class="sourceLineNo">7063</span><a name="line.7063"></a>
+<span class="sourceLineNo">7064</span>  /**<a name="line.7064"></a>
+<span class="sourceLineNo">7065</span>   * Do coprocessor pre-increment or pre-append call.<a name="line.7065"></a>
+<span class="sourceLineNo">7066</span>   * @return Result returned out of the coprocessor, which means bypass all further processing and<a name="line.7066"></a>
+<span class="sourceLineNo">7067</span>   *  return the proffered Result instead, or null which means proceed.<a name="line.7067"></a>
+<span class="sourceLineNo">7068</span>   */<a name="line.7068"></a>
+<span class="sourceLineNo">7069</span>  private Result doCoprocessorPreCall(final Operation op, final Mutation mutation)<a name="line.7069"></a>
+<span class="sourceLineNo">7070</span>  throws IOException {<a name="line.7070"></a>
+<span class="sourceLineNo">7071</span>    Result result = null;<a name="line.7071"></a>
+<span class="sourceLineNo">7072</span>    if (this.coprocessorHost != null) {<a name="line.7072"></a>
+<span class="sourceLineNo">7073</span>      switch(op) {<a name="line.7073"></a>
+<span class="sourceLineNo">7074</span>        case INCREMENT:<a name="line.7074"></a>
+<span class="sourceLineNo">7075</span>          result = this.coprocessorHost.preIncrementAfterRowLock((Increment)mutation);<a name="line.7075"></a>
+<span class="sourceLineNo">7076</span>          break;<a name="line.7076"></a>
+<span class="sourceLineNo">7077</span>        case APPEND:<a name="line.7077"></a>
+<span class="sourceLineNo">7078</span>          result = this.coprocessorHost.preAppendAfterRowLock((Append)mutation);<a name="line.7078"></a>
+<span class="sourceLineNo">7079</span>          break;<a name="line.7079"></a>
+<span class="sourceLineNo">7080</span>        default: throw new UnsupportedOperationException(op.toString());<a name="line.7080"></a>
+<span class="sourceLineNo">7081</span>      }<a name="line.7081"></a>
+<span class="sourceLineNo">7082</span>    }<a name="line.7082"></a>
+<span class="sourceLineNo">7083</span>    return result;<a name="line.7083"></a>
+<span class="sourceLineNo">7084</span>  }<a name="line.7084"></a>
+<span class="sourceLineNo">7085</span><a name="line.7085"></a>
+<span class="sourceLineNo">7086</span>  /**<a name="line.7086"></a>
+<span class="sourceLineNo">7087</span>   * Reckon the Cells to apply to WAL, memstore, and to return to the Client; these Sets are not<a name="line.7087"></a>
+<span class="sourceLineNo">7088</span>   * always the same dependent on whether to write WAL or if the amount to increment is zero (in<a name="line.7088"></a>
+<span class="sourceLineNo">7089</span>   * this case we write back nothing, just return latest Cell value to the client).<a name="line.7089"></a>
+<span class="sourceLineNo">7090</span>   *<a name="line.7090"></a>
+<span class="sourceLineNo">7091</span>   * @param results Fill in here what goes back to the Client if it is non-null (if null, client<a name="line.7091"></a>
+<span class="sourceLineNo">7092</span>   *  doesn't want results).<a name="line.7092"></a>
+<span class="sourceLineNo">7093</span>   * @param forMemStore Fill in here what to apply to the MemStore (by Store).<a name="line.7093"></a>
+<span class="sourceLineNo">7094</span>   * @return A WALEdit to apply to WAL or null if we are to skip the WAL.<a name="line.7094"></a>
+<span class="sourceLineNo">7095</span>   */<a name="line.7095"></a>
+<span class="sourceLineNo">7096</span>  private WALEdit reckonDeltas(final Operation op, final Mutation mutation,<a name="line.7096"></a>
+<span class="sourceLineNo">7097</span>      final Durability effectiveDurability, final Map&lt;Store, List&lt;Cell&gt;&gt; forMemStore,<a name="line.7097"></a>
+<span class="sourceLineNo">7098</span>      final List&lt;Cell&gt; results)<a name="line.7098"></a>
+<span class="sourceLineNo">7099</span>  throws IOException {<a name="line.7099"></a>
+<span class="sourceLineNo">7100</span>    WALEdit walEdit = null;<a name="line.7100"></a>
+<span class="sourceLineNo">7101</span>    long now = EnvironmentEdgeManager.currentTime();<a name="line.7101"></a>
+<span class="sourceLineNo">7102</span>    final boolean writeToWAL = effectiveDurability != Durability.SKIP_WAL;<a name="line.7102"></a>
+<span class="sourceLineNo">7103</span>    // Process a Store/family at a time.<a name="line.7103"></a>
+<span class="sourceLineNo">7104</span>    for (Map.Entry&lt;byte [], List&lt;Cell&gt;&gt; entry: mutation.getFamilyCellMap().entrySet()) {<a name="line.7104"></a>
+<span class="sourceLineNo">7105</span>      final byte [] columnFamilyName = entry.getKey();<a name="line.7105"></a>
+<span class="sourceLineNo">7106</span>      List&lt;Cell&gt; deltas = entry.getValue();<a name="line.7106"></a>
+<span class="sourceLineNo">7107</span>      Store store = this.stores.get(columnFamilyName);<a name="line.7107"></a>
+<span class="sourceLineNo">7108</span>      // Reckon for the Store what to apply to WAL and MemStore.<a name="line.7108"></a>
+<span class="sourceLineNo">7109</span>      List&lt;Cell&gt; toApply =<a name="line.7109"></a>
+<span class="sourceLineNo">7110</span>        reckonDeltasByStore(store, op, mutation, effectiveDurability, now, deltas, results);<a name="line.7110"></a>
+<span class="sourceLineNo">7111</span>      if (!toApply.isEmpty()) {<a name="line.7111"></a>
+<span class="sourceLineNo">7112</span>        forMemStore.put(store, toApply);<a name="line.7112"></a>
+<span class="sourceLineNo">7113</span>        if (writeToWAL) {<a name="line.7113"></a>
+<span class="sourceLineNo">7114</span>          if (walEdit == null) {<a name="line.7114"></a>
+<span class="sourceLineNo">7115</span>            walEdit = new WALEdit();<a name="line.7115"></a>
+<span class="sourceLineNo">7116</span>          }<a name="line.7116"></a>
+<span class="sourceLineNo">7117</span>          walEdit.getCells().addAll(toApply);<a name="line.7117"></a>
+<span class="sourceLineNo">7118</span>        }<a name="line.7118"></a>
+<span class="sourceLineNo">7119</span>      }<a name="line.7119"></a>
+<span class="sourceLineNo">7120</span>    }<a name="line.7120"></a>
+<span class="sourceLineNo">7121</span>    return walEdit;<a name="line.7121"></a>
+<span class="sourceLineNo">7122</span>  }<a name="line.7122"></a>
+<span class="sourceLineNo">7123</span><a name="line.7123"></a>
+<span class="sourceLineNo">7124</span>  /**<a name="line.7124"></a>
+<span class="sourceLineNo">7125</span>   * Reckon the Cells to apply to WAL, memstore, and to return to the Client in passed<a name="line.7125"></a>
+<span class="sourceLineNo">7126</span>   * column family/Store.<a name="line.7126"></a>
 <span class="sourceLineNo">7127</span>   *<a name="line.7127"></a>
-<span class="sourceLineNo">7128</span>   * @param op Whether Increment or Append<a name="line.7128"></a>
-<span class="sourceLineNo">7129</span>   * @param mutation The encompassing Mutation object<a name="line.7129"></a>
-<span class="sourceLineNo">7130</span>   * @param deltas Changes to apply to this Store; either increment amount or data to append<a name="line.7130"></a>
-<span class="sourceLineNo">7131</span>   * @param results In here we accumulate all the Cells we are to return to the client; this List<a name="line.7131"></a>
-<span class="sourceLineNo">7132</span>   *  can be larger than what we return in case where delta is zero; i.e. don't write<a name="line.7132"></a>
-<span class="sourceLineNo">7133</span>   *  out new values, just return current value. If null, client doesn't want results returned.<a name="line.7133"></a>
-<span class="sourceLineNo">7134</span>   * @return Resulting Cells after &lt;code&gt;deltas&lt;/code&gt; have been applied to current<a name="line.7134"></a>
-<span class="sourceLineNo">7135</span>   *  values. Side effect is our filling out of the &lt;code&gt;results&lt;/code&gt; List.<a name="line.7135"></a>
-<span class="sourceLineNo">7136</span>   */<a name="line.7136"></a>
-<span class="sourceLineNo">7137</span>  private List&lt;Cell&gt; reckonDeltasByStore(final Store store, final Operation op,<a name="line.7137"></a>
-<span class="sourceLineNo">7138</span>      final Mutation mutation, final Durability effectiveDurability, final long now,<a name="line.7138"></a>
-<span class="sourceLineNo">7139</span>      final List&lt;Cell&gt; deltas, final List&lt;Cell&gt; results)<a name="line.7139"></a>
-<span class="sourceLineNo">7140</span>  throws IOException {<a name="line.7140"></a>
-<span class="sourceLineNo">7141</span>    byte [] columnFamily = store.getFamily().getName();<a name="line.7141"></a>
-<span class="sourceLineNo">7142</span>    List&lt;Cell&gt; toApply = new ArrayList&lt;Cell&gt;(deltas.size());<a name="line.7142"></a>
-<span class="sourceLineNo">7143</span>    // Get previous values for all columns in this family.<a name="line.7143"></a>
-<span class="sourceLineNo">7144</span>    List&lt;Cell&gt; currentValues = get(mutation, store, deltas,<a name="line.7144"></a>
-<span class="sourceLineNo">7145</span>        null/*Default IsolationLevel*/,<a name="line.7145"></a>
-<span class="sourceLineNo">7146</span>        op == Operation.INCREMENT? ((Increment)mutation).getTimeRange(): null);<a name="line.7146"></a>
-<span class="sourceLineNo">7147</span>    // Iterate the input columns and update existing values if they were found, otherwise<a name="line.7147"></a>
-<span class="sourceLineNo">7148</span>    // add new column initialized to the delta amount<a name="line.7148"></a>
-<span class="sourceLineNo">7149</span>    int currentValuesIndex = 0;<a name="line.7149"></a>
-<span class="sourceLineNo">7150</span>    for (int i = 0; i &lt; deltas.size(); i++) {<a name="line.7150"></a>
-<span class="sourceLineNo">7151</span>      Cell delta = deltas.get(i);<a name="line.7151"></a>
-<span class="sourceLineNo">7152</span>      Cell currentValue = null;<a name="line.7152"></a>
-<span class="sourceLineNo">7153</span>      if (currentValuesIndex &lt; currentValues.size() &amp;&amp;<a name="line.7153"></a>
-<span class="sourceLineNo">7154</span>          CellUtil.matchingQualifier(currentValues.get(currentValuesIndex), delta)) {<a name="line.7154"></a>
-<span class="sourceLineNo">7155</span>        currentValue = currentValues.get(currentValuesIndex);<a name="line.7155"></a>
-<span class="sourceLineNo">7156</span>        if (i &lt; (deltas.size() - 1) &amp;&amp; !CellUtil.matchingQualifier(delta, deltas.get(i + 1))) {<a name="line.7156"></a>
-<span class="sourceLineNo">7157</span>          currentValuesIndex++;<a name="line.7157"></a>
-<span class="sourceLineNo">7158</span>        }<a name="line.7158"></a>
-<span class="sourceLineNo">7159</span>      }<a name="line.7159"></a>
-<span class="sourceLineNo">7160</span>      // Switch on whether this an increment or an append building the new Cell to apply.<a name="line.7160"></a>
-<span class="sourceLineNo">7161</span>      Cell newCell = null;<a name="line.7161"></a>
-<span class="sourceLineNo">7162</span>      MutationType mutationType = null;<a name="line.7162"></a>
-<span class="sourceLineNo">7163</span>      boolean apply = true;<a name="line.7163"></a>
-<span class="sourceLineNo">7164</span>      switch (op) {<a name="line.7164"></a>
-<span class="sourceLineNo">7165</span>        case INCREMENT:<a name="line.7165"></a>
-<span class="sourceLineNo">7166</span>          mutationType = MutationType.INCREMENT;<a name="line.7166"></a>
-<span class="sourceLineNo">7167</span>          // If delta amount to apply is 0, don't write WAL or MemStore.<a name="line.7167"></a>
-<span class="sourceLineNo">7168</span>          long deltaAmount = getLongValue(delta);<a name="line.7168"></a>
-<span class="sourceLineNo">7169</span>          apply = deltaAmount != 0;<a name="line.7169"></a>
-<span class="sourceLineNo">7170</span>          newCell = reckonIncrement(delta, deltaAmount, currentValue, columnFamily, now,<a name="line.7170"></a>
-<span class="sourceLineNo">7171</span>            (Increment)mutation);<a name="line.7171"></a>
-<span class="sourceLineNo">7172</span>          break;<a name="line.7172"></a>
-<span class="sourceLineNo">7173</span>        case APPEND:<a name="line.7173"></a>
-<span class="sourceLineNo">7174</span>          mutationType = MutationType.APPEND;<a name="line.7174"></a>
-<span class="sourceLineNo">7175</span>          // Always apply Append. TODO: Does empty delta value mean reset Cell? It seems to.<a name="line.7175"></a>
-<span class="sourceLineNo">7176</span>          newCell = reckonAppend(delta, currentValue, now, (Append)mutation);<a name="line.7176"></a>
-<span class="sourceLineNo">7177</span>          break;<a name="line.7177"></a>
-<span class="sourceLineNo">7178</span>        default: throw new UnsupportedOperationException(op.toString());<a name="line.7178"></a>
-<span class="sourceLineNo">7179</span>      }<a name="line.7179"></a>
-<span class="sourceLineNo">7180</span><a name="line.7180"></a>
-<span class="sourceLineNo">7181</span>      // Give coprocessors a chance to update the new cell<a name="line.7181"></a>
-<span class="sourceLineNo">7182</span>      if (coprocessorHost != null) {<a name="line.7182"></a>
-<span class="sourceLineNo">7183</span>        newCell =<a name="line.7183"></a>
-<span class="sourceLineNo">7184</span>            coprocessorHost.postMutationBeforeWAL(mutationType, mutation, currentValue, newCell);<a name="line.7184"></a>
-<span class="sourceLineNo">7185</span>      }<a name="line.7185"></a>
-<span class="sourceLineNo">7186</span>      // If apply, we need to update memstore/WAL with new value; add it toApply.<a name="line.7186"></a>
-<span class="sourceLineNo">7187</span>      if (apply) {<a name="line.7187"></a>
-<span class="sourceLineNo">7188</span>        toApply.add(newCell);<a name="line.7188"></a>
-<span class="sourceLineNo">7189</span>      }<a name="line.7189"></a>
-<span class="sourceLineNo">7190</span>      // Add to results to get returned to the Client. If null, cilent does not want results.<a name="line.7190"></a>
-<span class="sourceLineNo">7191</span>      if (results != null) {<a name="line.7191"></a>
-<span class="sourceLineNo">7192</span>        results.add(newCell);<a name="line.7192"></a>
-<span class="sourceLineNo">7193</span>      }<a name="line.7193"></a>
-<span class="sourceLineNo">7194</span>    }<a name="line.7194"></a>
-<span class="sourceLineNo">7195</span>    return toApply;<a name="line.7195"></a>
-<span class="sourceLineNo">7196</span>  }<a name="line.7196"></a>
-<span class="sourceLineNo">7197</span><a name="line.7197"></a>
-<span class="sourceLineNo">7198</span>  /**<a name="line.7198"></a>
-<span class="sourceLineNo">7199</span>   * Calculate new Increment Cell.<a name="line.7199"></a>
-<span class="sourceLineNo">7200</span>   * @return New Increment Cell with delta applied to currentValue if currentValue is not null;<a name="line.7200"></a>
-<span class="sourceLineNo">7201</span>   *  otherwise, a new Cell with the delta set as its value.<a name="line.7201"></a>
-<span class="sourceLineNo">7202</span>   */<a name="line.7202"></a>
-<span class="sourceLineNo">7203</span>  private Cell reckonIncrement(final Cell delta, final long deltaAmount, final Cell currentValue,<a name="line.7203"></a>
-<span class="sourceLineNo">7204</span>      byte [] columnFamily, final long now, Mutation mutation)<a name="line.7204"></a>
-<span class="sourceLineNo">7205</span>  throws IOException {<a name="line.7205"></a>
-<span class="sourceLineNo">7206</span>    // Forward any tags found on the delta.<a name="line.7206"></a>
-<span class="sourceLineNo">7207</span>    List&lt;Tag&gt; tags = TagUtil.carryForwardTags(delta);<a name="line.7207"></a>
-<span class="sourceLineNo">7208</span>    long newValue = deltaAmount;<a name="line.7208"></a>
-<span class="sourceLineNo">7209</span>    long ts = now;<a name="line.7209"></a>
-<span class="sourceLineNo">7210</span>    if (currentValue != null) {<a name="line.7210"></a>
-<span class="sourceLineNo">7211</span>      tags = TagUtil.carryForwardTags(tags, currentValue);<a name="line.7211"></a>
-<span class="sourceLineNo">7212</span>      ts = Math.max(now, currentValue.getTimestamp());<a name="line.7212"></a>
-<span class="sourceLineNo">7213</span>      newValue += getLongValue(currentValue);<a name="line.7213"></a>
-<span class="sourceLineNo">7214</span>    }<a name="line.7214"></a>
-<span class="sourceLineNo">7215</span>    // Now make up the new Cell. TODO: FIX. This is carnel knowledge of how KeyValues are made...<a name="line.7215"></a>
-<span class="sourceLineNo">7216</span>    // doesn't work well with offheaping or if we are doing a different Cell type.<a name="line.7216"></a>
-<span class="sourceLineNo">7217</span>    byte [] incrementAmountInBytes = Bytes.toBytes(newValue);<a name="line.7217"></a>
-<span class="sourceLineNo">7218</span>    tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7218"></a>
-<span class="sourceLineNo">7219</span>    byte [] row = mutation.getRow();<a name="line.7219"></a>
-<span class="sourceLineNo">7220</span>    return new KeyValue(row, 0, row.length,<a name="line.7220"></a>
-<span class="sourceLineNo">7221</span>      columnFamily, 0, columnFamily.length,<a name="line.7221"></a>
-<span class="sourceLineNo">7222</span>      delta.getQualifierArray(), delta.getQualifierOffset(), delta.getQualifierLength(),<a name="line.7222"></a>
-<span class="sourceLineNo">7223</span>      ts, KeyValue.Type.Put,<a name="line.7223"></a>
-<span class="sourceLineNo">7224</span>      incrementAmountInBytes, 0, incrementAmountInBytes.length,<a name="line.7224"></a>
-<span class="sourceLineNo">7225</span>      tags);<a name="line.7225"></a>
-<span class="sourceLineNo">7226</span>  }<a name="line.7226"></a>
-<span class="sourceLineNo">7227</span><a name="line.7227"></a>
-<span class="sourceLineNo">7228</span>  private Cell reckonAppend(final Cell delta, final Cell currentValue, final long now,<a name="line.7228"></a>
-<span class="sourceLineNo">7229</span>      Append mutation)<a name="line.7229"></a>
-<span class="sourceLineNo">7230</span>  throws IOException {<a name="line.7230"></a>
-<span class="sourceLineNo">7231</span>    // Forward any tags found on the delta.<a name="line.7231"></a>
-<span class="sourceLineNo">7232</span>    List&lt;Tag&gt; tags = TagUtil.carryForwardTags(delta);<a name="line.7232"></a>
-<span class="sourceLineNo">7233</span>    long ts = now;<a name="line.7233"></a>
-<span class="sourceLineNo">7234</span>    Cell newCell = null;<a name="line.7234"></a>
-<span class="sourceLineNo">7235</span>    byte [] row = mutation.getRow();<a name="line.7235"></a>
-<span class="sourceLineNo">7236</span>    if (currentValue != null) {<a name="line.7236"></a>
-<span class="sourceLineNo">7237</span>      tags = TagUtil.carryForwardTags(tags, currentValue);<a name="line.7237"></a>
-<span class="sourceLineNo">7238</span>      ts = Math.max(now, currentValue.getTimestamp());<a name="line.7238"></a>
-<span class="sourceLineNo">7239</span>      tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7239"></a>
-<span class="sourceLineNo">7240</span>      byte[] tagBytes = TagUtil.fromList(tags);<a name="line.7240"></a>
-<span class="sourceLineNo">7241</span>      // Allocate an empty cell and copy in all parts.<a name="line.7241"></a>
-<span class="sourceLineNo">7242</span>      // TODO: This is intimate knowledge of how a KeyValue is made. Undo!!! Prevents our doing<a name="line.7242"></a>
-<span class="sourceLineNo">7243</span>      // other Cell types. Copying on-heap too if an off-heap Cell.<a name="line.7243"></a>
-<span class="sourceLineNo">7244</span>      newCell = new KeyValue(row.length, delta.getFamilyLength(),<a name="line.7244"></a>
-<span class="sourceLineNo">7245</span>        delta.getQualifierLength(), ts, KeyValue.Type.Put,<a name="line.7245"></a>
-<span class="sourceLineNo">7246</span>        delta.getValueLength() + currentValue.getValueLength(),<a name="line.7246"></a>
-<span class="sourceLineNo">7247</span>        tagBytes == null? 0: tagBytes.length);<a name="line.7247"></a>
-<span class="sourceLineNo">7248</span>      // Copy in row, family, and qualifier<a name="line.7248"></a>
-<span class="sourceLineNo">7249</span>      System.arraycopy(row, 0, newCell.getRowArray(), newCell.getRowOffset(), row.length);<a name="line.7249"></a>
-<span class="sourceLineNo">7250</span>      System.arraycopy(delta.getFamilyArray(), delta.getFamilyOffset(),<a name="line.7250"></a>
-<span class="sourceLineNo">7251</span>          newCell.getFamilyArray(), newCell.getFamilyOffset(), delta.getFamilyLength());<a name="line.7251"></a>
-<span class="sourceLineNo">7252</span>      System.arraycopy(delta.getQualifierArray(), delta.getQualifierOffset(),<a name="line.7252"></a>
-<span class="sourceLineNo">7253</span>          newCell.getQualifierArray(), newCell.getQualifierOffset(), delta.getQualifierLength());<a name="line.7253"></a>
-<span class="sourceLineNo">7254</span>      // Copy in the value<a name="line.7254"></a>
-<span class="sourceLineNo">7255</span>      CellUtil.copyValueTo(currentValue, newCell.getValueArray(), newCell.getValueOffset());<a name="line.7255"></a>
-<span class="sourceLineNo">7256</span>      System.arraycopy(delta.getValueArray(), delta.getValueOffset(),<a name="line.7256"></a>
-<span class="sourceLineNo">7257</span>          newCell.getValueArray(), newCell.getValueOffset() + currentValue.getValueLength(),<a name="line.7257"></a>
-<span class="sourceLineNo">7258</span>          delta.getValueLength());<a name="line.7258"></a>
-<span class="sourceLineNo">7259</span>      // Copy in tag data<a name="line.7259"></a>
-<span class="sourceLineNo">7260</span>      if (tagBytes != null) {<a name="line.7260"></a>
-<span class="sourceLineNo">7261</span>        System.arraycopy(tagBytes, 0,<a name="line.7261"></a>
-<span class="sourceLineNo">7262</span>            newCell.getTagsArray(), newCell.getTagsOffset(), tagBytes.length);<a name="line.7262"></a>
-<span class="sourceLineNo">7263</span>      }<a name="line.7263"></a>
-<span class="sourceLineNo">7264</span>    } else {<a name="line.7264"></a>
-<span class="sourceLineNo">7265</span>      // Append's KeyValue.Type==Put and ts==HConstants.LATEST_TIMESTAMP<a name="line.7265"></a>
-<span class="sourceLineNo">7266</span>      CellUtil.updateLatestStamp(delta, now);<a name="line.7266"></a>
-<span class="sourceLineNo">7267</span>      newCell = delta;<a name="line.7267"></a>
-<span class="sourceLineNo">7268</span>      tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7268"></a>
-<span class="sourceLineNo">7269</span>      if (tags != null) {<a name="line.7269"></a>
-<span class="sourceLineNo">7270</span>        newCell = new TagRewriteCell(delta, TagUtil.fromList(tags));<a name="line.7270"></a>
-<span class="sourceLineNo">7271</span>      }<a name="line.7271"></a>
-<span class="sourceLineNo">7272</span>    }<a name="line.7272"></a>
-<span class="sourceLineNo">7273</span>    return newCell;<a name="line.7273"></a>
-<span class="sourceLineNo">7274</span>  }<a name="line.7274"></a>
-<span class="sourceLineNo">7275</span><a name="line.7275"></a>
-<span class="sourceLineNo">7276</span>  /**<a name="line.7276"></a>
-<span class="sourceLineNo">7277</span>   * @return Get the long out of the passed in Cell<a name="line.7277"></a>
-<span class="sourceLineNo">7278</span>   */<a name="line.7278"></a>
-<span class="sourceLineNo">7279</span>  private static long getLongValue(final Cell cell) throws DoNotRetryIOException {<a name="line.7279"></a>
-<span class="sourceLineNo">7280</span>    int len = cell.getValueLength();<a name="line.7280"></a>
-<span class="sourceLineNo">7281</span>    if (len != Bytes.SIZEOF_LONG) {<a name="line.7281"></a>
-<span class="sourceLineNo">7282</span>      // throw DoNotRetryIOException instead of IllegalArgumentException<a name="line.7282"></a>
-<span class="sourceLineNo">7283</span>      throw new DoNotRetryIOException("Field is not a long, it's " + len + " bytes wide");<a name="line.7283"></a>
-<span class="sourceLineNo">7284</span>    }<a name="line.7284"></a>
-<span class="sourceLineNo">7285</span>    return Bytes.toLong(cell.getValueArray(), cell.getValueOffset(), len);<a name="line.7285"></a>
-<span class="sourceLineNo">7286</span>  }<a name="line.7286"></a>
-<span class="sourceLineNo">7287</span><a name="line.7287"></a>
-<span class="sourceLineNo">7288</span>  /**<a name="line.7288"></a>
-<span class="sourceLineNo">7289</span>   * Do a specific Get on passed &lt;code&gt;columnFamily&lt;/code&gt; and column qualifiers.<a name="line.7289"></a>
-<span class="sourceLineNo">7290</span>   * @param mutation Mutation we are doing this Get for.<a name="line.7290"></a>
-<span class="sourceLineNo">7291</span>   * @param columnFamily Which column family on row (TODO: Go all Gets in one go)<a name="line.7291"></a>
-<span class="sourceLineNo">7292</span>   * @param coordinates Cells from &lt;code&gt;mutation&lt;/code&gt; used as coordinates applied to Get.<a name="line.7292"></a>
-<span class="sourceLineNo">7293</span>   * @return Return list of Cells found.<a name="line.7293"></a>
-<span class="sourceLineNo">7294</span>   */<a name="line.7294"></a>
-<span class="sourceLineNo">7295</span>  private List&lt;Cell&gt; get(final Mutation mutation, final Store store,<a name="line.7295"></a>
-<span class="sourceLineNo">7296</span>          final List&lt;Cell&gt; coordinates, final IsolationLevel isolation, final TimeRange tr)<a name="line.7296"></a>
-<span class="sourceLineNo">7297</span>  throws IOException {<a name="line.7297"></a>
-<span class="sourceLineNo">7298</span>    // Sort the cells so that they match the order that they appear in the Get results. Otherwise,<a name="line.7298"></a>
-<span class="sourceLineNo">7299</span>    // we won't be able to find the existing values if the cells are not specified in order by the<a name="line.7299"></a>
-<span class="sourceLineNo">7300</span>    // client since cells are in an array list.<a name="line.7300"></a>
-<span class="sourceLineNo">7301</span>    // TODO: I don't get why we are sorting. St.Ack 20150107<a name="line.7301"></a>
-<span class="sourceLineNo">7302</span>    sort(coordinates, store.getComparator());<a name="line.7302"></a>
-<span class="sourceLineNo">7303</span>    Get get = new Get(mutation.getRow());<a name="line.7303"></a>
-<span class="sourceLineNo">7304</span>    if (isolation != null) {<a name="line.7304"></a>
-<span class="sourceLineNo">7305</span>      get.setIsolationLevel(isolation);<a name="line.7305"></a>
-<span class="sourceLineNo">7306</span>    }<a name="line.7306"></a>
-<span class="sourceLineNo">7307</span>    for (Cell cell: coordinates) {<a name="line.7307"></a>
-<span class="sourceLineNo">7308</span>      get.addColumn(store.getFamily().getName(), CellUtil.cloneQualifier(cell));<a name="line.7308"></a>
-<span class="sourceLineNo">7309</span>    }<a name="line.7309"></a>
-<span class="sourceLineNo">7310</span>    // Increments carry time range. If an Increment instance, put it on the Get.<a name="line.7310"></a>
-<span class="sourceLineNo">7311</span>    if (tr != null) {<a name="line.7311"></a>
-<span class="sourceLineNo">7312</span>      get.setTimeRange(tr.getMin(), tr.getMax());<a name="line.7312"></a>
-<span class="sourceLineNo">7313</span>    }<a name="line.7313"></a>
-<span class="sourceLineNo">7314</span>    return get(get, false);<a name="line.7314"></a>
-<span class="sourceLineNo">7315</span>  }<a name="line.7315"></a>
-<span class="sourceLineNo">7316</span><a name="line.7316"></a>
-<span class="sourceLineNo">7317</span>  /**<a name="line.7317"></a>
-<span class="sourceLineNo">7318</span>   * @return Sorted list of &lt;code&gt;cells&lt;/code&gt; using &lt;code&gt;comparator&lt;/code&gt;<a name="line.7318"></a>
-<span class="sourceLineNo">7319</span>   */<a name="line.7319"></a>
-<span class="sourceLineNo">7320</span>  private static List&lt;Cell&gt; sort(List&lt;Cell&gt; cells, final Comparator&lt;Cell&gt; comparator) {<a name="line.7320"></a>
-<span class="sourceLineNo">7321</span>    Collections.sort(cells, comparator);<a name="line.7321"></a>
-<span class="sourceLineNo">7322</span>    return cells;<a name="line.7322"></a>
-<span class="sourceLineNo">7323</span>  }<a name="line.7323"></a>
-<span class="sourceLineNo">7324</span><a name="line.7324"></a>
-<span class="sourceLineNo">7325</span>  //<a name="line.7325"></a>
-<span class="sourceLineNo">7326</span>  // New HBASE-880 Helpers<a name="line.7326"></a>
+<span class="sourceLineNo">7128</span>   * Does Get of current value and then adds passed in deltas for this Store returning the result.<a name="line.7128"></a>
+<span class="sourceLineNo">7129</span>   *<a name="line.7129"></a>
+<span class="sourceLineNo">7130</span>   * @param op Whether Increment or Append<a name="line.7130"></a>
+<span class="sourceLineNo">7131</span>   * @param mutation The encompassing Mutation object<a name="line.7131"></a>
+<span class="sourceLineNo">7132</span>   * @param deltas Changes to apply to this Store; either increment amount or data to append<a name="line.7132"></a>
+<span class="sourceLineNo">7133</span>   * @param results In here we accumulate all the Cells we are to return to the client; this List<a name="line.7133"></a>
+<span class="sourceLineNo">7134</span>   *  can be larger than what we return in case where delta is zero; i.e. don't write<a name="line.7134"></a>
+<span class="sourceLineNo">7135</span>   *  out new values, just return current value. If null, client doesn't want results returned.<a name="line.7135"></a>
+<span class="sourceLineNo">7136</span>   * @return Resulting Cells after &lt;code&gt;deltas&lt;/code&gt; have been applied to current<a name="line.7136"></a>
+<span class="sourceLineNo">7137</span>   *  values. Side effect is our filling out of the &lt;code&gt;results&lt;/code&gt; List.<a name="line.7137"></a>
+<span class="sourceLineNo">7138</span>   */<a name="line.7138"></a>
+<span class="sourceLineNo">7139</span>  private List&lt;Cell&gt; reckonDeltasByStore(final Store store, final Operation op,<a name="line.7139"></a>
+<span class="sourceLineNo">7140</span>      final Mutation mutation, final Durability effectiveDurability, final long now,<a name="line.7140"></a>
+<span class="sourceLineNo">7141</span>      final List&lt;Cell&gt; deltas, final List&lt;Cell&gt; results)<a name="line.7141"></a>
+<span class="sourceLineNo">7142</span>  throws IOException {<a name="line.7142"></a>
+<span class="sourceLineNo">7143</span>    byte [] columnFamily = store.getFamily().getName();<a name="line.7143"></a>
+<span class="sourceLineNo">7144</span>    List&lt;Cell&gt; toApply = new ArrayList&lt;Cell&gt;(deltas.size());<a name="line.7144"></a>
+<span class="sourceLineNo">7145</span>    // Get previous values for all columns in this family.<a name="line.7145"></a>
+<span class="sourceLineNo">7146</span>    List&lt;Cell&gt; currentValues = get(mutation, store, deltas,<a name="line.7146"></a>
+<span class="sourceLineNo">7147</span>        null/*Default IsolationLevel*/,<a name="line.7147"></a>
+<span class="sourceLineNo">7148</span>        op == Operation.INCREMENT? ((Increment)mutation).getTimeRange(): null);<a name="line.7148"></a>
+<span class="sourceLineNo">7149</span>    // Iterate the input columns and update existing values if they were found, otherwise<a name="line.7149"></a>
+<span class="sourceLineNo">7150</span>    // add new column initialized to the delta amount<a name="line.7150"></a>
+<span class="sourceLineNo">7151</span>    int currentValuesIndex = 0;<a name="line.7151"></a>
+<span class="sourceLineNo">7152</span>    for (int i = 0; i &lt; deltas.size(); i++) {<a name="line.7152"></a>
+<span class="sourceLineNo">7153</span>      Cell delta = deltas.get(i);<a name="line.7153"></a>
+<span class="sourceLineNo">7154</span>      Cell currentValue = null;<a name="line.7154"></a>
+<span class="sourceLineNo">7155</span>      if (currentValuesIndex &lt; currentValues.size() &amp;&amp;<a name="line.7155"></a>
+<span class="sourceLineNo">7156</span>          CellUtil.matchingQualifier(currentValues.get(currentValuesIndex), delta)) {<a name="line.7156"></a>
+<span class="sourceLineNo">7157</span>        currentValue = currentValues.get(currentValuesIndex);<a name="line.7157"></a>
+<span class="sourceLineNo">7158</span>        if (i &lt; (deltas.size() - 1) &amp;&amp; !CellUtil.matchingQualifier(delta, deltas.get(i + 1))) {<a name="line.7158"></a>
+<span class="sourceLineNo">7159</span>          currentValuesIndex++;<a name="line.7159"></a>
+<span class="sourceLineNo">7160</span>        }<a name="line.7160"></a>
+<span class="sourceLineNo">7161</span>      }<a name="line.7161"></a>
+<span class="sourceLineNo">7162</span>      // Switch on whether this an increment or an append building the new Cell to apply.<a name="line.7162"></a>
+<span class="sourceLineNo">7163</span>      Cell newCell = null;<a name="line.7163"></a>
+<span class="sourceLineNo">7164</span>      MutationType mutationType = null;<a name="line.7164"></a>
+<span class="sourceLineNo">7165</span>      boolean apply = true;<a name="line.7165"></a>
+<span class="sourceLineNo">7166</span>      switch (op) {<a name="line.7166"></a>
+<span class="sourceLineNo">7167</span>        case INCREMENT:<a name="line.7167"></a>
+<span class="sourceLineNo">7168</span>          mutationType = MutationType.INCREMENT;<a name="line.7168"></a>
+<span class="sourceLineNo">7169</span>          // If delta amount to apply is 0, don't write WAL or MemStore.<a name="line.7169"></a>
+<span class="sourceLineNo">7170</span>          long deltaAmount = getLongValue(delta);<a name="line.7170"></a>
+<span class="sourceLineNo">7171</span>          apply = deltaAmount != 0;<a name="line.7171"></a>
+<span class="sourceLineNo">7172</span>          newCell = reckonIncrement(delta, deltaAmount, currentValue, columnFamily, now,<a name="line.7172"></a>
+<span class="sourceLineNo">7173</span>            (Increment)mutation);<a name="line.7173"></a>
+<span class="sourceLineNo">7174</span>          break;<a name="line.7174"></a>
+<span class="sourceLineNo">7175</span>        case APPEND:<a name="line.7175"></a>
+<span class="sourceLineNo">7176</span>          mutationType = MutationType.APPEND;<a name="line.7176"></a>
+<span class="sourceLineNo">7177</span>          // Always apply Append. TODO: Does empty delta value mean reset Cell? It seems to.<a name="line.7177"></a>
+<span class="sourceLineNo">7178</span>          newCell = reckonAppend(delta, currentValue, now, (Append)mutation);<a name="line.7178"></a>
+<span class="sourceLineNo">7179</span>          break;<a name="line.7179"></a>
+<span class="sourceLineNo">7180</span>        default: throw new UnsupportedOperationException(op.toString());<a name="line.7180"></a>
+<span class="sourceLineNo">7181</span>      }<a name="line.7181"></a>
+<span class="sourceLineNo">7182</span><a name="line.7182"></a>
+<span class="sourceLineNo">7183</span>      // Give coprocessors a chance to update the new cell<a name="line.7183"></a>
+<span class="sourceLineNo">7184</span>      if (coprocessorHost != null) {<a name="line.7184"></a>
+<span class="sourceLineNo">7185</span>        newCell =<a name="line.7185"></a>
+<span class="sourceLineNo">7186</span>            coprocessorHost.postMutationBeforeWAL(mutationType, mutation, currentValue, newCell);<a name="line.7186"></a>
+<span class="sourceLineNo">7187</span>      }<a name="line.7187"></a>
+<span class="sourceLineNo">7188</span>      // If apply, we need to update memstore/WAL with new value; add it toApply.<a name="line.7188"></a>
+<span class="sourceLineNo">7189</span>      if (apply) {<a name="line.7189"></a>
+<span class="sourceLineNo">7190</span>        toApply.add(newCell);<a name="line.7190"></a>
+<span class="sourceLineNo">7191</span>      }<a name="line.7191"></a>
+<span class="sourceLineNo">7192</span>      // Add to results to get returned to the Client. If null, cilent does not want results.<a name="line.7192"></a>
+<span class="sourceLineNo">7193</span>      if (results != null) {<a name="line.7193"></a>
+<span class="sourceLineNo">7194</span>        results.add(newCell);<a name="line.7194"></a>
+<span class="sourceLineNo">7195</span>      }<a name="line.7195"></a>
+<span class="sourceLineNo">7196</span>    }<a name="line.7196"></a>
+<span class="sourceLineNo">7197</span>    return toApply;<a name="line.7197"></a>
+<span class="sourceLineNo">7198</span>  }<a name="line.7198"></a>
+<span class="sourceLineNo">7199</span><a name="line.7199"></a>
+<span class="sourceLineNo">7200</span>  /**<a name="line.7200"></a>
+<span class="sourceLineNo">7201</span>   * Calculate new Increment Cell.<a name="line.7201"></a>
+<span class="sourceLineNo">7202</span>   * @return New Increment Cell with delta applied to currentValue if currentValue is not null;<a name="line.7202"></a>
+<span class="sourceLineNo">7203</span>   *  otherwise, a new Cell with the delta set as its value.<a name="line.7203"></a>
+<span class="sourceLineNo">7204</span>   */<a name="line.7204"></a>
+<span class="sourceLineNo">7205</span>  private Cell reckonIncrement(final Cell delta, final long deltaAmount, final Cell currentValue,<a name="line.7205"></a>
+<span class="sourceLineNo">7206</span>      byte [] columnFamily, final long now, Mutation mutation)<a name="line.7206"></a>
+<span class="sourceLineNo">7207</span>  throws IOException {<a name="line.7207"></a>
+<span class="sourceLineNo">7208</span>    // Forward any tags found on the delta.<a name="line.7208"></a>
+<span class="sourceLineNo">7209</span>    List&lt;Tag&gt; tags = TagUtil.carryForwardTags(delta);<a name="line.7209"></a>
+<span class="sourceLineNo">7210</span>    long newValue = deltaAmount;<a name="line.7210"></a>
+<span class="sourceLineNo">7211</span>    long ts = now;<a name="line.7211"></a>
+<span class="sourceLineNo">7212</span>    if (currentValue != null) {<a name="line.7212"></a>
+<span class="sourceLineNo">7213</span>      tags = TagUtil.carryForwardTags(tags, currentValue);<a name="line.7213"></a>
+<span class="sourceLineNo">7214</span>      ts = Math.max(now, currentValue.getTimestamp());<a name="line.7214"></a>
+<span class="sourceLineNo">7215</span>      newValue += getLongValue(currentValue);<a name="line.7215"></a>
+<span class="sourceLineNo">7216</span>    }<a name="line.7216"></a>
+<span class="sourceLineNo">7217</span>    // Now make up the new Cell. TODO: FIX. This is carnel knowledge of how KeyValues are made...<a name="line.7217"></a>
+<span class="sourceLineNo">7218</span>    // doesn't work well with offheaping or if we are doing a different Cell type.<a name="line.7218"></a>
+<span class="sourceLineNo">7219</span>    byte [] incrementAmountInBytes = Bytes.toBytes(newValue);<a name="line.7219"></a>
+<span class="sourceLineNo">7220</span>    tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7220"></a>
+<span class="sourceLineNo">7221</span>    byte [] row = mutation.getRow();<a name="line.7221"></a>
+<span class="sourceLineNo">7222</span>    return new KeyValue(row, 0, row.length,<a name="line.7222"></a>
+<span class="sourceLineNo">7223</span>      columnFamily, 0, columnFamily.length,<a name="line.7223"></a>
+<span class="sourceLineNo">7224</span>      delta.getQualifierArray(), delta.getQualifierOffset(), delta.getQualifierLength(),<a name="line.7224"></a>
+<span class="sourceLineNo">7225</span>      ts, KeyValue.Type.Put,<a name="line.7225"></a>
+<span class="sourceLineNo">7226</span>      incrementAmountInBytes, 0, incrementAmountInBytes.length,<a name="line.7226"></a>
+<span class="sourceLineNo">7227</span>      tags);<a name="line.7227"></a>
+<span class="sourceLineNo">7228</span>  }<a name="line.7228"></a>
+<span class="sourceLineNo">7229</span><a name="line.7229"></a>
+<span class="sourceLineNo">7230</span>  private Cell reckonAppend(final Cell delta, final Cell currentValue, final long now,<a name="line.7230"></a>
+<span class="sourceLineNo">7231</span>      Append mutation)<a name="line.7231"></a>
+<span class="sourceLineNo">7232</span>  throws IOException {<a name="line.7232"></a>
+<span class="sourceLineNo">7233</span>    // Forward any tags found on the delta.<a name="line.7233"></a>
+<span class="sourceLineNo">7234</span>    List&lt;Tag&gt; tags = TagUtil.carryForwardTags(delta);<a name="line.7234"></a>
+<span class="sourceLineNo">7235</span>    long ts = now;<a name="line.7235"></a>
+<span class="sourceLineNo">7236</span>    Cell newCell = null;<a name="line.7236"></a>
+<span class="sourceLineNo">7237</span>    byte [] row = mutation.getRow();<a name="line.7237"></a>
+<span class="sourceLineNo">7238</span>    if (currentValue != null) {<a name="line.7238"></a>
+<span class="sourceLineNo">7239</span>      tags = TagUtil.carryForwardTags(tags, currentValue);<a name="line.7239"></a>
+<span class="sourceLineNo">7240</span>      ts = Math.max(now, currentValue.getTimestamp());<a name="line.7240"></a>
+<span class="sourceLineNo">7241</span>      tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7241"></a>
+<span class="sourceLineNo">7242</span>      byte[] tagBytes = TagUtil.fromList(tags);<a name="line.7242"></a>
+<span class="sourceLineNo">7243</span>      // Allocate an empty cell and copy in all parts.<a name="line.7243"></a>
+<span class="sourceLineNo">7244</span>      // TODO: This is intimate knowledge of how a KeyValue is made. Undo!!! Prevents our doing<a name="line.7244"></a>
+<span class="sourceLineNo">7245</span>      // other Cell types. Copying on-heap too if an off-heap Cell.<a name="line.7245"></a>
+<span class="sourceLineNo">7246</span>      newCell = new KeyValue(row.length, delta.getFamilyLength(),<a name="line.7246"></a>
+<span class="sourceLineNo">7247</span>        delta.getQualifierLength(), ts, KeyValue.Type.Put,<a name="line.7247"></a>
+<span class="sourceLineNo">7248</span>        delta.getValueLength() + currentValue.getValueLength(),<a name="line.7248"></a>
+<span class="sourceLineNo">7249</span>        tagBytes == null? 0: tagBytes.length);<a name="line.7249"></a>
+<span class="sourceLineNo">7250</span>      // Copy in row, family, and qualifier<a name="line.7250"></a>
+<span class="sourceLineNo">7251</span>      System.arraycopy(row, 0, newCell.getRowArray(), newCell.getRowOffset(), row.length);<a name="line.7251"></a>
+<span class="sourceLineNo">7252</span>      System.arraycopy(delta.getFamilyArray(), delta.getFamilyOffset(),<a name="line.7252"></a>
+<span class="sourceLineNo">7253</span>          newCell.getFamilyArray(), newCell.getFamilyOffset(), delta.getFamilyLength());<a name="line.7253"></a>
+<span class="sourceLineNo">7254</span>      System.arraycopy(delta.getQualifierArray(), delta.getQualifierOffset(),<a name="line.7254"></a>
+<span class="sourceLineNo">7255</span>          newCell.getQualifierArray(), newCell.getQualifierOffset(), delta.getQualifierLength());<a name="line.7255"></a>
+<span class="sourceLineNo">7256</span>      // Copy in the value<a name="line.7256"></a>
+<span class="sourceLineNo">7257</span>      CellUtil.copyValueTo(currentValue, newCell.getValueArray(), newCell.getValueOffset());<a name="line.7257"></a>
+<span class="sourceLineNo">7258</span>      System.arraycopy(delta.getValueArray(), delta.getValueOffset(),<a name="line.7258"></a>
+<span class="sourceLineNo">7259</span>          newCell.getValueArray(), newCell.getValueOffset() + currentValue.getValueLength(),<a name="line.7259"></a>
+<span class="sourceLineNo">7260</span>          delta.getValueLength());<a name="line.7260"></a>
+<span class="sourceLineNo">7261</span>      // Copy in tag data<a name="line.7261"></a>
+<span class="sourceLineNo">7262</span>      if (tagBytes != null) {<a name="line.7262"></a>
+<span class="sourceLineNo">7263</span>        System.arraycopy(tagBytes, 0,<a name="line.7263"></a>
+<span class="sourceLineNo">7264</span>            newCell.getTagsArray(), newCell.getTagsOffset(), tagBytes.length);<a name="line.7264"></a>
+<span class="sourceLineNo">7265</span>      }<a name="line.7265"></a>
+<span class="sourceLineNo">7266</span>    } else {<a name="line.7266"></a>
+<span class="sourceLineNo">7267</span>      // Append's KeyValue.Type==Put and ts==HConstants.LATEST_TIMESTAMP<a name="line.7267"></a>
+<span class="sourceLineNo">7268</span>      CellUtil.updateLatestStamp(delta, now);<a name="line.7268"></a>
+<span class="sourceLineNo">7269</span>      newCell = delta;<a name="line.7269"></a>
+<span class="sourceLineNo">7270</span>      tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7270"></a>
+<span class="sourceLineNo">7271</span>      if (tags != null) {<a name="line.7271"></a>
+<span class="sourceLineNo">7272</span>        newCell = new TagRewriteCell(delta, TagUtil.fromList(tags));<a name="line.7272"></a>
+<span class="sourceLineNo">7273</span>      }<a name="line.7273"></a>
+<span class="sourceLineNo">7274</span>    }<a name="line.7274"></a>
+<span class="sourceLineNo">7275</span>    return newCell;<a name="line.7275"></a>
+<span class="sourceLineNo">7276</span>  }<a name="line.7276"></a>
+<span class="sourceLineNo">7277</span><a name="line.7277"></a>
+<span class="sourceLineNo">7278</span>  /**<a name="line.7278"></a>
+<span class="sourceLineNo">7279</span>   * @return Get the long out of the passed in Cell<a name="line.7279"></a>
+<span class="sourceLineNo">7280</span>   */<a name="line.7280"></a>
+<span class="sourceLineNo">7281</span>  private static long getLongValue(final Cell cell) throws DoNotRetryIOException {<a name="line.7281"></a>
+<span class="sourceLineNo">7282</span>    int len = cell.getValueLength();<a name="line.7282"></a>
+<span class="sourceLineNo">7283</span>    if (len != Bytes.SIZEOF_LONG) {<a name="line.7283"></a>
+<span class="sourceLineNo">7284</span>      // throw DoNotRetryIOException instead of IllegalArgumentException<a name="line.7284"></a>
+<span class="sourceLineNo">7285</span>      throw new DoNotRetryIOException("Field is not a long, it's " + len + " bytes wide");<a name="line.7285"></a>
+<span class="sourceLineNo">7286</span>    }<a name="line.7286"></a>
+<span class="sourceLineNo">7287</span>    return Bytes.toLong(cell.getValueArray(), cell.getValueOffset(), len);<a name="line.7287"></a>
+<span class="sourceLineNo">7288</span>  }<a name="line.7288"></a>
+<span class="sourceLineNo">7289</span><a name="line.7289"></a>
+<span class="sourceLineNo">7290</span>  /**<a name="line.7290"></a>
+<span class="sourceLineNo">7291</span>   * Do a specific Get on passed &lt;code&gt;columnFamily&lt;/code&gt; and column qualifiers.<a name="line.7291"></a>
+<span class="sourceLineNo">7292</span>   * @param mutation Mutation we are doing this Get for.<a name="line.7292"></a>
+<span class="sourceLineNo">7293</span>   * @param columnFamily Which column family on row (TODO: Go all Gets in one go)<a name="line.7293"></a>
+<span class="sourceLineNo">7294</span>   * @param coordinates Cells from &lt;code&gt;mutation&lt;/code&gt; used as coordinates applied to Get.<a name="line.7294"></a>
+<span class="sourceLineNo">7295</span>   * @return Return list of Cells found.<a name="line.7295"></a>
+<span class="sourceLineNo">7296</span>   */<a name="line.7296"></a>
+<span class="sourceLineNo">7297</span>  private List&lt;Cell&gt; get(final Mutation mutation, final Store store,<a name="line.7297"></a>
+<span class="sourceLineNo">7298</span>          final List&lt;Cell&gt; coordinates, final IsolationLevel isolation, final TimeRange tr)<a name="line.7298"></a>
+<span class="sourceLineNo">7299</span>  throws IOException {<a name="line.7299"></a>
+<span class="sourceLineNo">7300</span>    // Sort the cells so that they match the order that they appear in the Get results. Otherwise,<a name="line.7300"></a>
+<span class="sourceLineNo">7301</span>    // we won't be able to find the existing values if the cells are not specified in order by the<a name="line.7301"></a>
+<span class="sourceLineNo">7302</span>    // client since cells are in an array list.<a name="line.7302"></a>
+<span class="sourceLineNo">7303</span>    // TODO: I don't get why we are sorting. St.Ack 20150107<a name="line.7303"></a>
+<span class="sourceLineNo">7304</span>    sort(coordinates, store.getComparator());<a name="line.7304"></a>
+<span class="sourceLineNo">7305</span>    Get get = new Get(mutation.getRow());<a name="line.7305"></a>
+<span class="sourceLineNo">7306</span>    if (isolation != null) {<a name="line.7306"></a>
+<span class="sourceLineNo">7307</span>      get.setIsolationLevel(isolation);<a name="line.7307"></a>
+<span class="sourceLineNo">7308</span>    }<a name="line.7308"></a>
+<span class="sourceLineNo">7309</span>    for (Cell cell: coordinates) {<a name="line.7309"></a>
+<span class="sourceLineNo">7310</span>      get.addColumn(store.getFamily().getName(), CellUtil.cloneQualifier(cell));<a name="line.7310"></a>
+<span class="sourceLineNo">7311</span>    }<a name="line.7311"></a>
+<span class="sourceLineNo">7312</span>    // Increments carry time range. If an Increment instance, put it on the Get.<a name="line.7312"></a>
+<span class="sourceLineNo">7313</span>    if (tr != null) {<a name="line.7313"></a>
+<span class="sourceLineNo">7314</span>      get.setTimeRange(tr.getMin(), tr.getMax());<a name="line.7314"></a>
+<span class="sourceLineNo">7315</span>    }<a name="line.7315"></a>
+<span class="sourceLineNo">7316</span>    return get(get, false);<a name="line.7316"></a>
+<span class="sourceLineNo">7317</span>  }<a name="line.7317"></a>
+<span class="sourceLineNo">7318</span><a name="line.7318"></a>
+<span class="sourceLineNo">7319</span>  /**<a name="line.7319"></a>
+<span class="sourceLineNo">7320</span>   * @return Sorted list of &lt;code&gt;cells&lt;/code&gt; using &lt;code&gt;comparator&lt;/code&gt;<a name="line.7320"></a>
+<span class="sourceLineNo">7321</span>   */<a name="line.7321"></a>
+<span class="sourceLineNo">7322</span>  private static List&lt;Cell&gt; sort(List&lt;Cell&gt; cells, final Comparator&lt;Cell&gt; comparator) {<a name="line.7322"></a>
+<span class="sourceLineNo">7323</span>    Collections.sort(cells, comparator);<a name="line.7323"></a>
+<span class="sourceLineNo">7324</span>    return cells;<a name="line.7324"></a>
+<span class="sourceLineNo">7325</span>  }<a name="line.7325"></a>
+<span class="sourceLineNo">7326</span><a name="line.7326"></a>
 <span class="sourceLineNo">7327</span>  //<a name="line.7327"></a>
-<span class="sourceLineNo">7328</span><a name="line.7328"></a>
-<span class="sourceLineNo">7329</span>  void checkFamily(final byte [] family)<a name="line.7329"></a>
-<span class="sourceLineNo">7330</span>  throws NoSuchColumnFamilyException {<a name="line.7330"></a>
-<span class="sourceLineNo">7331</span>    if (!this.htableDescriptor.hasFamily(family)) {<a name="line.7331"></a>
-<span class="sourceLineNo">7332</span>      throw new NoSuchColumnFamilyException("Column family " +<a name="line.7332"></a>
-<span class="sourceLineNo">7333</span>          Bytes.toString(family) + " does not exist in region " + this<a name="line.7333"></a>
-<span class="sourceLineNo">7334</span>          + " in table " + this.htableDescriptor);<a name="line.7334"></a>
-<span class="sourceLineNo">7335</span>    }<a name="line.7335"></a>
-<span class="sourceLineNo">7336</span>  }<a name="line.7336"></a>
-<span class="sourceLineNo">7337</span><a name="line.7337"></a>
-<span class="sourceLineNo">7338</span>  public static final long FIXED_OVERHEAD = ClassSize.align(<a name="line.7338"></a>
-<span class="sourceLineNo">7339</span>      ClassSize.OBJECT +<a name="line.7339"></a>
-<span class="sourceLineNo">7340</span>      ClassSize.ARRAY +<a name="line.7340"></a>
-<span class="sourceLineNo">7341</span>      45 * ClassSize.REFERENCE + 2 * Bytes.SIZEOF_INT +<a name="line.7341"></a>
-<span class="sourceLineNo">7342</span>      (14 * Bytes.SIZEOF_LONG) +<a name="line.7342"></a>
-<span class="sourceLineNo">7343</span>      5 * Bytes.SIZEOF_BOOLEAN);<a name="line.7343"></a>
-<span class="sourceLineNo">7344</span><a name="line.7344"></a>
-<span class="sourceLineNo">7345</span>  // woefully out of date - currently missing:<a name="line.7345"></a>
-<span class="sourceLineNo">7346</span>  // 1 x HashMap - coprocessorServiceHandlers<a name="line.7346"></a>
-<span class="sourceLineNo">7347</span>  // 6 x Counter - numMutationsWithoutWAL, dataInMemoryWithoutWAL,<a name="line.7347"></a>
-<span class="sourceLineNo">7348</span>  //   checkAndMutateChecksPassed, checkAndMutateChecksFailed, readRequestsCount,<a name="line.7348"></a>
-<span class="sourceLineNo">7349</span>  //   writeRequestsCount<a name="line.7349"></a>
-<span class="sourceLineNo">7350</span>  // 1 x HRegion$WriteState - writestate<a name="line.7350"></a>
-<span class="sourceLineNo">7351</span>  // 1 x RegionCoprocessorHost - coprocessorHost<a name="line.7351"></a>
-<span class="sourceLineNo">7352</span>  // 1 x RegionSplitPolicy - splitPolicy<a name="line.7352"></a>
-<span class="sourceLineNo">7353</span>  // 1 x MetricsRegion - metricsRegion<a name="line.7353"></a>
-<span class="sourceLineNo">7354</span>  // 1 x MetricsRegionWrapperImpl - metricsRegionWrapper<a name="line.7354"></a>
-<span class="sourceLineNo">7355</span>  public static final long DEEP_OVERHEAD = FIXED_OVERHEAD +<a name="line.7355"></a>
-<span class="sourceLineNo">7356</span>      ClassSize.OBJECT + // closeLock<a name="line.7356"></a>
-<span class="sourceLineNo">7357</span>      (2 * ClassSize.ATOMIC_BOOLEAN) + // closed, closing<a name="line.7357"></a>
-<span class="sourceLineNo">7358</span>      (3 * ClassSize.ATOMIC_LONG) + // memStoreSize, numPutsWithoutWAL, dataInMemoryWithoutWAL<a name="line.7358"></a>
-<span class="sourceLineNo">7359</span>      (2 * ClassSize.CONCURRENT_HASHMAP) +  // lockedRows, scannerReadPoints<a name="line.7359"></a>
-<span class="sourceLineNo">7360</span>      WriteState.HEAP_SIZE + // writestate<a name="line.7360"></a>
-<span class="sourceLineNo">7361</span>      ClassSize.CONCURRENT_SKIPLISTMAP + ClassSize.CONCURRENT_SKIPLISTMAP_ENTRY + // stores<a name="line.7361"></a>
-<span class="sourceLineNo">7362</span>      (2 * ClassSize.REENTRANT_LOCK) + // lock, updatesLock<a name="line.7362"></a>
-<span class="sourceLineNo">7363</span>      MultiVersionConcurrencyControl.FIXED_SIZE // mvcc<a name="line.7363"></a>
-<span class="sourceLineNo">7364</span>      + ClassSize.TREEMAP // maxSeqIdInStores<a name="line.7364"></a>
-<span class="sourceLineNo">7365</span>      + 2 * ClassSize.ATOMIC_INTEGER // majorInProgress, minorInProgress<a name="line.7365"></a>
-<span class="sourceLineNo">7366</span>      ;<a name="line.7366"></a>
-<span class="sourceLineNo">7367</span><a name="line.7367"></a>
-<span class="sourceLineNo">7368</span>  @Override<a name="line.7368"></a>
-<span class="sourceLineNo">7369</span>  public long heapSize() {<a name="line.7369"></a>
-<span class="sourceLineNo">7370</span>    long heapSize = DEEP_OVERHEAD;<a name="line.7370"></a>
-<span class="sourceLineNo">7371</span>    for (Store store : this.stores.values()) {<a name="line.7371"></a>
-<span class="sourceLineNo">7372</span>      heapSize += store.heapSize();<a name="line.7372"></a>
-<span class="sourceLineNo">7373</span>    }<a name="line.7373"></a>
-<span class="sourceLineNo">7374</span>    // this does not take into account row locks, recent flushes, mvcc entries, and more<a name="line.7374"></a>
-<span class="sourceLineNo">7375</span>    return heapSize;<a name="line.7375"></a>
-<span class="sourceLineNo">7376</span>  }<a name="line.7376"></a>
-<span class="sourceLineNo">7377</span><a name="line.7377"></a>
-<span class="sourceLineNo">7378</span>  @Override<a name="line.7378"></a>
-<span class="sourceLineNo">7379</span>  public boolean registerService(Service instance) {<a name="line.7379"></a>
-<span class="sourceLineNo">7380</span>    /*<a name="line.7380"></a>
-<span class="sourceLineNo">7381</span>     * No stacking of instances is allowed for a single service name<a name="line.7381"></a>
-<span class="sourceLineNo">7382</span>     */<a name="line.7382"></a>
-<span class="sourceLineNo">7383</span>    Descriptors.ServiceDescriptor serviceDesc = instance.getDescriptorForType();<a name="line.7383"></a>
-<span class="sourceLineNo">7384</span>    if (coprocessorServiceHandlers.containsKey(serviceDesc.getFullName())) {<a name="line.7384"></a>
-<span class="sourceLineNo">7385</span>      LOG.error("Coprocessor service " + serviceDesc.getFullName() +<a name="line.7385"></a>
-<span class="sourceLineNo">7386</span>              " already registered, rejecting request from " + instance<a name="line.7386"></a>
-<span class="sourceLineNo">7387</span>      );<a name="line.7387"></a>
-<span class="sourceLineNo">7388</span>      return false;<a name="line.7388"></a>
-<span class="sourceLineNo">7389</span>    }<a name="line.7389"></a>
-<span class="sourceLineNo">7390</span><a name="line.7390"></a>
-<span class="sourceLineNo">7391</span>    coprocessorServiceHandlers.put(serviceDesc.getFullName(), instance);<a name="line.7391"></a>
-<span class="sourceLineNo">7392</span>    if (LOG.isDebugEnabled()) {<a name="line.7392"></a>
-<span class="sourceLineNo">7393</span>      LOG.debug("Registered coprocessor service: region=" +<a name="line.7393"></a>
-<span class="sourceLineNo">7394</span>          Bytes.toStringBinary(getRegionInfo().getRegionName()) +<a name="line.7394"></a>
-<span class="sourceLineNo">7395</span>          " service=" + serviceDesc.getFullName());<a name="line.7395"></a>
-<span class="sourceLineNo">7396</span>    }<a name="line.7396"></a>
-<span class="sourceLineNo">7397</span>    return true;<a name="line.7397"></a>
-<span class="sourceLineNo">7398</span>  }<a name="line.7398"></a>
-<span class="sourceLineNo">7399</span><a name="line.7399"></a>
-<span class="sourceLineNo">7400</span>  @Override<a name="line.7400"></a>
-<span class="sourceLineNo">7401</span>  public Message execService(RpcController controller, CoprocessorServiceCall call)<a name="line.7401"></a>
-<span class="sourceLineNo">7402</span>      throws IOException {<a name="line.7402"></a>
-<span class="sourceLineNo">7403</span>    String serviceName = call.getServiceName();<a name="line.7403"></a>
-<span class="sourceLineNo">7404</span>    String methodName = call.getMethodName();<a name="line.7404"></a>
-<span class="sourceLineNo">7405</span>    if (!coprocessorServiceHandlers.containsKey(serviceName)) {<a name="line.7405"></a>
-<span class="sourceLineNo">7406</span>      throw new UnknownProtocolException(null,<a name="line.7406"></a>
-<span class="sourceLineNo">7407</span>          "No registered coprocessor service found for name "+serviceName+<a name="line.7407"></a>
-<span class="sourceLineNo">7408</span>          " in region "+Bytes.toStringBinary(getRegionInfo().getRegionName()));<a name="line.7408"></a>
-<span class="sourceLineNo">7409</span>    }<a name="line.7409"></a>
-<span class="sourceLineNo">7410</span><a name="line.7410"></a>
-<span class="sourceLineNo">7411</span>    Service service = coprocessorServiceHandlers.get(serviceName);<a name="line.7411"></a>
-<span class="sourceLineNo">7412</span>    Descriptors.ServiceDescriptor serviceDesc = service.getDescriptorForType();<a name="line.7412"></a>
-<span class="sourceLineNo">7413</span>    Descriptors.MethodDescriptor methodDesc = serviceDesc.findMethodByName(methodName);<a name="line.7413"></a>
-<span class="sourceLineNo">7414</span>    if (methodDesc == null) {<a name="line.7414"></a>
-<span class="sourceLineNo">7415</span>      throw new UnknownProtocolException(service.getClass(),<a name="line.7415"></a>
-<span class="sourceLineNo">7416</span>          "Unknown method "+methodName+" called on service "+serviceName+<a name="line.7416"></a>
-<span class="sourceLineNo">7417</span>              " in region "+Bytes.toStringBinary(getRegionInfo().getRegionName()));<a name="line.7417"></a>
-<span class="sourceLineNo">7418</span>    }<a name="line.7418"></a>
-<span class="sourceLineNo">7419</span><a name="line.7419"></a>
-<span class="sourceLineNo">7420</span>    Message.Builder builder = service.getRequestPrototype(methodDesc).newBuilderForType();<a name="line.7420"></a>
-<span class="sourceLineNo">7421</span>    ProtobufUtil.mergeFrom(builder, call.getRequest());<a name="line.7421"></a>
-<span class="sourceLineNo">7422</span>    Message request = builder.build();<a name="line.7422"></a>
-<span class="sourceLineNo">7423</span><a name="line.7423"></a>
-<span class="sourceLineNo">7424</span>    if (coprocessorHost != null) {<a name="line.7424"></a>
-<span class="sourceLineNo">7425</span>      request = coprocessorHost.preEndpointInvocation(service, methodName, request);<a name="line.7425"></a>
-<span class="sourceLineNo">7426</span>    }<a name="line.7426"></a>
-<span class="sourceLineNo">7427</span><a name="line.7427"></a>
-<span class="sourceLineNo">7428</span>    final Message.Builder responseBuilder =<a name="line.7428"></a>
-<span class="sourceLineNo">7429</span>        service.getResponsePrototype(methodDesc).newBuilderForType();<a name="line.7429"></a>
-<span class="sourceLineNo">7430</span>    service.callMethod(methodDesc, controller, request, new RpcCallback&lt;Message&gt;() {<a name="line.7430"></a>
-<span class="sourceLineNo">7431</span>      @Override<a name="line.7431"></a>
-<span class="sourceLineNo">7432</span>      public void run(Message message) {<a name="line.7432"></a>
-<span class="sourceLineNo">7433</span>        if (message != null) {<a name="line.7433"></a>
-<span class="sourceLineNo">7434</span>          responseBuilder.mergeFrom(message);<a name="line.7434"></a>
-<span class="sourceLineNo">7435</span>        }<a name="line.7435"></a>
-<span class="sourceLineNo">7436</span>      }<a name="line.7436"></a>
-<span class="sourceLineNo">7437</span>    });<a name="line.7437"></a>
-<span class="sourceLineNo">7438</span><a name="line.7438"></a>
-<span class="sourceLineNo">7439</span>    if (coprocessorHost != null) {<a name="line.7439"></a>
-<span class="sourceLineNo">7440</span>      coprocessorHost.postEndpointInvocation(service, methodName, request, responseBuilder);<a name="line.7440"></a>
-<span class="sourceLineNo">7441</span>    }<a name="line.7441"></a>
-<span class="sourceLineNo">7442</span><a name="line.7442"></a>
-<span class="sourceLineNo">7443</span>    IOException exception = ResponseConverter.getControllerException(controller);<a name="line.7443"></a>
-<span class="sourceLineNo">7444</span>    if (exception != null) {<a name="line.7444"></a>
-<span class="sourceLineNo">7445</span>      throw exception;<a name="line.7445"></a>
-<span class="sourceLineNo">

<TRUNCATED>

[39/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html b/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html
index 914dd73..f5c0b75 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html
@@ -104,7 +104,7 @@
 </dl>
 <hr>
 <br>
-<pre>private static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.1623">WALSplitter.WriterAndPath</a>
+<pre>private static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.1659">WALSplitter.WriterAndPath</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.SinkWriter</a></pre>
 <div class="block">Private data structure that wraps a Writer and its Path, also collecting statistics about the
  data written to this output.</div>
@@ -127,10 +127,14 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.SinkWrit
 <th class="colLast" scope="col">Field and Description</th>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>(package private) long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html#minLogSeqNum">minLogSeqNum</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>(package private) org.apache.hadoop.fs.Path</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html#p">p</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.Writer.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.Writer</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html#w">w</a></strong></code>&nbsp;</td>
 </tr>
@@ -156,8 +160,9 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.SinkWrit
 <th class="colOne" scope="col">Constructor and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colOne"><code><strong><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html#WALSplitter.WriterAndPath(org.apache.hadoop.fs.Path,%20org.apache.hadoop.hbase.wal.WALProvider.Writer)">WALSplitter.WriterAndPath</a></strong>(org.apache.hadoop.fs.Path&nbsp;p,
-                                                  <a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.Writer.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.Writer</a>&nbsp;w)</code>&nbsp;</td>
+<td class="colOne"><code><strong><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html#WALSplitter.WriterAndPath(org.apache.hadoop.fs.Path,%20org.apache.hadoop.hbase.wal.WALProvider.Writer,%20long)">WALSplitter.WriterAndPath</a></strong>(org.apache.hadoop.fs.Path&nbsp;p,
+                                                  <a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.Writer.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.Writer</a>&nbsp;w,
+                                                  long&nbsp;minLogSeqNum)</code>&nbsp;</td>
 </tr>
 </table>
 </li>
@@ -202,16 +207,25 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.SinkWrit
 <ul class="blockList">
 <li class="blockList">
 <h4>p</h4>
-<pre>final&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html#line.1624">p</a></pre>
+<pre>final&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html#line.1660">p</a></pre>
 </li>
 </ul>
 <a name="w">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>w</h4>
-<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.Writer.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.Writer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html#line.1625">w</a></pre>
+<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.Writer.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.Writer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html#line.1661">w</a></pre>
+</li>
+</ul>
+<a name="minLogSeqNum">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>minLogSeqNum</h4>
+<pre>final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html#line.1662">minLogSeqNum</a></pre>
 </li>
 </ul>
 </li>
@@ -222,14 +236,15 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.SinkWrit
 <!--   -->
 </a>
 <h3>Constructor Detail</h3>
-<a name="WALSplitter.WriterAndPath(org.apache.hadoop.fs.Path, org.apache.hadoop.hbase.wal.WALProvider.Writer)">
+<a name="WALSplitter.WriterAndPath(org.apache.hadoop.fs.Path, org.apache.hadoop.hbase.wal.WALProvider.Writer, long)">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>WALSplitter.WriterAndPath</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html#line.1627">WALSplitter.WriterAndPath</a>(org.apache.hadoop.fs.Path&nbsp;p,
-                         <a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.Writer.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.Writer</a>&nbsp;w)</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html#line.1664">WALSplitter.WriterAndPath</a>(org.apache.hadoop.fs.Path&nbsp;p,
+                         <a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.Writer.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.Writer</a>&nbsp;w,
+                         long&nbsp;minLogSeqNum)</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.WriterThread.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.WriterThread.html b/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.WriterThread.html
index a9c9187..9ea0830 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.WriterThread.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.WriterThread.html
@@ -108,7 +108,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.1051">WALSplitter.WriterThread</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.1060">WALSplitter.WriterThread</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?is-external=true" title="class or interface in java.lang">Thread</a></pre>
 </li>
 </ul>
@@ -252,7 +252,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldStop</h4>
-<pre>private volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterThread.html#line.1052">shouldStop</a></pre>
+<pre>private volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterThread.html#line.1061">shouldStop</a></pre>
 </li>
 </ul>
 <a name="controller">
@@ -261,7 +261,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>controller</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.PipelineController.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.PipelineController</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterThread.html#line.1053">controller</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.PipelineController.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.PipelineController</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterThread.html#line.1062">controller</a></pre>
 </li>
 </ul>
 <a name="entryBuffers">
@@ -270,7 +270,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>entryBuffers</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.EntryBuffers.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.EntryBuffers</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterThread.html#line.1054">entryBuffers</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.EntryBuffers.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.EntryBuffers</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterThread.html#line.1063">entryBuffers</a></pre>
 </li>
 </ul>
 <a name="outputSink">
@@ -279,7 +279,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>outputSink</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.OutputSink</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterThread.html#line.1055">outputSink</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.OutputSink</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterThread.html#line.1064">outputSink</a></pre>
 </li>
 </ul>
 </li>
@@ -296,7 +296,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>WALSplitter.WriterThread</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterThread.html#line.1057">WALSplitter.WriterThread</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.PipelineController.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.PipelineController</a>&nbsp;controller,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterThread.html#line.1066">WALSplitter.WriterThread</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.PipelineController.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.PipelineController</a>&nbsp;controller,
                         <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.EntryBuffers.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.EntryBuffers</a>&nbsp;entryBuffers,
                         <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.OutputSink</a>&nbsp;sink,
                         int&nbsp;i)</pre>
@@ -316,7 +316,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterThread.html#line.1065">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterThread.html#line.1074">run</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.html?is-external=true#run()" title="class or interface in java.lang">run</a></code>&nbsp;in interface&nbsp;<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a></code></dd>
@@ -331,7 +331,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>doRun</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterThread.html#line.1074">doRun</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterThread.html#line.1083">doRun</a>()
             throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -343,7 +343,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>writeBuffer</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterThread.html#line.1104">writeBuffer</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.RegionEntryBuffer</a>&nbsp;buffer)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterThread.html#line.1113">writeBuffer</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.RegionEntryBuffer</a>&nbsp;buffer)
                   throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -355,7 +355,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>finish</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterThread.html#line.1108">finish</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterThread.html#line.1117">finish</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.html b/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.html
index 00c0704..5885c9d 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.html
@@ -235,72 +235,76 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.html#failedServerName">failedServerName</a></strong></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>private org.apache.hadoop.fs.FileStatus</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.html#fileBeingSplit">fileBeingSplit</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>protected org.apache.hadoop.fs.FileSystem</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.html#fs">fs</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected <a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/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><strong><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.html#lastFlushedSequenceIds">lastFlushedSequenceIds</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static org.apache.commons.logging.Log</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.html#LOG">LOG</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private int</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.html#minBatchSize">minBatchSize</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private int</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.html#numWriterThreads">numWriterThreads</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.html#OLD_SEQUENCE_ID_FILE_SUFFIX">OLD_SEQUENCE_ID_FILE_SUFFIX</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.OutputSink</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.html#outputSink">outputSink</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.html#RECOVERED_LOG_TMPFILE_SUFFIX">RECOVERED_LOG_TMPFILE_SUFFIX</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected <a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&gt;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.html#regionMaxSeqIdInStores">regionMaxSeqIdInStores</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected org.apache.hadoop.fs.Path</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.html#rootDir">rootDir</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.html#SEQUENCE_ID_FILE_SUFFIX">SEQUENCE_ID_FILE_SUFFIX</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static int</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.html#SEQUENCE_ID_FILE_SUFFIX_LENGTH">SEQUENCE_ID_FILE_SUFFIX_LENGTH</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected <a href="../../../../../org/apache/hadoop/hbase/regionserver/LastSequenceId.html" title="interface in org.apache.hadoop.hbase.regionserver">LastSequenceId</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.html#sequenceIdChecker">sequenceIdChecker</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.html#SPLIT_SKIP_ERRORS_DEFAULT">SPLIT_SKIP_ERRORS_DEFAULT</a></strong></code>
 <div class="block">By default we retry errors in splitting, rather than skipping.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.html#status">status</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="../../../../../org/apache/hadoop/hbase/client/TableState.html" title="class in org.apache.hadoop.hbase.client">TableState</a>&gt;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.html#tableStatesCache">tableStatesCache</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.html" title="class in org.apache.hadoop.hbase.wal">WALFactory</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.html#walFactory">walFactory</a></strong></code>&nbsp;</td>
 </tr>
@@ -361,7 +365,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 </td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>(package private) static void</code></td>
+<td class="colFirst"><code>private static void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.html#finishSplitLogFile(org.apache.hadoop.fs.Path,%20org.apache.hadoop.fs.Path,%20org.apache.hadoop.fs.Path,%20org.apache.hadoop.conf.Configuration)">finishSplitLogFile</a></strong>(org.apache.hadoop.fs.Path&nbsp;rootdir,
                                     org.apache.hadoop.fs.Path&nbsp;oldLogDir,
                                     org.apache.hadoop.fs.Path&nbsp;logPath,
@@ -379,9 +383,9 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.html#formatRecoveredEditsFileName(long)">formatRecoveredEditsFileName</a></strong>(long&nbsp;seqid)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>(package private) static org.apache.hadoop.fs.Path</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.html#getCompletedRecoveredEditsFilePath(org.apache.hadoop.fs.Path,%20java.lang.Long)">getCompletedRecoveredEditsFilePath</a></strong>(org.apache.hadoop.fs.Path&nbsp;srcPath,
-                                                                    <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&nbsp;maximumEditLogSeqNum)</code>
+<td class="colFirst"><code>private static org.apache.hadoop.fs.Path</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.html#getCompletedRecoveredEditsFilePath(org.apache.hadoop.fs.Path,%20long)">getCompletedRecoveredEditsFilePath</a></strong>(org.apache.hadoop.fs.Path&nbsp;srcPath,
+                                                                    long&nbsp;maximumEditLogSeqNum)</code>
 <div class="block">Get the completed recovered edits file path, renaming it to be by last edit
  in the file from its first edit.</div>
 </td>
@@ -427,11 +431,11 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.html#getRegionDirRecoveredEditsDir(org.apache.hadoop.fs.Path)">getRegionDirRecoveredEditsDir</a></strong>(org.apache.hadoop.fs.Path&nbsp;regiondir)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>(package private) static org.apache.hadoop.fs.Path</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.html#getRegionSplitEditsPath(org.apache.hadoop.fs.FileSystem,%20org.apache.hadoop.hbase.wal.WAL.Entry,%20org.apache.hadoop.fs.Path,%20boolean)">getRegionSplitEditsPath</a></strong>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<td class="colFirst"><code>private static org.apache.hadoop.fs.Path</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.html#getRegionSplitEditsPath(org.apache.hadoop.fs.FileSystem,%20org.apache.hadoop.hbase.wal.WAL.Entry,%20org.apache.hadoop.fs.Path,%20org.apache.hadoop.fs.FileStatus)">getRegionSplitEditsPath</a></strong>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                               <a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;logEntry,
                                               org.apache.hadoop.fs.Path&nbsp;rootDir,
-                                              boolean&nbsp;isCreate)</code>
+                                              org.apache.hadoop.fs.FileStatus&nbsp;fileBeingSplit)</code>
 <div class="block">Path to a file under RECOVERED_EDITS_DIR directory of the region found in
  <code>logEntry</code> named for the sequenceid in the passed
  <code>logEntry</code>: e.g.</div>
@@ -446,7 +450,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 </td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>(package private) static <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colFirst"><code>private static <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.html#getTmpRecoveredEditsFileName(java.lang.String)">getTmpRecoveredEditsFileName</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;fileName)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
@@ -696,13 +700,22 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.177">minBatchSize</a></pre>
 </li>
 </ul>
+<a name="fileBeingSplit">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>fileBeingSplit</h4>
+<pre>private&nbsp;org.apache.hadoop.fs.FileStatus <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.180">fileBeingSplit</a></pre>
+</li>
+</ul>
 <a name="EDITFILES_NAME_PATTERN">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>EDITFILES_NAME_PATTERN</h4>
-<pre>private static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.577">EDITFILES_NAME_PATTERN</a></pre>
+<pre>private static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.586">EDITFILES_NAME_PATTERN</a></pre>
 </li>
 </ul>
 <a name="RECOVERED_LOG_TMPFILE_SUFFIX">
@@ -711,7 +724,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>RECOVERED_LOG_TMPFILE_SUFFIX</h4>
-<pre>private static final&nbsp;<a href="http://docs.oracle.com/javase/7/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/wal/WALSplitter.html#line.578">RECOVERED_LOG_TMPFILE_SUFFIX</a></pre>
+<pre>private static final&nbsp;<a href="http://docs.oracle.com/javase/7/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/wal/WALSplitter.html#line.587">RECOVERED_LOG_TMPFILE_SUFFIX</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.wal.WALSplitter.RECOVERED_LOG_TMPFILE_SUFFIX">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -721,7 +734,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>SEQUENCE_ID_FILE_SUFFIX</h4>
-<pre>private static final&nbsp;<a href="http://docs.oracle.com/javase/7/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/wal/WALSplitter.html#line.659">SEQUENCE_ID_FILE_SUFFIX</a></pre>
+<pre>private static final&nbsp;<a href="http://docs.oracle.com/javase/7/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/wal/WALSplitter.html#line.668">SEQUENCE_ID_FILE_SUFFIX</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.wal.WALSplitter.SEQUENCE_ID_FILE_SUFFIX">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -731,7 +744,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>OLD_SEQUENCE_ID_FILE_SUFFIX</h4>
-<pre>private static final&nbsp;<a href="http://docs.oracle.com/javase/7/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/wal/WALSplitter.html#line.660">OLD_SEQUENCE_ID_FILE_SUFFIX</a></pre>
+<pre>private static final&nbsp;<a href="http://docs.oracle.com/javase/7/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/wal/WALSplitter.html#line.669">OLD_SEQUENCE_ID_FILE_SUFFIX</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.wal.WALSplitter.OLD_SEQUENCE_ID_FILE_SUFFIX">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -741,7 +754,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>SEQUENCE_ID_FILE_SUFFIX_LENGTH</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.661">SEQUENCE_ID_FILE_SUFFIX_LENGTH</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.670">SEQUENCE_ID_FILE_SUFFIX_LENGTH</a></pre>
 </li>
 </ul>
 </li>
@@ -758,7 +771,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>WALSplitter</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.179">WALSplitter</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.html" title="class in org.apache.hadoop.hbase.wal">WALFactory</a>&nbsp;factory,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.183">WALSplitter</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.html" title="class in org.apache.hadoop.hbase.wal">WALFactory</a>&nbsp;factory,
            org.apache.hadoop.conf.Configuration&nbsp;conf,
            org.apache.hadoop.fs.Path&nbsp;rootDir,
            org.apache.hadoop.fs.FileSystem&nbsp;fs,
@@ -781,7 +794,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>splitLogFile</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.231">splitLogFile</a>(org.apache.hadoop.fs.Path&nbsp;rootDir,
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.235">splitLogFile</a>(org.apache.hadoop.fs.Path&nbsp;rootDir,
                    org.apache.hadoop.fs.FileStatus&nbsp;logfile,
                    org.apache.hadoop.fs.FileSystem&nbsp;fs,
                    org.apache.hadoop.conf.Configuration&nbsp;conf,
@@ -808,7 +821,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>split</h4>
-<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/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;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.243">split</a>(org.apache.hadoop.fs.Path&nbsp;rootDir,
+<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/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;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.247">split</a>(org.apache.hadoop.fs.Path&nbsp;rootDir,
                                     org.apache.hadoop.fs.Path&nbsp;logDir,
                                     org.apache.hadoop.fs.Path&nbsp;oldLogDir,
                                     org.apache.hadoop.fs.FileSystem&nbsp;fs,
@@ -825,7 +838,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>splitLogFile</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.270">splitLogFile</a>(org.apache.hadoop.fs.FileStatus&nbsp;logfile,
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.275">splitLogFile</a>(org.apache.hadoop.fs.FileStatus&nbsp;logfile,
                    <a href="../../../../../org/apache/hadoop/hbase/util/CancelableProgressable.html" title="interface in org.apache.hadoop.hbase.util">CancelableProgressable</a>&nbsp;reporter)
                throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">log splitting implementation, splits one log file.</div>
@@ -840,7 +853,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>finishSplitLogFile</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.425">finishSplitLogFile</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;logfile,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.431">finishSplitLogFile</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;logfile,
                       org.apache.hadoop.conf.Configuration&nbsp;conf)
                                throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Completes the work done by splitLogFile by archiving logs
@@ -860,11 +873,11 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>finishSplitLogFile</h4>
-<pre>static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.438">finishSplitLogFile</a>(org.apache.hadoop.fs.Path&nbsp;rootdir,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.444">finishSplitLogFile</a>(org.apache.hadoop.fs.Path&nbsp;rootdir,
                       org.apache.hadoop.fs.Path&nbsp;oldLogDir,
                       org.apache.hadoop.fs.Path&nbsp;logPath,
                       org.apache.hadoop.conf.Configuration&nbsp;conf)
-                        throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+                                throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
 </li>
@@ -875,7 +888,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>archiveLogs</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.466">archiveLogs</a>(<a href="http://docs.oracle.com/javase/7/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;&nbsp;corruptedLogs,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.472">archiveLogs</a>(<a href="http://docs.oracle.com/javase/7/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;&nbsp;corruptedLogs,
                <a href="http://docs.oracle.com/javase/7/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;&nbsp;processedLogs,
                org.apache.hadoop.fs.Path&nbsp;oldLogDir,
                org.apache.hadoop.fs.FileSystem&nbsp;fs,
@@ -889,23 +902,23 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <dd><code><a href="http://docs.oracle.com/javase/7/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="getRegionSplitEditsPath(org.apache.hadoop.fs.FileSystem, org.apache.hadoop.hbase.wal.WAL.Entry, org.apache.hadoop.fs.Path, boolean)">
+<a name="getRegionSplitEditsPath(org.apache.hadoop.fs.FileSystem, org.apache.hadoop.hbase.wal.WAL.Entry, org.apache.hadoop.fs.Path, org.apache.hadoop.fs.FileStatus)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionSplitEditsPath</h4>
-<pre>static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.516">getRegionSplitEditsPath</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>private static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.523">getRegionSplitEditsPath</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                                 <a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;logEntry,
                                                 org.apache.hadoop.fs.Path&nbsp;rootDir,
-                                                boolean&nbsp;isCreate)
-                                                  throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+                                                org.apache.hadoop.fs.FileStatus&nbsp;fileBeingSplit)
+                                                          throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Path to a file under RECOVERED_EDITS_DIR directory of the region found in
  <code>logEntry</code> named for the sequenceid in the passed
  <code>logEntry</code>: e.g. /hbase/some_table/2323432434/recovered.edits/2332.
  This method also ensures existence of RECOVERED_EDITS_DIR under the region
  creating it if necessary.</div>
-<dl><dt><span class="strong">Parameters:</span></dt><dd><code>fs</code> - </dd><dd><code>logEntry</code> - </dd><dd><code>rootDir</code> - HBase root dir.</dd>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>fs</code> - </dd><dd><code>logEntry</code> - </dd><dd><code>rootDir</code> - HBase root dir.</dd><dd><code>fileBeingSplit</code> - the file being split currently. Used to generate tmp file name.</dd>
 <dt><span class="strong">Returns:</span></dt><dd>Path to file into which to dump split log edits.</dd>
 <dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -917,17 +930,17 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getTmpRecoveredEditsFileName</h4>
-<pre>static&nbsp;<a href="http://docs.oracle.com/javase/7/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/wal/WALSplitter.html#line.555">getTmpRecoveredEditsFileName</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;fileName)</pre>
+<pre>private static&nbsp;<a href="http://docs.oracle.com/javase/7/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/wal/WALSplitter.html#line.563">getTmpRecoveredEditsFileName</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;fileName)</pre>
 </li>
 </ul>
-<a name="getCompletedRecoveredEditsFilePath(org.apache.hadoop.fs.Path, java.lang.Long)">
+<a name="getCompletedRecoveredEditsFilePath(org.apache.hadoop.fs.Path, long)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>getCompletedRecoveredEditsFilePath</h4>
-<pre>static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.567">getCompletedRecoveredEditsFilePath</a>(org.apache.hadoop.fs.Path&nbsp;srcPath,
-                                                           <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&nbsp;maximumEditLogSeqNum)</pre>
+<pre>private static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.575">getCompletedRecoveredEditsFilePath</a>(org.apache.hadoop.fs.Path&nbsp;srcPath,
+                                                           long&nbsp;maximumEditLogSeqNum)</pre>
 <div class="block">Get the completed recovered edits file path, renaming it to be by last edit
  in the file from its first edit. Then we could use the name to skip
  recovered edits when doing <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html#replayRecoveredEditsIfAny(org.apache.hadoop.fs.Path,%20java.util.Map,%20org.apache.hadoop.hbase.util.CancelableProgressable,%20org.apache.hadoop.hbase.monitoring.MonitoredTask)"><code>HRegion.replayRecoveredEditsIfAny(org.apache.hadoop.fs.Path, java.util.Map&lt;byte[], java.lang.Long&gt;, org.apache.hadoop.hbase.util.CancelableProgressable, org.apache.hadoop.hbase.monitoring.MonitoredTask)</code></a>.</div>
@@ -941,7 +954,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>formatRecoveredEditsFileName</h4>
-<pre>static&nbsp;<a href="http://docs.oracle.com/javase/7/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/wal/WALSplitter.html#line.573">formatRecoveredEditsFileName</a>(long&nbsp;seqid)</pre>
+<pre>static&nbsp;<a href="http://docs.oracle.com/javase/7/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/wal/WALSplitter.html#line.582">formatRecoveredEditsFileName</a>(long&nbsp;seqid)</pre>
 </li>
 </ul>
 <a name="getRegionDirRecoveredEditsDir(org.apache.hadoop.fs.Path)">
@@ -950,7 +963,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionDirRecoveredEditsDir</h4>
-<pre>public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.586">getRegionDirRecoveredEditsDir</a>(org.apache.hadoop.fs.Path&nbsp;regiondir)</pre>
+<pre>public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.595">getRegionDirRecoveredEditsDir</a>(org.apache.hadoop.fs.Path&nbsp;regiondir)</pre>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>regiondir</code> - This regions directory in the filesystem.</dd>
 <dt><span class="strong">Returns:</span></dt><dd>The directory that holds recovered edits files for the region
          <code>regiondir</code></dd></dl>
@@ -962,7 +975,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getSplitEditFilesSorted</h4>
-<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;org.apache.hadoop.fs.Path&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.599">getSplitEditFilesSorted</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;org.apache.hadoop.fs.Path&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.608">getSplitEditFilesSorted</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                                               org.apache.hadoop.fs.Path&nbsp;regiondir)
                                                                        throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Returns sorted set of edit files made by splitter, excluding files
@@ -979,7 +992,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>moveAsideBadEditsFile</h4>
-<pre>public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.649">moveAsideBadEditsFile</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.658">moveAsideBadEditsFile</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                               org.apache.hadoop.fs.Path&nbsp;edits)
                                                        throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Move aside a bad edits file.</div>
@@ -995,7 +1008,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isSequenceIdFile</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.667">isSequenceIdFile</a>(org.apache.hadoop.fs.Path&nbsp;file)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.676">isSequenceIdFile</a>(org.apache.hadoop.fs.Path&nbsp;file)</pre>
 <div class="block">Is the given file a region open sequence id file.</div>
 </li>
 </ul>
@@ -1005,7 +1018,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>writeRegionSequenceIdFile</h4>
-<pre>public static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.681">writeRegionSequenceIdFile</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.690">writeRegionSequenceIdFile</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                              org.apache.hadoop.fs.Path&nbsp;regiondir,
                              long&nbsp;newSeqId,
                              long&nbsp;saftyBumper)
@@ -1023,7 +1036,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getReader</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Reader.html" title="interface in org.apache.hadoop.hbase.wal">WAL.Reader</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.747">getReader</a>(org.apache.hadoop.fs.FileStatus&nbsp;file,
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Reader.html" title="interface in org.apache.hadoop.hbase.wal">WAL.Reader</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.756">getReader</a>(org.apache.hadoop.fs.FileStatus&nbsp;file,
                    boolean&nbsp;skipErrors,
                    <a href="../../../../../org/apache/hadoop/hbase/util/CancelableProgressable.html" title="interface in org.apache.hadoop.hbase.util">CancelableProgressable</a>&nbsp;reporter)
                         throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
@@ -1042,7 +1055,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getNextLogLine</h4>
-<pre>private static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.796">getNextLogLine</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Reader.html" title="interface in org.apache.hadoop.hbase.wal">WAL.Reader</a>&nbsp;in,
+<pre>private static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.805">getNextLogLine</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Reader.html" title="interface in org.apache.hadoop.hbase.wal">WAL.Reader</a>&nbsp;in,
                        org.apache.hadoop.fs.Path&nbsp;path,
                        boolean&nbsp;skipErrors)
                                  throws <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.CorruptedLogFileException.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.CorruptedLogFileException</a>,
@@ -1058,7 +1071,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>createWriter</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.Writer.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.Writer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.829">createWriter</a>(org.apache.hadoop.fs.Path&nbsp;logfile)
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.Writer.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.Writer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.838">createWriter</a>(org.apache.hadoop.fs.Path&nbsp;logfile)
                                    throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Create a new <a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.Writer.html" title="interface in org.apache.hadoop.hbase.wal"><code>WALProvider.Writer</code></a> for writing log splits.</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>a new Writer instance, caller should close</dd>
@@ -1072,7 +1085,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getReader</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Reader.html" title="interface in org.apache.hadoop.hbase.wal">WAL.Reader</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.838">getReader</a>(org.apache.hadoop.fs.Path&nbsp;curLogFile,
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Reader.html" title="interface in org.apache.hadoop.hbase.wal">WAL.Reader</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.847">getReader</a>(org.apache.hadoop.fs.Path&nbsp;curLogFile,
                    <a href="../../../../../org/apache/hadoop/hbase/util/CancelableProgressable.html" title="interface in org.apache.hadoop.hbase.util">CancelableProgressable</a>&nbsp;reporter)
                         throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Create a new <a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Reader.html" title="interface in org.apache.hadoop.hbase.wal"><code>WAL.Reader</code></a> for reading logs to split.</div>
@@ -1087,7 +1100,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getNumOpenWriters</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.845">getNumOpenWriters</a>()</pre>
+<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.854">getNumOpenWriters</a>()</pre>
 <div class="block">Get current open writers</div>
 </li>
 </ul>
@@ -1097,7 +1110,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getMutationsFromWALEntry</h4>
-<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/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/wal/WALSplitter.MutationReplay.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.MutationReplay</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.2245">getMutationsFromWALEntry</a>(org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WALEntry&nbsp;entry,
+<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/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/wal/WALSplitter.MutationReplay.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.MutationReplay</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.2283">getMutationsFromWALEntry</a>(org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WALEntry&nbsp;entry,
                                                         <a href="../../../../../org/apache/hadoop/hbase/CellScanner.html" title="interface in org.apache.hadoop.hbase">CellScanner</a>&nbsp;cells,
                                                         <a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.html" title="class in org.apache.hadoop.hbase.wal">WALKey</a>,<a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALEdit</a>&gt;&nbsp;logEntry,
                                                         <a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;durability)

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/org/apache/hadoop/hbase/wal/class-use/WAL.Entry.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/class-use/WAL.Entry.html b/devapidocs/org/apache/hadoop/hbase/wal/class-use/WAL.Entry.html
index 32e78a5..61c3790 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/class-use/WAL.Entry.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/class-use/WAL.Entry.html
@@ -572,11 +572,11 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 <td class="colLast"><span class="strong">WALSplitter.LogRecoveredEditsOutputSink.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html#filterCellByStore(org.apache.hadoop.hbase.wal.WAL.Entry)">filterCellByStore</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;logEntry)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>(package private) static org.apache.hadoop.fs.Path</code></td>
-<td class="colLast"><span class="strong">WALSplitter.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/wal/WALSplitter.html#getRegionSplitEditsPath(org.apache.hadoop.fs.FileSystem,%20org.apache.hadoop.hbase.wal.WAL.Entry,%20org.apache.hadoop.fs.Path,%20boolean)">getRegionSplitEditsPath</a></strong>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<td class="colFirst"><code>private static org.apache.hadoop.fs.Path</code></td>
+<td class="colLast"><span class="strong">WALSplitter.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/wal/WALSplitter.html#getRegionSplitEditsPath(org.apache.hadoop.fs.FileSystem,%20org.apache.hadoop.hbase.wal.WAL.Entry,%20org.apache.hadoop.fs.Path,%20org.apache.hadoop.fs.FileStatus)">getRegionSplitEditsPath</a></strong>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                               <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;logEntry,
                                               org.apache.hadoop.fs.Path&nbsp;rootDir,
-                                              boolean&nbsp;isCreate)</code>
+                                              org.apache.hadoop.fs.FileStatus&nbsp;fileBeingSplit)</code>
 <div class="block">Path to a file under RECOVERED_EDITS_DIR directory of the region found in
  <code>logEntry</code> named for the sequenceid in the passed
  <code>logEntry</code>: e.g.</div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/org/apache/hadoop/hbase/wal/class-use/WALProvider.Writer.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/class-use/WALProvider.Writer.html b/devapidocs/org/apache/hadoop/hbase/wal/class-use/WALProvider.Writer.html
index 4853c0f..7defb8d 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/class-use/WALProvider.Writer.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/class-use/WALProvider.Writer.html
@@ -249,8 +249,9 @@
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html#WALSplitter.WriterAndPath(org.apache.hadoop.fs.Path,%20org.apache.hadoop.hbase.wal.WALProvider.Writer)">WALSplitter.WriterAndPath</a></strong>(org.apache.hadoop.fs.Path&nbsp;p,
-                                                  <a href="../../../../../../org/apache/hadoop/hbase/wal/WALProvider.Writer.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.Writer</a>&nbsp;w)</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html#WALSplitter.WriterAndPath(org.apache.hadoop.fs.Path,%20org.apache.hadoop.hbase.wal.WALProvider.Writer,%20long)">WALSplitter.WriterAndPath</a></strong>(org.apache.hadoop.fs.Path&nbsp;p,
+                                                  <a href="../../../../../../org/apache/hadoop/hbase/wal/WALProvider.Writer.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.Writer</a>&nbsp;w,
+                                                  long&nbsp;minLogSeqNum)</code>&nbsp;</td>
 </tr>
 </tbody>
 </table>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/org/apache/hadoop/hbase/wal/class-use/WALSplitter.WriterAndPath.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/class-use/WALSplitter.WriterAndPath.html b/devapidocs/org/apache/hadoop/hbase/wal/class-use/WALSplitter.WriterAndPath.html
index 318e05a..2229d7f 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/class-use/WALSplitter.WriterAndPath.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/class-use/WALSplitter.WriterAndPath.html
@@ -108,6 +108,20 @@
 </tr>
 </tbody>
 </table>
+<table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
+<caption><span>Methods in <a href="../../../../../../org/apache/hadoop/hbase/wal/package-summary.html">org.apache.hadoop.hbase.wal</a> with parameters of type <a href="../../../../../../org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.WriterAndPath</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><span class="strong">WALSplitter.LogRecoveredEditsOutputSink.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html#deleteOneWithFewerEntries(org.apache.hadoop.hbase.wal.WALSplitter.WriterAndPath,%20org.apache.hadoop.fs.Path)">deleteOneWithFewerEntries</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.WriterAndPath</a>&nbsp;wap,
+                                                  org.apache.hadoop.fs.Path&nbsp;dst)</code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
index 2cda76d..515651f 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
@@ -149,8 +149,8 @@
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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/7/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/RegionGroupingProvider.Strategies.html" title="enum in org.apache.hadoop.hbase.wal"><span class="strong">RegionGroupingProvider.Strategies</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.Version.html" title="enum in org.apache.hadoop.hbase.wal"><span class="strong">WALKey.Version</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.Providers.html" title="enum in org.apache.hadoop.hbase.wal"><span class="strong">WALFactory.Providers</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.Version.html" title="enum in org.apache.hadoop.hbase.wal"><span class="strong">WALKey.Version</span></a></li>
 </ul>
 </li>
 </ul>


[41/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/org/apache/hadoop/hbase/util/OrderedBytes.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/OrderedBytes.html b/devapidocs/org/apache/hadoop/hbase/util/OrderedBytes.html
index 301613a..ef3f752 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/OrderedBytes.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/OrderedBytes.html
@@ -789,18 +789,32 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static boolean</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/OrderedBytes.html#isFixedInt16(org.apache.hadoop.hbase.util.PositionedByteRange)">isFixedInt16</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</code>
+<div class="block">Return true when the next encoded value in <code>src</code> uses fixed-width
+ Int16 encoding, false otherwise.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/OrderedBytes.html#isFixedInt32(org.apache.hadoop.hbase.util.PositionedByteRange)">isFixedInt32</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</code>
 <div class="block">Return true when the next encoded value in <code>src</code> uses fixed-width
  Int32 encoding, false otherwise.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/OrderedBytes.html#isFixedInt64(org.apache.hadoop.hbase.util.PositionedByteRange)">isFixedInt64</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</code>
 <div class="block">Return true when the next encoded value in <code>src</code> uses fixed-width
  Int64 encoding, false otherwise.</div>
 </td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><code>static boolean</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/OrderedBytes.html#isFixedInt8(org.apache.hadoop.hbase.util.PositionedByteRange)">isFixedInt8</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</code>
+<div class="block">Return true when the next encoded value in <code>src</code> uses fixed-width
+ Int8 encoding, false otherwise.</div>
+</td>
+</tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/OrderedBytes.html#isNull(org.apache.hadoop.hbase.util.PositionedByteRange)">isNull</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</code>
@@ -1984,7 +1998,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isNull</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1515">isNull</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1516">isNull</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
 <div class="block">Return true when the next encoded value in <code>src</code> is null, false
  otherwise.</div>
 </li>
@@ -1995,7 +2009,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isNumeric</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1525">isNumeric</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1526">isNumeric</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
 <div class="block">Return true when the next encoded value in <code>src</code> uses Numeric
  encoding, false otherwise. <code>NaN</code>, <code>+/-Inf</code> are valid Numeric
  values.</div>
@@ -2007,7 +2021,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isNumericInfinite</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1534">isNumericInfinite</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1535">isNumericInfinite</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
 <div class="block">Return true when the next encoded value in <code>src</code> uses Numeric
  encoding and is <code>Infinite</code>, false otherwise.</div>
 </li>
@@ -2018,7 +2032,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isNumericNaN</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1543">isNumericNaN</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1544">isNumericNaN</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
 <div class="block">Return true when the next encoded value in <code>src</code> uses Numeric
  encoding and is <code>NaN</code>, false otherwise.</div>
 </li>
@@ -2029,18 +2043,40 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isNumericZero</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1551">isNumericZero</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1552">isNumericZero</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
 <div class="block">Return true when the next encoded value in <code>src</code> uses Numeric
  encoding and is <code>0</code>, false otherwise.</div>
 </li>
 </ul>
+<a name="isFixedInt8(org.apache.hadoop.hbase.util.PositionedByteRange)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>isFixedInt8</h4>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1561">isFixedInt8</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
+<div class="block">Return true when the next encoded value in <code>src</code> uses fixed-width
+ Int8 encoding, false otherwise.</div>
+</li>
+</ul>
+<a name="isFixedInt16(org.apache.hadoop.hbase.util.PositionedByteRange)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>isFixedInt16</h4>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1570">isFixedInt16</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
+<div class="block">Return true when the next encoded value in <code>src</code> uses fixed-width
+ Int16 encoding, false otherwise.</div>
+</li>
+</ul>
 <a name="isFixedInt32(org.apache.hadoop.hbase.util.PositionedByteRange)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>isFixedInt32</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1560">isFixedInt32</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1579">isFixedInt32</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
 <div class="block">Return true when the next encoded value in <code>src</code> uses fixed-width
  Int32 encoding, false otherwise.</div>
 </li>
@@ -2051,7 +2087,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isFixedInt64</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1569">isFixedInt64</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1588">isFixedInt64</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
 <div class="block">Return true when the next encoded value in <code>src</code> uses fixed-width
  Int64 encoding, false otherwise.</div>
 </li>
@@ -2062,7 +2098,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isFixedFloat32</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1578">isFixedFloat32</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1597">isFixedFloat32</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
 <div class="block">Return true when the next encoded value in <code>src</code> uses fixed-width
  Float32 encoding, false otherwise.</div>
 </li>
@@ -2073,7 +2109,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isFixedFloat64</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1587">isFixedFloat64</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1606">isFixedFloat64</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
 <div class="block">Return true when the next encoded value in <code>src</code> uses fixed-width
  Float64 encoding, false otherwise.</div>
 </li>
@@ -2084,7 +2120,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isText</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1596">isText</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1615">isText</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
 <div class="block">Return true when the next encoded value in <code>src</code> uses Text encoding,
  false otherwise.</div>
 </li>
@@ -2095,7 +2131,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isBlobVar</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1605">isBlobVar</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1624">isBlobVar</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
 <div class="block">Return true when the next encoded value in <code>src</code> uses BlobVar
  encoding, false otherwise.</div>
 </li>
@@ -2106,7 +2142,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isBlobCopy</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1614">isBlobCopy</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1633">isBlobCopy</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
 <div class="block">Return true when the next encoded value in <code>src</code> uses BlobCopy
  encoding, false otherwise.</div>
 </li>
@@ -2117,7 +2153,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>skip</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1623">skip</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1642">skip</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
 <div class="block">Skip <code>buff</code>'s position forward over one encoded value.</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>number of bytes skipped.</dd></dl>
 </li>
@@ -2128,7 +2164,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>length</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1732">length</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;buff)</pre>
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1751">length</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;buff)</pre>
 <div class="block">Return the number of encoded entries remaining in <code>buff</code>. The
  state of <code>buff</code> is not modified through use of this method.</div>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/org/apache/hadoop/hbase/util/class-use/PositionedByteRange.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/class-use/PositionedByteRange.html b/devapidocs/org/apache/hadoop/hbase/util/class-use/PositionedByteRange.html
index e21ecea..06b381b 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/class-use/PositionedByteRange.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/class-use/PositionedByteRange.html
@@ -1464,18 +1464,32 @@
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static boolean</code></td>
+<td class="colLast"><span class="strong">OrderedBytes.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/OrderedBytes.html#isFixedInt16(org.apache.hadoop.hbase.util.PositionedByteRange)">isFixedInt16</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</code>
+<div class="block">Return true when the next encoded value in <code>src</code> uses fixed-width
+ Int16 encoding, false otherwise.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><span class="strong">OrderedBytes.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/OrderedBytes.html#isFixedInt32(org.apache.hadoop.hbase.util.PositionedByteRange)">isFixedInt32</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</code>
 <div class="block">Return true when the next encoded value in <code>src</code> uses fixed-width
  Int32 encoding, false otherwise.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><span class="strong">OrderedBytes.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/OrderedBytes.html#isFixedInt64(org.apache.hadoop.hbase.util.PositionedByteRange)">isFixedInt64</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</code>
 <div class="block">Return true when the next encoded value in <code>src</code> uses fixed-width
  Int64 encoding, false otherwise.</div>
 </td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><code>static boolean</code></td>
+<td class="colLast"><span class="strong">OrderedBytes.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/OrderedBytes.html#isFixedInt8(org.apache.hadoop.hbase.util.PositionedByteRange)">isFixedInt8</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</code>
+<div class="block">Return true when the next encoded value in <code>src</code> uses fixed-width
+ Int8 encoding, false otherwise.</div>
+</td>
+</tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><span class="strong">OrderedBytes.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/OrderedBytes.html#isNull(org.apache.hadoop.hbase.util.PositionedByteRange)">isNull</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</code>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/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 865478b..b717b82 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
@@ -462,11 +462,11 @@
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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/7/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/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util"><span class="strong">ChecksumType</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="strong">Order</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="strong">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/Bytes.LexicographicalComparerHolder.UnsafeComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="strong">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/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util"><span class="strong">HBaseFsck.ErrorReporter.ERROR_CODE</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="strong">Order</span></a></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="strong">PrettyPrinter.Unit</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="strong">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/PoolMap.PoolType.html" title="enum in org.apache.hadoop.hbase.util"><span class="strong">PoolMap.PoolType</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.CorruptedLogFileException.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.CorruptedLogFileException.html b/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.CorruptedLogFileException.html
index 839f5dc..0ef7cea 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.CorruptedLogFileException.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.CorruptedLogFileException.html
@@ -113,7 +113,7 @@
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.2208">WALSplitter.CorruptedLogFileException</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.2246">WALSplitter.CorruptedLogFileException</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 </li>
 </ul>
@@ -197,7 +197,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.ht
 <ul class="blockListLast">
 <li class="blockList">
 <h4>serialVersionUID</h4>
-<pre>private static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.CorruptedLogFileException.html#line.2209">serialVersionUID</a></pre>
+<pre>private static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.CorruptedLogFileException.html#line.2247">serialVersionUID</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.wal.WALSplitter.CorruptedLogFileException.serialVersionUID">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -215,7 +215,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.ht
 <ul class="blockListLast">
 <li class="blockList">
 <h4>WALSplitter.CorruptedLogFileException</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.CorruptedLogFileException.html#line.2211">WALSplitter.CorruptedLogFileException</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;s)</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.CorruptedLogFileException.html#line.2249">WALSplitter.CorruptedLogFileException</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;s)</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.EntryBuffers.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.EntryBuffers.html b/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.EntryBuffers.html
index 5a38422..6409b5f 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.EntryBuffers.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.EntryBuffers.html
@@ -99,7 +99,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.890">WALSplitter.EntryBuffers</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.899">WALSplitter.EntryBuffers</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">Class which accumulates edits and separates them into a buffer per region
  while simultaneously accounting RAM usage. Blocks if the RAM usage crosses
@@ -227,7 +227,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>controller</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.PipelineController.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.PipelineController</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.EntryBuffers.html#line.891">controller</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.PipelineController.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.PipelineController</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.EntryBuffers.html#line.900">controller</a></pre>
 </li>
 </ul>
 <a name="buffers">
@@ -236,7 +236,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>buffers</h4>
-<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.RegionEntryBuffer</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.EntryBuffers.html#line.893">buffers</a></pre>
+<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.RegionEntryBuffer</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.EntryBuffers.html#line.902">buffers</a></pre>
 </li>
 </ul>
 <a name="currentlyWriting">
@@ -245,7 +245,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>currentlyWriting</h4>
-<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;byte[]&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.EntryBuffers.html#line.899">currentlyWriting</a></pre>
+<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;byte[]&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.EntryBuffers.html#line.908">currentlyWriting</a></pre>
 </li>
 </ul>
 <a name="totalBuffered">
@@ -254,7 +254,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>totalBuffered</h4>
-<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.EntryBuffers.html#line.901">totalBuffered</a></pre>
+<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.EntryBuffers.html#line.910">totalBuffered</a></pre>
 </li>
 </ul>
 <a name="maxHeapUsage">
@@ -263,7 +263,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>maxHeapUsage</h4>
-<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.EntryBuffers.html#line.902">maxHeapUsage</a></pre>
+<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.EntryBuffers.html#line.911">maxHeapUsage</a></pre>
 </li>
 </ul>
 </li>
@@ -280,7 +280,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>WALSplitter.EntryBuffers</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.EntryBuffers.html#line.904">WALSplitter.EntryBuffers</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.PipelineController.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.PipelineController</a>&nbsp;controller,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.EntryBuffers.html#line.913">WALSplitter.EntryBuffers</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.PipelineController.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.PipelineController</a>&nbsp;controller,
                         long&nbsp;maxHeapUsage)</pre>
 </li>
 </ul>
@@ -298,7 +298,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>appendEntry</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.EntryBuffers.html#line.916">appendEntry</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;entry)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.EntryBuffers.html#line.925">appendEntry</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;entry)
                  throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>,
                         <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Append a log entry into the corresponding region buffer.
@@ -314,7 +314,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getChunkToWrite</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.RegionEntryBuffer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.EntryBuffers.html#line.946">getChunkToWrite</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.RegionEntryBuffer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.EntryBuffers.html#line.955">getChunkToWrite</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>RegionEntryBuffer a buffer of edits to be written or replayed.</dd></dl>
 </li>
 </ul>
@@ -324,7 +324,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>doneWriting</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.EntryBuffers.html#line.966">doneWriting</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.RegionEntryBuffer</a>&nbsp;buffer)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.EntryBuffers.html#line.975">doneWriting</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.RegionEntryBuffer</a>&nbsp;buffer)</pre>
 </li>
 </ul>
 <a name="isRegionCurrentlyWriting(byte[])">
@@ -333,7 +333,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isRegionCurrentlyWriting</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.EntryBuffers.html#line.980">isRegionCurrentlyWriting</a>(byte[]&nbsp;region)</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.EntryBuffers.html#line.989">isRegionCurrentlyWriting</a>(byte[]&nbsp;region)</pre>
 </li>
 </ul>
 <a name="waitUntilDrained()">
@@ -342,7 +342,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>waitUntilDrained</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.EntryBuffers.html#line.984">waitUntilDrained</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.EntryBuffers.html#line.993">waitUntilDrained</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html b/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html
index fbbc614..22e2778 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html
@@ -104,7 +104,7 @@
 </dl>
 <hr>
 <br>
-<pre> class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.1264">WALSplitter.LogRecoveredEditsOutputSink</a>
+<pre> class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.1273">WALSplitter.LogRecoveredEditsOutputSink</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.OutputSink</a></pre>
 <div class="block">Class that manages the output streams from the log splitting process.</div>
 </li>
@@ -181,21 +181,26 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html#filterCellByStore(org.apache.hadoop.hbase.wal.WAL.Entry)">filterCellByStore</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;logEntry)</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html#deleteOneWithFewerEntries(org.apache.hadoop.hbase.wal.WALSplitter.WriterAndPath,%20org.apache.hadoop.fs.Path)">deleteOneWithFewerEntries</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.WriterAndPath</a>&nbsp;wap,
+                                                  org.apache.hadoop.fs.Path&nbsp;dst)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html#filterCellByStore(org.apache.hadoop.hbase.wal.WAL.Entry)">filterCellByStore</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;logEntry)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/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;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html#finishWritingAndClose()">finishWritingAndClose</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html#getNumberOfRecoveredRegions()">getNumberOfRecoveredRegions</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/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/7/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><strong><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html#getOutputCounts()">getOutputCounts</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.WriterAndPath</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html#getWriterAndPath(org.apache.hadoop.hbase.wal.WAL.Entry)">getWriterAndPath</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;entry)</code>
 <div class="block">Get a writer and path for a log starting at the given entry.</div>
@@ -236,7 +241,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>WALSplitter.LogRecoveredEditsOutputSink</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html#line.1266">WALSplitter.LogRecoveredEditsOutputSink</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.PipelineController.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.PipelineController</a>&nbsp;controller,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html#line.1275">WALSplitter.LogRecoveredEditsOutputSink</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.PipelineController.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.PipelineController</a>&nbsp;controller,
                                        <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.EntryBuffers.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.EntryBuffers</a>&nbsp;entryBuffers,
                                        int&nbsp;numWriters)</pre>
 </li>
@@ -255,7 +260,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>finishWritingAndClose</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html#line.1281">finishWritingAndClose</a>()
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html#line.1290">finishWritingAndClose</a>()
                                                       throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
@@ -265,13 +270,26 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <dd><code><a href="http://docs.oracle.com/javase/7/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="deleteOneWithFewerEntries(org.apache.hadoop.hbase.wal.WALSplitter.WriterAndPath, org.apache.hadoop.fs.Path)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>deleteOneWithFewerEntries</h4>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html#line.1309">deleteOneWithFewerEntries</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.WriterAndPath</a>&nbsp;wap,
+                             org.apache.hadoop.fs.Path&nbsp;dst)
+                                throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<dl><dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/7/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="close()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>close</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html#line.1303">close</a>()
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html#line.1345">close</a>()
                                        throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Close all of the output streams.</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>the list of paths written.</dd>
@@ -285,7 +303,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>closeLogWriters</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html#line.1412">closeLogWriters</a>(<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>&gt;&nbsp;thrown)
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html#line.1448">closeLogWriters</a>(<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>&gt;&nbsp;thrown)
                                    throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -297,7 +315,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>getWriterAndPath</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.WriterAndPath</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html#line.1461">getWriterAndPath</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;entry)
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.WriterAndPath</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html#line.1497">getWriterAndPath</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;entry)
                                             throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Get a writer and path for a log starting at the given entry. This function is threadsafe so
  long as multiple threads are always acting on different regions.</div>
@@ -312,7 +330,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>createWAP</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.WriterAndPath</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html#line.1484">createWAP</a>(byte[]&nbsp;region,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.WriterAndPath</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html#line.1520">createWAP</a>(byte[]&nbsp;region,
                                   <a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;entry,
                                   org.apache.hadoop.fs.Path&nbsp;rootdir)
                                      throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -327,7 +345,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>filterCellByStore</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html#line.1502">filterCellByStore</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;logEntry)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html#line.1538">filterCellByStore</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;logEntry)</pre>
 </li>
 </ul>
 <a name="append(org.apache.hadoop.hbase.wal.WALSplitter.RegionEntryBuffer)">
@@ -336,7 +354,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>append</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html#line.1532">append</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.RegionEntryBuffer</a>&nbsp;buffer)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html#line.1568">append</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.RegionEntryBuffer</a>&nbsp;buffer)
             throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
@@ -352,7 +370,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>getOutputCounts</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/7/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/wal/WALSplitter.LogRecoveredEditsOutputSink.html#line.1579">getOutputCounts</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/7/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/wal/WALSplitter.LogRecoveredEditsOutputSink.html#line.1615">getOutputCounts</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#getOutputCounts()">getOutputCounts</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.OutputSink</a></code></dd>
@@ -365,7 +383,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getNumberOfRecoveredRegions</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html#line.1590">getNumberOfRecoveredRegions</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html#line.1626">getNumberOfRecoveredRegions</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#getNumberOfRecoveredRegions()">getNumberOfRecoveredRegions</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.OutputSink</a></code></dd>


[11/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterThread.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterThread.html b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterThread.html
index 0597160..b444f46 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterThread.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.WriterThread.html
@@ -184,2145 +184,2183 @@
 <span class="sourceLineNo">176</span>  // Min batch size when replay WAL edits<a name="line.176"></a>
 <span class="sourceLineNo">177</span>  private final int minBatchSize;<a name="line.177"></a>
 <span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span>  WALSplitter(final WALFactory factory, Configuration conf, Path rootDir,<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      FileSystem fs, LastSequenceId idChecker,<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      CoordinatedStateManager csm, RecoveryMode mode) {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    this.conf = HBaseConfiguration.create(conf);<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    String codecClassName = conf<a name="line.183"></a>
-<span class="sourceLineNo">184</span>        .get(WALCellCodec.WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    this.conf.set(HConstants.RPC_CODEC_CONF_KEY, codecClassName);<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    this.rootDir = rootDir;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    this.fs = fs;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    this.sequenceIdChecker = idChecker;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    this.csm = (BaseCoordinatedStateManager)csm;<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    this.walFactory = factory;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    this.controller = new PipelineController();<a name="line.191"></a>
-<span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span>    entryBuffers = new EntryBuffers(controller,<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        this.conf.getInt("hbase.regionserver.hlog.splitlog.buffersize",<a name="line.194"></a>
-<span class="sourceLineNo">195</span>            128*1024*1024));<a name="line.195"></a>
+<span class="sourceLineNo">179</span>  // the file being split currently<a name="line.179"></a>
+<span class="sourceLineNo">180</span>  private FileStatus fileBeingSplit;<a name="line.180"></a>
+<span class="sourceLineNo">181</span><a name="line.181"></a>
+<span class="sourceLineNo">182</span>  @VisibleForTesting<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  WALSplitter(final WALFactory factory, Configuration conf, Path rootDir,<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      FileSystem fs, LastSequenceId idChecker,<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      CoordinatedStateManager csm, RecoveryMode mode) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    this.conf = HBaseConfiguration.create(conf);<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    String codecClassName = conf<a name="line.187"></a>
+<span class="sourceLineNo">188</span>        .get(WALCellCodec.WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    this.conf.set(HConstants.RPC_CODEC_CONF_KEY, codecClassName);<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    this.rootDir = rootDir;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    this.fs = fs;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    this.sequenceIdChecker = idChecker;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    this.csm = (BaseCoordinatedStateManager)csm;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    this.walFactory = factory;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    this.controller = new PipelineController();<a name="line.195"></a>
 <span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span>    // a larger minBatchSize may slow down recovery because replay writer has to wait for<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    // enough edits before replaying them<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    this.minBatchSize = this.conf.getInt("hbase.regionserver.wal.logreplay.batch.size", 64);<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    this.distributedLogReplay = (RecoveryMode.LOG_REPLAY == mode);<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>    this.numWriterThreads = this.conf.getInt("hbase.regionserver.hlog.splitlog.writer.threads", 3);<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    if (csm != null &amp;&amp; this.distributedLogReplay) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      outputSink = new LogReplayOutputSink(controller, entryBuffers, numWriterThreads);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    } else {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      if (this.distributedLogReplay) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        LOG.info("ZooKeeperWatcher is passed in as NULL so disable distrubitedLogRepaly.");<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      }<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      this.distributedLogReplay = false;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      outputSink = new LogRecoveredEditsOutputSink(controller, entryBuffers, numWriterThreads);<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>  }<a name="line.213"></a>
-<span class="sourceLineNo">214</span><a name="line.214"></a>
-<span class="sourceLineNo">215</span>  /**<a name="line.215"></a>
-<span class="sourceLineNo">216</span>   * Splits a WAL file into region's recovered-edits directory.<a name="line.216"></a>
-<span class="sourceLineNo">217</span>   * This is the main entry point for distributed log splitting from SplitLogWorker.<a name="line.217"></a>
-<span class="sourceLineNo">218</span>   * &lt;p&gt;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>   * If the log file has N regions then N recovered.edits files will be produced.<a name="line.219"></a>
-<span class="sourceLineNo">220</span>   * &lt;p&gt;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   * @param rootDir<a name="line.221"></a>
-<span class="sourceLineNo">222</span>   * @param logfile<a name="line.222"></a>
-<span class="sourceLineNo">223</span>   * @param fs<a name="line.223"></a>
-<span class="sourceLineNo">224</span>   * @param conf<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   * @param reporter<a name="line.225"></a>
-<span class="sourceLineNo">226</span>   * @param idChecker<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   * @param cp coordination state manager<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   * @return false if it is interrupted by the progress-able.<a name="line.228"></a>
-<span class="sourceLineNo">229</span>   * @throws IOException<a name="line.229"></a>
-<span class="sourceLineNo">230</span>   */<a name="line.230"></a>
-<span class="sourceLineNo">231</span>  public static boolean splitLogFile(Path rootDir, FileStatus logfile, FileSystem fs,<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      Configuration conf, CancelableProgressable reporter, LastSequenceId idChecker,<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      CoordinatedStateManager cp, RecoveryMode mode, final WALFactory factory) throws IOException {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, idChecker, cp, mode);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    return s.splitLogFile(logfile, reporter);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  }<a name="line.236"></a>
-<span class="sourceLineNo">237</span><a name="line.237"></a>
-<span class="sourceLineNo">238</span>  // A wrapper to split one log folder using the method used by distributed<a name="line.238"></a>
-<span class="sourceLineNo">239</span>  // log splitting. Used by tools and unit tests. It should be package private.<a name="line.239"></a>
-<span class="sourceLineNo">240</span>  // It is public only because TestWALObserver is in a different package,<a name="line.240"></a>
-<span class="sourceLineNo">241</span>  // which uses this method to do log splitting.<a name="line.241"></a>
-<span class="sourceLineNo">242</span>  @VisibleForTesting<a name="line.242"></a>
-<span class="sourceLineNo">243</span>  public static List&lt;Path&gt; split(Path rootDir, Path logDir, Path oldLogDir,<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      FileSystem fs, Configuration conf, final WALFactory factory) throws IOException {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    final FileStatus[] logfiles = SplitLogManager.getFileList(conf,<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        Collections.singletonList(logDir), null);<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    List&lt;Path&gt; splits = new ArrayList&lt;Path&gt;();<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    if (logfiles != null &amp;&amp; logfiles.length &gt; 0) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      for (FileStatus logfile: logfiles) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, null, null,<a name="line.250"></a>
-<span class="sourceLineNo">251</span>            RecoveryMode.LOG_SPLITTING);<a name="line.251"></a>
-<span class="sourceLineNo">252</span>        if (s.splitLogFile(logfile, null)) {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>          finishSplitLogFile(rootDir, oldLogDir, logfile.getPath(), conf);<a name="line.253"></a>
-<span class="sourceLineNo">254</span>          if (s.outputSink.splits != null) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>            splits.addAll(s.outputSink.splits);<a name="line.255"></a>
-<span class="sourceLineNo">256</span>          }<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        }<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      }<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    }<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    if (!fs.delete(logDir, true)) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      throw new IOException("Unable to delete src dir: " + logDir);<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    return splits;<a name="line.263"></a>
-<span class="sourceLineNo">264</span>  }<a name="line.264"></a>
-<span class="sourceLineNo">265</span><a name="line.265"></a>
-<span class="sourceLineNo">266</span>  /**<a name="line.266"></a>
-<span class="sourceLineNo">267</span>   * log splitting implementation, splits one log file.<a name="line.267"></a>
-<span class="sourceLineNo">268</span>   * @param logfile should be an actual log file.<a name="line.268"></a>
-<span class="sourceLineNo">269</span>   */<a name="line.269"></a>
-<span class="sourceLineNo">270</span>  boolean splitLogFile(FileStatus logfile, CancelableProgressable reporter) throws IOException {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    Preconditions.checkState(status == null);<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    Preconditions.checkArgument(logfile.isFile(),<a name="line.272"></a>
-<span class="sourceLineNo">273</span>        "passed in file status is for something other than a regular file.");<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    boolean isCorrupted = false;<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    boolean skipErrors = conf.getBoolean("hbase.hlog.split.skip.errors",<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      SPLIT_SKIP_ERRORS_DEFAULT);<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    int interval = conf.getInt("hbase.splitlog.report.interval.loglines", 1024);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    Path logPath = logfile.getPath();<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    boolean outputSinkStarted = false;<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    boolean progress_failed = false;<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    int editsCount = 0;<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    int editsSkipped = 0;<a name="line.282"></a>
-<span class="sourceLineNo">283</span><a name="line.283"></a>
-<span class="sourceLineNo">284</span>    status =<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        TaskMonitor.get().createStatus(<a name="line.285"></a>
-<span class="sourceLineNo">286</span>          "Splitting log file " + logfile.getPath() + "into a temporary staging area.");<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    Reader in = null;<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    try {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      long logLength = logfile.getLen();<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      LOG.info("Splitting wal: " + logPath + ", length=" + logLength);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      LOG.info("DistributedLogReplay = " + this.distributedLogReplay);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      status.setStatus("Opening log file");<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>        progress_failed = true;<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        return false;<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      }<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      try {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        in = getReader(logfile, skipErrors, reporter);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      } catch (CorruptedLogFileException e) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>        LOG.warn("Could not get reader, corrupted log file " + logPath, e);<a name="line.300"></a>
-<span class="sourceLineNo">301</span>        ZKSplitLog.markCorrupted(rootDir, logfile.getPath().getName(), fs);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>        isCorrupted = true;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      }<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      if (in == null) {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>        LOG.warn("Nothing to split in log file " + logPath);<a name="line.305"></a>
-<span class="sourceLineNo">306</span>        return true;<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      }<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      int numOpenedFilesBeforeReporting = conf.getInt("hbase.splitlog.report.openedfiles", 3);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      int numOpenedFilesLastCheck = 0;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      outputSink.setReporter(reporter);<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      outputSink.startWriterThreads();<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      outputSinkStarted = true;<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      Entry entry;<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      Long lastFlushedSequenceId = -1L;<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      ServerName serverName = DefaultWALProvider.getServerNameFromWALDirectoryName(logPath);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      failedServerName = (serverName == null) ? "" : serverName.getServerName();<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      while ((entry = getNextLogLine(in, logPath, skipErrors)) != null) {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>        byte[] region = entry.getKey().getEncodedRegionName();<a name="line.318"></a>
-<span class="sourceLineNo">319</span>        String encodedRegionNameAsStr = Bytes.toString(region);<a name="line.319"></a>
-<span class="sourceLineNo">320</span>        lastFlushedSequenceId = lastFlushedSequenceIds.get(encodedRegionNameAsStr);<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        if (lastFlushedSequenceId == null) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>          if (this.distributedLogReplay) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>            RegionStoreSequenceIds ids =<a name="line.323"></a>
-<span class="sourceLineNo">324</span>                csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.324"></a>
-<span class="sourceLineNo">325</span>                  encodedRegionNameAsStr);<a name="line.325"></a>
-<span class="sourceLineNo">326</span>            if (ids != null) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>              lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.327"></a>
-<span class="sourceLineNo">328</span>              if (LOG.isDebugEnabled()) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>                LOG.debug("DLR Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.329"></a>
-<span class="sourceLineNo">330</span>                  TextFormat.shortDebugString(ids));<a name="line.330"></a>
-<span class="sourceLineNo">331</span>              }<a name="line.331"></a>
-<span class="sourceLineNo">332</span>            }<a name="line.332"></a>
-<span class="sourceLineNo">333</span>          } else if (sequenceIdChecker != null) {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>            RegionStoreSequenceIds ids = sequenceIdChecker.getLastSequenceId(region);<a name="line.334"></a>
-<span class="sourceLineNo">335</span>            Map&lt;byte[], Long&gt; maxSeqIdInStores = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.335"></a>
-<span class="sourceLineNo">336</span>            for (StoreSequenceId storeSeqId : ids.getStoreSequenceIdList()) {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>              maxSeqIdInStores.put(storeSeqId.getFamilyName().toByteArray(),<a name="line.337"></a>
-<span class="sourceLineNo">338</span>                storeSeqId.getSequenceId());<a name="line.338"></a>
-<span class="sourceLineNo">339</span>            }<a name="line.339"></a>
-<span class="sourceLineNo">340</span>            regionMaxSeqIdInStores.put(encodedRegionNameAsStr, maxSeqIdInStores);<a name="line.340"></a>
-<span class="sourceLineNo">341</span>            lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.341"></a>
-<span class="sourceLineNo">342</span>            if (LOG.isDebugEnabled()) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>              LOG.debug("DLS Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.343"></a>
-<span class="sourceLineNo">344</span>                  TextFormat.shortDebugString(ids));<a name="line.344"></a>
+<span class="sourceLineNo">197</span>    entryBuffers = new EntryBuffers(controller,<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        this.conf.getInt("hbase.regionserver.hlog.splitlog.buffersize",<a name="line.198"></a>
+<span class="sourceLineNo">199</span>            128*1024*1024));<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>    // a larger minBatchSize may slow down recovery because replay writer has to wait for<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    // enough edits before replaying them<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    this.minBatchSize = this.conf.getInt("hbase.regionserver.wal.logreplay.batch.size", 64);<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    this.distributedLogReplay = (RecoveryMode.LOG_REPLAY == mode);<a name="line.204"></a>
+<span class="sourceLineNo">205</span><a name="line.205"></a>
+<span class="sourceLineNo">206</span>    this.numWriterThreads = this.conf.getInt("hbase.regionserver.hlog.splitlog.writer.threads", 3);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    if (csm != null &amp;&amp; this.distributedLogReplay) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      outputSink = new LogReplayOutputSink(controller, entryBuffers, numWriterThreads);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    } else {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      if (this.distributedLogReplay) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>        LOG.info("ZooKeeperWatcher is passed in as NULL so disable distrubitedLogRepaly.");<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      }<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      this.distributedLogReplay = false;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      outputSink = new LogRecoveredEditsOutputSink(controller, entryBuffers, numWriterThreads);<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    }<a name="line.215"></a>
+<span class="sourceLineNo">216</span><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>
+<span class="sourceLineNo">220</span>   * Splits a WAL file into region's recovered-edits directory.<a name="line.220"></a>
+<span class="sourceLineNo">221</span>   * This is the main entry point for distributed log splitting from SplitLogWorker.<a name="line.221"></a>
+<span class="sourceLineNo">222</span>   * &lt;p&gt;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>   * If the log file has N regions then N recovered.edits files will be produced.<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   * &lt;p&gt;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   * @param rootDir<a name="line.225"></a>
+<span class="sourceLineNo">226</span>   * @param logfile<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   * @param fs<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   * @param conf<a name="line.228"></a>
+<span class="sourceLineNo">229</span>   * @param reporter<a name="line.229"></a>
+<span class="sourceLineNo">230</span>   * @param idChecker<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   * @param cp coordination state manager<a name="line.231"></a>
+<span class="sourceLineNo">232</span>   * @return false if it is interrupted by the progress-able.<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   * @throws IOException<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   */<a name="line.234"></a>
+<span class="sourceLineNo">235</span>  public static boolean splitLogFile(Path rootDir, FileStatus logfile, FileSystem fs,<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      Configuration conf, CancelableProgressable reporter, LastSequenceId idChecker,<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      CoordinatedStateManager cp, RecoveryMode mode, final WALFactory factory) throws IOException {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, idChecker, cp, mode);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    return s.splitLogFile(logfile, reporter);<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>  // A wrapper to split one log folder using the method used by distributed<a name="line.242"></a>
+<span class="sourceLineNo">243</span>  // log splitting. Used by tools and unit tests. It should be package private.<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  // It is public only because TestWALObserver is in a different package,<a name="line.244"></a>
+<span class="sourceLineNo">245</span>  // which uses this method to do log splitting.<a name="line.245"></a>
+<span class="sourceLineNo">246</span>  @VisibleForTesting<a name="line.246"></a>
+<span class="sourceLineNo">247</span>  public static List&lt;Path&gt; split(Path rootDir, Path logDir, Path oldLogDir,<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      FileSystem fs, Configuration conf, final WALFactory factory) throws IOException {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    final FileStatus[] logfiles = SplitLogManager.getFileList(conf,<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        Collections.singletonList(logDir), null);<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    List&lt;Path&gt; splits = new ArrayList&lt;Path&gt;();<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    if (logfiles != null &amp;&amp; logfiles.length &gt; 0) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      for (FileStatus logfile: logfiles) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>        WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, null, null,<a name="line.254"></a>
+<span class="sourceLineNo">255</span>            RecoveryMode.LOG_SPLITTING);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>        if (s.splitLogFile(logfile, null)) {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>          finishSplitLogFile(rootDir, oldLogDir, logfile.getPath(), conf);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>          if (s.outputSink.splits != null) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>            splits.addAll(s.outputSink.splits);<a name="line.259"></a>
+<span class="sourceLineNo">260</span>          }<a name="line.260"></a>
+<span class="sourceLineNo">261</span>        }<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      }<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    }<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    if (!fs.delete(logDir, true)) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      throw new IOException("Unable to delete src dir: " + logDir);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    }<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    return splits;<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  }<a name="line.268"></a>
+<span class="sourceLineNo">269</span><a name="line.269"></a>
+<span class="sourceLineNo">270</span>  /**<a name="line.270"></a>
+<span class="sourceLineNo">271</span>   * log splitting implementation, splits one log file.<a name="line.271"></a>
+<span class="sourceLineNo">272</span>   * @param logfile should be an actual log file.<a name="line.272"></a>
+<span class="sourceLineNo">273</span>   */<a name="line.273"></a>
+<span class="sourceLineNo">274</span>  @VisibleForTesting<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  boolean splitLogFile(FileStatus logfile, CancelableProgressable reporter) throws IOException {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    Preconditions.checkState(status == null);<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    Preconditions.checkArgument(logfile.isFile(),<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        "passed in file status is for something other than a regular file.");<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    boolean isCorrupted = false;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    boolean skipErrors = conf.getBoolean("hbase.hlog.split.skip.errors",<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      SPLIT_SKIP_ERRORS_DEFAULT);<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    int interval = conf.getInt("hbase.splitlog.report.interval.loglines", 1024);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    Path logPath = logfile.getPath();<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    boolean outputSinkStarted = false;<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    boolean progress_failed = false;<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    int editsCount = 0;<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    int editsSkipped = 0;<a name="line.287"></a>
+<span class="sourceLineNo">288</span><a name="line.288"></a>
+<span class="sourceLineNo">289</span>    status =<a name="line.289"></a>
+<span class="sourceLineNo">290</span>        TaskMonitor.get().createStatus(<a name="line.290"></a>
+<span class="sourceLineNo">291</span>          "Splitting log file " + logfile.getPath() + "into a temporary staging area.");<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    Reader in = null;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    this.fileBeingSplit = logfile;<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    try {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      long logLength = logfile.getLen();<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      LOG.info("Splitting wal: " + logPath + ", length=" + logLength);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      LOG.info("DistributedLogReplay = " + this.distributedLogReplay);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      status.setStatus("Opening log file");<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>        progress_failed = true;<a name="line.300"></a>
+<span class="sourceLineNo">301</span>        return false;<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      }<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      try {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>        in = getReader(logfile, skipErrors, reporter);<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      } catch (CorruptedLogFileException e) {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>        LOG.warn("Could not get reader, corrupted log file " + logPath, e);<a name="line.306"></a>
+<span class="sourceLineNo">307</span>        ZKSplitLog.markCorrupted(rootDir, logfile.getPath().getName(), fs);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>        isCorrupted = true;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      }<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      if (in == null) {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        LOG.warn("Nothing to split in log file " + logPath);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        return true;<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      }<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      int numOpenedFilesBeforeReporting = conf.getInt("hbase.splitlog.report.openedfiles", 3);<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      int numOpenedFilesLastCheck = 0;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      outputSink.setReporter(reporter);<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      outputSink.startWriterThreads();<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      outputSinkStarted = true;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      Entry entry;<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      Long lastFlushedSequenceId = -1L;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      ServerName serverName = DefaultWALProvider.getServerNameFromWALDirectoryName(logPath);<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      failedServerName = (serverName == null) ? "" : serverName.getServerName();<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      while ((entry = getNextLogLine(in, logPath, skipErrors)) != null) {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>        byte[] region = entry.getKey().getEncodedRegionName();<a name="line.324"></a>
+<span class="sourceLineNo">325</span>        String encodedRegionNameAsStr = Bytes.toString(region);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>        lastFlushedSequenceId = lastFlushedSequenceIds.get(encodedRegionNameAsStr);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>        if (lastFlushedSequenceId == null) {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>          if (this.distributedLogReplay) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>            RegionStoreSequenceIds ids =<a name="line.329"></a>
+<span class="sourceLineNo">330</span>                csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.330"></a>
+<span class="sourceLineNo">331</span>                  encodedRegionNameAsStr);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>            if (ids != null) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span>              lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.333"></a>
+<span class="sourceLineNo">334</span>              if (LOG.isDebugEnabled()) {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>                LOG.debug("DLR Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.335"></a>
+<span class="sourceLineNo">336</span>                  TextFormat.shortDebugString(ids));<a name="line.336"></a>
+<span class="sourceLineNo">337</span>              }<a name="line.337"></a>
+<span class="sourceLineNo">338</span>            }<a name="line.338"></a>
+<span class="sourceLineNo">339</span>          } else if (sequenceIdChecker != null) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>            RegionStoreSequenceIds ids = sequenceIdChecker.getLastSequenceId(region);<a name="line.340"></a>
+<span class="sourceLineNo">341</span>            Map&lt;byte[], Long&gt; maxSeqIdInStores = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.341"></a>
+<span class="sourceLineNo">342</span>            for (StoreSequenceId storeSeqId : ids.getStoreSequenceIdList()) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>              maxSeqIdInStores.put(storeSeqId.getFamilyName().toByteArray(),<a name="line.343"></a>
+<span class="sourceLineNo">344</span>                storeSeqId.getSequenceId());<a name="line.344"></a>
 <span class="sourceLineNo">345</span>            }<a name="line.345"></a>
-<span class="sourceLineNo">346</span>          }<a name="line.346"></a>
-<span class="sourceLineNo">347</span>          if (lastFlushedSequenceId == null) {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>            lastFlushedSequenceId = -1L;<a name="line.348"></a>
-<span class="sourceLineNo">349</span>          }<a name="line.349"></a>
-<span class="sourceLineNo">350</span>          lastFlushedSequenceIds.put(encodedRegionNameAsStr, lastFlushedSequenceId);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        }<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        if (lastFlushedSequenceId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>          editsSkipped++;<a name="line.353"></a>
-<span class="sourceLineNo">354</span>          continue;<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        }<a name="line.355"></a>
-<span class="sourceLineNo">356</span>        entryBuffers.appendEntry(entry);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        editsCount++;<a name="line.357"></a>
-<span class="sourceLineNo">358</span>        int moreWritersFromLastCheck = this.getNumOpenWriters() - numOpenedFilesLastCheck;<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        // If sufficient edits have passed, check if we should report progress.<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        if (editsCount % interval == 0<a name="line.360"></a>
-<span class="sourceLineNo">361</span>            || moreWritersFromLastCheck &gt; numOpenedFilesBeforeReporting) {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>          numOpenedFilesLastCheck = this.getNumOpenWriters();<a name="line.362"></a>
-<span class="sourceLineNo">363</span>          String countsStr = (editsCount - (editsSkipped + outputSink.getSkippedEdits()))<a name="line.363"></a>
-<span class="sourceLineNo">364</span>              + " edits, skipped " + editsSkipped + " edits.";<a name="line.364"></a>
-<span class="sourceLineNo">365</span>          status.setStatus("Split " + countsStr);<a name="line.365"></a>
-<span class="sourceLineNo">366</span>          if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>            progress_failed = true;<a name="line.367"></a>
-<span class="sourceLineNo">368</span>            return false;<a name="line.368"></a>
-<span class="sourceLineNo">369</span>          }<a name="line.369"></a>
-<span class="sourceLineNo">370</span>        }<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      }<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    } catch (InterruptedException ie) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      IOException iie = new InterruptedIOException();<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      iie.initCause(ie);<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      throw iie;<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    } catch (CorruptedLogFileException e) {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      LOG.warn("Could not parse, corrupted log file " + logPath, e);<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      csm.getSplitLogWorkerCoordination().markCorrupted(rootDir,<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        logfile.getPath().getName(), fs);<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      isCorrupted = true;<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    } catch (IOException e) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      throw e;<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    } finally {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      LOG.debug("Finishing writing output logs and closing down.");<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      try {<a name="line.386"></a>
-<span class="sourceLineNo">387</span>        if (null != in) {<a name="line.387"></a>
-<span class="sourceLineNo">388</span>          in.close();<a name="line.388"></a>
-<span class="sourceLineNo">389</span>        }<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      } catch (IOException exception) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        LOG.warn("Could not close wal reader: " + exception.getMessage());<a name="line.391"></a>
-<span class="sourceLineNo">392</span>        LOG.debug("exception details", exception);<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      }<a name="line.393"></a>
-<span class="sourceLineNo">394</span>      try {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        if (outputSinkStarted) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>          // Set progress_failed to true as the immediate following statement will reset its value<a name="line.396"></a>
-<span class="sourceLineNo">397</span>          // when finishWritingAndClose() throws exception, progress_failed has the right value<a name="line.397"></a>
-<span class="sourceLineNo">398</span>          progress_failed = true;<a name="line.398"></a>
-<span class="sourceLineNo">399</span>          progress_failed = outputSink.finishWritingAndClose() == null;<a name="line.399"></a>
-<span class="sourceLineNo">400</span>        }<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      } finally {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        String msg =<a name="line.402"></a>
-<span class="sourceLineNo">403</span>            "Processed " + editsCount + " edits across " + outputSink.getNumberOfRecoveredRegions()<a name="line.403"></a>
-<span class="sourceLineNo">404</span>                + " regions; edits skipped=" + editsSkipped + "; log file=" + logPath +<a name="line.404"></a>
-<span class="sourceLineNo">405</span>                ", length=" + logfile.getLen() + // See if length got updated post lease recovery<a name="line.405"></a>
-<span class="sourceLineNo">406</span>                ", corrupted=" + isCorrupted + ", progress failed=" + progress_failed;<a name="line.406"></a>
-<span class="sourceLineNo">407</span>        LOG.info(msg);<a name="line.407"></a>
-<span class="sourceLineNo">408</span>        status.markComplete(msg);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      }<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    }<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    return !progress_failed;<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>   * Completes the work done by splitLogFile by archiving logs<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   * &lt;p&gt;<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * It is invoked by SplitLogManager once it knows that one of the<a name="line.417"></a>
-<span class="sourceLineNo">418</span>   * SplitLogWorkers have completed the splitLogFile() part. If the master<a name="line.418"></a>
-<span class="sourceLineNo">419</span>   * crashes then this function might get called multiple times.<a name="line.419"></a>
-<span class="sourceLineNo">420</span>   * &lt;p&gt;<a name="line.420"></a>
-<span class="sourceLineNo">421</span>   * @param logfile<a name="line.421"></a>
-<span class="sourceLineNo">422</span>   * @param conf<a name="line.422"></a>
-<span class="sourceLineNo">423</span>   * @throws IOException<a name="line.423"></a>
-<span class="sourceLineNo">424</span>   */<a name="line.424"></a>
-<span class="sourceLineNo">425</span>  public static void finishSplitLogFile(String logfile,<a name="line.425"></a>
-<span class="sourceLineNo">426</span>      Configuration conf)  throws IOException {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    Path rootdir = FSUtils.getRootDir(conf);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    Path oldLogDir = new Path(rootdir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    Path logPath;<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    if (FSUtils.isStartingWithPath(rootdir, logfile)) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      logPath = new Path(logfile);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    } else {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      logPath = new Path(rootdir, logfile);<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    }<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    finishSplitLogFile(rootdir, oldLogDir, logPath, conf);<a name="line.435"></a>
-<span class="sourceLineNo">436</span>  }<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>  static void finishSplitLogFile(Path rootdir, Path oldLogDir,<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      Path logPath, Configuration conf) throws IOException {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    List&lt;Path&gt; processedLogs = new ArrayList&lt;Path&gt;();<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    List&lt;Path&gt; corruptedLogs = new ArrayList&lt;Path&gt;();<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    FileSystem fs;<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    fs = rootdir.getFileSystem(conf);<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    if (ZKSplitLog.isCorrupted(rootdir, logPath.getName(), fs)) {<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      corruptedLogs.add(logPath);<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    } else {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      processedLogs.add(logPath);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    }<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    archiveLogs(corruptedLogs, processedLogs, oldLogDir, fs, conf);<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    Path stagingDir = ZKSplitLog.getSplitLogDir(rootdir, logPath.getName());<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    fs.delete(stagingDir, true);<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  }<a name="line.452"></a>
-<span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span>  /**<a name="line.454"></a>
-<span class="sourceLineNo">455</span>   * Moves processed logs to a oldLogDir after successful processing Moves<a name="line.455"></a>
-<span class="sourceLineNo">456</span>   * corrupted logs (any log that couldn't be successfully parsed to corruptDir<a name="line.456"></a>
-<span class="sourceLineNo">457</span>   * (.corrupt) for later investigation<a name="line.457"></a>
-<span class="sourceLineNo">458</span>   *<a name="line.458"></a>
-<span class="sourceLineNo">459</span>   * @param corruptedLogs<a name="line.459"></a>
-<span class="sourceLineNo">460</span>   * @param processedLogs<a name="line.460"></a>
-<span class="sourceLineNo">461</span>   * @param oldLogDir<a name="line.461"></a>
-<span class="sourceLineNo">462</span>   * @param fs<a name="line.462"></a>
-<span class="sourceLineNo">463</span>   * @param conf<a name="line.463"></a>
-<span class="sourceLineNo">464</span>   * @throws IOException<a name="line.464"></a>
-<span class="sourceLineNo">465</span>   */<a name="line.465"></a>
-<span class="sourceLineNo">466</span>  private static void archiveLogs(<a name="line.466"></a>
-<span class="sourceLineNo">467</span>      final List&lt;Path&gt; corruptedLogs,<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      final List&lt;Path&gt; processedLogs, final Path oldLogDir,<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      final FileSystem fs, final Configuration conf) throws IOException {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    final Path corruptDir = new Path(FSUtils.getRootDir(conf), conf.get(<a name="line.470"></a>
-<span class="sourceLineNo">471</span>        "hbase.regionserver.hlog.splitlog.corrupt.dir",  HConstants.CORRUPT_DIR_NAME));<a name="line.471"></a>
-<span class="sourceLineNo">472</span><a name="line.472"></a>
-<span class="sourceLineNo">473</span>    if (!fs.mkdirs(corruptDir)) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      LOG.info("Unable to mkdir " + corruptDir);<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    }<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    fs.mkdirs(oldLogDir);<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>    // this method can get restarted or called multiple times for archiving<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    // the same log files.<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    for (Path corrupted : corruptedLogs) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      Path p = new Path(corruptDir, corrupted.getName());<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      if (fs.exists(corrupted)) {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        if (!fs.rename(corrupted, p)) {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>          LOG.warn("Unable to move corrupted log " + corrupted + " to " + p);<a name="line.484"></a>
-<span class="sourceLineNo">485</span>        } else {<a name="line.485"></a>
-<span class="sourceLineNo">486</span>          LOG.warn("Moved corrupted log " + corrupted + " to " + p);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>        }<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      }<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    }<a name="line.489"></a>
-<span class="sourceLineNo">490</span><a name="line.490"></a>
-<span class="sourceLineNo">491</span>    for (Path p : processedLogs) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      Path newPath = FSHLog.getWALArchivePath(oldLogDir, p);<a name="line.492"></a>
-<span class="sourceLineNo">493</span>      if (fs.exists(p)) {<a name="line.493"></a>
-<span class="sourceLineNo">494</span>        if (!FSUtils.renameAndSetModifyTime(fs, p, newPath)) {<a name="line.494"></a>
-<span class="sourceLineNo">495</span>          LOG.warn("Unable to move  " + p + " to " + newPath);<a name="line.495"></a>
-<span class="sourceLineNo">496</span>        } else {<a name="line.496"></a>
-<span class="sourceLineNo">497</span>          LOG.info("Archived processed log " + p + " to " + newPath);<a name="line.497"></a>
-<span class="sourceLineNo">498</span>        }<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      }<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><a name="line.502"></a>
-<span class="sourceLineNo">503</span>  /**<a name="line.503"></a>
-<span class="sourceLineNo">504</span>   * Path to a file under RECOVERED_EDITS_DIR directory of the region found in<a name="line.504"></a>
-<span class="sourceLineNo">505</span>   * &lt;code&gt;logEntry&lt;/code&gt; named for the sequenceid in the passed<a name="line.505"></a>
-<span class="sourceLineNo">506</span>   * &lt;code&gt;logEntry&lt;/code&gt;: e.g. /hbase/some_table/2323432434/recovered.edits/2332.<a name="line.506"></a>
-<span class="sourceLineNo">507</span>   * This method also ensures existence of RECOVERED_EDITS_DIR under the region<a name="line.507"></a>
-<span class="sourceLineNo">508</span>   * creating it if necessary.<a name="line.508"></a>
-<span class="sourceLineNo">509</span>   * @param fs<a name="line.509"></a>
-<span class="sourceLineNo">510</span>   * @param logEntry<a name="line.510"></a>
-<span class="sourceLineNo">511</span>   * @param rootDir HBase root dir.<a name="line.511"></a>
-<span class="sourceLineNo">512</span>   * @return Path to file into which to dump split log edits.<a name="line.512"></a>
-<span class="sourceLineNo">513</span>   * @throws IOException<a name="line.513"></a>
-<span class="sourceLineNo">514</span>   */<a name="line.514"></a>
-<span class="sourceLineNo">515</span>  @SuppressWarnings("deprecation")<a name="line.515"></a>
-<span class="sourceLineNo">516</span>  static Path getRegionSplitEditsPath(final FileSystem fs,<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      final Entry logEntry, final Path rootDir, boolean isCreate)<a name="line.517"></a>
-<span class="sourceLineNo">518</span>  throws IOException {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    Path tableDir = FSUtils.getTableDir(rootDir, logEntry.getKey().getTablename());<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    String encodedRegionName = Bytes.toString(logEntry.getKey().getEncodedRegionName());<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    Path regiondir = HRegion.getRegionDir(tableDir, encodedRegionName);<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    Path dir = getRegionDirRecoveredEditsDir(regiondir);<a name="line.522"></a>
-<span class="sourceLineNo">523</span><a name="line.523"></a>
-<span class="sourceLineNo">524</span>    if (!fs.exists(regiondir)) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      LOG.info("This region's directory doesn't exist: "<a name="line.525"></a>
-<span class="sourceLineNo">526</span>          + regiondir.toString() + ". It is very likely that it was" +<a name="line.526"></a>
-<span class="sourceLineNo">527</span>          " already split so it's safe to discard those edits.");<a name="line.527"></a>
-<span class="sourceLineNo">528</span>      return null;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    }<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    if (fs.exists(dir) &amp;&amp; fs.isFile(dir)) {<a name="line.530"></a>
-<span class="sourceLineNo">531</span>      Path tmp = new Path("/tmp");<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      if (!fs.exists(tmp)) {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>        fs.mkdirs(tmp);<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      }<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      tmp = new Path(tmp,<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        HConstants.RECOVERED_EDITS_DIR + "_" + encodedRegionName);<a name="line.536"></a>
-<span class="sourceLineNo">537</span>      LOG.warn("Found existing old file: " + dir + ". It could be some "<a name="line.537"></a>
-<span class="sourceLineNo">538</span>        + "leftover of an old installation. It should be a folder instead. "<a name="line.538"></a>
-<span class="sourceLineNo">539</span>        + "So moving it to " + tmp);<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      if (!fs.rename(dir, tmp)) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        LOG.warn("Failed to sideline old file " + dir);<a name="line.541"></a>
-<span class="sourceLineNo">542</span>      }<a name="line.542"></a>
-<span class="sourceLineNo">543</span>    }<a name="line.543"></a>
-<span class="sourceLineNo">544</span><a name="line.544"></a>
-<span class="sourceLineNo">545</span>    if (isCreate &amp;&amp; !fs.exists(dir)) {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>      if (!fs.mkdirs(dir)) LOG.warn("mkdir failed on " + dir);<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    }<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    // Append file name ends with RECOVERED_LOG_TMPFILE_SUFFIX to ensure<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    // region's replayRecoveredEdits will not delete it<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    String fileName = formatRecoveredEditsFileName(logEntry.getKey().getLogSeqNum());<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    fileName = getTmpRecoveredEditsFileName(fileName);<a name="line.551"></a>
-<span class="sourceLineNo">552</span>    return new Path(dir, fileName);<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>  static String getTmpRecoveredEditsFileName(String fileName) {<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    return fileName + RECOVERED_LOG_TMPFILE_SUFFIX;<a name="line.556"></a>
-<span class="sourceLineNo">557</span>  }<a name="line.557"></a>
-<span class="sourceLineNo">558</span><a name="line.558"></a>
-<span class="sourceLineNo">559</span>  /**<a name="line.559"></a>
-<span class="sourceLineNo">560</span>   * Get the completed recovered edits file path, renaming it to be by last edit<a name="line.560"></a>
-<span class="sourceLineNo">561</span>   * in the file from its first edit. Then we could use the name to skip<a name="line.561"></a>
-<span class="sourceLineNo">562</span>   * recovered edits when doing {@link HRegion#replayRecoveredEditsIfAny}.<a name="line.562"></a>
-<span class="sourceLineNo">563</span>   * @param srcPath<a name="line.563"></a>
-<span class="sourceLineNo">564</span>   * @param maximumEditLogSeqNum<a name="line.564"></a>
-<span class="sourceLineNo">565</span>   * @return dstPath take file's last edit log seq num as the name<a name="line.565"></a>
-<span class="sourceLineNo">566</span>   */<a name="line.566"></a>
-<span class="sourceLineNo">567</span>  static Path getCompletedRecoveredEditsFilePath(Path srcPath,<a name="line.567"></a>
-<span class="sourceLineNo">568</span>      Long maximumEditLogSeqNum) {<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    String fileName = formatRecoveredEditsFileName(maximumEditLogSeqNum);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    return new Path(srcPath.getParent(), fileName);<a name="line.570"></a>
-<span class="sourceLineNo">571</span>  }<a name="line.571"></a>
-<span class="sourceLineNo">572</span><a name="line.572"></a>
-<span class="sourceLineNo">573</span>  static String formatRecoveredEditsFileName(final long seqid) {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    return String.format("%019d", seqid);<a name="line.574"></a>
-<span class="sourceLineNo">575</span>  }<a name="line.575"></a>
-<span class="sourceLineNo">576</span><a name="line.576"></a>
-<span class="sourceLineNo">577</span>  private static final Pattern EDITFILES_NAME_PATTERN = Pattern.compile("-?[0-9]+");<a name="line.577"></a>
-<span class="sourceLineNo">578</span>  private static final String RECOVERED_LOG_TMPFILE_SUFFIX = ".temp";<a name="line.578"></a>
-<span class="sourceLineNo">579</span><a name="line.579"></a>
-<span class="sourceLineNo">580</span>  /**<a name="line.580"></a>
-<span class="sourceLineNo">581</span>   * @param regiondir<a name="line.581"></a>
-<span class="sourceLineNo">582</span>   *          This regions directory in the filesystem.<a name="line.582"></a>
-<span class="sourceLineNo">583</span>   * @return The directory that holds recovered edits files for the region<a name="line.583"></a>
-<span class="sourceLineNo">584</span>   *         &lt;code&gt;regiondir&lt;/code&gt;<a name="line.584"></a>
-<span class="sourceLineNo">585</span>   */<a name="line.585"></a>
-<span class="sourceLineNo">586</span>  public static Path getRegionDirRecoveredEditsDir(final Path regiondir) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    return new Path(regiondir, HConstants.RECOVERED_EDITS_DIR);<a name="line.587"></a>
-<span class="sourceLineNo">588</span>  }<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span>  /**<a name="line.590"></a>
-<span class="sourceLineNo">591</span>   * Returns sorted set of edit files made by splitter, excluding files<a name="line.591"></a>
-<span class="sourceLineNo">592</span>   * with '.temp' suffix.<a name="line.592"></a>
-<span class="sourceLineNo">593</span>   *<a name="line.593"></a>
-<span class="sourceLineNo">594</span>   * @param fs<a name="line.594"></a>
-<span class="sourceLineNo">595</span>   * @param regiondir<a name="line.595"></a>
-<span class="sourceLineNo">596</span>   * @return Files in passed &lt;code&gt;regiondir&lt;/code&gt; as a sorted set.<a name="line.596"></a>
-<span class="sourceLineNo">597</span>   * @throws IOException<a name="line.597"></a>
-<span class="sourceLineNo">598</span>   */<a name="line.598"></a>
-<span class="sourceLineNo">599</span>  public static NavigableSet&lt;Path&gt; getSplitEditFilesSorted(final FileSystem fs,<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      final Path regiondir) throws IOException {<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    NavigableSet&lt;Path&gt; filesSorted = new TreeSet&lt;Path&gt;();<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    Path editsdir = getRegionDirRecoveredEditsDir(regiondir);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    if (!fs.exists(editsdir))<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      return filesSorted;<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    FileStatus[] files = FSUtils.listStatus(fs, editsdir, new PathFilter() {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      @Override<a name="line.606"></a>
-<span class="sourceLineNo">607</span>      public boolean accept(Path p) {<a name="line.607"></a>
-<span class="sourceLineNo">608</span>        boolean result = false;<a name="line.608"></a>
-<span class="sourceLineNo">609</span>        try {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>          // Return files and only files that match the editfile names pattern.<a name="line.610"></a>
-<span class="sourceLineNo">611</span>          // There can be other files in this directory other than edit files.<a name="line.611"></a>
-<span class="sourceLineNo">612</span>          // In particular, on error, we'll move aside the bad edit file giving<a name="line.612"></a>
-<span class="sourceLineNo">613</span>          // it a timestamp suffix. See moveAsideBadEditsFile.<a name="line.613"></a>
-<span class="sourceLineNo">614</span>          Matcher m = EDITFILES_NAME_PATTERN.matcher(p.getName());<a name="line.614"></a>
-<span class="sourceLineNo">615</span>          result = fs.isFile(p) &amp;&amp; m.matches();<a name="line.615"></a>
-<span class="sourceLineNo">616</span>          // Skip the file whose name ends with RECOVERED_LOG_TMPFILE_SUFFIX,<a name="line.616"></a>
-<span class="sourceLineNo">617</span>          // because it means splitwal thread is writting this file.<a name="line.617"></a>
-<span class="sourceLineNo">618</span>          if (p.getName().endsWith(RECOVERED_LOG_TMPFILE_SUFFIX)) {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>            result = false;<a name="line.619"></a>
-<span class="sourceLineNo">620</span>          }<a name="line.620"></a>
-<span class="sourceLineNo">621</span>          // Skip SeqId Files<a name="line.621"></a>
-<span class="sourceLineNo">622</span>          if (isSequenceIdFile(p)) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span>            result = false;<a name="line.623"></a>
-<span class="sourceLineNo">624</span>          }<a name="line.624"></a>
-<span class="sourceLineNo">625</span>        } catch (IOException e) {<a name="line.625"></a>
-<span class="sourceLineNo">626</span>          LOG.warn("Failed isFile check on " + p);<a name="line.626"></a>
-<span class="sourceLineNo">627</span>        }<a name="line.627"></a>
-<span class="sourceLineNo">628</span>        return result;<a name="line.628"></a>
-<span class="sourceLineNo">629</span>      }<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    });<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    if (files == null) {<a name="line.631"></a>
-<span class="sourceLineNo">632</span>      return filesSorted;<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    }<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    for (FileStatus status : files) {<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      filesSorted.add(status.getPath());<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    }<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    return filesSorted;<a name="line.637"></a>
-<span class="sourceLineNo">638</span>  }<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>   * Move aside a bad edits file.<a name="line.641"></a>
-<span class="sourceLineNo">642</span>   *<a name="line.642"></a>
-<span class="sourceLineNo">643</span>   * @param fs<a name="line.643"></a>
-<span class="sourceLineNo">644</span>   * @param edits<a name="line.644"></a>
-<span class="sourceLineNo">645</span>   *          Edits file to move aside.<a name="line.645"></a>
-<span class="sourceLineNo">646</span>   * @return The name of the moved aside file.<a name="line.646"></a>
-<span class="sourceLineNo">647</span>   * @throws IOException<a name="line.647"></a>
-<span class="sourceLineNo">648</span>   */<a name="line.648"></a>
-<span class="sourceLineNo">649</span>  public static Path moveAsideBadEditsFile(final FileSystem fs, final Path edits)<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      throws IOException {<a name="line.650"></a>
-<span class="sourceLineNo">651</span>    Path moveAsideName = new Path(edits.getParent(), edits.getName() + "."<a name="line.651"></a>
-<span class="sourceLineNo">652</span>        + System.currentTimeMillis());<a name="line.652"></a>
-<span class="sourceLineNo">653</span>    if (!fs.rename(edits, moveAsideName)) {<a name="line.653"></a>
-<span class="sourceLineNo">654</span>      LOG.warn("Rename failed from " + edits + " to " + moveAsideName);<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    }<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    return moveAsideName;<a name="line.656"></a>
-<span class="sourceLineNo">657</span>  }<a name="line.657"></a>
-<span class="sourceLineNo">658</span><a name="line.658"></a>
-<span class="sourceLineNo">659</span>  private static final String SEQUENCE_ID_FILE_SUFFIX = ".seqid";<a name="line.659"></a>
-<span class="sourceLineNo">660</span>  private static final String OLD_SEQUENCE_ID_FILE_SUFFIX = "_seqid";<a name="line.660"></a>
-<span class="sourceLineNo">661</span>  private static final int SEQUENCE_ID_FILE_SUFFIX_LENGTH = SEQUENCE_ID_FILE_SUFFIX.length();<a name="line.661"></a>
-<span class="sourceLineNo">662</span><a name="line.662"></a>
-<span class="sourceLineNo">663</span>  /**<a name="line.663"></a>
-<span class="sourceLineNo">664</span>   * Is the given file a region open sequence id file.<a name="line.664"></a>
-<span class="sourceLineNo">665</span>   */<a name="line.665"></a>
-<span class="sourceLineNo">666</span>  @VisibleForTesting<a name="line.666"></a>
-<span class="sourceLineNo">667</span>  public static boolean isSequenceIdFile(final Path file) {<a name="line.667"></a>
-<span class="sourceLineNo">668</span>    return file.getName().endsWith(SEQUENCE_ID_FILE_SUFFIX)<a name="line.668"></a>
-<span class="sourceLineNo">669</span>        || file.getName().endsWith(OLD_SEQUENCE_ID_FILE_SUFFIX);<a name="line.669"></a>
-<span class="sourceLineNo">670</span>  }<a name="line.670"></a>
+<span class="sourceLineNo">346</span>            regionMaxSeqIdInStores.put(encodedRegionNameAsStr, maxSeqIdInStores);<a name="line.346"></a>
+<span class="sourceLineNo">347</span>            lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.347"></a>
+<span class="sourceLineNo">348</span>            if (LOG.isDebugEnabled()) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>              LOG.debug("DLS Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.349"></a>
+<span class="sourceLineNo">350</span>                  TextFormat.shortDebugString(ids));<a name="line.350"></a>
+<span class="sourceLineNo">351</span>            }<a name="line.351"></a>
+<span class="sourceLineNo">352</span>          }<a name="line.352"></a>
+<span class="sourceLineNo">353</span>          if (lastFlushedSequenceId == null) {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>            lastFlushedSequenceId = -1L;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>          }<a name="line.355"></a>
+<span class="sourceLineNo">356</span>          lastFlushedSequenceIds.put(encodedRegionNameAsStr, lastFlushedSequenceId);<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        }<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        if (lastFlushedSequenceId &gt;= entry.getKey().getSequenceId()) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>          editsSkipped++;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>          continue;<a name="line.360"></a>
+<span class="sourceLineNo">361</span>        }<a name="line.361"></a>
+<span class="sourceLineNo">362</span>        entryBuffers.appendEntry(entry);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        editsCount++;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>        int moreWritersFromLastCheck = this.getNumOpenWriters() - numOpenedFilesLastCheck;<a name="line.364"></a>
+<span class="sourceLineNo">365</span>        // If sufficient edits have passed, check if we should report progress.<a name="line.365"></a>
+<span class="sourceLineNo">366</span>        if (editsCount % interval == 0<a name="line.366"></a>
+<span class="sourceLineNo">367</span>            || moreWritersFromLastCheck &gt; numOpenedFilesBeforeReporting) {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>          numOpenedFilesLastCheck = this.getNumOpenWriters();<a name="line.368"></a>
+<span class="sourceLineNo">369</span>          String countsStr = (editsCount - (editsSkipped + outputSink.getSkippedEdits()))<a name="line.369"></a>
+<span class="sourceLineNo">370</span>              + " edits, skipped " + editsSkipped + " edits.";<a name="line.370"></a>
+<span class="sourceLineNo">371</span>          status.setStatus("Split " + countsStr);<a name="line.371"></a>
+<span class="sourceLineNo">372</span>          if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>            progress_failed = true;<a name="line.373"></a>
+<span class="sourceLineNo">374</span>            return false;<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>      }<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    } catch (InterruptedException ie) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      IOException iie = new InterruptedIOException();<a name="line.379"></a>
+<span class="sourceLineNo">380</span>      iie.initCause(ie);<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      throw iie;<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    } catch (CorruptedLogFileException e) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      LOG.warn("Could not parse, corrupted log file " + logPath, e);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      csm.getSplitLogWorkerCoordination().markCorrupted(rootDir,<a name="line.384"></a>
+<span class="sourceLineNo">385</span>        logfile.getPath().getName(), fs);<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      isCorrupted = true;<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    } catch (IOException e) {<a name="line.387"></a>
+<span class="sourceLineNo">388</span>      e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      throw e;<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    } finally {<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      LOG.debug("Finishing writing output logs and closing down.");<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      try {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>        if (null != in) {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>          in.close();<a name="line.394"></a>
+<span class="sourceLineNo">395</span>        }<a name="line.395"></a>
+<span class="sourceLineNo">396</span>      } catch (IOException exception) {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>        LOG.warn("Could not close wal reader: " + exception.getMessage());<a name="line.397"></a>
+<span class="sourceLineNo">398</span>        LOG.debug("exception details", exception);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      }<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      try {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>        if (outputSinkStarted) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>          // Set progress_failed to true as the immediate following statement will reset its value<a name="line.402"></a>
+<span class="sourceLineNo">403</span>          // when finishWritingAndClose() throws exception, progress_failed has the right value<a name="line.403"></a>
+<span class="sourceLineNo">404</span>          progress_failed = true;<a name="line.404"></a>
+<span class="sourceLineNo">405</span>          progress_failed = outputSink.finishWritingAndClose() == null;<a name="line.405"></a>
+<span class="sourceLineNo">406</span>        }<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      } finally {<a name="line.407"></a>
+<span class="sourceLineNo">408</span>        String msg =<a name="line.408"></a>
+<span class="sourceLineNo">409</span>            "Processed " + editsCount + " edits across " + outputSink.getNumberOfRecoveredRegions()<a name="line.409"></a>
+<span class="sourceLineNo">410</span>                + " regions; edits skipped=" + editsSkipped + "; log file=" + logPath +<a name="line.410"></a>
+<span class="sourceLineNo">411</span>                ", length=" + logfile.getLen() + // See if length got updated post lease recovery<a name="line.411"></a>
+<span class="sourceLineNo">412</span>                ", corrupted=" + isCorrupted + ", progress failed=" + progress_failed;<a name="line.412"></a>
+<span class="sourceLineNo">413</span>        LOG.info(msg);<a name="line.413"></a>
+<span class="sourceLineNo">414</span>        status.markComplete(msg);<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>    return !progress_failed;<a name="line.417"></a>
+<span class="sourceLineNo">418</span>  }<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>   * Completes the work done by splitLogFile by archiving logs<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   * &lt;p&gt;<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   * It is invoked by SplitLogManager once it knows that one of the<a name="line.423"></a>
+<span class="sourceLineNo">424</span>   * SplitLogWorkers have completed the splitLogFile() part. If the master<a name="line.424"></a>
+<span class="sourceLineNo">425</span>   * crashes then this function might get called multiple times.<a name="line.425"></a>
+<span class="sourceLineNo">426</span>   * &lt;p&gt;<a name="line.426"></a>
+<span class="sourceLineNo">427</span>   * @param logfile<a name="line.427"></a>
+<span class="sourceLineNo">428</span>   * @param conf<a name="line.428"></a>
+<span class="sourceLineNo">429</span>   * @throws IOException<a name="line.429"></a>
+<span class="sourceLineNo">430</span>   */<a name="line.430"></a>
+<span class="sourceLineNo">431</span>  public static void finishSplitLogFile(String logfile,<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      Configuration conf)  throws IOException {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    Path rootdir = FSUtils.getRootDir(conf);<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    Path oldLogDir = new Path(rootdir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.434"></a>
+<span class="sourceLineNo">435</span>    Path logPath;<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    if (FSUtils.isStartingWithPath(rootdir, logfile)) {<a name="line.436"></a>
+<span class="sourceLineNo">437</span>      logPath = new Path(logfile);<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    } else {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>      logPath = new Path(rootdir, logfile);<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    }<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    finishSplitLogFile(rootdir, oldLogDir, logPath, conf);<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>  private static void finishSplitLogFile(Path rootdir, Path oldLogDir,<a name="line.444"></a>
+<span class="sourceLineNo">445</span>      Path logPath, Configuration conf) throws IOException {<a name="line.445"></a>
+<span class="sourceLineNo">446</span>    List&lt;Path&gt; processedLogs = new ArrayList&lt;Path&gt;();<a name="line.446"></a>
+<span class="sourceLineNo">447</span>    List&lt;Path&gt; corruptedLogs = new ArrayList&lt;Path&gt;();<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    FileSystem fs;<a name="line.448"></a>
+<span class="sourceLineNo">449</span>    fs = rootdir.getFileSystem(conf);<a name="line.449"></a>
+<span class="sourceLineNo">450</span>    if (ZKSplitLog.isCorrupted(rootdir, logPath.getName(), fs)) {<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      corruptedLogs.add(logPath);<a name="line.451"></a>
+<span class="sourceLineNo">452</span>    } else {<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      processedLogs.add(logPath);<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    }<a name="line.454"></a>
+<span class="sourceLineNo">455</span>    archiveLogs(corruptedLogs, processedLogs, oldLogDir, fs, conf);<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    Path stagingDir = ZKSplitLog.getSplitLogDir(rootdir, logPath.getName());<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    fs.delete(stagingDir, true);<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>  /**<a name="line.460"></a>
+<span class="sourceLineNo">461</span>   * Moves processed logs to a oldLogDir after successful processing Moves<a name="line.461"></a>
+<span class="sourceLineNo">462</span>   * corrupted logs (any log that couldn't be successfully parsed to corruptDir<a name="line.462"></a>
+<span class="sourceLineNo">463</span>   * (.corrupt) for later investigation<a name="line.463"></a>
+<span class="sourceLineNo">464</span>   *<a name="line.464"></a>
+<span class="sourceLineNo">465</span>   * @param corruptedLogs<a name="line.465"></a>
+<span class="sourceLineNo">466</span>   * @param processedLogs<a name="line.466"></a>
+<span class="sourceLineNo">467</span>   * @param oldLogDir<a name="line.467"></a>
+<span class="sourceLineNo">468</span>   * @param fs<a name="line.468"></a>
+<span class="sourceLineNo">469</span>   * @param conf<a name="line.469"></a>
+<span class="sourceLineNo">470</span>   * @throws IOException<a name="line.470"></a>
+<span class="sourceLineNo">471</span>   */<a name="line.471"></a>
+<span class="sourceLineNo">472</span>  private static void archiveLogs(<a name="line.472"></a>
+<span class="sourceLineNo">473</span>      final List&lt;Path&gt; corruptedLogs,<a name="line.473"></a>
+<span class="sourceLineNo">474</span>      final List&lt;Path&gt; processedLogs, final Path oldLogDir,<a name="line.474"></a>
+<span class="sourceLineNo">475</span>      final FileSystem fs, final Configuration conf) throws IOException {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    final Path corruptDir = new Path(FSUtils.getRootDir(conf), conf.get(<a name="line.476"></a>
+<span class="sourceLineNo">477</span>        "hbase.regionserver.hlog.splitlog.corrupt.dir",  HConstants.CORRUPT_DIR_NAME));<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>    if (!fs.mkdirs(corruptDir)) {<a name="line.479"></a>
+<span class="sourceLineNo">480</span>      LOG.info("Unable to mkdir " + corruptDir);<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    }<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    fs.mkdirs(oldLogDir);<a name="line.482"></a>
+<span class="sourceLineNo">483</span><a name="line.483"></a>
+<span class="sourceLineNo">484</span>    // this method can get restarted or called multiple times for archiving<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    // the same log files.<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    for (Path corrupted : corruptedLogs) {<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      Path p = new Path(corruptDir, corrupted.getName());<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      if (fs.exists(corrupted)) {<a name="line.488"></a>
+<span class="sourceLineNo">489</span>        if (!fs.rename(corrupted, p)) {<a name="line.489"></a>
+<span class="sourceLineNo">490</span>          LOG.warn("Unable to move corrupted log " + corrupted + " to " + p);<a name="line.490"></a>
+<span class="sourceLineNo">491</span>        } else {<a name="line.491"></a>
+<span class="sourceLineNo">492</span>          LOG.warn("Moved corrupted log " + corrupted + " to " + p);<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>    }<a name="line.495"></a>
+<span class="sourceLineNo">496</span><a name="line.496"></a>
+<span class="sourceLineNo">497</span>    for (Path p : processedLogs) {<a name="line.497"></a>
+<span class="sourceLineNo">498</span>      Path newPath = FSHLog.getWALArchivePath(oldLogDir, p);<a name="line.498"></a>
+<span class="sourceLineNo">499</span>      if (fs.exists(p)) {<a name="line.499"></a>
+<span class="sourceLineNo">500</span>        if (!FSUtils.renameAndSetModifyTime(fs, p, newPath)) {<a name="line.500"></a>
+<span class="sourceLineNo">501</span>          LOG.warn("Unable to move  " + p + " to " + newPath);<a name="line.501"></a>
+<span class="sourceLineNo">502</span>        } else {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>          LOG.info("Archived processed log " + p + " to " + newPath);<a name="line.503"></a>
+<span class="sourceLineNo">504</span>        }<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      }<a name="line.505"></a>
+<span class="sourceLineNo">506</span>    }<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>  /**<a name="line.509"></a>
+<span class="sourceLineNo">510</span>   * Path to a file under RECOVERED_EDITS_DIR directory of the region found in<a name="line.510"></a>
+<span class="sourceLineNo">511</span>   * &lt;code&gt;logEntry&lt;/code&gt; named for the sequenceid in the passed<a name="line.511"></a>
+<span class="sourceLineNo">512</span>   * &lt;code&gt;logEntry&lt;/code&gt;: e.g. /hbase/some_table/2323432434/recovered.edits/2332.<a name="line.512"></a>
+<span class="sourceLineNo">513</span>   * This method also ensures existence of RECOVERED_EDITS_DIR under the region<a name="line.513"></a>
+<span class="sourceLineNo">514</span>   * creating it if necessary.<a name="line.514"></a>
+<span class="sourceLineNo">515</span>   * @param fs<a name="line.515"></a>
+<span class="sourceLineNo">516</span>   * @param logEntry<a name="line.516"></a>
+<span class="sourceLineNo">517</span>   * @param rootDir HBase root dir.<a name="line.517"></a>
+<span class="sourceLineNo">518</span>   * @param fileBeingSplit the file being split currently. Used to generate tmp file name.<a name="line.518"></a>
+<span class="sourceLineNo">519</span>   * @return Path to file into which to dump split log edits.<a name="line.519"></a>
+<span class="sourceLineNo">520</span>   * @throws IOException<a name="line.520"></a>
+<span class="sourceLineNo">521</span>   */<a name="line.521"></a>
+<span class="sourceLineNo">522</span>  @SuppressWarnings("deprecation")<a name="line.522"></a>
+<span class="sourceLineNo">523</span>  private static Path getRegionSplitEditsPath(final FileSystem fs,<a name="line.523"></a>
+<span class="sourceLineNo">524</span>      final Entry logEntry, final Path rootDir, FileStatus fileBeingSplit)<a name="line.524"></a>
+<span class="sourceLineNo">525</span>  throws IOException {<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    Path tableDir = FSUtils.getTableDir(rootDir, logEntry.getKey().getTablename());<a name="line.526"></a>
+<span class="sourceLineNo">527</span>    String encodedRegionName = Bytes.toString(logEntry.getKey().getEncodedRegionName());<a name="line.527"></a>
+<span class="sourceLineNo">528</span>    Path regiondir = HRegion.getRegionDir(tableDir, encodedRegionName);<a name="line.528"></a>
+<span class="sourceLineNo">529</span>    Path dir = getRegionDirRecoveredEditsDir(regiondir);<a name="line.529"></a>
+<span class="sourceLineNo">530</span><a name="line.530"></a>
+<span class="sourceLineNo">531</span>    if (!fs.exists(regiondir)) {<a name="line.531"></a>
+<span class="sourceLineNo">532</span>      LOG.info("This region's directory doesn't exist: "<a name="line.532"></a>
+<span class="sourceLineNo">533</span>          + regiondir.toString() + ". It is very likely that it was" +<a name="line.533"></a>
+<span class="sourceLineNo">534</span>          " already split so it's safe to discard those edits.");<a name="line.534"></a>
+<span class="sourceLineNo">535</span>      return null;<a name="line.535"></a>
+<span class="sourceLineNo">536</span>    }<a name="line.536"></a>
+<span class="sourceLineNo">537</span>    if (fs.exists(dir) &amp;&amp; fs.isFile(dir)) {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      Path tmp = new Path("/tmp");<a name="line.538"></a>
+<span class="sourceLineNo">539</span>      if (!fs.exists(tmp)) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span>        fs.mkdirs(tmp);<a name="line.540"></a>
+<span class="sourceLineNo">541</span>      }<a name="line.541"></a>
+<span class="sourceLineNo">542</span>      tmp = new Path(tmp,<a name="line.542"></a>
+<span class="sourceLineNo">543</span>        HConstants.RECOVERED_EDITS_DIR + "_" + encodedRegionName);<a name="line.543"></a>
+<span class="sourceLineNo">544</span>      LOG.warn("Found existing old file: " + dir + ". It could be some "<a name="line.544"></a>
+<span class="sourceLineNo">545</span>        + "leftover of an old installation. It should be a folder instead. "<a name="line.545"></a>
+<span class="sourceLineNo">546</span>        + "So moving it to " + tmp);<a name="line.546"></a>
+<span class="sourceLineNo">547</span>      if (!fs.rename(dir, tmp)) {<a name="line.547"></a>
+<span class="sourceLineNo">548</span>        LOG.warn("Failed to sideline old file " + dir);<a name="line.548"></a>
+<span class="sourceLineNo">549</span>      }<a name="line.549"></a>
+<span class="sourceLineNo">550</span>    }<a name="line.550"></a>
+<span class="sourceLineNo">551</span><a name="line.551"></a>
+<span class="sourceLineNo">552</span>    if (!fs.exists(dir) &amp;&amp; !fs.mkdirs(dir)) {<a nam

<TRUNCATED>

[06/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.CustomStoreFlusher.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.CustomStoreFlusher.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.CustomStoreFlusher.html
index aa5da14..b06a764 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.CustomStoreFlusher.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.CustomStoreFlusher.html
@@ -41,1157 +41,1234 @@
 <span class="sourceLineNo">033</span>import java.lang.reflect.Field;<a name="line.33"></a>
 <span class="sourceLineNo">034</span>import java.security.PrivilegedExceptionAction;<a name="line.34"></a>
 <span class="sourceLineNo">035</span>import java.util.ArrayList;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.Collection;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.HashSet;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import java.util.List;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import java.util.Set;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.41"></a>
-<span class="sourceLineNo">042</span><a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.commons.logging.Log;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.commons.logging.LogFactory;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.conf.Configuration;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.fs.FSDataInputStream;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.fs.FileStatus;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.fs.FileSystem;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.fs.Path;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.fs.PathFilter;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.Cell;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.HConstants;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.MiniHBaseCluster;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.ServerName;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.TableName;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.client.Get;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.client.Put;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.client.Result;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.client.Table;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.master.HMaster;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.monitoring.MonitoredTask;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.protobuf.generated.ZooKeeperProtos.SplitLogTask.RecoveryMode;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.regionserver.DefaultStoreEngine;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.regionserver.DefaultStoreFlusher;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.regionserver.FlushRequestListener;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.regionserver.FlushRequester;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.regionserver.MemStoreSnapshot;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.regionserver.MultiVersionConcurrencyControl;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.regionserver.Region;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.regionserver.RegionScanner;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.regionserver.RegionServerServices;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.regionserver.Store;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.regionserver.throttle.ThroughputController;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.security.User;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.testclassification.RegionServerTests;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.util.EnvironmentEdge;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.util.HFileTestUtil;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.wal.DefaultWALProvider;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.wal.WALKey;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hdfs.DFSInputStream;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.junit.After;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.junit.AfterClass;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.junit.Before;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.junit.BeforeClass;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.junit.Rule;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.junit.Test;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.junit.experimental.categories.Category;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.junit.rules.TestName;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.mockito.Mockito;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.mockito.invocation.InvocationOnMock;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.mockito.stubbing.Answer;<a name="line.112"></a>
-<span class="sourceLineNo">113</span><a name="line.113"></a>
-<span class="sourceLineNo">114</span>/**<a name="line.114"></a>
-<span class="sourceLineNo">115</span> * Test replay of edits out of a WAL split.<a name="line.115"></a>
-<span class="sourceLineNo">116</span> */<a name="line.116"></a>
-<span class="sourceLineNo">117</span>@Category({RegionServerTests.class, MediumTests.class})<a name="line.117"></a>
-<span class="sourceLineNo">118</span>public class TestWALReplay {<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  private static final Log LOG = LogFactory.getLog(TestWALReplay.class);<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  static final HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.120"></a>
-<span class="sourceLineNo">121</span>  private final EnvironmentEdge ee = EnvironmentEdgeManager.getDelegate();<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  private Path hbaseRootDir = null;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>  private String logName;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  private Path oldLogDir;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  private Path logDir;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>  private FileSystem fs;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>  private Configuration conf;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  private RecoveryMode mode;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>  private WALFactory wals;<a name="line.129"></a>
-<span class="sourceLineNo">130</span><a name="line.130"></a>
-<span class="sourceLineNo">131</span>  @Rule<a name="line.131"></a>
-<span class="sourceLineNo">132</span>  public final TestName currentTest = new TestName();<a name="line.132"></a>
-<span class="sourceLineNo">133</span><a name="line.133"></a>
+<span class="sourceLineNo">036</span>import java.util.Arrays;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import java.util.Collection;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import java.util.HashSet;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import java.util.List;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import java.util.Set;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.42"></a>
+<span class="sourceLineNo">043</span><a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.commons.logging.Log;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.commons.logging.LogFactory;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.conf.Configuration;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.fs.FSDataInputStream;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.fs.FileStatus;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.fs.FileSystem;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.fs.Path;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.fs.PathFilter;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.Cell;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.HConstants;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.MiniHBaseCluster;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.ServerName;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.TableName;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.client.Get;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.client.Put;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.client.Result;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.client.Table;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.master.HMaster;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.monitoring.MonitoredTask;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.protobuf.generated.ZooKeeperProtos.SplitLogTask.RecoveryMode;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.regionserver.DefaultStoreEngine;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.regionserver.DefaultStoreFlusher;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.regionserver.FlushRequestListener;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.regionserver.FlushRequester;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.regionserver.MemStoreSnapshot;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.regionserver.MultiVersionConcurrencyControl;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.regionserver.Region;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.regionserver.RegionScanner;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.regionserver.RegionServerServices;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.regionserver.Store;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.regionserver.throttle.ThroughputController;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.security.User;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.testclassification.RegionServerTests;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.util.EnvironmentEdge;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.util.HFileTestUtil;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.wal.DefaultWALProvider;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.wal.WALKey;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hdfs.DFSInputStream;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.junit.After;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.junit.AfterClass;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.junit.Before;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.junit.BeforeClass;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.junit.Rule;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.junit.Test;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.junit.experimental.categories.Category;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.junit.rules.TestName;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.mockito.Mockito;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.mockito.invocation.InvocationOnMock;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.mockito.stubbing.Answer;<a name="line.113"></a>
+<span class="sourceLineNo">114</span><a name="line.114"></a>
+<span class="sourceLineNo">115</span>/**<a name="line.115"></a>
+<span class="sourceLineNo">116</span> * Test replay of edits out of a WAL split.<a name="line.116"></a>
+<span class="sourceLineNo">117</span> */<a name="line.117"></a>
+<span class="sourceLineNo">118</span>@Category({RegionServerTests.class, MediumTests.class})<a name="line.118"></a>
+<span class="sourceLineNo">119</span>public class TestWALReplay {<a name="line.119"></a>
+<span class="sourceLineNo">120</span>  private static final Log LOG = LogFactory.getLog(TestWALReplay.class);<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  static final HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.121"></a>
+<span class="sourceLineNo">122</span>  private final EnvironmentEdge ee = EnvironmentEdgeManager.getDelegate();<a name="line.122"></a>
+<span class="sourceLineNo">123</span>  private Path hbaseRootDir = null;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  private String logName;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>  private Path oldLogDir;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  private Path logDir;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>  private FileSystem fs;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>  private Configuration conf;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>  private RecoveryMode mode;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>  private WALFactory wals;<a name="line.130"></a>
+<span class="sourceLineNo">131</span><a name="line.131"></a>
+<span class="sourceLineNo">132</span>  @Rule<a name="line.132"></a>
+<span class="sourceLineNo">133</span>  public final TestName currentTest = new TestName();<a name="line.133"></a>
 <span class="sourceLineNo">134</span><a name="line.134"></a>
-<span class="sourceLineNo">135</span>  @BeforeClass<a name="line.135"></a>
-<span class="sourceLineNo">136</span>  public static void setUpBeforeClass() throws Exception {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    conf.setBoolean("dfs.support.append", true);<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    // The below config supported by 0.20-append and CDH3b2<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    conf.setInt("dfs.client.block.recovery.retries", 2);<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    TEST_UTIL.startMiniCluster(3);<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    Path hbaseRootDir =<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      TEST_UTIL.getDFSCluster().getFileSystem().makeQualified(new Path("/hbase"));<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    LOG.info("hbase.rootdir=" + hbaseRootDir);<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    FSUtils.setRootDir(conf, hbaseRootDir);<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>  @AfterClass<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  public static void tearDownAfterClass() throws Exception {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    TEST_UTIL.shutdownMiniCluster();<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  }<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>  @Before<a name="line.153"></a>
-<span class="sourceLineNo">154</span>  public void setUp() throws Exception {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    this.conf = HBaseConfiguration.create(TEST_UTIL.getConfiguration());<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    this.fs = TEST_UTIL.getDFSCluster().getFileSystem();<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    this.hbaseRootDir = FSUtils.getRootDir(this.conf);<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    this.oldLogDir = new Path(this.hbaseRootDir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    this.logName = DefaultWALProvider.getWALDirectoryName(currentTest.getMethodName() + "-manual");<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    this.logDir = new Path(this.hbaseRootDir, logName);<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    if (TEST_UTIL.getDFSCluster().getFileSystem().exists(this.hbaseRootDir)) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      TEST_UTIL.getDFSCluster().getFileSystem().delete(this.hbaseRootDir, true);<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    }<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    this.mode = (conf.getBoolean(HConstants.DISTRIBUTED_LOG_REPLAY_KEY, false) ?<a name="line.164"></a>
-<span class="sourceLineNo">165</span>        RecoveryMode.LOG_REPLAY : RecoveryMode.LOG_SPLITTING);<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    this.wals = new WALFactory(conf, null, currentTest.getMethodName());<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>  @After<a name="line.169"></a>
-<span class="sourceLineNo">170</span>  public void tearDown() throws Exception {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    this.wals.close();<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    TEST_UTIL.getDFSCluster().getFileSystem().delete(this.hbaseRootDir, true);<a name="line.172"></a>
-<span class="sourceLineNo">173</span>  }<a name="line.173"></a>
-<span class="sourceLineNo">174</span><a name="line.174"></a>
-<span class="sourceLineNo">175</span>  /*<a name="line.175"></a>
-<span class="sourceLineNo">176</span>   * @param p Directory to cleanup<a name="line.176"></a>
-<span class="sourceLineNo">177</span>   */<a name="line.177"></a>
-<span class="sourceLineNo">178</span>  private void deleteDir(final Path p) throws IOException {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    if (this.fs.exists(p)) {<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      if (!this.fs.delete(p, true)) {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>        throw new IOException("Failed remove of " + p);<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      }<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>   *<a name="line.187"></a>
-<span class="sourceLineNo">188</span>   * @throws Exception<a name="line.188"></a>
-<span class="sourceLineNo">189</span>   */<a name="line.189"></a>
-<span class="sourceLineNo">190</span>  @Test<a name="line.190"></a>
-<span class="sourceLineNo">191</span>  public void testReplayEditsAfterRegionMovedWithMultiCF() throws Exception {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    final TableName tableName =<a name="line.192"></a>
-<span class="sourceLineNo">193</span>        TableName.valueOf("testReplayEditsAfterRegionMovedWithMultiCF");<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    byte[] family1 = Bytes.toBytes("cf1");<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    byte[] family2 = Bytes.toBytes("cf2");<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    byte[] qualifier = Bytes.toBytes("q");<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    byte[] value = Bytes.toBytes("testV");<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    byte[][] familys = { family1, family2 };<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    TEST_UTIL.createTable(tableName, familys);<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    Table htable = TEST_UTIL.getConnection().getTable(tableName);<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    Put put = new Put(Bytes.toBytes("r1"));<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    put.addColumn(family1, qualifier, value);<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    htable.put(put);<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    ResultScanner resultScanner = htable.getScanner(new Scan());<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    int count = 0;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    while (resultScanner.next() != null) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      count++;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    }<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    resultScanner.close();<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    assertEquals(1, count);<a name="line.210"></a>
-<span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span>    MiniHBaseCluster hbaseCluster = TEST_UTIL.getMiniHBaseCluster();<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    List&lt;HRegion&gt; regions = hbaseCluster.getRegions(tableName);<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    assertEquals(1, regions.size());<a name="line.214"></a>
-<span class="sourceLineNo">215</span><a name="line.215"></a>
-<span class="sourceLineNo">216</span>    // move region to another regionserver<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    Region destRegion = regions.get(0);<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    int originServerNum = hbaseCluster<a name="line.218"></a>
-<span class="sourceLineNo">219</span>        .getServerWith(destRegion.getRegionInfo().getRegionName());<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    assertTrue("Please start more than 1 regionserver", hbaseCluster<a name="line.220"></a>
-<span class="sourceLineNo">221</span>        .getRegionServerThreads().size() &gt; 1);<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    int destServerNum = 0;<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    while (destServerNum == originServerNum) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      destServerNum++;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    }<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    HRegionServer originServer = hbaseCluster.getRegionServer(originServerNum);<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    HRegionServer destServer = hbaseCluster.getRegionServer(destServerNum);<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    // move region to destination regionserver<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    moveRegionAndWait(destRegion, destServer);<a name="line.229"></a>
-<span class="sourceLineNo">230</span><a name="line.230"></a>
-<span class="sourceLineNo">231</span>    // delete the row<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    Delete del = new Delete(Bytes.toBytes("r1"));<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    htable.delete(del);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    resultScanner = htable.getScanner(new Scan());<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    count = 0;<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    while (resultScanner.next() != null) {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      count++;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    }<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    resultScanner.close();<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    assertEquals(0, count);<a name="line.240"></a>
-<span class="sourceLineNo">241</span><a name="line.241"></a>
-<span class="sourceLineNo">242</span>    // flush region and make major compaction<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    Region region =  destServer.getOnlineRegion(destRegion.getRegionInfo().getRegionName());<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    region.flush(true);<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    // wait to complete major compaction<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    for (Store store : region.getStores()) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      store.triggerMajorCompaction();<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    }<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    region.compact(true);<a name="line.249"></a>
-<span class="sourceLineNo">250</span><a name="line.250"></a>
-<span class="sourceLineNo">251</span>    // move region to origin regionserver<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    moveRegionAndWait(destRegion, originServer);<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    // abort the origin regionserver<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    originServer.abort("testing");<a name="line.254"></a>
-<span class="sourceLineNo">255</span><a name="line.255"></a>
-<span class="sourceLineNo">256</span>    // see what we get<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    Result result = htable.get(new Get(Bytes.toBytes("r1")));<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    if (result != null) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      assertTrue("Row is deleted, but we get" + result.toString(),<a name="line.259"></a>
-<span class="sourceLineNo">260</span>          (result == null) || result.isEmpty());<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    }<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    resultScanner.close();<a name="line.262"></a>
-<span class="sourceLineNo">263</span>  }<a name="line.263"></a>
-<span class="sourceLineNo">264</span><a name="line.264"></a>
-<span class="sourceLineNo">265</span>  private void moveRegionAndWait(Region destRegion, HRegionServer destServer)<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      throws InterruptedException, MasterNotRunningException,<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      ZooKeeperConnectionException, IOException {<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    HMaster master = TEST_UTIL.getMiniHBaseCluster().getMaster();<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    TEST_UTIL.getHBaseAdmin().move(<a name="line.269"></a>
-<span class="sourceLineNo">270</span>        destRegion.getRegionInfo().getEncodedNameAsBytes(),<a name="line.270"></a>
-<span class="sourceLineNo">271</span>        Bytes.toBytes(destServer.getServerName().getServerName()));<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    while (true) {<a name="line.272"></a>
-<span class="sourceLineNo">273</span>      ServerName serverName = master.getAssignmentManager()<a name="line.273"></a>
-<span class="sourceLineNo">274</span>        .getRegionStates().getRegionServerOfRegion(destRegion.getRegionInfo());<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      if (serverName != null &amp;&amp; serverName.equals(destServer.getServerName())) {<a name="line.275"></a>
-<span class="sourceLineNo">276</span>        TEST_UTIL.assertRegionOnServer(<a name="line.276"></a>
-<span class="sourceLineNo">277</span>          destRegion.getRegionInfo(), serverName, 200);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>        break;<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      }<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      Thread.sleep(10);<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><a name="line.283"></a>
-<span class="sourceLineNo">284</span>  /**<a name="line.284"></a>
-<span class="sourceLineNo">285</span>   * Tests for hbase-2727.<a name="line.285"></a>
-<span class="sourceLineNo">286</span>   * @throws Exception<a name="line.286"></a>
-<span class="sourceLineNo">287</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-2727"&gt;HBASE-2727&lt;/a&gt;<a name="line.287"></a>
-<span class="sourceLineNo">288</span>   */<a name="line.288"></a>
-<span class="sourceLineNo">289</span>  @Test<a name="line.289"></a>
-<span class="sourceLineNo">290</span>  public void test2727() throws Exception {<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    // Test being able to have &gt; 1 set of edits in the recovered.edits directory.<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    // Ensure edits are replayed properly.<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    final TableName tableName =<a name="line.293"></a>
-<span class="sourceLineNo">294</span>        TableName.valueOf("test2727");<a name="line.294"></a>
-<span class="sourceLineNo">295</span><a name="line.295"></a>
-<span class="sourceLineNo">296</span>    MultiVersionConcurrencyControl mvcc = new MultiVersionConcurrencyControl();<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    HRegionInfo hri = createBasic3FamilyHRegionInfo(tableName);<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    Path basedir = FSUtils.getTableDir(hbaseRootDir, tableName);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    deleteDir(basedir);<a name="line.299"></a>
-<span class="sourceLineNo">300</span><a name="line.300"></a>
-<span class="sourceLineNo">301</span>    HTableDescriptor htd = createBasic3FamilyHTD(tableName);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    Region region2 = HBaseTestingUtility.createRegionAndWAL(hri, hbaseRootDir, this.conf, htd);<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    HBaseTestingUtility.closeRegionAndWAL(region2);<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    final byte [] rowName = tableName.getName();<a name="line.304"></a>
-<span class="sourceLineNo">305</span><a name="line.305"></a>
-<span class="sourceLineNo">306</span>    WAL wal1 = createWAL(this.conf);<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    // Add 1k to each family.<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    final int countPerFamily = 1000;<a name="line.308"></a>
-<span class="sourceLineNo">309</span><a name="line.309"></a>
-<span class="sourceLineNo">310</span>    for (HColumnDescriptor hcd: htd.getFamilies()) {<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      addWALEdits(tableName, hri, rowName, hcd.getName(), countPerFamily, ee,<a name="line.311"></a>
-<span class="sourceLineNo">312</span>          wal1, htd, mvcc);<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    }<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    wal1.shutdown();<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    runWALSplit(this.conf);<a name="line.315"></a>
-<span class="sourceLineNo">316</span><a name="line.316"></a>
-<span class="sourceLineNo">317</span>    WAL wal2 = createWAL(this.conf);<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    // Add 1k to each family.<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    for (HColumnDescriptor hcd: htd.getFamilies()) {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      addWALEdits(tableName, hri, rowName, hcd.getName(), countPerFamily,<a name="line.320"></a>
-<span class="sourceLineNo">321</span>          ee, wal2, htd, mvcc);<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    }<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    wal2.shutdown();<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    runWALSplit(this.conf);<a name="line.324"></a>
-<span class="sourceLineNo">325</span><a name="line.325"></a>
-<span class="sourceLineNo">326</span>    WAL wal3 = createWAL(this.conf);<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    try {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      HRegion region = HRegion.openHRegion(this.conf, this.fs, hbaseRootDir, hri, htd, wal3);<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      long seqid = region.getOpenSeqNum();<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      // The regions opens with sequenceId as 1. With 6k edits, its sequence number reaches 6k + 1.<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      // When opened, this region would apply 6k edits, and increment the sequenceId by 1<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      assertTrue(seqid &gt; mvcc.getWritePoint());<a name="line.332"></a>
-<span class="sourceLineNo">333</span>      assertEquals(seqid - 1, mvcc.getWritePoint());<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      LOG.debug("region.getOpenSeqNum(): " + region.getOpenSeqNum() + ", wal3.id: "<a name="line.334"></a>
-<span class="sourceLineNo">335</span>          + mvcc.getReadPoint());<a name="line.335"></a>
-<span class="sourceLineNo">336</span><a name="line.336"></a>
-<span class="sourceLineNo">337</span>      // TODO: Scan all.<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      region.close();<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    } finally {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      wal3.close();<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    }<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>  /**<a name="line.344"></a>
-<span class="sourceLineNo">345</span>   * Test case of HRegion that is only made out of bulk loaded files.  Assert<a name="line.345"></a>
-<span class="sourceLineNo">346</span>   * that we don't 'crash'.<a name="line.346"></a>
-<span class="sourceLineNo">347</span>   * @throws IOException<a name="line.347"></a>
-<span class="sourceLineNo">348</span>   * @throws IllegalAccessException<a name="line.348"></a>
-<span class="sourceLineNo">349</span>   * @throws NoSuchFieldException<a name="line.349"></a>
-<span class="sourceLineNo">350</span>   * @throws IllegalArgumentException<a name="line.350"></a>
-<span class="sourceLineNo">351</span>   * @throws SecurityException<a name="line.351"></a>
-<span class="sourceLineNo">352</span>   */<a name="line.352"></a>
-<span class="sourceLineNo">353</span>  @Test<a name="line.353"></a>
-<span class="sourceLineNo">354</span>  public void testRegionMadeOfBulkLoadedFilesOnly()<a name="line.354"></a>
-<span class="sourceLineNo">355</span>  throws IOException, SecurityException, IllegalArgumentException,<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      NoSuchFieldException, IllegalAccessException, InterruptedException {<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    final TableName tableName =<a name="line.357"></a>
-<span class="sourceLineNo">358</span>        TableName.valueOf("testRegionMadeOfBulkLoadedFilesOnly");<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    final HRegionInfo hri = createBasic3FamilyHRegionInfo(tableName);<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    final Path basedir = new Path(this.hbaseRootDir, tableName.getNameAsString());<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    deleteDir(basedir);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    final HTableDescriptor htd = createBasic3FamilyHTD(tableName);<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    Region region2 = HBaseTestingUtility.createRegionAndWAL(hri, hbaseRootDir, this.conf, htd);<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    HBaseTestingUtility.closeRegionAndWAL(region2);<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    WAL wal = createWAL(this.conf);<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    Region region = HRegion.openHRegion(hri, htd, wal, this.conf);<a name="line.366"></a>
-<span class="sourceLineNo">367</span><a name="line.367"></a>
-<span class="sourceLineNo">368</span>    byte [] family = htd.getFamilies().iterator().next().getName();<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    Path f =  new Path(basedir, "hfile");<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    HFileTestUtil.createHFile(this.conf, fs, f, family, family, Bytes.toBytes(""),<a name="line.370"></a>
-<span class="sourceLineNo">371</span>        Bytes.toBytes("z"), 10);<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    List &lt;Pair&lt;byte[],String&gt;&gt;  hfs= new ArrayList&lt;Pair&lt;byte[],String&gt;&gt;(1);<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    hfs.add(Pair.newPair(family, f.toString()));<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    region.bulkLoadHFiles(hfs, true, null);<a name="line.374"></a>
-<span class="sourceLineNo">375</span><a name="line.375"></a>
-<span class="sourceLineNo">376</span>    // Add an edit so something in the WAL<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    byte [] row = tableName.getName();<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    region.put((new Put(row)).addColumn(family, family, family));<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    wal.sync();<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    final int rowsInsertedCount = 11;<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span>    assertEquals(rowsInsertedCount, getScannedCount(region.getScanner(new Scan())));<a name="line.382"></a>
-<span class="sourceLineNo">383</span><a name="line.383"></a>
-<span class="sourceLineNo">384</span>    // Now 'crash' the region by stealing its wal<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    final Configuration newConf = HBaseConfiguration.create(this.conf);<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    User user = HBaseTestingUtility.getDifferentUser(newConf,<a name="line.386"></a>
-<span class="sourceLineNo">387</span>        tableName.getNameAsString());<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    user.runAs(new PrivilegedExceptionAction() {<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      @Override<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      public Object run() throws Exception {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        runWALSplit(newConf);<a name="line.391"></a>
-<span class="sourceLineNo">392</span>        WAL wal2 = createWAL(newConf);<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span>        HRegion region2 = HRegion.openHRegion(newConf, FileSystem.get(newConf),<a name="line.394"></a>
-<span class="sourceLineNo">395</span>          hbaseRootDir, hri, htd, wal2);<a name="line.395"></a>
-<span class="sourceLineNo">396</span>        long seqid2 = region2.getOpenSeqNum();<a name="line.396"></a>
-<span class="sourceLineNo">397</span>        assertTrue(seqid2 &gt; -1);<a name="line.397"></a>
-<span class="sourceLineNo">398</span>        assertEquals(rowsInsertedCount, getScannedCount(region2.getScanner(new Scan())));<a name="line.398"></a>
-<span class="sourceLineNo">399</span><a name="line.399"></a>
-<span class="sourceLineNo">400</span>        // I can't close wal1.  Its been appropriated when we split.<a name="line.400"></a>
-<span class="sourceLineNo">401</span>        region2.close();<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        wal2.close();<a name="line.402"></a>
-<span class="sourceLineNo">403</span>        return null;<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      }<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>  /**<a name="line.408"></a>
-<span class="sourceLineNo">409</span>   * HRegion test case that is made of a major compacted HFile (created with three bulk loaded<a name="line.409"></a>
-<span class="sourceLineNo">410</span>   * files) and an edit in the memstore.<a name="line.410"></a>
-<span class="sourceLineNo">411</span>   * This is for HBASE-10958 "[dataloss] Bulk loading with seqids can prevent some log entries<a name="line.411"></a>
-<span class="sourceLineNo">412</span>   * from being replayed"<a name="line.412"></a>
-<span class="sourceLineNo">413</span>   * @throws IOException<a name="line.413"></a>
-<span class="sourceLineNo">414</span>   * @throws IllegalAccessException<a name="line.414"></a>
-<span class="sourceLineNo">415</span>   * @throws NoSuchFieldException<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   * @throws IllegalArgumentException<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * @throws SecurityException<a name="line.417"></a>
-<span class="sourceLineNo">418</span>   */<a name="line.418"></a>
-<span class="sourceLineNo">419</span>  @Test<a name="line.419"></a>
-<span class="sourceLineNo">420</span>  public void testCompactedBulkLoadedFiles()<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      throws IOException, SecurityException, IllegalArgumentException,<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      NoSuchFieldException, IllegalAccessException, InterruptedException {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    final TableName tableName =<a name="line.423"></a>
-<span class="sourceLineNo">424</span>        TableName.valueOf("testCompactedBulkLoadedFiles");<a name="line.424"></a>
-<span class="sourceLineNo">425</span>    final HRegionInfo hri = createBasic3FamilyHRegionInfo(tableName);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    final Path basedir = new Path(this.hbaseRootDir, tableName.getNameAsString());<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    deleteDir(basedir);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    final HTableDescriptor htd = createBasic3FamilyHTD(tableName);<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    HRegion region2 = HBaseTestingUtility.createRegionAndWAL(hri, hbaseRootDir, this.conf, htd);<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    HBaseTestingUtility.closeRegionAndWAL(region2);<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    WAL wal = createWAL(this.conf);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    HRegion region = HRegion.openHRegion(hri, htd, wal, this.conf);<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>    // Add an edit so something in the WAL<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    byte [] row = tableName.getName();<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    byte [] family = htd.getFamilies().iterator().next().getName();<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    region.put((new Put(row)).addColumn(family, family, family));<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    wal.sync();<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>    List &lt;Pair&lt;byte[],String&gt;&gt;  hfs= new ArrayList&lt;Pair&lt;byte[],String&gt;&gt;(1);<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    for (int i = 0; i &lt; 3; i++) {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>      Path f = new Path(basedir, "hfile"+i);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      HFileTestUtil.createHFile(this.conf, fs, f, family, family, Bytes.toBytes(i + "00"),<a name="line.443"></a>
-<span class="sourceLineNo">444</span>          Bytes.toBytes(i + "50"), 10);<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      hfs.add(Pair.newPair(family, f.toString()));<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    }<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    region.bulkLoadHFiles(hfs, true, null);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    final int rowsInsertedCount = 31;<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    assertEquals(rowsInsertedCount, getScannedCount(region.getScanner(new Scan())));<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>    // major compact to turn all the bulk loaded files into one normal file<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    region.compact(true);<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    assertEquals(rowsInsertedCount, getScannedCount(region.getScanner(new Scan())));<a name="line.453"></a>
-<span class="sourceLineNo">454</span><a name="line.454"></a>
-<span class="sourceLineNo">455</span>    // Now 'crash' the region by stealing its wal<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    final Configuration newConf = HBaseConfiguration.create(this.conf);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    User user = HBaseTestingUtility.getDifferentUser(newConf,<a name="line.457"></a>
-<span class="sourceLineNo">458</span>        tableName.getNameAsString());<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    user.runAs(new PrivilegedExceptionAction() {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      @Override<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      public Object run() throws Exception {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        runWALSplit(newConf);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>        WAL wal2 = createWAL(newConf);<a name="line.463"></a>
-<span class="sourceLineNo">464</span><a name="line.464"></a>
-<span class="sourceLineNo">465</span>        HRegion region2 = HRegion.openHRegion(newConf, FileSystem.get(newConf),<a name="line.465"></a>
-<span class="sourceLineNo">466</span>            hbaseRootDir, hri, htd, wal2);<a name="line.466"></a>
-<span class="sourceLineNo">467</span>        long seqid2 = region2.getOpenSeqNum();<a name="line.467"></a>
-<span class="sourceLineNo">468</span>        assertTrue(seqid2 &gt; -1);<a name="line.468"></a>
-<span class="sourceLineNo">469</span>        assertEquals(rowsInsertedCount, getScannedCount(region2.getScanner(new Scan())));<a name="line.469"></a>
-<span class="sourceLineNo">470</span><a name="line.470"></a>
-<span class="sourceLineNo">471</span>        // I can't close wal1.  Its been appropriated when we split.<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        region2.close();<a name="line.472"></a>
-<span class="sourceLineNo">473</span>        wal2.close();<a name="line.473"></a>
-<span class="sourceLineNo">474</span>        return null;<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>  }<a name="line.477"></a>
-<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">135</span><a name="line.135"></a>
+<span class="sourceLineNo">136</span>  @BeforeClass<a name="line.136"></a>
+<span class="sourceLineNo">137</span>  public static void setUpBeforeClass() throws Exception {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    conf.setBoolean("dfs.support.append", true);<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    // The below config supported by 0.20-append and CDH3b2<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    conf.setInt("dfs.client.block.recovery.retries", 2);<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    TEST_UTIL.startMiniCluster(3);<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    Path hbaseRootDir =<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      TEST_UTIL.getDFSCluster().getFileSystem().makeQualified(new Path("/hbase"));<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    LOG.info("hbase.rootdir=" + hbaseRootDir);<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    FSUtils.setRootDir(conf, hbaseRootDir);<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>  @AfterClass<a name="line.149"></a>
+<span class="sourceLineNo">150</span>  public static void tearDownAfterClass() throws Exception {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    TEST_UTIL.shutdownMiniCluster();<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>  @Before<a name="line.154"></a>
+<span class="sourceLineNo">155</span>  public void setUp() throws Exception {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    this.conf = HBaseConfiguration.create(TEST_UTIL.getConfiguration());<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    this.fs = TEST_UTIL.getDFSCluster().getFileSystem();<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    this.hbaseRootDir = FSUtils.getRootDir(this.conf);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    this.oldLogDir = new Path(this.hbaseRootDir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    this.logName = DefaultWALProvider.getWALDirectoryName(currentTest.getMethodName() + "-manual");<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    this.logDir = new Path(this.hbaseRootDir, logName);<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    if (TEST_UTIL.getDFSCluster().getFileSystem().exists(this.hbaseRootDir)) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      TEST_UTIL.getDFSCluster().getFileSystem().delete(this.hbaseRootDir, true);<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    }<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    this.mode = (conf.getBoolean(HConstants.DISTRIBUTED_LOG_REPLAY_KEY, false) ?<a name="line.165"></a>
+<span class="sourceLineNo">166</span>        RecoveryMode.LOG_REPLAY : RecoveryMode.LOG_SPLITTING);<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    this.wals = new WALFactory(conf, null, currentTest.getMethodName());<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  }<a name="line.168"></a>
+<span class="sourceLineNo">169</span><a name="line.169"></a>
+<span class="sourceLineNo">170</span>  @After<a name="line.170"></a>
+<span class="sourceLineNo">171</span>  public void tearDown() throws Exception {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    this.wals.close();<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    TEST_UTIL.getDFSCluster().getFileSystem().delete(this.hbaseRootDir, true);<a name="line.173"></a>
+<span class="sourceLineNo">174</span>  }<a name="line.174"></a>
+<span class="sourceLineNo">175</span><a name="line.175"></a>
+<span class="sourceLineNo">176</span>  /*<a name="line.176"></a>
+<span class="sourceLineNo">177</span>   * @param p Directory to cleanup<a name="line.177"></a>
+<span class="sourceLineNo">178</span>   */<a name="line.178"></a>
+<span class="sourceLineNo">179</span>  private void deleteDir(final Path p) throws IOException {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    if (this.fs.exists(p)) {<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      if (!this.fs.delete(p, true)) {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>        throw new IOException("Failed remove of " + p);<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>  /**<a name="line.187"></a>
+<span class="sourceLineNo">188</span>   *<a name="line.188"></a>
+<span class="sourceLineNo">189</span>   * @throws Exception<a name="line.189"></a>
+<span class="sourceLineNo">190</span>   */<a name="line.190"></a>
+<span class="sourceLineNo">191</span>  @Test<a name="line.191"></a>
+<span class="sourceLineNo">192</span>  public void testReplayEditsAfterRegionMovedWithMultiCF() throws Exception {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    final TableName tableName =<a name="line.193"></a>
+<span class="sourceLineNo">194</span>        TableName.valueOf("testReplayEditsAfterRegionMovedWithMultiCF");<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    byte[] family1 = Bytes.toBytes("cf1");<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    byte[] family2 = Bytes.toBytes("cf2");<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    byte[] qualifier = Bytes.toBytes("q");<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    byte[] value = Bytes.toBytes("testV");<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    byte[][] familys = { family1, family2 };<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    TEST_UTIL.createTable(tableName, familys);<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    Table htable = TEST_UTIL.getConnection().getTable(tableName);<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    Put put = new Put(Bytes.toBytes("r1"));<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    put.addColumn(family1, qualifier, value);<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    htable.put(put);<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    ResultScanner resultScanner = htable.getScanner(new Scan());<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    int count = 0;<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    while (resultScanner.next() != null) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      count++;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    }<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    resultScanner.close();<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    assertEquals(1, count);<a name="line.211"></a>
+<span class="sourceLineNo">212</span><a name="line.212"></a>
+<span class="sourceLineNo">213</span>    MiniHBaseCluster hbaseCluster = TEST_UTIL.getMiniHBaseCluster();<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    List&lt;HRegion&gt; regions = hbaseCluster.getRegions(tableName);<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    assertEquals(1, regions.size());<a name="line.215"></a>
+<span class="sourceLineNo">216</span><a name="line.216"></a>
+<span class="sourceLineNo">217</span>    // move region to another regionserver<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    Region destRegion = regions.get(0);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    int originServerNum = hbaseCluster<a name="line.219"></a>
+<span class="sourceLineNo">220</span>        .getServerWith(destRegion.getRegionInfo().getRegionName());<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    assertTrue("Please start more than 1 regionserver", hbaseCluster<a name="line.221"></a>
+<span class="sourceLineNo">222</span>        .getRegionServerThreads().size() &gt; 1);<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    int destServerNum = 0;<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    while (destServerNum == originServerNum) {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>      destServerNum++;<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    }<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    HRegionServer originServer = hbaseCluster.getRegionServer(originServerNum);<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    HRegionServer destServer = hbaseCluster.getRegionServer(destServerNum);<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    // move region to destination regionserver<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    moveRegionAndWait(destRegion, destServer);<a name="line.230"></a>
+<span class="sourceLineNo">231</span><a name="line.231"></a>
+<span class="sourceLineNo">232</span>    // delete the row<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    Delete del = new Delete(Bytes.toBytes("r1"));<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    htable.delete(del);<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    resultScanner = htable.getScanner(new Scan());<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    count = 0;<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    while (resultScanner.next() != null) {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      count++;<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    }<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    resultScanner.close();<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    assertEquals(0, count);<a name="line.241"></a>
+<span class="sourceLineNo">242</span><a name="line.242"></a>
+<span class="sourceLineNo">243</span>    // flush region and make major compaction<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    Region region =  destServer.getOnlineRegion(destRegion.getRegionInfo().getRegionName());<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    region.flush(true);<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    // wait to complete major compaction<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    for (Store store : region.getStores()) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      store.triggerMajorCompaction();<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    }<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    region.compact(true);<a name="line.250"></a>
+<span class="sourceLineNo">251</span><a name="line.251"></a>
+<span class="sourceLineNo">252</span>    // move region to origin regionserver<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    moveRegionAndWait(destRegion, originServer);<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    // abort the origin regionserver<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    originServer.abort("testing");<a name="line.255"></a>
+<span class="sourceLineNo">256</span><a name="line.256"></a>
+<span class="sourceLineNo">257</span>    // see what we get<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    Result result = htable.get(new Get(Bytes.toBytes("r1")));<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    if (result != null) {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      assertTrue("Row is deleted, but we get" + result.toString(),<a name="line.260"></a>
+<span class="sourceLineNo">261</span>          (result == null) || result.isEmpty());<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    }<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    resultScanner.close();<a name="line.263"></a>
+<span class="sourceLineNo">264</span>  }<a name="line.264"></a>
+<span class="sourceLineNo">265</span><a name="line.265"></a>
+<span class="sourceLineNo">266</span>  private void moveRegionAndWait(Region destRegion, HRegionServer destServer)<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      throws InterruptedException, MasterNotRunningException,<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      ZooKeeperConnectionException, IOException {<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    HMaster master = TEST_UTIL.getMiniHBaseCluster().getMaster();<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    TEST_UTIL.getHBaseAdmin().move(<a name="line.270"></a>
+<span class="sourceLineNo">271</span>        destRegion.getRegionInfo().getEncodedNameAsBytes(),<a name="line.271"></a>
+<span class="sourceLineNo">272</span>        Bytes.toBytes(destServer.getServerName().getServerName()));<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    while (true) {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      ServerName serverName = master.getAssignmentManager()<a name="line.274"></a>
+<span class="sourceLineNo">275</span>        .getRegionStates().getRegionServerOfRegion(destRegion.getRegionInfo());<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      if (serverName != null &amp;&amp; serverName.equals(destServer.getServerName())) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>        TEST_UTIL.assertRegionOnServer(<a name="line.277"></a>
+<span class="sourceLineNo">278</span>          destRegion.getRegionInfo(), serverName, 200);<a name="line.278"></a>
+<span class="sourceLineNo">279</span>        break;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      }<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      Thread.sleep(10);<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    }<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  }<a name="line.283"></a>
+<span class="sourceLineNo">284</span><a name="line.284"></a>
+<span class="sourceLineNo">285</span>  /**<a name="line.285"></a>
+<span class="sourceLineNo">286</span>   * Tests for hbase-2727.<a name="line.286"></a>
+<span class="sourceLineNo">287</span>   * @throws Exception<a name="line.287"></a>
+<span class="sourceLineNo">288</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-2727"&gt;HBASE-2727&lt;/a&gt;<a name="line.288"></a>
+<span class="sourceLineNo">289</span>   */<a name="line.289"></a>
+<span class="sourceLineNo">290</span>  @Test<a name="line.290"></a>
+<span class="sourceLineNo">291</span>  public void test2727() throws Exception {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    // Test being able to have &gt; 1 set of edits in the recovered.edits directory.<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    // Ensure edits are replayed properly.<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    final TableName tableName =<a name="line.294"></a>
+<span class="sourceLineNo">295</span>        TableName.valueOf("test2727");<a name="line.295"></a>
+<span class="sourceLineNo">296</span><a name="line.296"></a>
+<span class="sourceLineNo">297</span>    MultiVersionConcurrencyControl mvcc = new MultiVersionConcurrencyControl();<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    HRegionInfo hri = createBasic3FamilyHRegionInfo(tableName);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    Path basedir = FSUtils.getTableDir(hbaseRootDir, tableName);<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    deleteDir(basedir);<a name="line.300"></a>
+<span class="sourceLineNo">301</span><a name="line.301"></a>
+<span class="sourceLineNo">302</span>    HTableDescriptor htd = createBasic3FamilyHTD(tableName);<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    Region region2 = HBaseTestingUtility.createRegionAndWAL(hri, hbaseRootDir, this.conf, htd);<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    HBaseTestingUtility.closeRegionAndWAL(region2);<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    final byte [] rowName = tableName.getName();<a name="line.305"></a>
+<span class="sourceLineNo">306</span><a name="line.306"></a>
+<span class="sourceLineNo">307</span>    WAL wal1 = createWAL(this.conf);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    // Add 1k to each family.<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    final int countPerFamily = 1000;<a name="line.309"></a>
+<span class="sourceLineNo">310</span><a name="line.310"></a>
+<span class="sourceLineNo">311</span>    for (HColumnDescriptor hcd: htd.getFamilies()) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      addWALEdits(tableName, hri, rowName, hcd.getName(), countPerFamily, ee,<a name="line.312"></a>
+<span class="sourceLineNo">313</span>          wal1, htd, mvcc);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    wal1.shutdown();<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    runWALSplit(this.conf);<a name="line.316"></a>
+<span class="sourceLineNo">317</span><a name="line.317"></a>
+<span class="sourceLineNo">318</span>    WAL wal2 = createWAL(this.conf);<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    // Add 1k to each family.<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    for (HColumnDescriptor hcd: htd.getFamilies()) {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      addWALEdits(tableName, hri, rowName, hcd.getName(), countPerFamily,<a name="line.321"></a>
+<span class="sourceLineNo">322</span>          ee, wal2, htd, mvcc);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    }<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    wal2.shutdown();<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    runWALSplit(this.conf);<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>    WAL wal3 = createWAL(this.conf);<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    try {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      HRegion region = HRegion.openHRegion(this.conf, this.fs, hbaseRootDir, hri, htd, wal3);<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      long seqid = region.getOpenSeqNum();<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      // The regions opens with sequenceId as 1. With 6k edits, its sequence number reaches 6k + 1.<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      // When opened, this region would apply 6k edits, and increment the sequenceId by 1<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      assertTrue(seqid &gt; mvcc.getWritePoint());<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      assertEquals(seqid - 1, mvcc.getWritePoint());<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      LOG.debug("region.getOpenSeqNum(): " + region.getOpenSeqNum() + ", wal3.id: "<a name="line.335"></a>
+<span class="sourceLineNo">336</span>          + mvcc.getReadPoint());<a name="line.336"></a>
+<span class="sourceLineNo">337</span><a name="line.337"></a>
+<span class="sourceLineNo">338</span>      // TODO: Scan all.<a name="line.338"></a>
+<span class="sourceLineNo">339</span>      region.close();<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    } finally {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      wal3.close();<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><a name="line.344"></a>
+<span class="sourceLineNo">345</span>  /**<a name="line.345"></a>
+<span class="sourceLineNo">346</span>   * Test case of HRegion that is only made out of bulk loaded files.  Assert<a name="line.346"></a>
+<span class="sourceLineNo">347</span>   * that we don't 'crash'.<a name="line.347"></a>
+<span class="sourceLineNo">348</span>   * @throws IOException<a name="line.348"></a>
+<span class="sourceLineNo">349</span>   * @throws IllegalAccessException<a name="line.349"></a>
+<span class="sourceLineNo">350</span>   * @throws NoSuchFieldException<a name="line.350"></a>
+<span class="sourceLineNo">351</span>   * @throws IllegalArgumentException<a name="line.351"></a>
+<span class="sourceLineNo">352</span>   * @throws SecurityException<a name="line.352"></a>
+<span class="sourceLineNo">353</span>   */<a name="line.353"></a>
+<span class="sourceLineNo">354</span>  @Test<a name="line.354"></a>
+<span class="sourceLineNo">355</span>  public void testRegionMadeOfBulkLoadedFilesOnly()<a name="line.355"></a>
+<span class="sourceLineNo">356</span>  throws IOException, SecurityException, IllegalArgumentException,<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      NoSuchFieldException, IllegalAccessException, InterruptedException {<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    final TableName tableName =<a name="line.358"></a>
+<span class="sourceLineNo">359</span>        TableName.valueOf("testRegionMadeOfBulkLoadedFilesOnly");<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    final HRegionInfo hri = createBasic3FamilyHRegionInfo(tableName);<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    final Path basedir = new Path(this.hbaseRootDir, tableName.getNameAsString());<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    deleteDir(basedir);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    final HTableDescriptor htd = createBasic3FamilyHTD(tableName);<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    Region region2 = HBaseTestingUtility.createRegionAndWAL(hri, hbaseRootDir, this.conf, htd);<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    HBaseTestingUtility.closeRegionAndWAL(region2);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    WAL wal = createWAL(this.conf);<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    Region region = HRegion.openHRegion(hri, htd, wal, this.conf);<a name="line.367"></a>
+<span class="sourceLineNo">368</span><a name="line.368"></a>
+<span class="sourceLineNo">369</span>    byte [] family = htd.getFamilies().iterator().next().getName();<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    Path f =  new Path(basedir, "hfile");<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    HFileTestUtil.createHFile(this.conf, fs, f, family, family, Bytes.toBytes(""),<a name="line.371"></a>
+<span class="sourceLineNo">372</span>        Bytes.toBytes("z"), 10);<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    List &lt;Pair&lt;byte[],String&gt;&gt;  hfs= new ArrayList&lt;Pair&lt;byte[],String&gt;&gt;(1);<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    hfs.add(Pair.newPair(family, f.toString()));<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    region.bulkLoadHFiles(hfs, true, null);<a name="line.375"></a>
+<span class="sourceLineNo">376</span><a name="line.376"></a>
+<span class="sourceLineNo">377</span>    // Add an edit so something in the WAL<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    byte [] row = tableName.getName();<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    region.put((new Put(row)).addColumn(family, family, family));<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    wal.sync();<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    final int rowsInsertedCount = 11;<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span>    assertEquals(rowsInsertedCount, getScannedCount(region.getScanner(new Scan())));<a name="line.383"></a>
+<span class="sourceLineNo">384</span><a name="line.384"></a>
+<span class="sourceLineNo">385</span>    // Now 'crash' the region by stealing its wal<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    final Configuration newConf = HBaseConfiguration.create(this.conf);<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    User user = HBaseTestingUtility.getDifferentUser(newConf,<a name="line.387"></a>
+<span class="sourceLineNo">388</span>        tableName.getNameAsString());<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    user.runAs(new PrivilegedExceptionAction() {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>      @Override<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      public Object run() throws Exception {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>        runWALSplit(newConf);<a name="line.392"></a>
+<span class="sourceLineNo">393</span>        WAL wal2 = createWAL(newConf);<a name="line.393"></a>
+<span class="sourceLineNo">394</span><a name="line.394"></a>
+<span class="sourceLineNo">395</span>        HRegion region2 = HRegion.openHRegion(newConf, FileSystem.get(newConf),<a name="line.395"></a>
+<span class="sourceLineNo">396</span>          hbaseRootDir, hri, htd, wal2);<a name="line.396"></a>
+<span class="sourceLineNo">397</span>        long seqid2 = region2.getOpenSeqNum();<a name="line.397"></a>
+<span class="sourceLineNo">398</span>        assertTrue(seqid2 &gt; -1);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>        assertEquals(rowsInsertedCount, getScannedCount(region2.getScanner(new Scan())));<a name="line.399"></a>
+<span class="sourceLineNo">400</span><a name="line.400"></a>
+<span class="sourceLineNo">401</span>        // I can't close wal1.  Its been appropriated when we split.<a name="line.401"></a>
+<span class="sourceLineNo">402</span>        region2.close();<a name="line.402"></a>
+<span class="sourceLineNo">403</span>        wal2.close();<a name="line.403"></a>
+<span class="sourceLineNo">404</span>        return null;<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><a name="line.408"></a>
+<span class="sourceLineNo">409</span>  /**<a name="line.409"></a>
+<span class="sourceLineNo">410</span>   * HRegion test case that is made of a major compacted HFile (created with three bulk loaded<a name="line.410"></a>
+<span class="sourceLineNo">411</span>   * files) and an edit in the memstore.<a name="line.411"></a>
+<span class="sourceLineNo">412</span>   * This is for HBASE-10958 "[dataloss] Bulk loading with seqids can prevent some log entries<a name="line.412"></a>
+<span class="sourceLineNo">413</span>   * from being replayed"<a name="line.413"></a>
+<span class="sourceLineNo">414</span>   * @throws IOException<a name="line.414"></a>
+<span class="sourceLineNo">415</span>   * @throws IllegalAccessException<a name="line.415"></a>
+<span class="sourceLineNo">416</span>   * @throws NoSuchFieldException<a name="line.416"></a>
+<span class="sourceLineNo">417</span>   * @throws IllegalArgumentException<a name="line.417"></a>
+<span class="sourceLineNo">418</span>   * @throws SecurityException<a name="line.418"></a>
+<span class="sourceLineNo">419</span>   */<a name="line.419"></a>
+<span class="sourceLineNo">420</span>  @Test<a name="line.420"></a>
+<span class="sourceLineNo">421</span>  public void testCompactedBulkLoadedFiles()<a name="line.421"></a>
+<span class="sourceLineNo">422</span>      throws IOException, SecurityException, IllegalArgumentException,<a name="line.422"></a>
+<span class="sourceLineNo">423</span>      NoSuchFieldException, IllegalAccessException, InterruptedException {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>    final TableName tableName =<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        TableName.valueOf("testCompactedBulkLoadedFiles");<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    final HRegionInfo hri = createBasic3FamilyHRegionInfo(tableName);<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    final Path basedir = new Path(this.hbaseRootDir, tableName.getNameAsString());<a name="line.427"></a>
+<span class="sourceLineNo">428</span>    deleteDir(basedir);<a name="line.428"></a>
+<span class="sourceLineNo">429</span>    final HTableDescriptor htd = createBasic3FamilyHTD(tableName);<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    HRegion region2 = HBaseTestingUtility.createRegionAndWAL(hri, hbaseRootDir, this.conf, htd);<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    HBaseTestingUtility.closeRegionAndWAL(region2);<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    WAL wal = createWAL(this.conf);<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    HRegion region = HRegion.openHRegion(hri, htd, wal, this.conf);<a name="line.433"></a>
+<span class="sourceLineNo">434</span><a name="line.434"></a>
+<span class="sourceLineNo">435</span>    // Add an edit so something in the WAL<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    byte [] row = tableName.getName();<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    byte [] family = htd.getFamilies().iterator().next().getName();<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    region.put((new Put(row)).addColumn(family, family, family));<a name="line.438"></a>
+<span class="sourceLineNo">439</span>    wal.sync();<a name="line.439"></a>
+<span class="sourceLineNo">440</span><a name="line.440"></a>
+<span class="sourceLineNo">441</span>    List &lt;Pair&lt;byte[],String&gt;&gt;  hfs= new ArrayList&lt;Pair&lt;byte[],String&gt;&gt;(1);<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    for (int i = 0; i &lt; 3; i++) {<a name="line.442"></a>
+<span class="sourceLineNo">443</span>      Path f = new Path(basedir, "hfile"+i);<a name="line.443"></a>
+<span class="sourceLineNo">444</span>      HFileTestUtil.createHFile(this.conf, fs, f, family, family, Bytes.toBytes(i + "00"),<a name="line.444"></a>
+<span class="sourceLineNo">445</span>          Bytes.toBytes(i + "50"), 10);<a name="line.445"></a>
+<span class="sourceLineNo">446</span>      hfs.add(Pair.newPair(family, f.toString()));<a name="line.446"></a>
+<span class="sourceLineNo">447</span>    }<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    region.bulkLoadHFiles(hfs, true, null);<a name="line.448"></a>
+<span class="sourceLineNo">449</span>    final int rowsInsertedCount = 31;<a name="line.449"></a>
+<span class="sourceLineNo">450</span>    assertEquals(rowsInsertedCount, getScannedCount(region.getScanner(new Scan())));<a name="line.450"></a>
+<span class="sourceLineNo">451</span><a name="line.451"></a>
+<span class="sourceLineNo">452</span>    // major compact to turn all the bulk loaded files into one normal file<a name="line.452"></a>
+<span class="sourceLineNo">453</span>    region.compact(true);<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    assertEquals(rowsInsertedCount, getScannedCount(region.getScanner(new Scan())));<a name="line.454"></a>
+<span class="sourceLineNo">455</span><a name="line.455"></a>
+<span class="sourceLineNo">456</span>    // Now 'crash' the region by stealing its wal<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    final Configuration newConf = HBaseConfiguration.create(this.conf);<a name="line.457"></a>
+<span class="sourceLineNo">458</span>    User user = HBaseTestingUtility.getDifferentUser(newConf,<a name="line.458"></a>
+<span class="sourceLineNo">459</span>        tableName.getNameAsString());<a name="line.459"></a>
+<span class="sourceLineNo">460</span>    user.runAs(new PrivilegedExceptionAction() {<a name="line.460"></a>
+<span class="sourceLineNo">461</span>      @Override<a name="line.461"></a>
+<span class="sourceLineNo">462</span>      public Object run() throws Exception {<a name="line.462"></a>
+<span class="sourceLineNo">463</span>        runWALSplit(newConf);<a name="line.463"></a>
+<span class="sourceLineNo">464</span>        WAL wal2 = createWAL(newConf);<a name="line.464"></a>
+<span class="sourceLineNo">465</span><a name="line.465"></a>
+<span class="sourceLineNo">466</span>        HRegion region2 = HRegion.openHRegion(newConf, FileSystem.get(newConf),<a name="line.466"></a>
+<span class="sourceLineNo">467</span>            hbaseRootDir, hri, htd, wal2);<a name="line.467"></a>
+<span class="sourceLineNo">468</span>        long seqid2 = region2.getOpenSeqNum();<a name="line.468"></a>
+<span class="sourceLineNo">469</span>        assertTrue(seqid2 &gt; -1);<a name="line.469"></a>
+<span class="sourceLineNo">470</span>        assertEquals(rowsInsertedCount, getScannedCount(region2.getScanner(new Scan())));<a name="line.470"></a>
+<span class="sourceLineNo">471</span><a name="line

<TRUNCATED>

[08/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/testdevapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/index-all.html b/testdevapidocs/index-all.html
index 63d37cd..b62a513 100644
--- a/testdevapidocs/index-all.html
+++ b/testdevapidocs/index-all.html
@@ -5168,6 +5168,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/TestHFileSeek.html#createFSOutput(org.apache.hadoop.fs.Path,%20org.apache.hadoop.fs.FileSystem)">createFSOutput(Path, FileSystem)</a></span> - Static method in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/TestHFileSeek.html" title="class in org.apache.hadoop.hbase.io.hfile">TestHFileSeek</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#createFSWALEntry(org.apache.hadoop.hbase.HTableDescriptor,%20org.apache.hadoop.hbase.HRegionInfo,%20long,%20byte[],%20byte[],%20org.apache.hadoop.hbase.util.EnvironmentEdge,%20org.apache.hadoop.hbase.regionserver.MultiVersionConcurrencyControl,%20int)">createFSWALEntry(HTableDescriptor, HRegionInfo, long, byte[], byte[], EnvironmentEdge, MultiVersionConcurrencyControl, int)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.wal.<a href="./org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html" title="class in org.apache.hadoop.hbase.regionserver.wal">TestWALReplay</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/TestPerColumnFamilyFlush.html#createGet(int,%20int)">createGet(int, int)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/TestPerColumnFamilyFlush.html" title="class in org.apache.hadoop.hbase.regionserver">TestPerColumnFamilyFlush</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/test/IntegrationTestTimeBoundedRequestsWithRegionReplicas.TimeBoundedMultiThreadedReader.TimeBoundedMultiThreadedReaderThread.html#createGet(long)">createGet(long)</a></span> - Method in class org.apache.hadoop.hbase.test.<a href="./org/apache/hadoop/hbase/test/IntegrationTestTimeBoundedRequestsWithRegionReplicas.TimeBoundedMultiThreadedReader.TimeBoundedMultiThreadedReaderThread.html" title="class in org.apache.hadoop.hbase.test">IntegrationTestTimeBoundedRequestsWithRegionReplicas.TimeBoundedMultiThreadedReader.TimeBoundedMultiThreadedReaderThread</a></dt>
@@ -6062,10 +6064,14 @@
  <a href="./org/apache/hadoop/hbase/HBaseTestingUtility.html#createWal(org.apache.hadoop.conf.Configuration,%20org.apache.hadoop.fs.Path,%20org.apache.hadoop.hbase.HRegionInfo)"><code>HBaseTestingUtility.createWal(Configuration, Path, HRegionInfo)</code></a> because that method
  doesn't play nicely with FaultyFileSystem.</div>
 </dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#createWALEdit(byte[],%20byte[],%20org.apache.hadoop.hbase.util.EnvironmentEdge,%20int)">createWALEdit(byte[], byte[], EnvironmentEdge, int)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.wal.<a href="./org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html" title="class in org.apache.hadoop.hbase.regionserver.wal">TestWALReplay</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/replication/regionserver/TestReplicationSink.html#createWALEntryBuilder(org.apache.hadoop.hbase.TableName)">createWALEntryBuilder(TableName)</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="./org/apache/hadoop/hbase/replication/regionserver/TestReplicationSink.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicationSink</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/TestHRegion.html#createWALFactory(org.apache.hadoop.conf.Configuration,%20org.apache.hadoop.fs.Path)">createWALFactory(Configuration, Path)</a></span> - Static method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/TestHRegion.html" title="class in org.apache.hadoop.hbase.regionserver">TestHRegion</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#createWALKey(org.apache.hadoop.hbase.TableName,%20org.apache.hadoop.hbase.HRegionInfo,%20org.apache.hadoop.hbase.regionserver.MultiVersionConcurrencyControl)">createWALKey(TableName, HRegionInfo, MultiVersionConcurrencyControl)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.wal.<a href="./org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html" title="class in org.apache.hadoop.hbase.regionserver.wal">TestWALReplay</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html#createWALReaderForPrimary()">createWALReaderForPrimary()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.html" title="class in org.apache.hadoop.hbase.regionserver">TestHRegionReplayEvents</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.html#createWalStore(org.apache.hadoop.conf.Configuration,%20org.apache.hadoop.fs.FileSystem,%20org.apache.hadoop.fs.Path)">createWalStore(Configuration, FileSystem, Path)</a></span> - Static method in class org.apache.hadoop.hbase.procedure2.<a href="./org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureTestingUtility</a></dt>
@@ -34541,6 +34547,10 @@
 </dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/TestEncodedSeekers.html#TestEncodedSeekers(org.apache.hadoop.hbase.io.encoding.DataBlockEncoding,%20boolean,%20boolean)">TestEncodedSeekers(DataBlockEncoding, boolean, boolean)</a></span> - Constructor for class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/TestEncodedSeekers.html" title="class in org.apache.hadoop.hbase.io.encoding">TestEncodedSeekers</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/TestOrderedBytes.html#testEncodedValueCheck()">testEncodedValueCheck()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/TestOrderedBytes.html" title="class in org.apache.hadoop.hbase.util">TestOrderedBytes</a></dt>
+<dd>
+<div class="block">Test encoded value check</div>
+</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/types/TestTerminatedWrapper.html#testEncodedValueContainsTerm()">testEncodedValueContainsTerm()</a></span> - Method in class org.apache.hadoop.hbase.types.<a href="./org/apache/hadoop/hbase/types/TestTerminatedWrapper.html" title="class in org.apache.hadoop.hbase.types">TestTerminatedWrapper</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/codec/prefixtree/row/TestRowEncoder.html#testEncoderOutput()">testEncoderOutput()</a></span> - Method in class org.apache.hadoop.hbase.codec.prefixtree.row.<a href="./org/apache/hadoop/hbase/codec/prefixtree/row/TestRowEncoder.html" title="class in org.apache.hadoop.hbase.codec.prefixtree.row">TestRowEncoder</a></dt>
@@ -39296,6 +39306,14 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/TestRecoveredEdits.html#testName">testName</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/TestRecoveredEdits.html" title="class in org.apache.hadoop.hbase.regionserver">TestRecoveredEdits</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testNameConflictWhenSplit(boolean)">testNameConflictWhenSplit(boolean)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.wal.<a href="./org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html" title="class in org.apache.hadoop.hbase.regionserver.wal">TestWALReplay</a></dt>
+<dd>
+<div class="block">testcase for https://issues.apache.org/jira/browse/HBASE-14949.</div>
+</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testNameConflictWhenSplit0()">testNameConflictWhenSplit0()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.wal.<a href="./org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html" title="class in org.apache.hadoop.hbase.regionserver.wal">TestWALReplay</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testNameConflictWhenSplit1()">testNameConflictWhenSplit1()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.wal.<a href="./org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html" title="class in org.apache.hadoop.hbase.regionserver.wal">TestWALReplay</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="./org/apache/hadoop/hbase/TestNamespace.html" title="class in org.apache.hadoop.hbase"><span class="strong">TestNamespace</span></a> - Class in <a href="./org/apache/hadoop/hbase/package-summary.html">org.apache.hadoop.hbase</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/TestNamespace.html#TestNamespace()">TestNamespace()</a></span> - Constructor for class org.apache.hadoop.hbase.<a href="./org/apache/hadoop/hbase/TestNamespace.html" title="class in org.apache.hadoop.hbase">TestNamespace</a></dt>
@@ -49849,6 +49867,8 @@ the order they are declared.</div>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/TestMiniClusterLoadSequential.html#writerThreads">writerThreads</a></span> - Variable in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/TestMiniClusterLoadSequential.html" title="class in org.apache.hadoop.hbase.util">TestMiniClusterLoadSequential</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#writerWALFile(org.apache.hadoop.fs.Path,%20java.util.List)">writerWALFile(Path, List&lt;FSWALEntry&gt;)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.wal.<a href="./org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html" title="class in org.apache.hadoop.hbase.regionserver.wal">TestWALReplay</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/TestFileLink.html#writeSomeData(org.apache.hadoop.fs.FileSystem,%20org.apache.hadoop.fs.Path,%20long,%20byte)">writeSomeData(FileSystem, Path, long, byte)</a></span> - Method in class org.apache.hadoop.hbase.io.<a href="./org/apache/hadoop/hbase/io/TestFileLink.html" title="class in org.apache.hadoop.hbase.io">TestFileLink</a></dt>
 <dd>
 <div class="block">Write up to 'size' bytes with value 'v' into a new file called 'path'.</div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/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 c423f10..149878b 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -156,9 +156,9 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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/7/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="strong">TestCacheOnWrite.CacheOnWriteType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestHFileBlockCompatibility.Writer.State.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="strong">TestHFileBlockCompatibility.Writer.State</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="strong">TagUsage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestHFileBlockCompatibility.Writer.State.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="strong">TestHFileBlockCompatibility.Writer.State</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="strong">TestCacheOnWrite.CacheOnWriteType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/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 00dd4d2..faf424b 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -515,16 +515,16 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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/7/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/RESTApiClusterManager.RoleCommand.html" title="enum in org.apache.hadoop.hbase"><span class="strong">RESTApiClusterManager.RoleCommand</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="strong">IntegrationTestRegionReplicaPerf.Stat</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="strong">ClusterManager.ServiceType</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="strong">HBaseClusterManager.CommandProvider.Operation</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="strong">RESTApiClusterManager.RoleCommand</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="strong">RESTApiClusterManager.Service</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="strong">ScanPerformanceEvaluation.ScanCounter</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/TestRegionServerMetrics.Metric.html" title="enum in org.apache.hadoop.hbase"><span class="strong">TestRegionServerMetrics.Metric</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="strong">IntegrationTestRegionReplicaPerf.Stat</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="strong">PerformanceEvaluation.Counter</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="strong">IntegrationTestDDLMasterFailover.ACTION</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="strong">ResourceChecker.Phase</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="strong">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="strong">RESTApiClusterManager.Service</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
index b6de721..f45510d 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -145,8 +145,8 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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/7/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/TestProcedureRecovery.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="strong">TestProcedureRecovery.TestStateMachineProcedure.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="strong">TestYieldProcedures.TestStateMachineProcedure.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="strong">TestProcedureRecovery.TestStateMachineProcedure.State</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/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 eca46be..300903a 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -544,8 +544,8 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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/7/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/TestAtomicOperation.TestStep.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">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="strong">DataBlockEncodingTool.Manipulation</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="strong">TestAtomicOperation.TestStep</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="strong">TestCacheOnWriteInSchema.CacheOnWriteType</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/testdevapidocs/org/apache/hadoop/hbase/regionserver/wal/TestSecureWALReplay.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/wal/TestSecureWALReplay.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/wal/TestSecureWALReplay.html
index c2a515e..090b546 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/wal/TestSecureWALReplay.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/wal/TestSecureWALReplay.html
@@ -177,7 +177,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Test
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html" title="class in org.apache.hadoop.hbase.regionserver.wal">TestWALReplay</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#addRegionEdits(byte[],%20byte[],%20int,%20org.apache.hadoop.hbase.util.EnvironmentEdge,%20org.apache.hadoop.hbase.regionserver.Region,%20java.lang.String)">addRegionEdits</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#setUp()">setUp</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#tearDown()">tearDown</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#tearDownAfterClass()">tearDownAfterClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#test2727()">test2727</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testCompactedBulkLoadedFiles()">testCompactedBulkLoadedFiles</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testDatalossWhenInputE
 rror()">testDatalossWhenInputError</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testRegionMadeOfBulkLoadedFilesOnly()">testRegionMadeOfBulkLoadedFilesOnly</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testReplayEditsAfterAbortingFlush()">testReplayEditsAfterAbortingFlush</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testReplayEditsAfterPartialFlush()">testReplayEditsAfterPartialFlush</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testReplayEditsAfterRegionMovedWithMultiCF()">testReplayEditsAfterRegionMovedWithMultiCF</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testReplayEditsWrittenIntoWAL()">testReplayEditsWrittenIntoWAL</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testReplayEditsWrittenViaHRegion()">testRep
 layEditsWrittenViaHRegion</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testSequentialEditLogSeqNum()">testSequentialEditLogSeqNum</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#addRegionEdits(byte[],%20byte[],%20int,%20org.apache.hadoop.hbase.util.EnvironmentEdge,%20org.apache.hadoop.hbase.regionserver.Region,%20java.lang.String)">addRegionEdits</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#setUp()">setUp</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#tearDown()">tearDown</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#tearDownAfterClass()">tearDownAfterClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#test2727()">test2727</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testCompactedBulkLoadedFiles()">testCompactedBulkLoadedFiles</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testDatalossWhenInputE
 rror()">testDatalossWhenInputError</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testNameConflictWhenSplit0()">testNameConflictWhenSplit0</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testNameConflictWhenSplit1()">testNameConflictWhenSplit1</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testRegionMadeOfBulkLoadedFilesOnly()">testRegionMadeOfBulkLoadedFilesOnly</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testReplayEditsAfterAbortingFlush()">testReplayEditsAfterAbortingFlush</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testReplayEditsAfterPartialFlush()">testReplayEditsAfterPartialFlush</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testReplayEditsAfterRegionMovedWithMultiCF()">testReplayEditsAfterRegionMovedWith
 MultiCF</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testReplayEditsWrittenIntoWAL()">testReplayEditsWrittenIntoWAL</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testReplayEditsWrittenViaHRegion()">testReplayEditsWrittenViaHRegion</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testSequentialEditLogSeqNum()">testSequentialEditLogSeqNum</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/f32f549a/testdevapidocs/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.CustomStoreFlusher.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.CustomStoreFlusher.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.CustomStoreFlusher.html
index 26aded2..670ec2a 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.CustomStoreFlusher.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.CustomStoreFlusher.html
@@ -104,7 +104,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.660">TestWALReplay.CustomStoreFlusher</a>
+<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.661">TestWALReplay.CustomStoreFlusher</a>
 extends org.apache.hadoop.hbase.regionserver.DefaultStoreFlusher</pre>
 </li>
 </ul>
@@ -222,7 +222,7 @@ extends org.apache.hadoop.hbase.regionserver.DefaultStoreFlusher</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>throwExceptionWhenFlushing</h4>
-<pre>static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicBoolean.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicBoolean</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.CustomStoreFlusher.html#line.662">throwExceptionWhenFlushing</a></pre>
+<pre>static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicBoolean.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicBoolean</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.CustomStoreFlusher.html#line.663">throwExceptionWhenFlushing</a></pre>
 </li>
 </ul>
 <a name="conf">
@@ -257,7 +257,7 @@ extends org.apache.hadoop.hbase.regionserver.DefaultStoreFlusher</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestWALReplay.CustomStoreFlusher</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.CustomStoreFlusher.html#line.664">TestWALReplay.CustomStoreFlusher</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.CustomStoreFlusher.html#line.665">TestWALReplay.CustomStoreFlusher</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                 org.apache.hadoop.hbase.regionserver.Store&nbsp;store)</pre>
 </li>
 </ul>
@@ -275,7 +275,7 @@ extends org.apache.hadoop.hbase.regionserver.DefaultStoreFlusher</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>flushSnapshot</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.CustomStoreFlusher.html#line.668">flushSnapshot</a>(org.apache.hadoop.hbase.regionserver.MemStoreSnapshot&nbsp;snapshot,
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.CustomStoreFlusher.html#line.669">flushSnapshot</a>(org.apache.hadoop.hbase.regionserver.MemStoreSnapshot&nbsp;snapshot,
                                             long&nbsp;cacheFlushId,
                                             org.apache.hadoop.hbase.monitoring.MonitoredTask&nbsp;status,
                                             org.apache.hadoop.hbase.regionserver.throttle.ThroughputController&nbsp;throughputController)

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/testdevapidocs/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.MockWAL.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.MockWAL.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.MockWAL.html
index 83a2a22..d94ece1 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.MockWAL.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.MockWAL.html
@@ -108,7 +108,7 @@
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.1037">TestWALReplay.MockWAL</a>
+<pre>static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.1088">TestWALReplay.MockWAL</a>
 extends org.apache.hadoop.hbase.regionserver.wal.FSHLog</pre>
 </li>
 </ul>
@@ -235,7 +235,7 @@ extends org.apache.hadoop.hbase.regionserver.wal.FSHLog</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>doCompleteCacheFlush</h4>
-<pre>boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.MockWAL.html#line.1038">doCompleteCacheFlush</a></pre>
+<pre>boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.MockWAL.html#line.1089">doCompleteCacheFlush</a></pre>
 </li>
 </ul>
 </li>
@@ -252,7 +252,7 @@ extends org.apache.hadoop.hbase.regionserver.wal.FSHLog</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestWALReplay.MockWAL</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.MockWAL.html#line.1040">TestWALReplay.MockWAL</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.MockWAL.html#line.1091">TestWALReplay.MockWAL</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                      org.apache.hadoop.fs.Path&nbsp;rootDir,
                      <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;logName,
                      org.apache.hadoop.conf.Configuration&nbsp;conf)
@@ -275,7 +275,7 @@ extends org.apache.hadoop.hbase.regionserver.wal.FSHLog</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>completeCacheFlush</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.MockWAL.html#line.1046">completeCacheFlush</a>(byte[]&nbsp;encodedRegionName)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.MockWAL.html#line.1097">completeCacheFlush</a>(byte[]&nbsp;encodedRegionName)</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code>completeCacheFlush</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.wal.WAL</code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/testdevapidocs/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.TestFlusher.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.TestFlusher.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.TestFlusher.html
index 6336d6d..2aee78d 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.TestFlusher.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.TestFlusher.html
@@ -103,7 +103,7 @@
 </dl>
 <hr>
 <br>
-<pre> class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.1071">TestWALReplay.TestFlusher</a>
+<pre> class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.1122">TestWALReplay.TestFlusher</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements org.apache.hadoop.hbase.regionserver.FlushRequester</pre>
 </li>
@@ -211,7 +211,7 @@ implements org.apache.hadoop.hbase.regionserver.FlushRequester</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>r</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.regionserver.HRegion <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.TestFlusher.html#line.1072">r</a></pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.regionserver.HRegion <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.TestFlusher.html#line.1123">r</a></pre>
 </li>
 </ul>
 </li>
@@ -228,7 +228,7 @@ implements org.apache.hadoop.hbase.regionserver.FlushRequester</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestWALReplay.TestFlusher</h4>
-<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.TestFlusher.html#line.1071">TestWALReplay.TestFlusher</a>()</pre>
+<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.TestFlusher.html#line.1122">TestWALReplay.TestFlusher</a>()</pre>
 </li>
 </ul>
 </li>
@@ -245,7 +245,7 @@ implements org.apache.hadoop.hbase.regionserver.FlushRequester</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>requestFlush</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.TestFlusher.html#line.1075">requestFlush</a>(org.apache.hadoop.hbase.regionserver.Region&nbsp;region,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.TestFlusher.html#line.1126">requestFlush</a>(org.apache.hadoop.hbase.regionserver.Region&nbsp;region,
                 boolean&nbsp;force)</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
@@ -259,7 +259,7 @@ implements org.apache.hadoop.hbase.regionserver.FlushRequester</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>requestDelayedFlush</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.TestFlusher.html#line.1084">requestDelayedFlush</a>(org.apache.hadoop.hbase.regionserver.Region&nbsp;region,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.TestFlusher.html#line.1135">requestDelayedFlush</a>(org.apache.hadoop.hbase.regionserver.Region&nbsp;region,
                        long&nbsp;when,
                        boolean&nbsp;forceFlushAllStores)</pre>
 <dl>
@@ -274,7 +274,7 @@ implements org.apache.hadoop.hbase.regionserver.FlushRequester</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>registerFlushRequestListener</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.TestFlusher.html#line.1090">registerFlushRequestListener</a>(org.apache.hadoop.hbase.regionserver.FlushRequestListener&nbsp;listener)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.TestFlusher.html#line.1141">registerFlushRequestListener</a>(org.apache.hadoop.hbase.regionserver.FlushRequestListener&nbsp;listener)</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code>registerFlushRequestListener</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.regionserver.FlushRequester</code></dd>
@@ -287,7 +287,7 @@ implements org.apache.hadoop.hbase.regionserver.FlushRequester</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>unregisterFlushRequestListener</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.TestFlusher.html#line.1095">unregisterFlushRequestListener</a>(org.apache.hadoop.hbase.regionserver.FlushRequestListener&nbsp;listener)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.TestFlusher.html#line.1146">unregisterFlushRequestListener</a>(org.apache.hadoop.hbase.regionserver.FlushRequestListener&nbsp;listener)</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code>unregisterFlushRequestListener</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.regionserver.FlushRequester</code></dd>
@@ -300,7 +300,7 @@ implements org.apache.hadoop.hbase.regionserver.FlushRequester</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>setGlobalMemstoreLimit</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.TestFlusher.html#line.1100">setGlobalMemstoreLimit</a>(long&nbsp;globalMemStoreSize)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.TestFlusher.html#line.1151">setGlobalMemstoreLimit</a>(long&nbsp;globalMemStoreSize)</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code>setGlobalMemstoreLimit</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.regionserver.FlushRequester</code></dd>


[37/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/src-html/org/apache/hadoop/hbase/client/Increment.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/Increment.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/Increment.html
index 7bdc8f8..7203c61 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/Increment.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/Increment.html
@@ -60,297 +60,294 @@
 <span class="sourceLineNo">052</span>@InterfaceStability.Stable<a name="line.52"></a>
 <span class="sourceLineNo">053</span>public class Increment extends Mutation implements Comparable&lt;Row&gt; {<a name="line.53"></a>
 <span class="sourceLineNo">054</span>  private static final long HEAP_OVERHEAD =  ClassSize.REFERENCE + ClassSize.TIMERANGE;<a name="line.54"></a>
-<span class="sourceLineNo">055</span><a name="line.55"></a>
-<span class="sourceLineNo">056</span>  private static final String RETURN_RESULTS = "_rr_";<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>  private TimeRange tr = new TimeRange();<a name="line.58"></a>
-<span class="sourceLineNo">059</span><a name="line.59"></a>
-<span class="sourceLineNo">060</span>  /**<a name="line.60"></a>
-<span class="sourceLineNo">061</span>   * Create a Increment operation for the specified row.<a name="line.61"></a>
-<span class="sourceLineNo">062</span>   * &lt;p&gt;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>   * At least one column must be incremented.<a name="line.63"></a>
-<span class="sourceLineNo">064</span>   * @param row row key (we will make a copy of this).<a name="line.64"></a>
-<span class="sourceLineNo">065</span>   */<a name="line.65"></a>
-<span class="sourceLineNo">066</span>  public Increment(byte [] row) {<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    this(row, 0, row.length);<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  }<a name="line.68"></a>
-<span class="sourceLineNo">069</span><a name="line.69"></a>
-<span class="sourceLineNo">070</span>  /**<a name="line.70"></a>
-<span class="sourceLineNo">071</span>   * Create a Increment operation for the specified row.<a name="line.71"></a>
-<span class="sourceLineNo">072</span>   * &lt;p&gt;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>   * At least one column must be incremented.<a name="line.73"></a>
-<span class="sourceLineNo">074</span>   * @param row row key (we will make a copy of this).<a name="line.74"></a>
-<span class="sourceLineNo">075</span>   */<a name="line.75"></a>
-<span class="sourceLineNo">076</span>  public Increment(final byte [] row, final int offset, final int length) {<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    checkRow(row, offset, length);<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    this.row = Bytes.copy(row, offset, length);<a name="line.78"></a>
-<span class="sourceLineNo">079</span>  }<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  /**<a name="line.80"></a>
-<span class="sourceLineNo">081</span>   * Copy constructor<a name="line.81"></a>
-<span class="sourceLineNo">082</span>   * @param i<a name="line.82"></a>
-<span class="sourceLineNo">083</span>   */<a name="line.83"></a>
-<span class="sourceLineNo">084</span>  public Increment(Increment i) {<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    this.row = i.getRow();<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    this.ts = i.getTimeStamp();<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    this.tr = i.getTimeRange();<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    this.familyMap.putAll(i.getFamilyCellMap());<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    for (Map.Entry&lt;String, byte[]&gt; entry : i.getAttributesMap().entrySet()) {<a name="line.89"></a>
-<span class="sourceLineNo">090</span>      this.setAttribute(entry.getKey(), entry.getValue());<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    }<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>   * Add the specified KeyValue to this operation.<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   * @param cell individual Cell<a name="line.96"></a>
-<span class="sourceLineNo">097</span>   * @return this<a name="line.97"></a>
-<span class="sourceLineNo">098</span>   * @throws java.io.IOException e<a name="line.98"></a>
-<span class="sourceLineNo">099</span>   */<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  public Increment add(Cell cell) throws IOException{<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    byte [] family = CellUtil.cloneFamily(cell);<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    List&lt;Cell&gt; list = getCellList(family);<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    //Checking that the row of the kv is the same as the put<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    int res = Bytes.compareTo(this.row, 0, row.length,<a name="line.104"></a>
-<span class="sourceLineNo">105</span>        cell.getRowArray(), cell.getRowOffset(), cell.getRowLength());<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    if (res != 0) {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>      throw new WrongRowIOException("The row in " + cell +<a name="line.107"></a>
-<span class="sourceLineNo">108</span>        " doesn't match the original one " +  Bytes.toStringBinary(this.row));<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    }<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    list.add(cell);<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    familyMap.put(family, list);<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    return this;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  }<a name="line.113"></a>
-<span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span>  /**<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   * Increment the column from the specific family with the specified qualifier<a name="line.116"></a>
-<span class="sourceLineNo">117</span>   * by the specified amount.<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   * &lt;p&gt;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   * Overrides previous calls to addColumn for this family and qualifier.<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   * @param family family name<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   * @param qualifier column qualifier<a name="line.121"></a>
-<span class="sourceLineNo">122</span>   * @param amount amount to increment by<a name="line.122"></a>
-<span class="sourceLineNo">123</span>   * @return the Increment object<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   */<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  public Increment addColumn(byte [] family, byte [] qualifier, long amount) {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    if (family == null) {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      throw new IllegalArgumentException("family cannot be null");<a name="line.127"></a>
+<span class="sourceLineNo">055</span>  private TimeRange tr = new TimeRange();<a name="line.55"></a>
+<span class="sourceLineNo">056</span><a name="line.56"></a>
+<span class="sourceLineNo">057</span>  /**<a name="line.57"></a>
+<span class="sourceLineNo">058</span>   * Create a Increment operation for the specified row.<a name="line.58"></a>
+<span class="sourceLineNo">059</span>   * &lt;p&gt;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>   * At least one column must be incremented.<a name="line.60"></a>
+<span class="sourceLineNo">061</span>   * @param row row key (we will make a copy of this).<a name="line.61"></a>
+<span class="sourceLineNo">062</span>   */<a name="line.62"></a>
+<span class="sourceLineNo">063</span>  public Increment(byte [] row) {<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    this(row, 0, row.length);<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  }<a name="line.65"></a>
+<span class="sourceLineNo">066</span><a name="line.66"></a>
+<span class="sourceLineNo">067</span>  /**<a name="line.67"></a>
+<span class="sourceLineNo">068</span>   * Create a Increment operation for the specified row.<a name="line.68"></a>
+<span class="sourceLineNo">069</span>   * &lt;p&gt;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>   * At least one column must be incremented.<a name="line.70"></a>
+<span class="sourceLineNo">071</span>   * @param row row key (we will make a copy of this).<a name="line.71"></a>
+<span class="sourceLineNo">072</span>   */<a name="line.72"></a>
+<span class="sourceLineNo">073</span>  public Increment(final byte [] row, final int offset, final int length) {<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    checkRow(row, offset, length);<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    this.row = Bytes.copy(row, offset, length);<a name="line.75"></a>
+<span class="sourceLineNo">076</span>  }<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  /**<a name="line.77"></a>
+<span class="sourceLineNo">078</span>   * Copy constructor<a name="line.78"></a>
+<span class="sourceLineNo">079</span>   * @param i<a name="line.79"></a>
+<span class="sourceLineNo">080</span>   */<a name="line.80"></a>
+<span class="sourceLineNo">081</span>  public Increment(Increment i) {<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    this.row = i.getRow();<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    this.ts = i.getTimeStamp();<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    this.tr = i.getTimeRange();<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    this.familyMap.putAll(i.getFamilyCellMap());<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    for (Map.Entry&lt;String, byte[]&gt; entry : i.getAttributesMap().entrySet()) {<a name="line.86"></a>
+<span class="sourceLineNo">087</span>      this.setAttribute(entry.getKey(), entry.getValue());<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    }<a name="line.88"></a>
+<span class="sourceLineNo">089</span>  }<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>   * Add the specified KeyValue to this operation.<a name="line.92"></a>
+<span class="sourceLineNo">093</span>   * @param cell individual Cell<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   * @return this<a name="line.94"></a>
+<span class="sourceLineNo">095</span>   * @throws java.io.IOException e<a name="line.95"></a>
+<span class="sourceLineNo">096</span>   */<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  public Increment add(Cell cell) throws IOException{<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    byte [] family = CellUtil.cloneFamily(cell);<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    List&lt;Cell&gt; list = getCellList(family);<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    //Checking that the row of the kv is the same as the put<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    int res = Bytes.compareTo(this.row, 0, row.length,<a name="line.101"></a>
+<span class="sourceLineNo">102</span>        cell.getRowArray(), cell.getRowOffset(), cell.getRowLength());<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    if (res != 0) {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      throw new WrongRowIOException("The row in " + cell +<a name="line.104"></a>
+<span class="sourceLineNo">105</span>        " doesn't match the original one " +  Bytes.toStringBinary(this.row));<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    }<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    list.add(cell);<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    familyMap.put(family, list);<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    return this;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>  }<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span>  /**<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   * Increment the column from the specific family with the specified qualifier<a name="line.113"></a>
+<span class="sourceLineNo">114</span>   * by the specified amount.<a name="line.114"></a>
+<span class="sourceLineNo">115</span>   * &lt;p&gt;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>   * Overrides previous calls to addColumn for this family and qualifier.<a name="line.116"></a>
+<span class="sourceLineNo">117</span>   * @param family family name<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   * @param qualifier column qualifier<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   * @param amount amount to increment by<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   * @return the Increment object<a name="line.120"></a>
+<span class="sourceLineNo">121</span>   */<a name="line.121"></a>
+<span class="sourceLineNo">122</span>  public Increment addColumn(byte [] family, byte [] qualifier, long amount) {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    if (family == null) {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      throw new IllegalArgumentException("family cannot be null");<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    }<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    if (qualifier == null) {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      throw new IllegalArgumentException("qualifier cannot be null");<a name="line.127"></a>
 <span class="sourceLineNo">128</span>    }<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    if (qualifier == null) {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>      throw new IllegalArgumentException("qualifier cannot be null");<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    }<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    List&lt;Cell&gt; list = getCellList(family);<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    KeyValue kv = createPutKeyValue(family, qualifier, ts, Bytes.toBytes(amount));<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    list.add(kv);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    familyMap.put(CellUtil.cloneFamily(kv), list);<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    return this;<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>   * Gets the TimeRange used for this increment.<a name="line.140"></a>
-<span class="sourceLineNo">141</span>   * @return TimeRange<a name="line.141"></a>
-<span class="sourceLineNo">142</span>   */<a name="line.142"></a>
-<span class="sourceLineNo">143</span>  public TimeRange getTimeRange() {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    return this.tr;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  }<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>   * Sets the TimeRange to be used on the Get for this increment.<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   * &lt;p&gt;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>   * This is useful for when you have counters that only last for specific<a name="line.150"></a>
-<span class="sourceLineNo">151</span>   * periods of time (ie. counters that are partitioned by time).  By setting<a name="line.151"></a>
-<span class="sourceLineNo">152</span>   * the range of valid times for this increment, you can potentially gain<a name="line.152"></a>
-<span class="sourceLineNo">153</span>   * some performance with a more optimal Get operation.<a name="line.153"></a>
-<span class="sourceLineNo">154</span>   * &lt;p&gt;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>   * This range is used as [minStamp, maxStamp).<a name="line.155"></a>
-<span class="sourceLineNo">156</span>   * @param minStamp minimum timestamp value, inclusive<a name="line.156"></a>
-<span class="sourceLineNo">157</span>   * @param maxStamp maximum timestamp value, exclusive<a name="line.157"></a>
-<span class="sourceLineNo">158</span>   * @throws IOException if invalid time range<a name="line.158"></a>
-<span class="sourceLineNo">159</span>   * @return this<a name="line.159"></a>
-<span class="sourceLineNo">160</span>   */<a name="line.160"></a>
-<span class="sourceLineNo">161</span>  public Increment setTimeRange(long minStamp, long maxStamp)<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  throws IOException {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    tr = new TimeRange(minStamp, maxStamp);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    return this;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>  }<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  <a name="line.166"></a>
-<span class="sourceLineNo">167</span>  /**<a name="line.167"></a>
-<span class="sourceLineNo">168</span>   * @param returnResults True (default) if the increment operation should return the results. A<a name="line.168"></a>
-<span class="sourceLineNo">169</span>   *          client that is not interested in the result can save network bandwidth setting this<a name="line.169"></a>
-<span class="sourceLineNo">170</span>   *          to false.<a name="line.170"></a>
-<span class="sourceLineNo">171</span>   */<a name="line.171"></a>
-<span class="sourceLineNo">172</span>  public Increment setReturnResults(boolean returnResults) {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    setAttribute(RETURN_RESULTS, Bytes.toBytes(returnResults));<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    return this;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>  }<a name="line.175"></a>
-<span class="sourceLineNo">176</span><a name="line.176"></a>
-<span class="sourceLineNo">177</span>  /**<a name="line.177"></a>
-<span class="sourceLineNo">178</span>   * @return current value for returnResults<a name="line.178"></a>
-<span class="sourceLineNo">179</span>   */<a name="line.179"></a>
-<span class="sourceLineNo">180</span>  public boolean isReturnResults() {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    byte[] v = getAttribute(RETURN_RESULTS);<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    return v == null ? true : Bytes.toBoolean(v);<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>   * Method for retrieving the number of families to increment from<a name="line.186"></a>
-<span class="sourceLineNo">187</span>   * @return number of families<a name="line.187"></a>
-<span class="sourceLineNo">188</span>   */<a name="line.188"></a>
-<span class="sourceLineNo">189</span>  @Override<a name="line.189"></a>
-<span class="sourceLineNo">190</span>  public int numFamilies() {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    return this.familyMap.size();<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>  /**<a name="line.194"></a>
-<span class="sourceLineNo">195</span>   * Method for checking if any families have been inserted into this Increment<a name="line.195"></a>
-<span class="sourceLineNo">196</span>   * @return true if familyMap is non empty false otherwise<a name="line.196"></a>
-<span class="sourceLineNo">197</span>   */<a name="line.197"></a>
-<span class="sourceLineNo">198</span>  public boolean hasFamilies() {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    return !this.familyMap.isEmpty();<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>   * Before 0.95, when you called Increment#getFamilyMap(), you got back<a name="line.203"></a>
-<span class="sourceLineNo">204</span>   * a map of families to a list of Longs.  Now, {@link #getFamilyCellMap()} returns<a name="line.204"></a>
-<span class="sourceLineNo">205</span>   * families by list of Cells.  This method has been added so you can have the<a name="line.205"></a>
-<span class="sourceLineNo">206</span>   * old behavior.<a name="line.206"></a>
-<span class="sourceLineNo">207</span>   * @return Map of families to a Map of qualifiers and their Long increments.<a name="line.207"></a>
-<span class="sourceLineNo">208</span>   * @since 0.95.0<a name="line.208"></a>
-<span class="sourceLineNo">209</span>   */<a name="line.209"></a>
-<span class="sourceLineNo">210</span>  public Map&lt;byte[], NavigableMap&lt;byte [], Long&gt;&gt; getFamilyMapOfLongs() {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    NavigableMap&lt;byte[], List&lt;Cell&gt;&gt; map = super.getFamilyCellMap();<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    Map&lt;byte [], NavigableMap&lt;byte[], Long&gt;&gt; results =<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      new TreeMap&lt;byte[], NavigableMap&lt;byte [], Long&gt;&gt;(Bytes.BYTES_COMPARATOR);<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    for (Map.Entry&lt;byte [], List&lt;Cell&gt;&gt; entry: map.entrySet()) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      NavigableMap&lt;byte [], Long&gt; longs = new TreeMap&lt;byte [], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      for (Cell cell: entry.getValue()) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>        longs.put(CellUtil.cloneQualifier(cell),<a name="line.217"></a>
-<span class="sourceLineNo">218</span>            Bytes.toLong(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength()));<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      results.put(entry.getKey(), longs);<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    }<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    return results;<a name="line.222"></a>
-<span class="sourceLineNo">223</span>  }<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span>  /**<a name="line.225"></a>
-<span class="sourceLineNo">226</span>   * @return String<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   */<a name="line.227"></a>
-<span class="sourceLineNo">228</span>  @Override<a name="line.228"></a>
-<span class="sourceLineNo">229</span>  public String toString() {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    StringBuilder sb = new StringBuilder();<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    sb.append("row=");<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    sb.append(Bytes.toStringBinary(this.row));<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    if(this.familyMap.size() == 0) {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      sb.append(", no columns set to be incremented");<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      return sb.toString();<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    }<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    sb.append(", families=");<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    boolean moreThanOne = false;<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    for(Map.Entry&lt;byte [], List&lt;Cell&gt;&gt; entry: this.familyMap.entrySet()) {<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      if(moreThanOne) {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>        sb.append("), ");<a name="line.241"></a>
-<span class="sourceLineNo">242</span>      } else {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>        moreThanOne = true;<a name="line.243"></a>
-<span class="sourceLineNo">244</span>        sb.append("{");<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      }<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      sb.append("(family=");<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      sb.append(Bytes.toString(entry.getKey()));<a name="line.247"></a>
-<span class="sourceLineNo">248</span>      sb.append(", columns=");<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      if(entry.getValue() == null) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        sb.append("NONE");<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      } else {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>        sb.append("{");<a name="line.252"></a>
-<span class="sourceLineNo">253</span>        boolean moreThanOneB = false;<a name="line.253"></a>
-<span class="sourceLineNo">254</span>        for(Cell cell : entry.getValue()) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>          if(moreThanOneB) {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>            sb.append(", ");<a name="line.256"></a>
-<span class="sourceLineNo">257</span>          } else {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>            moreThanOneB = true;<a name="line.258"></a>
-<span class="sourceLineNo">259</span>          }<a name="line.259"></a>
-<span class="sourceLineNo">260</span>          sb.append(CellUtil.getCellKeyAsString(cell) + "+=" +<a name="line.260"></a>
-<span class="sourceLineNo">261</span>              Bytes.toLong(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength()));<a name="line.261"></a>
-<span class="sourceLineNo">262</span>        }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>        sb.append("}");<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      }<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    }<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    sb.append("}");<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    return sb.toString();<a name="line.267"></a>
-<span class="sourceLineNo">268</span>  }<a name="line.268"></a>
-<span class="sourceLineNo">269</span><a name="line.269"></a>
-<span class="sourceLineNo">270</span>  @Override<a name="line.270"></a>
-<span class="sourceLineNo">271</span>  public int compareTo(Row i) {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    // TODO: This is wrong.  Can't have two the same just because on same row.<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    return Bytes.compareTo(this.getRow(), i.getRow());<a name="line.273"></a>
-<span class="sourceLineNo">274</span>  }<a name="line.274"></a>
-<span class="sourceLineNo">275</span><a name="line.275"></a>
-<span class="sourceLineNo">276</span>  @Override<a name="line.276"></a>
-<span class="sourceLineNo">277</span>  public int hashCode() {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    // TODO: This is wrong.  Can't have two gets the same just because on same row.  But it<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    // matches how equals works currently and gets rid of the findbugs warning.<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    return Bytes.hashCode(this.getRow());<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>  @Override<a name="line.283"></a>
-<span class="sourceLineNo">284</span>  public boolean equals(Object obj) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    // TODO: This is wrong.  Can't have two the same just because on same row.<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    if (this == obj) {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      return true;<a name="line.287"></a>
+<span class="sourceLineNo">129</span>    List&lt;Cell&gt; list = getCellList(family);<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    KeyValue kv = createPutKeyValue(family, qualifier, ts, Bytes.toBytes(amount));<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    list.add(kv);<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    familyMap.put(CellUtil.cloneFamily(kv), list);<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    return this;<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>   * Gets the TimeRange used for this increment.<a name="line.137"></a>
+<span class="sourceLineNo">138</span>   * @return TimeRange<a name="line.138"></a>
+<span class="sourceLineNo">139</span>   */<a name="line.139"></a>
+<span class="sourceLineNo">140</span>  public TimeRange getTimeRange() {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    return this.tr;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  }<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span>  /**<a name="line.144"></a>
+<span class="sourceLineNo">145</span>   * Sets the TimeRange to be used on the Get for this increment.<a name="line.145"></a>
+<span class="sourceLineNo">146</span>   * &lt;p&gt;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>   * This is useful for when you have counters that only last for specific<a name="line.147"></a>
+<span class="sourceLineNo">148</span>   * periods of time (ie. counters that are partitioned by time).  By setting<a name="line.148"></a>
+<span class="sourceLineNo">149</span>   * the range of valid times for this increment, you can potentially gain<a name="line.149"></a>
+<span class="sourceLineNo">150</span>   * some performance with a more optimal Get operation.<a name="line.150"></a>
+<span class="sourceLineNo">151</span>   * &lt;p&gt;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>   * This range is used as [minStamp, maxStamp).<a name="line.152"></a>
+<span class="sourceLineNo">153</span>   * @param minStamp minimum timestamp value, inclusive<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   * @param maxStamp maximum timestamp value, exclusive<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   * @throws IOException if invalid time range<a name="line.155"></a>
+<span class="sourceLineNo">156</span>   * @return this<a name="line.156"></a>
+<span class="sourceLineNo">157</span>   */<a name="line.157"></a>
+<span class="sourceLineNo">158</span>  public Increment setTimeRange(long minStamp, long maxStamp)<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  throws IOException {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    tr = new TimeRange(minStamp, maxStamp);<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    return this;<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>  /**<a name="line.164"></a>
+<span class="sourceLineNo">165</span>   * @param returnResults True (default) if the increment operation should return the results. A<a name="line.165"></a>
+<span class="sourceLineNo">166</span>   *          client that is not interested in the result can save network bandwidth setting this<a name="line.166"></a>
+<span class="sourceLineNo">167</span>   *          to false.<a name="line.167"></a>
+<span class="sourceLineNo">168</span>   */<a name="line.168"></a>
+<span class="sourceLineNo">169</span>  public Increment setReturnResults(boolean returnResults) {<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    super.setReturnResults(returnResults);<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    return this;<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>  /**<a name="line.174"></a>
+<span class="sourceLineNo">175</span>   * @return current setting for returnResults<a name="line.175"></a>
+<span class="sourceLineNo">176</span>   */<a name="line.176"></a>
+<span class="sourceLineNo">177</span>  // This method makes public the superclasses's protected method.<a name="line.177"></a>
+<span class="sourceLineNo">178</span>  public boolean isReturnResults() {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    return super.isReturnResults();<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>  /**<a name="line.182"></a>
+<span class="sourceLineNo">183</span>   * Method for retrieving the number of families to increment from<a name="line.183"></a>
+<span class="sourceLineNo">184</span>   * @return number of families<a name="line.184"></a>
+<span class="sourceLineNo">185</span>   */<a name="line.185"></a>
+<span class="sourceLineNo">186</span>  @Override<a name="line.186"></a>
+<span class="sourceLineNo">187</span>  public int numFamilies() {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    return this.familyMap.size();<a name="line.188"></a>
+<span class="sourceLineNo">189</span>  }<a name="line.189"></a>
+<span class="sourceLineNo">190</span><a name="line.190"></a>
+<span class="sourceLineNo">191</span>  /**<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   * Method for checking if any families have been inserted into this Increment<a name="line.192"></a>
+<span class="sourceLineNo">193</span>   * @return true if familyMap is non empty false otherwise<a name="line.193"></a>
+<span class="sourceLineNo">194</span>   */<a name="line.194"></a>
+<span class="sourceLineNo">195</span>  public boolean hasFamilies() {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    return !this.familyMap.isEmpty();<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>  /**<a name="line.199"></a>
+<span class="sourceLineNo">200</span>   * Before 0.95, when you called Increment#getFamilyMap(), you got back<a name="line.200"></a>
+<span class="sourceLineNo">201</span>   * a map of families to a list of Longs.  Now, {@link #getFamilyCellMap()} returns<a name="line.201"></a>
+<span class="sourceLineNo">202</span>   * families by list of Cells.  This method has been added so you can have the<a name="line.202"></a>
+<span class="sourceLineNo">203</span>   * old behavior.<a name="line.203"></a>
+<span class="sourceLineNo">204</span>   * @return Map of families to a Map of qualifiers and their Long increments.<a name="line.204"></a>
+<span class="sourceLineNo">205</span>   * @since 0.95.0<a name="line.205"></a>
+<span class="sourceLineNo">206</span>   */<a name="line.206"></a>
+<span class="sourceLineNo">207</span>  public Map&lt;byte[], NavigableMap&lt;byte [], Long&gt;&gt; getFamilyMapOfLongs() {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    NavigableMap&lt;byte[], List&lt;Cell&gt;&gt; map = super.getFamilyCellMap();<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    Map&lt;byte [], NavigableMap&lt;byte[], Long&gt;&gt; results =<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      new TreeMap&lt;byte[], NavigableMap&lt;byte [], Long&gt;&gt;(Bytes.BYTES_COMPARATOR);<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    for (Map.Entry&lt;byte [], List&lt;Cell&gt;&gt; entry: map.entrySet()) {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      NavigableMap&lt;byte [], Long&gt; longs = new TreeMap&lt;byte [], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      for (Cell cell: entry.getValue()) {<a name="line.213"></a>
+<span class="sourceLineNo">214</span>        longs.put(CellUtil.cloneQualifier(cell),<a name="line.214"></a>
+<span class="sourceLineNo">215</span>            Bytes.toLong(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength()));<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      }<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      results.put(entry.getKey(), longs);<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    }<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    return results;<a name="line.219"></a>
+<span class="sourceLineNo">220</span>  }<a name="line.220"></a>
+<span class="sourceLineNo">221</span><a name="line.221"></a>
+<span class="sourceLineNo">222</span>  /**<a name="line.222"></a>
+<span class="sourceLineNo">223</span>   * @return String<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   */<a name="line.224"></a>
+<span class="sourceLineNo">225</span>  @Override<a name="line.225"></a>
+<span class="sourceLineNo">226</span>  public String toString() {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    StringBuilder sb = new StringBuilder();<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    sb.append("row=");<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    sb.append(Bytes.toStringBinary(this.row));<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    if(this.familyMap.size() == 0) {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      sb.append(", no columns set to be incremented");<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      return sb.toString();<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    }<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    sb.append(", families=");<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    boolean moreThanOne = false;<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    for(Map.Entry&lt;byte [], List&lt;Cell&gt;&gt; entry: this.familyMap.entrySet()) {<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      if(moreThanOne) {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>        sb.append("), ");<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      } else {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>        moreThanOne = true;<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        sb.append("{");<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      }<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      sb.append("(family=");<a name="line.243"></a>
+<span class="sourceLineNo">244</span>      sb.append(Bytes.toString(entry.getKey()));<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      sb.append(", columns=");<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      if(entry.getValue() == null) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>        sb.append("NONE");<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      } else {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>        sb.append("{");<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        boolean moreThanOneB = false;<a name="line.250"></a>
+<span class="sourceLineNo">251</span>        for(Cell cell : entry.getValue()) {<a name="line.251"></a>
+<span class="sourceLineNo">252</span>          if(moreThanOneB) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>            sb.append(", ");<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          } else {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>            moreThanOneB = true;<a name="line.255"></a>
+<span class="sourceLineNo">256</span>          }<a name="line.256"></a>
+<span class="sourceLineNo">257</span>          sb.append(CellUtil.getCellKeyAsString(cell) + "+=" +<a name="line.257"></a>
+<span class="sourceLineNo">258</span>              Bytes.toLong(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength()));<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        }<a name="line.259"></a>
+<span class="sourceLineNo">260</span>        sb.append("}");<a name="line.260"></a>
+<span class="sourceLineNo">261</span>      }<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    }<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    sb.append("}");<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    return sb.toString();<a name="line.264"></a>
+<span class="sourceLineNo">265</span>  }<a name="line.265"></a>
+<span class="sourceLineNo">266</span><a name="line.266"></a>
+<span class="sourceLineNo">267</span>  @Override<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  public int compareTo(Row i) {<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    // TODO: This is wrong.  Can't have two the same just because on same row.<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    return Bytes.compareTo(this.getRow(), i.getRow());<a name="line.270"></a>
+<span class="sourceLineNo">271</span>  }<a name="line.271"></a>
+<span class="sourceLineNo">272</span><a name="line.272"></a>
+<span class="sourceLineNo">273</span>  @Override<a name="line.273"></a>
+<span class="sourceLineNo">274</span>  public int hashCode() {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    // TODO: This is wrong.  Can't have two gets the same just because on same row.  But it<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    // matches how equals works currently and gets rid of the findbugs warning.<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    return Bytes.hashCode(this.getRow());<a name="line.277"></a>
+<span class="sourceLineNo">278</span>  }<a name="line.278"></a>
+<span class="sourceLineNo">279</span><a name="line.279"></a>
+<span class="sourceLineNo">280</span>  @Override<a name="line.280"></a>
+<span class="sourceLineNo">281</span>  public boolean equals(Object obj) {<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    // TODO: This is wrong.  Can't have two the same just because on same row.<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    if (this == obj) {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      return true;<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    }<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    if (obj == null || getClass() != obj.getClass()) {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      return false;<a name="line.287"></a>
 <span class="sourceLineNo">288</span>    }<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    if (obj == null || getClass() != obj.getClass()) {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      return false;<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    }<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    Row other = (Row) obj;<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    return compareTo(other) == 0;<a name="line.293"></a>
-<span class="sourceLineNo">294</span>  }<a name="line.294"></a>
-<span class="sourceLineNo">295</span><a name="line.295"></a>
-<span class="sourceLineNo">296</span>  @Override<a name="line.296"></a>
-<span class="sourceLineNo">297</span>  protected long extraHeapSize(){<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    return HEAP_OVERHEAD;<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>  @Override<a name="line.301"></a>
-<span class="sourceLineNo">302</span>  public Increment setAttribute(String name, byte[] value) {<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    return (Increment) super.setAttribute(name, value);<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>  @Override<a name="line.306"></a>
-<span class="sourceLineNo">307</span>  public Increment setId(String id) {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    return (Increment) super.setId(id);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>  }<a name="line.309"></a>
-<span class="sourceLineNo">310</span><a name="line.310"></a>
-<span class="sourceLineNo">311</span>  @Override<a name="line.311"></a>
-<span class="sourceLineNo">312</span>  public Increment setDurability(Durability d) {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    return (Increment) super.setDurability(d);<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>  @Override<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  public Increment setFamilyCellMap(NavigableMap&lt;byte[], List&lt;Cell&gt;&gt; map) {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    return (Increment) super.setFamilyCellMap(map);<a name="line.318"></a>
-<span class="sourceLineNo">319</span>  }<a name="line.319"></a>
-<span class="sourceLineNo">320</span><a name="line.320"></a>
-<span class="sourceLineNo">321</span>  @Override<a name="line.321"></a>
-<span class="sourceLineNo">322</span>  public Increment setClusterIds(List&lt;UUID&gt; clusterIds) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    return (Increment) super.setClusterIds(clusterIds);<a name="line.323"></a>
-<span class="sourceLineNo">324</span>  }<a name="line.324"></a>
-<span class="sourceLineNo">325</span><a name="line.325"></a>
-<span class="sourceLineNo">326</span>  @Override<a name="line.326"></a>
-<span class="sourceLineNo">327</span>  public Increment setCellVisibility(CellVisibility expression) {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    return (Increment) super.setCellVisibility(expression);<a name="line.328"></a>
-<span class="sourceLineNo">329</span>  }<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span>  @Override<a name="line.331"></a>
-<span class="sourceLineNo">332</span>  public Increment setACL(String user, Permission perms) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    return (Increment) super.setACL(user, perms);<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>  @Override<a name="line.336"></a>
-<span class="sourceLineNo">337</span>  public Increment setACL(Map&lt;String, Permission&gt; perms) {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    return (Increment) super.setACL(perms);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>  }<a name="line.339"></a>
-<span class="sourceLineNo">340</span><a name="line.340"></a>
-<span class="sourceLineNo">341</span>  @Override<a name="line.341"></a>
-<span class="sourceLineNo">342</span>  public Increment setTTL(long ttl) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>    return (Increment) super.setTTL(ttl);<a name="line.343"></a>
-<span class="sourceLineNo">344</span>  }<a name="line.344"></a>
-<span class="sourceLineNo">345</span>}<a name="line.345"></a>
+<span class="sourceLineNo">289</span>    Row other = (Row) obj;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    return compareTo(other) == 0;<a name="line.290"></a>
+<span class="sourceLineNo">291</span>  }<a name="line.291"></a>
+<span class="sourceLineNo">292</span><a name="line.292"></a>
+<span class="sourceLineNo">293</span>  @Override<a name="line.293"></a>
+<span class="sourceLineNo">294</span>  protected long extraHeapSize(){<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    return HEAP_OVERHEAD;<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>  @Override<a name="line.298"></a>
+<span class="sourceLineNo">299</span>  public Increment setAttribute(String name, byte[] value) {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    return (Increment) super.setAttribute(name, value);<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>  @Override<a name="line.303"></a>
+<span class="sourceLineNo">304</span>  public Increment setId(String id) {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    return (Increment) super.setId(id);<a name="line.305"></a>
+<span class="sourceLineNo">306</span>  }<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>  @Override<a name="line.308"></a>
+<span class="sourceLineNo">309</span>  public Increment setDurability(Durability d) {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    return (Increment) super.setDurability(d);<a name="line.310"></a>
+<span class="sourceLineNo">311</span>  }<a name="line.311"></a>
+<span class="sourceLineNo">312</span><a name="line.312"></a>
+<span class="sourceLineNo">313</span>  @Override<a name="line.313"></a>
+<span class="sourceLineNo">314</span>  public Increment setFamilyCellMap(NavigableMap&lt;byte[], List&lt;Cell&gt;&gt; map) {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    return (Increment) super.setFamilyCellMap(map);<a name="line.315"></a>
+<span class="sourceLineNo">316</span>  }<a name="line.316"></a>
+<span class="sourceLineNo">317</span><a name="line.317"></a>
+<span class="sourceLineNo">318</span>  @Override<a name="line.318"></a>
+<span class="sourceLineNo">319</span>  public Increment setClusterIds(List&lt;UUID&gt; clusterIds) {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    return (Increment) super.setClusterIds(clusterIds);<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>  @Override<a name="line.323"></a>
+<span class="sourceLineNo">324</span>  public Increment setCellVisibility(CellVisibility expression) {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    return (Increment) super.setCellVisibility(expression);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>  }<a name="line.326"></a>
+<span class="sourceLineNo">327</span><a name="line.327"></a>
+<span class="sourceLineNo">328</span>  @Override<a name="line.328"></a>
+<span class="sourceLineNo">329</span>  public Increment setACL(String user, Permission perms) {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    return (Increment) super.setACL(user, perms);<a name="line.330"></a>
+<span class="sourceLineNo">331</span>  }<a name="line.331"></a>
+<span class="sourceLineNo">332</span><a name="line.332"></a>
+<span class="sourceLineNo">333</span>  @Override<a name="line.333"></a>
+<span class="sourceLineNo">334</span>  public Increment setACL(Map&lt;String, Permission&gt; perms) {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    return (Increment) super.setACL(perms);<a name="line.335"></a>
+<span class="sourceLineNo">336</span>  }<a name="line.336"></a>
+<span class="sourceLineNo">337</span><a name="line.337"></a>
+<span class="sourceLineNo">338</span>  @Override<a name="line.338"></a>
+<span class="sourceLineNo">339</span>  public Increment setTTL(long ttl) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    return (Increment) super.setTTL(ttl);<a name="line.340"></a>
+<span class="sourceLineNo">341</span>  }<a name="line.341"></a>
+<span class="sourceLineNo">342</span>}<a name="line.342"></a>
 
 
 


[26/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/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 1d64963..a232cc8 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.html
@@ -6980,880 +6980,882 @@
 <span class="sourceLineNo">6972</span>      lock(this.updatesLock.readLock());<a name="line.6972"></a>
 <span class="sourceLineNo">6973</span>      try {<a name="line.6973"></a>
 <span class="sourceLineNo">6974</span>        Result cpResult = doCoprocessorPreCall(op, mutation);<a name="line.6974"></a>
-<span class="sourceLineNo">6975</span>        if (cpResult != null) return cpResult;<a name="line.6975"></a>
-<span class="sourceLineNo">6976</span>        Durability effectiveDurability = getEffectiveDurability(mutation.getDurability());<a name="line.6976"></a>
-<span class="sourceLineNo">6977</span>        Map&lt;Store, List&lt;Cell&gt;&gt; forMemStore =<a name="line.6977"></a>
-<span class="sourceLineNo">6978</span>            new HashMap&lt;Store, List&lt;Cell&gt;&gt;(mutation.getFamilyCellMap().size());<a name="line.6978"></a>
-<span class="sourceLineNo">6979</span>        // Reckon Cells to apply to WAL --  in returned walEdit -- and what to add to memstore and<a name="line.6979"></a>
-<span class="sourceLineNo">6980</span>        // what to return back to the client (in 'forMemStore' and 'results' respectively).<a name="line.6980"></a>
-<span class="sourceLineNo">6981</span>        WALEdit walEdit = reckonDeltas(op, mutation, effectiveDurability, forMemStore, results);<a name="line.6981"></a>
-<span class="sourceLineNo">6982</span>        // Actually write to WAL now if a walEdit to apply.<a name="line.6982"></a>
-<span class="sourceLineNo">6983</span>        if (walEdit != null &amp;&amp; !walEdit.isEmpty()) {<a name="line.6983"></a>
-<span class="sourceLineNo">6984</span>          writeEntry = doWALAppend(walEdit, durability, nonceGroup, nonce);<a name="line.6984"></a>
-<span class="sourceLineNo">6985</span>        } else {<a name="line.6985"></a>
-<span class="sourceLineNo">6986</span>          // If walEdits is empty, it means we skipped the WAL; update counters and start an mvcc<a name="line.6986"></a>
-<span class="sourceLineNo">6987</span>          // transaction.<a name="line.6987"></a>
-<span class="sourceLineNo">6988</span>          recordMutationWithoutWal(mutation.getFamilyCellMap());<a name="line.6988"></a>
-<span class="sourceLineNo">6989</span>          writeEntry = mvcc.begin();<a name="line.6989"></a>
-<span class="sourceLineNo">6990</span>        }<a name="line.6990"></a>
-<span class="sourceLineNo">6991</span>        // Now write to MemStore. Do it a column family at a time.<a name="line.6991"></a>
-<span class="sourceLineNo">6992</span>        long sequenceId = writeEntry.getWriteNumber();<a name="line.6992"></a>
-<span class="sourceLineNo">6993</span>        for (Map.Entry&lt;Store, List&lt;Cell&gt;&gt; e: forMemStore.entrySet()) {<a name="line.6993"></a>
-<span class="sourceLineNo">6994</span>          accumulatedResultSize +=<a name="line.6994"></a>
-<span class="sourceLineNo">6995</span>              applyToMemstore(e.getKey(), e.getValue(), true, false, sequenceId);<a name="line.6995"></a>
-<span class="sourceLineNo">6996</span>        }<a name="line.6996"></a>
-<span class="sourceLineNo">6997</span>        mvcc.completeAndWait(writeEntry);<a name="line.6997"></a>
-<span class="sourceLineNo">6998</span>        writeEntry = null;<a name="line.6998"></a>
-<span class="sourceLineNo">6999</span>      } finally {<a name="line.6999"></a>
-<span class="sourceLineNo">7000</span>        this.updatesLock.readLock().unlock();<a name="line.7000"></a>
-<span class="sourceLineNo">7001</span>      }<a name="line.7001"></a>
-<span class="sourceLineNo">7002</span>      // If results is null, then client asked that we not return the calculated results.<a name="line.7002"></a>
-<span class="sourceLineNo">7003</span>      return results !=  null? Result.create(results): null;<a name="line.7003"></a>
-<span class="sourceLineNo">7004</span>    } finally {<a name="line.7004"></a>
-<span class="sourceLineNo">7005</span>      // Call complete always, even on success. doDelta is doing a Get READ_UNCOMMITTED when it goes<a name="line.7005"></a>
-<span class="sourceLineNo">7006</span>      // to get current value under an exclusive lock so no need so no need to wait to return to<a name="line.7006"></a>
-<span class="sourceLineNo">7007</span>      // the client. Means only way to read-your-own-increment or append is to come in with an<a name="line.7007"></a>
-<span class="sourceLineNo">7008</span>      // a 0 increment.<a name="line.7008"></a>
-<span class="sourceLineNo">7009</span>      if (writeEntry != null) mvcc.complete(writeEntry);<a name="line.7009"></a>
-<span class="sourceLineNo">7010</span>      rowLock.release();<a name="line.7010"></a>
-<span class="sourceLineNo">7011</span>      // Request a cache flush if over the limit.  Do it outside update lock.<a name="line.7011"></a>
-<span class="sourceLineNo">7012</span>      if (isFlushSize(this.addAndGetGlobalMemstoreSize(accumulatedResultSize))) requestFlush();<a name="line.7012"></a>
-<span class="sourceLineNo">7013</span>      closeRegionOperation(op);<a name="line.7013"></a>
-<span class="sourceLineNo">7014</span>      if (this.metricsRegion != null) {<a name="line.7014"></a>
-<span class="sourceLineNo">7015</span>        switch (op) {<a name="line.7015"></a>
-<span class="sourceLineNo">7016</span>          case INCREMENT:<a name="line.7016"></a>
-<span class="sourceLineNo">7017</span>            this.metricsRegion.updateIncrement();<a name="line.7017"></a>
-<span class="sourceLineNo">7018</span>            break;<a name="line.7018"></a>
-<span class="sourceLineNo">7019</span>          case APPEND:<a name="line.7019"></a>
-<span class="sourceLineNo">7020</span>            this.metricsRegion.updateAppend();<a name="line.7020"></a>
-<span class="sourceLineNo">7021</span>            break;<a name="line.7021"></a>
-<span class="sourceLineNo">7022</span>          default:<a name="line.7022"></a>
+<span class="sourceLineNo">6975</span>        if (cpResult != null) {<a name="line.6975"></a>
+<span class="sourceLineNo">6976</span>          return returnResults? cpResult: null;<a name="line.6976"></a>
+<span class="sourceLineNo">6977</span>        }<a name="line.6977"></a>
+<span class="sourceLineNo">6978</span>        Durability effectiveDurability = getEffectiveDurability(mutation.getDurability());<a name="line.6978"></a>
+<span class="sourceLineNo">6979</span>        Map&lt;Store, List&lt;Cell&gt;&gt; forMemStore =<a name="line.6979"></a>
+<span class="sourceLineNo">6980</span>            new HashMap&lt;Store, List&lt;Cell&gt;&gt;(mutation.getFamilyCellMap().size());<a name="line.6980"></a>
+<span class="sourceLineNo">6981</span>        // Reckon Cells to apply to WAL --  in returned walEdit -- and what to add to memstore and<a name="line.6981"></a>
+<span class="sourceLineNo">6982</span>        // what to return back to the client (in 'forMemStore' and 'results' respectively).<a name="line.6982"></a>
+<span class="sourceLineNo">6983</span>        WALEdit walEdit = reckonDeltas(op, mutation, effectiveDurability, forMemStore, results);<a name="line.6983"></a>
+<span class="sourceLineNo">6984</span>        // Actually write to WAL now if a walEdit to apply.<a name="line.6984"></a>
+<span class="sourceLineNo">6985</span>        if (walEdit != null &amp;&amp; !walEdit.isEmpty()) {<a name="line.6985"></a>
+<span class="sourceLineNo">6986</span>          writeEntry = doWALAppend(walEdit, durability, nonceGroup, nonce);<a name="line.6986"></a>
+<span class="sourceLineNo">6987</span>        } else {<a name="line.6987"></a>
+<span class="sourceLineNo">6988</span>          // If walEdits is empty, it means we skipped the WAL; update counters and start an mvcc<a name="line.6988"></a>
+<span class="sourceLineNo">6989</span>          // transaction.<a name="line.6989"></a>
+<span class="sourceLineNo">6990</span>          recordMutationWithoutWal(mutation.getFamilyCellMap());<a name="line.6990"></a>
+<span class="sourceLineNo">6991</span>          writeEntry = mvcc.begin();<a name="line.6991"></a>
+<span class="sourceLineNo">6992</span>        }<a name="line.6992"></a>
+<span class="sourceLineNo">6993</span>        // Now write to MemStore. Do it a column family at a time.<a name="line.6993"></a>
+<span class="sourceLineNo">6994</span>        long sequenceId = writeEntry.getWriteNumber();<a name="line.6994"></a>
+<span class="sourceLineNo">6995</span>        for (Map.Entry&lt;Store, List&lt;Cell&gt;&gt; e: forMemStore.entrySet()) {<a name="line.6995"></a>
+<span class="sourceLineNo">6996</span>          accumulatedResultSize +=<a name="line.6996"></a>
+<span class="sourceLineNo">6997</span>              applyToMemstore(e.getKey(), e.getValue(), true, false, sequenceId);<a name="line.6997"></a>
+<span class="sourceLineNo">6998</span>        }<a name="line.6998"></a>
+<span class="sourceLineNo">6999</span>        mvcc.completeAndWait(writeEntry);<a name="line.6999"></a>
+<span class="sourceLineNo">7000</span>        writeEntry = null;<a name="line.7000"></a>
+<span class="sourceLineNo">7001</span>      } finally {<a name="line.7001"></a>
+<span class="sourceLineNo">7002</span>        this.updatesLock.readLock().unlock();<a name="line.7002"></a>
+<span class="sourceLineNo">7003</span>      }<a name="line.7003"></a>
+<span class="sourceLineNo">7004</span>      // If results is null, then client asked that we not return the calculated results.<a name="line.7004"></a>
+<span class="sourceLineNo">7005</span>      return results != null &amp;&amp; returnResults? Result.create(results): null;<a name="line.7005"></a>
+<span class="sourceLineNo">7006</span>    } finally {<a name="line.7006"></a>
+<span class="sourceLineNo">7007</span>      // Call complete always, even on success. doDelta is doing a Get READ_UNCOMMITTED when it goes<a name="line.7007"></a>
+<span class="sourceLineNo">7008</span>      // to get current value under an exclusive lock so no need so no need to wait to return to<a name="line.7008"></a>
+<span class="sourceLineNo">7009</span>      // the client. Means only way to read-your-own-increment or append is to come in with an<a name="line.7009"></a>
+<span class="sourceLineNo">7010</span>      // a 0 increment.<a name="line.7010"></a>
+<span class="sourceLineNo">7011</span>      if (writeEntry != null) mvcc.complete(writeEntry);<a name="line.7011"></a>
+<span class="sourceLineNo">7012</span>      rowLock.release();<a name="line.7012"></a>
+<span class="sourceLineNo">7013</span>      // Request a cache flush if over the limit.  Do it outside update lock.<a name="line.7013"></a>
+<span class="sourceLineNo">7014</span>      if (isFlushSize(this.addAndGetGlobalMemstoreSize(accumulatedResultSize))) requestFlush();<a name="line.7014"></a>
+<span class="sourceLineNo">7015</span>      closeRegionOperation(op);<a name="line.7015"></a>
+<span class="sourceLineNo">7016</span>      if (this.metricsRegion != null) {<a name="line.7016"></a>
+<span class="sourceLineNo">7017</span>        switch (op) {<a name="line.7017"></a>
+<span class="sourceLineNo">7018</span>          case INCREMENT:<a name="line.7018"></a>
+<span class="sourceLineNo">7019</span>            this.metricsRegion.updateIncrement();<a name="line.7019"></a>
+<span class="sourceLineNo">7020</span>            break;<a name="line.7020"></a>
+<span class="sourceLineNo">7021</span>          case APPEND:<a name="line.7021"></a>
+<span class="sourceLineNo">7022</span>            this.metricsRegion.updateAppend();<a name="line.7022"></a>
 <span class="sourceLineNo">7023</span>            break;<a name="line.7023"></a>
-<span class="sourceLineNo">7024</span>        }<a name="line.7024"></a>
-<span class="sourceLineNo">7025</span>      }<a name="line.7025"></a>
-<span class="sourceLineNo">7026</span>    }<a name="line.7026"></a>
-<span class="sourceLineNo">7027</span>  }<a name="line.7027"></a>
-<span class="sourceLineNo">7028</span><a name="line.7028"></a>
-<span class="sourceLineNo">7029</span>  private WriteEntry doWALAppend(WALEdit walEdit, Durability durability, long nonceGroup,<a name="line.7029"></a>
-<span class="sourceLineNo">7030</span>      long nonce)<a name="line.7030"></a>
-<span class="sourceLineNo">7031</span>  throws IOException {<a name="line.7031"></a>
-<span class="sourceLineNo">7032</span>    return doWALAppend(walEdit, durability, WALKey.EMPTY_UUIDS, System.currentTimeMillis(),<a name="line.7032"></a>
-<span class="sourceLineNo">7033</span>      nonceGroup, nonce);<a name="line.7033"></a>
-<span class="sourceLineNo">7034</span>  }<a name="line.7034"></a>
-<span class="sourceLineNo">7035</span><a name="line.7035"></a>
-<span class="sourceLineNo">7036</span>  /**<a name="line.7036"></a>
-<span class="sourceLineNo">7037</span>   * @return writeEntry associated with this append<a name="line.7037"></a>
-<span class="sourceLineNo">7038</span>   */<a name="line.7038"></a>
-<span class="sourceLineNo">7039</span>  private WriteEntry doWALAppend(WALEdit walEdit, Durability durability, List&lt;UUID&gt; clusterIds,<a name="line.7039"></a>
-<span class="sourceLineNo">7040</span>      long now, long nonceGroup, long nonce)<a name="line.7040"></a>
-<span class="sourceLineNo">7041</span>  throws IOException {<a name="line.7041"></a>
-<span class="sourceLineNo">7042</span>    WriteEntry writeEntry = null;<a name="line.7042"></a>
-<span class="sourceLineNo">7043</span>    // Using default cluster id, as this can only happen in the originating cluster.<a name="line.7043"></a>
-<span class="sourceLineNo">7044</span>    // A slave cluster receives the final value (not the delta) as a Put. We use HLogKey<a name="line.7044"></a>
-<span class="sourceLineNo">7045</span>    // here instead of WALKey directly to support legacy coprocessors.<a name="line.7045"></a>
-<span class="sourceLineNo">7046</span>    WALKey walKey = new WALKey(this.getRegionInfo().getEncodedNameAsBytes(),<a name="line.7046"></a>
-<span class="sourceLineNo">7047</span>      this.htableDescriptor.getTableName(), WALKey.NO_SEQUENCE_ID, now, clusterIds,<a name="line.7047"></a>
-<span class="sourceLineNo">7048</span>      nonceGroup, nonce, mvcc);<a name="line.7048"></a>
-<span class="sourceLineNo">7049</span>    try {<a name="line.7049"></a>
-<span class="sourceLineNo">7050</span>      long txid =<a name="line.7050"></a>
-<span class="sourceLineNo">7051</span>        this.wal.append(this.htableDescriptor, this.getRegionInfo(), walKey, walEdit, true);<a name="line.7051"></a>
-<span class="sourceLineNo">7052</span>      // Call sync on our edit.<a name="line.7052"></a>
-<span class="sourceLineNo">7053</span>      if (txid != 0) sync(txid, durability);<a name="line.7053"></a>
-<span class="sourceLineNo">7054</span>      writeEntry = walKey.getWriteEntry();<a name="line.7054"></a>
-<span class="sourceLineNo">7055</span>    } catch (IOException ioe) {<a name="line.7055"></a>
-<span class="sourceLineNo">7056</span>      if (walKey != null) mvcc.complete(walKey.getWriteEntry());<a name="line.7056"></a>
-<span class="sourceLineNo">7057</span>      throw ioe;<a name="line.7057"></a>
-<span class="sourceLineNo">7058</span>    }<a name="line.7058"></a>
-<span class="sourceLineNo">7059</span>    return writeEntry;<a name="line.7059"></a>
-<span class="sourceLineNo">7060</span>  }<a name="line.7060"></a>
-<span class="sourceLineNo">7061</span><a name="line.7061"></a>
-<span class="sourceLineNo">7062</span>  /**<a name="line.7062"></a>
-<span class="sourceLineNo">7063</span>   * Do coprocessor pre-increment or pre-append call.<a name="line.7063"></a>
-<span class="sourceLineNo">7064</span>   * @return Result returned out of the coprocessor, which means bypass all further processing and<a name="line.7064"></a>
-<span class="sourceLineNo">7065</span>   *  return the proffered Result instead, or null which means proceed.<a name="line.7065"></a>
-<span class="sourceLineNo">7066</span>   */<a name="line.7066"></a>
-<span class="sourceLineNo">7067</span>  private Result doCoprocessorPreCall(final Operation op, final Mutation mutation)<a name="line.7067"></a>
-<span class="sourceLineNo">7068</span>  throws IOException {<a name="line.7068"></a>
-<span class="sourceLineNo">7069</span>    Result result = null;<a name="line.7069"></a>
-<span class="sourceLineNo">7070</span>    if (this.coprocessorHost != null) {<a name="line.7070"></a>
-<span class="sourceLineNo">7071</span>      switch(op) {<a name="line.7071"></a>
-<span class="sourceLineNo">7072</span>        case INCREMENT:<a name="line.7072"></a>
-<span class="sourceLineNo">7073</span>          result = this.coprocessorHost.preIncrementAfterRowLock((Increment)mutation);<a name="line.7073"></a>
-<span class="sourceLineNo">7074</span>          break;<a name="line.7074"></a>
-<span class="sourceLineNo">7075</span>        case APPEND:<a name="line.7075"></a>
-<span class="sourceLineNo">7076</span>          result = this.coprocessorHost.preAppendAfterRowLock((Append)mutation);<a name="line.7076"></a>
-<span class="sourceLineNo">7077</span>          break;<a name="line.7077"></a>
-<span class="sourceLineNo">7078</span>        default: throw new UnsupportedOperationException(op.toString());<a name="line.7078"></a>
-<span class="sourceLineNo">7079</span>      }<a name="line.7079"></a>
-<span class="sourceLineNo">7080</span>    }<a name="line.7080"></a>
-<span class="sourceLineNo">7081</span>    return result;<a name="line.7081"></a>
-<span class="sourceLineNo">7082</span>  }<a name="line.7082"></a>
-<span class="sourceLineNo">7083</span><a name="line.7083"></a>
-<span class="sourceLineNo">7084</span>  /**<a name="line.7084"></a>
-<span class="sourceLineNo">7085</span>   * Reckon the Cells to apply to WAL, memstore, and to return to the Client; these Sets are not<a name="line.7085"></a>
-<span class="sourceLineNo">7086</span>   * always the same dependent on whether to write WAL or if the amount to increment is zero (in<a name="line.7086"></a>
-<span class="sourceLineNo">7087</span>   * this case we write back nothing, just return latest Cell value to the client).<a name="line.7087"></a>
-<span class="sourceLineNo">7088</span>   *<a name="line.7088"></a>
-<span class="sourceLineNo">7089</span>   * @param results Fill in here what goes back to the Client if it is non-null (if null, client<a name="line.7089"></a>
-<span class="sourceLineNo">7090</span>   *  doesn't want results).<a name="line.7090"></a>
-<span class="sourceLineNo">7091</span>   * @param forMemStore Fill in here what to apply to the MemStore (by Store).<a name="line.7091"></a>
-<span class="sourceLineNo">7092</span>   * @return A WALEdit to apply to WAL or null if we are to skip the WAL.<a name="line.7092"></a>
-<span class="sourceLineNo">7093</span>   */<a name="line.7093"></a>
-<span class="sourceLineNo">7094</span>  private WALEdit reckonDeltas(final Operation op, final Mutation mutation,<a name="line.7094"></a>
-<span class="sourceLineNo">7095</span>      final Durability effectiveDurability, final Map&lt;Store, List&lt;Cell&gt;&gt; forMemStore,<a name="line.7095"></a>
-<span class="sourceLineNo">7096</span>      final List&lt;Cell&gt; results)<a name="line.7096"></a>
-<span class="sourceLineNo">7097</span>  throws IOException {<a name="line.7097"></a>
-<span class="sourceLineNo">7098</span>    WALEdit walEdit = null;<a name="line.7098"></a>
-<span class="sourceLineNo">7099</span>    long now = EnvironmentEdgeManager.currentTime();<a name="line.7099"></a>
-<span class="sourceLineNo">7100</span>    final boolean writeToWAL = effectiveDurability != Durability.SKIP_WAL;<a name="line.7100"></a>
-<span class="sourceLineNo">7101</span>    // Process a Store/family at a time.<a name="line.7101"></a>
-<span class="sourceLineNo">7102</span>    for (Map.Entry&lt;byte [], List&lt;Cell&gt;&gt; entry: mutation.getFamilyCellMap().entrySet()) {<a name="line.7102"></a>
-<span class="sourceLineNo">7103</span>      final byte [] columnFamilyName = entry.getKey();<a name="line.7103"></a>
-<span class="sourceLineNo">7104</span>      List&lt;Cell&gt; deltas = entry.getValue();<a name="line.7104"></a>
-<span class="sourceLineNo">7105</span>      Store store = this.stores.get(columnFamilyName);<a name="line.7105"></a>
-<span class="sourceLineNo">7106</span>      // Reckon for the Store what to apply to WAL and MemStore.<a name="line.7106"></a>
-<span class="sourceLineNo">7107</span>      List&lt;Cell&gt; toApply =<a name="line.7107"></a>
-<span class="sourceLineNo">7108</span>        reckonDeltasByStore(store, op, mutation, effectiveDurability, now, deltas, results);<a name="line.7108"></a>
-<span class="sourceLineNo">7109</span>      if (!toApply.isEmpty()) {<a name="line.7109"></a>
-<span class="sourceLineNo">7110</span>        forMemStore.put(store, toApply);<a name="line.7110"></a>
-<span class="sourceLineNo">7111</span>        if (writeToWAL) {<a name="line.7111"></a>
-<span class="sourceLineNo">7112</span>          if (walEdit == null) {<a name="line.7112"></a>
-<span class="sourceLineNo">7113</span>            walEdit = new WALEdit();<a name="line.7113"></a>
-<span class="sourceLineNo">7114</span>          }<a name="line.7114"></a>
-<span class="sourceLineNo">7115</span>          walEdit.getCells().addAll(toApply);<a name="line.7115"></a>
-<span class="sourceLineNo">7116</span>        }<a name="line.7116"></a>
-<span class="sourceLineNo">7117</span>      }<a name="line.7117"></a>
-<span class="sourceLineNo">7118</span>    }<a name="line.7118"></a>
-<span class="sourceLineNo">7119</span>    return walEdit;<a name="line.7119"></a>
-<span class="sourceLineNo">7120</span>  }<a name="line.7120"></a>
-<span class="sourceLineNo">7121</span><a name="line.7121"></a>
-<span class="sourceLineNo">7122</span>  /**<a name="line.7122"></a>
-<span class="sourceLineNo">7123</span>   * Reckon the Cells to apply to WAL, memstore, and to return to the Client in passed<a name="line.7123"></a>
-<span class="sourceLineNo">7124</span>   * column family/Store.<a name="line.7124"></a>
-<span class="sourceLineNo">7125</span>   *<a name="line.7125"></a>
-<span class="sourceLineNo">7126</span>   * Does Get of current value and then adds passed in deltas for this Store returning the result.<a name="line.7126"></a>
+<span class="sourceLineNo">7024</span>          default:<a name="line.7024"></a>
+<span class="sourceLineNo">7025</span>            break;<a name="line.7025"></a>
+<span class="sourceLineNo">7026</span>        }<a name="line.7026"></a>
+<span class="sourceLineNo">7027</span>      }<a name="line.7027"></a>
+<span class="sourceLineNo">7028</span>    }<a name="line.7028"></a>
+<span class="sourceLineNo">7029</span>  }<a name="line.7029"></a>
+<span class="sourceLineNo">7030</span><a name="line.7030"></a>
+<span class="sourceLineNo">7031</span>  private WriteEntry doWALAppend(WALEdit walEdit, Durability durability, long nonceGroup,<a name="line.7031"></a>
+<span class="sourceLineNo">7032</span>      long nonce)<a name="line.7032"></a>
+<span class="sourceLineNo">7033</span>  throws IOException {<a name="line.7033"></a>
+<span class="sourceLineNo">7034</span>    return doWALAppend(walEdit, durability, WALKey.EMPTY_UUIDS, System.currentTimeMillis(),<a name="line.7034"></a>
+<span class="sourceLineNo">7035</span>      nonceGroup, nonce);<a name="line.7035"></a>
+<span class="sourceLineNo">7036</span>  }<a name="line.7036"></a>
+<span class="sourceLineNo">7037</span><a name="line.7037"></a>
+<span class="sourceLineNo">7038</span>  /**<a name="line.7038"></a>
+<span class="sourceLineNo">7039</span>   * @return writeEntry associated with this append<a name="line.7039"></a>
+<span class="sourceLineNo">7040</span>   */<a name="line.7040"></a>
+<span class="sourceLineNo">7041</span>  private WriteEntry doWALAppend(WALEdit walEdit, Durability durability, List&lt;UUID&gt; clusterIds,<a name="line.7041"></a>
+<span class="sourceLineNo">7042</span>      long now, long nonceGroup, long nonce)<a name="line.7042"></a>
+<span class="sourceLineNo">7043</span>  throws IOException {<a name="line.7043"></a>
+<span class="sourceLineNo">7044</span>    WriteEntry writeEntry = null;<a name="line.7044"></a>
+<span class="sourceLineNo">7045</span>    // Using default cluster id, as this can only happen in the originating cluster.<a name="line.7045"></a>
+<span class="sourceLineNo">7046</span>    // A slave cluster receives the final value (not the delta) as a Put. We use HLogKey<a name="line.7046"></a>
+<span class="sourceLineNo">7047</span>    // here instead of WALKey directly to support legacy coprocessors.<a name="line.7047"></a>
+<span class="sourceLineNo">7048</span>    WALKey walKey = new WALKey(this.getRegionInfo().getEncodedNameAsBytes(),<a name="line.7048"></a>
+<span class="sourceLineNo">7049</span>      this.htableDescriptor.getTableName(), WALKey.NO_SEQUENCE_ID, now, clusterIds,<a name="line.7049"></a>
+<span class="sourceLineNo">7050</span>      nonceGroup, nonce, mvcc);<a name="line.7050"></a>
+<span class="sourceLineNo">7051</span>    try {<a name="line.7051"></a>
+<span class="sourceLineNo">7052</span>      long txid =<a name="line.7052"></a>
+<span class="sourceLineNo">7053</span>        this.wal.append(this.htableDescriptor, this.getRegionInfo(), walKey, walEdit, true);<a name="line.7053"></a>
+<span class="sourceLineNo">7054</span>      // Call sync on our edit.<a name="line.7054"></a>
+<span class="sourceLineNo">7055</span>      if (txid != 0) sync(txid, durability);<a name="line.7055"></a>
+<span class="sourceLineNo">7056</span>      writeEntry = walKey.getWriteEntry();<a name="line.7056"></a>
+<span class="sourceLineNo">7057</span>    } catch (IOException ioe) {<a name="line.7057"></a>
+<span class="sourceLineNo">7058</span>      if (walKey != null) mvcc.complete(walKey.getWriteEntry());<a name="line.7058"></a>
+<span class="sourceLineNo">7059</span>      throw ioe;<a name="line.7059"></a>
+<span class="sourceLineNo">7060</span>    }<a name="line.7060"></a>
+<span class="sourceLineNo">7061</span>    return writeEntry;<a name="line.7061"></a>
+<span class="sourceLineNo">7062</span>  }<a name="line.7062"></a>
+<span class="sourceLineNo">7063</span><a name="line.7063"></a>
+<span class="sourceLineNo">7064</span>  /**<a name="line.7064"></a>
+<span class="sourceLineNo">7065</span>   * Do coprocessor pre-increment or pre-append call.<a name="line.7065"></a>
+<span class="sourceLineNo">7066</span>   * @return Result returned out of the coprocessor, which means bypass all further processing and<a name="line.7066"></a>
+<span class="sourceLineNo">7067</span>   *  return the proffered Result instead, or null which means proceed.<a name="line.7067"></a>
+<span class="sourceLineNo">7068</span>   */<a name="line.7068"></a>
+<span class="sourceLineNo">7069</span>  private Result doCoprocessorPreCall(final Operation op, final Mutation mutation)<a name="line.7069"></a>
+<span class="sourceLineNo">7070</span>  throws IOException {<a name="line.7070"></a>
+<span class="sourceLineNo">7071</span>    Result result = null;<a name="line.7071"></a>
+<span class="sourceLineNo">7072</span>    if (this.coprocessorHost != null) {<a name="line.7072"></a>
+<span class="sourceLineNo">7073</span>      switch(op) {<a name="line.7073"></a>
+<span class="sourceLineNo">7074</span>        case INCREMENT:<a name="line.7074"></a>
+<span class="sourceLineNo">7075</span>          result = this.coprocessorHost.preIncrementAfterRowLock((Increment)mutation);<a name="line.7075"></a>
+<span class="sourceLineNo">7076</span>          break;<a name="line.7076"></a>
+<span class="sourceLineNo">7077</span>        case APPEND:<a name="line.7077"></a>
+<span class="sourceLineNo">7078</span>          result = this.coprocessorHost.preAppendAfterRowLock((Append)mutation);<a name="line.7078"></a>
+<span class="sourceLineNo">7079</span>          break;<a name="line.7079"></a>
+<span class="sourceLineNo">7080</span>        default: throw new UnsupportedOperationException(op.toString());<a name="line.7080"></a>
+<span class="sourceLineNo">7081</span>      }<a name="line.7081"></a>
+<span class="sourceLineNo">7082</span>    }<a name="line.7082"></a>
+<span class="sourceLineNo">7083</span>    return result;<a name="line.7083"></a>
+<span class="sourceLineNo">7084</span>  }<a name="line.7084"></a>
+<span class="sourceLineNo">7085</span><a name="line.7085"></a>
+<span class="sourceLineNo">7086</span>  /**<a name="line.7086"></a>
+<span class="sourceLineNo">7087</span>   * Reckon the Cells to apply to WAL, memstore, and to return to the Client; these Sets are not<a name="line.7087"></a>
+<span class="sourceLineNo">7088</span>   * always the same dependent on whether to write WAL or if the amount to increment is zero (in<a name="line.7088"></a>
+<span class="sourceLineNo">7089</span>   * this case we write back nothing, just return latest Cell value to the client).<a name="line.7089"></a>
+<span class="sourceLineNo">7090</span>   *<a name="line.7090"></a>
+<span class="sourceLineNo">7091</span>   * @param results Fill in here what goes back to the Client if it is non-null (if null, client<a name="line.7091"></a>
+<span class="sourceLineNo">7092</span>   *  doesn't want results).<a name="line.7092"></a>
+<span class="sourceLineNo">7093</span>   * @param forMemStore Fill in here what to apply to the MemStore (by Store).<a name="line.7093"></a>
+<span class="sourceLineNo">7094</span>   * @return A WALEdit to apply to WAL or null if we are to skip the WAL.<a name="line.7094"></a>
+<span class="sourceLineNo">7095</span>   */<a name="line.7095"></a>
+<span class="sourceLineNo">7096</span>  private WALEdit reckonDeltas(final Operation op, final Mutation mutation,<a name="line.7096"></a>
+<span class="sourceLineNo">7097</span>      final Durability effectiveDurability, final Map&lt;Store, List&lt;Cell&gt;&gt; forMemStore,<a name="line.7097"></a>
+<span class="sourceLineNo">7098</span>      final List&lt;Cell&gt; results)<a name="line.7098"></a>
+<span class="sourceLineNo">7099</span>  throws IOException {<a name="line.7099"></a>
+<span class="sourceLineNo">7100</span>    WALEdit walEdit = null;<a name="line.7100"></a>
+<span class="sourceLineNo">7101</span>    long now = EnvironmentEdgeManager.currentTime();<a name="line.7101"></a>
+<span class="sourceLineNo">7102</span>    final boolean writeToWAL = effectiveDurability != Durability.SKIP_WAL;<a name="line.7102"></a>
+<span class="sourceLineNo">7103</span>    // Process a Store/family at a time.<a name="line.7103"></a>
+<span class="sourceLineNo">7104</span>    for (Map.Entry&lt;byte [], List&lt;Cell&gt;&gt; entry: mutation.getFamilyCellMap().entrySet()) {<a name="line.7104"></a>
+<span class="sourceLineNo">7105</span>      final byte [] columnFamilyName = entry.getKey();<a name="line.7105"></a>
+<span class="sourceLineNo">7106</span>      List&lt;Cell&gt; deltas = entry.getValue();<a name="line.7106"></a>
+<span class="sourceLineNo">7107</span>      Store store = this.stores.get(columnFamilyName);<a name="line.7107"></a>
+<span class="sourceLineNo">7108</span>      // Reckon for the Store what to apply to WAL and MemStore.<a name="line.7108"></a>
+<span class="sourceLineNo">7109</span>      List&lt;Cell&gt; toApply =<a name="line.7109"></a>
+<span class="sourceLineNo">7110</span>        reckonDeltasByStore(store, op, mutation, effectiveDurability, now, deltas, results);<a name="line.7110"></a>
+<span class="sourceLineNo">7111</span>      if (!toApply.isEmpty()) {<a name="line.7111"></a>
+<span class="sourceLineNo">7112</span>        forMemStore.put(store, toApply);<a name="line.7112"></a>
+<span class="sourceLineNo">7113</span>        if (writeToWAL) {<a name="line.7113"></a>
+<span class="sourceLineNo">7114</span>          if (walEdit == null) {<a name="line.7114"></a>
+<span class="sourceLineNo">7115</span>            walEdit = new WALEdit();<a name="line.7115"></a>
+<span class="sourceLineNo">7116</span>          }<a name="line.7116"></a>
+<span class="sourceLineNo">7117</span>          walEdit.getCells().addAll(toApply);<a name="line.7117"></a>
+<span class="sourceLineNo">7118</span>        }<a name="line.7118"></a>
+<span class="sourceLineNo">7119</span>      }<a name="line.7119"></a>
+<span class="sourceLineNo">7120</span>    }<a name="line.7120"></a>
+<span class="sourceLineNo">7121</span>    return walEdit;<a name="line.7121"></a>
+<span class="sourceLineNo">7122</span>  }<a name="line.7122"></a>
+<span class="sourceLineNo">7123</span><a name="line.7123"></a>
+<span class="sourceLineNo">7124</span>  /**<a name="line.7124"></a>
+<span class="sourceLineNo">7125</span>   * Reckon the Cells to apply to WAL, memstore, and to return to the Client in passed<a name="line.7125"></a>
+<span class="sourceLineNo">7126</span>   * column family/Store.<a name="line.7126"></a>
 <span class="sourceLineNo">7127</span>   *<a name="line.7127"></a>
-<span class="sourceLineNo">7128</span>   * @param op Whether Increment or Append<a name="line.7128"></a>
-<span class="sourceLineNo">7129</span>   * @param mutation The encompassing Mutation object<a name="line.7129"></a>
-<span class="sourceLineNo">7130</span>   * @param deltas Changes to apply to this Store; either increment amount or data to append<a name="line.7130"></a>
-<span class="sourceLineNo">7131</span>   * @param results In here we accumulate all the Cells we are to return to the client; this List<a name="line.7131"></a>
-<span class="sourceLineNo">7132</span>   *  can be larger than what we return in case where delta is zero; i.e. don't write<a name="line.7132"></a>
-<span class="sourceLineNo">7133</span>   *  out new values, just return current value. If null, client doesn't want results returned.<a name="line.7133"></a>
-<span class="sourceLineNo">7134</span>   * @return Resulting Cells after &lt;code&gt;deltas&lt;/code&gt; have been applied to current<a name="line.7134"></a>
-<span class="sourceLineNo">7135</span>   *  values. Side effect is our filling out of the &lt;code&gt;results&lt;/code&gt; List.<a name="line.7135"></a>
-<span class="sourceLineNo">7136</span>   */<a name="line.7136"></a>
-<span class="sourceLineNo">7137</span>  private List&lt;Cell&gt; reckonDeltasByStore(final Store store, final Operation op,<a name="line.7137"></a>
-<span class="sourceLineNo">7138</span>      final Mutation mutation, final Durability effectiveDurability, final long now,<a name="line.7138"></a>
-<span class="sourceLineNo">7139</span>      final List&lt;Cell&gt; deltas, final List&lt;Cell&gt; results)<a name="line.7139"></a>
-<span class="sourceLineNo">7140</span>  throws IOException {<a name="line.7140"></a>
-<span class="sourceLineNo">7141</span>    byte [] columnFamily = store.getFamily().getName();<a name="line.7141"></a>
-<span class="sourceLineNo">7142</span>    List&lt;Cell&gt; toApply = new ArrayList&lt;Cell&gt;(deltas.size());<a name="line.7142"></a>
-<span class="sourceLineNo">7143</span>    // Get previous values for all columns in this family.<a name="line.7143"></a>
-<span class="sourceLineNo">7144</span>    List&lt;Cell&gt; currentValues = get(mutation, store, deltas,<a name="line.7144"></a>
-<span class="sourceLineNo">7145</span>        null/*Default IsolationLevel*/,<a name="line.7145"></a>
-<span class="sourceLineNo">7146</span>        op == Operation.INCREMENT? ((Increment)mutation).getTimeRange(): null);<a name="line.7146"></a>
-<span class="sourceLineNo">7147</span>    // Iterate the input columns and update existing values if they were found, otherwise<a name="line.7147"></a>
-<span class="sourceLineNo">7148</span>    // add new column initialized to the delta amount<a name="line.7148"></a>
-<span class="sourceLineNo">7149</span>    int currentValuesIndex = 0;<a name="line.7149"></a>
-<span class="sourceLineNo">7150</span>    for (int i = 0; i &lt; deltas.size(); i++) {<a name="line.7150"></a>
-<span class="sourceLineNo">7151</span>      Cell delta = deltas.get(i);<a name="line.7151"></a>
-<span class="sourceLineNo">7152</span>      Cell currentValue = null;<a name="line.7152"></a>
-<span class="sourceLineNo">7153</span>      if (currentValuesIndex &lt; currentValues.size() &amp;&amp;<a name="line.7153"></a>
-<span class="sourceLineNo">7154</span>          CellUtil.matchingQualifier(currentValues.get(currentValuesIndex), delta)) {<a name="line.7154"></a>
-<span class="sourceLineNo">7155</span>        currentValue = currentValues.get(currentValuesIndex);<a name="line.7155"></a>
-<span class="sourceLineNo">7156</span>        if (i &lt; (deltas.size() - 1) &amp;&amp; !CellUtil.matchingQualifier(delta, deltas.get(i + 1))) {<a name="line.7156"></a>
-<span class="sourceLineNo">7157</span>          currentValuesIndex++;<a name="line.7157"></a>
-<span class="sourceLineNo">7158</span>        }<a name="line.7158"></a>
-<span class="sourceLineNo">7159</span>      }<a name="line.7159"></a>
-<span class="sourceLineNo">7160</span>      // Switch on whether this an increment or an append building the new Cell to apply.<a name="line.7160"></a>
-<span class="sourceLineNo">7161</span>      Cell newCell = null;<a name="line.7161"></a>
-<span class="sourceLineNo">7162</span>      MutationType mutationType = null;<a name="line.7162"></a>
-<span class="sourceLineNo">7163</span>      boolean apply = true;<a name="line.7163"></a>
-<span class="sourceLineNo">7164</span>      switch (op) {<a name="line.7164"></a>
-<span class="sourceLineNo">7165</span>        case INCREMENT:<a name="line.7165"></a>
-<span class="sourceLineNo">7166</span>          mutationType = MutationType.INCREMENT;<a name="line.7166"></a>
-<span class="sourceLineNo">7167</span>          // If delta amount to apply is 0, don't write WAL or MemStore.<a name="line.7167"></a>
-<span class="sourceLineNo">7168</span>          long deltaAmount = getLongValue(delta);<a name="line.7168"></a>
-<span class="sourceLineNo">7169</span>          apply = deltaAmount != 0;<a name="line.7169"></a>
-<span class="sourceLineNo">7170</span>          newCell = reckonIncrement(delta, deltaAmount, currentValue, columnFamily, now,<a name="line.7170"></a>
-<span class="sourceLineNo">7171</span>            (Increment)mutation);<a name="line.7171"></a>
-<span class="sourceLineNo">7172</span>          break;<a name="line.7172"></a>
-<span class="sourceLineNo">7173</span>        case APPEND:<a name="line.7173"></a>
-<span class="sourceLineNo">7174</span>          mutationType = MutationType.APPEND;<a name="line.7174"></a>
-<span class="sourceLineNo">7175</span>          // Always apply Append. TODO: Does empty delta value mean reset Cell? It seems to.<a name="line.7175"></a>
-<span class="sourceLineNo">7176</span>          newCell = reckonAppend(delta, currentValue, now, (Append)mutation);<a name="line.7176"></a>
-<span class="sourceLineNo">7177</span>          break;<a name="line.7177"></a>
-<span class="sourceLineNo">7178</span>        default: throw new UnsupportedOperationException(op.toString());<a name="line.7178"></a>
-<span class="sourceLineNo">7179</span>      }<a name="line.7179"></a>
-<span class="sourceLineNo">7180</span><a name="line.7180"></a>
-<span class="sourceLineNo">7181</span>      // Give coprocessors a chance to update the new cell<a name="line.7181"></a>
-<span class="sourceLineNo">7182</span>      if (coprocessorHost != null) {<a name="line.7182"></a>
-<span class="sourceLineNo">7183</span>        newCell =<a name="line.7183"></a>
-<span class="sourceLineNo">7184</span>            coprocessorHost.postMutationBeforeWAL(mutationType, mutation, currentValue, newCell);<a name="line.7184"></a>
-<span class="sourceLineNo">7185</span>      }<a name="line.7185"></a>
-<span class="sourceLineNo">7186</span>      // If apply, we need to update memstore/WAL with new value; add it toApply.<a name="line.7186"></a>
-<span class="sourceLineNo">7187</span>      if (apply) {<a name="line.7187"></a>
-<span class="sourceLineNo">7188</span>        toApply.add(newCell);<a name="line.7188"></a>
-<span class="sourceLineNo">7189</span>      }<a name="line.7189"></a>
-<span class="sourceLineNo">7190</span>      // Add to results to get returned to the Client. If null, cilent does not want results.<a name="line.7190"></a>
-<span class="sourceLineNo">7191</span>      if (results != null) {<a name="line.7191"></a>
-<span class="sourceLineNo">7192</span>        results.add(newCell);<a name="line.7192"></a>
-<span class="sourceLineNo">7193</span>      }<a name="line.7193"></a>
-<span class="sourceLineNo">7194</span>    }<a name="line.7194"></a>
-<span class="sourceLineNo">7195</span>    return toApply;<a name="line.7195"></a>
-<span class="sourceLineNo">7196</span>  }<a name="line.7196"></a>
-<span class="sourceLineNo">7197</span><a name="line.7197"></a>
-<span class="sourceLineNo">7198</span>  /**<a name="line.7198"></a>
-<span class="sourceLineNo">7199</span>   * Calculate new Increment Cell.<a name="line.7199"></a>
-<span class="sourceLineNo">7200</span>   * @return New Increment Cell with delta applied to currentValue if currentValue is not null;<a name="line.7200"></a>
-<span class="sourceLineNo">7201</span>   *  otherwise, a new Cell with the delta set as its value.<a name="line.7201"></a>
-<span class="sourceLineNo">7202</span>   */<a name="line.7202"></a>
-<span class="sourceLineNo">7203</span>  private Cell reckonIncrement(final Cell delta, final long deltaAmount, final Cell currentValue,<a name="line.7203"></a>
-<span class="sourceLineNo">7204</span>      byte [] columnFamily, final long now, Mutation mutation)<a name="line.7204"></a>
-<span class="sourceLineNo">7205</span>  throws IOException {<a name="line.7205"></a>
-<span class="sourceLineNo">7206</span>    // Forward any tags found on the delta.<a name="line.7206"></a>
-<span class="sourceLineNo">7207</span>    List&lt;Tag&gt; tags = TagUtil.carryForwardTags(delta);<a name="line.7207"></a>
-<span class="sourceLineNo">7208</span>    long newValue = deltaAmount;<a name="line.7208"></a>
-<span class="sourceLineNo">7209</span>    long ts = now;<a name="line.7209"></a>
-<span class="sourceLineNo">7210</span>    if (currentValue != null) {<a name="line.7210"></a>
-<span class="sourceLineNo">7211</span>      tags = TagUtil.carryForwardTags(tags, currentValue);<a name="line.7211"></a>
-<span class="sourceLineNo">7212</span>      ts = Math.max(now, currentValue.getTimestamp());<a name="line.7212"></a>
-<span class="sourceLineNo">7213</span>      newValue += getLongValue(currentValue);<a name="line.7213"></a>
-<span class="sourceLineNo">7214</span>    }<a name="line.7214"></a>
-<span class="sourceLineNo">7215</span>    // Now make up the new Cell. TODO: FIX. This is carnel knowledge of how KeyValues are made...<a name="line.7215"></a>
-<span class="sourceLineNo">7216</span>    // doesn't work well with offheaping or if we are doing a different Cell type.<a name="line.7216"></a>
-<span class="sourceLineNo">7217</span>    byte [] incrementAmountInBytes = Bytes.toBytes(newValue);<a name="line.7217"></a>
-<span class="sourceLineNo">7218</span>    tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7218"></a>
-<span class="sourceLineNo">7219</span>    byte [] row = mutation.getRow();<a name="line.7219"></a>
-<span class="sourceLineNo">7220</span>    return new KeyValue(row, 0, row.length,<a name="line.7220"></a>
-<span class="sourceLineNo">7221</span>      columnFamily, 0, columnFamily.length,<a name="line.7221"></a>
-<span class="sourceLineNo">7222</span>      delta.getQualifierArray(), delta.getQualifierOffset(), delta.getQualifierLength(),<a name="line.7222"></a>
-<span class="sourceLineNo">7223</span>      ts, KeyValue.Type.Put,<a name="line.7223"></a>
-<span class="sourceLineNo">7224</span>      incrementAmountInBytes, 0, incrementAmountInBytes.length,<a name="line.7224"></a>
-<span class="sourceLineNo">7225</span>      tags);<a name="line.7225"></a>
-<span class="sourceLineNo">7226</span>  }<a name="line.7226"></a>
-<span class="sourceLineNo">7227</span><a name="line.7227"></a>
-<span class="sourceLineNo">7228</span>  private Cell reckonAppend(final Cell delta, final Cell currentValue, final long now,<a name="line.7228"></a>
-<span class="sourceLineNo">7229</span>      Append mutation)<a name="line.7229"></a>
-<span class="sourceLineNo">7230</span>  throws IOException {<a name="line.7230"></a>
-<span class="sourceLineNo">7231</span>    // Forward any tags found on the delta.<a name="line.7231"></a>
-<span class="sourceLineNo">7232</span>    List&lt;Tag&gt; tags = TagUtil.carryForwardTags(delta);<a name="line.7232"></a>
-<span class="sourceLineNo">7233</span>    long ts = now;<a name="line.7233"></a>
-<span class="sourceLineNo">7234</span>    Cell newCell = null;<a name="line.7234"></a>
-<span class="sourceLineNo">7235</span>    byte [] row = mutation.getRow();<a name="line.7235"></a>
-<span class="sourceLineNo">7236</span>    if (currentValue != null) {<a name="line.7236"></a>
-<span class="sourceLineNo">7237</span>      tags = TagUtil.carryForwardTags(tags, currentValue);<a name="line.7237"></a>
-<span class="sourceLineNo">7238</span>      ts = Math.max(now, currentValue.getTimestamp());<a name="line.7238"></a>
-<span class="sourceLineNo">7239</span>      tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7239"></a>
-<span class="sourceLineNo">7240</span>      byte[] tagBytes = TagUtil.fromList(tags);<a name="line.7240"></a>
-<span class="sourceLineNo">7241</span>      // Allocate an empty cell and copy in all parts.<a name="line.7241"></a>
-<span class="sourceLineNo">7242</span>      // TODO: This is intimate knowledge of how a KeyValue is made. Undo!!! Prevents our doing<a name="line.7242"></a>
-<span class="sourceLineNo">7243</span>      // other Cell types. Copying on-heap too if an off-heap Cell.<a name="line.7243"></a>
-<span class="sourceLineNo">7244</span>      newCell = new KeyValue(row.length, delta.getFamilyLength(),<a name="line.7244"></a>
-<span class="sourceLineNo">7245</span>        delta.getQualifierLength(), ts, KeyValue.Type.Put,<a name="line.7245"></a>
-<span class="sourceLineNo">7246</span>        delta.getValueLength() + currentValue.getValueLength(),<a name="line.7246"></a>
-<span class="sourceLineNo">7247</span>        tagBytes == null? 0: tagBytes.length);<a name="line.7247"></a>
-<span class="sourceLineNo">7248</span>      // Copy in row, family, and qualifier<a name="line.7248"></a>
-<span class="sourceLineNo">7249</span>      System.arraycopy(row, 0, newCell.getRowArray(), newCell.getRowOffset(), row.length);<a name="line.7249"></a>
-<span class="sourceLineNo">7250</span>      System.arraycopy(delta.getFamilyArray(), delta.getFamilyOffset(),<a name="line.7250"></a>
-<span class="sourceLineNo">7251</span>          newCell.getFamilyArray(), newCell.getFamilyOffset(), delta.getFamilyLength());<a name="line.7251"></a>
-<span class="sourceLineNo">7252</span>      System.arraycopy(delta.getQualifierArray(), delta.getQualifierOffset(),<a name="line.7252"></a>
-<span class="sourceLineNo">7253</span>          newCell.getQualifierArray(), newCell.getQualifierOffset(), delta.getQualifierLength());<a name="line.7253"></a>
-<span class="sourceLineNo">7254</span>      // Copy in the value<a name="line.7254"></a>
-<span class="sourceLineNo">7255</span>      CellUtil.copyValueTo(currentValue, newCell.getValueArray(), newCell.getValueOffset());<a name="line.7255"></a>
-<span class="sourceLineNo">7256</span>      System.arraycopy(delta.getValueArray(), delta.getValueOffset(),<a name="line.7256"></a>
-<span class="sourceLineNo">7257</span>          newCell.getValueArray(), newCell.getValueOffset() + currentValue.getValueLength(),<a name="line.7257"></a>
-<span class="sourceLineNo">7258</span>          delta.getValueLength());<a name="line.7258"></a>
-<span class="sourceLineNo">7259</span>      // Copy in tag data<a name="line.7259"></a>
-<span class="sourceLineNo">7260</span>      if (tagBytes != null) {<a name="line.7260"></a>
-<span class="sourceLineNo">7261</span>        System.arraycopy(tagBytes, 0,<a name="line.7261"></a>
-<span class="sourceLineNo">7262</span>            newCell.getTagsArray(), newCell.getTagsOffset(), tagBytes.length);<a name="line.7262"></a>
-<span class="sourceLineNo">7263</span>      }<a name="line.7263"></a>
-<span class="sourceLineNo">7264</span>    } else {<a name="line.7264"></a>
-<span class="sourceLineNo">7265</span>      // Append's KeyValue.Type==Put and ts==HConstants.LATEST_TIMESTAMP<a name="line.7265"></a>
-<span class="sourceLineNo">7266</span>      CellUtil.updateLatestStamp(delta, now);<a name="line.7266"></a>
-<span class="sourceLineNo">7267</span>      newCell = delta;<a name="line.7267"></a>
-<span class="sourceLineNo">7268</span>      tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7268"></a>
-<span class="sourceLineNo">7269</span>      if (tags != null) {<a name="line.7269"></a>
-<span class="sourceLineNo">7270</span>        newCell = new TagRewriteCell(delta, TagUtil.fromList(tags));<a name="line.7270"></a>
-<span class="sourceLineNo">7271</span>      }<a name="line.7271"></a>
-<span class="sourceLineNo">7272</span>    }<a name="line.7272"></a>
-<span class="sourceLineNo">7273</span>    return newCell;<a name="line.7273"></a>
-<span class="sourceLineNo">7274</span>  }<a name="line.7274"></a>
-<span class="sourceLineNo">7275</span><a name="line.7275"></a>
-<span class="sourceLineNo">7276</span>  /**<a name="line.7276"></a>
-<span class="sourceLineNo">7277</span>   * @return Get the long out of the passed in Cell<a name="line.7277"></a>
-<span class="sourceLineNo">7278</span>   */<a name="line.7278"></a>
-<span class="sourceLineNo">7279</span>  private static long getLongValue(final Cell cell) throws DoNotRetryIOException {<a name="line.7279"></a>
-<span class="sourceLineNo">7280</span>    int len = cell.getValueLength();<a name="line.7280"></a>
-<span class="sourceLineNo">7281</span>    if (len != Bytes.SIZEOF_LONG) {<a name="line.7281"></a>
-<span class="sourceLineNo">7282</span>      // throw DoNotRetryIOException instead of IllegalArgumentException<a name="line.7282"></a>
-<span class="sourceLineNo">7283</span>      throw new DoNotRetryIOException("Field is not a long, it's " + len + " bytes wide");<a name="line.7283"></a>
-<span class="sourceLineNo">7284</span>    }<a name="line.7284"></a>
-<span class="sourceLineNo">7285</span>    return Bytes.toLong(cell.getValueArray(), cell.getValueOffset(), len);<a name="line.7285"></a>
-<span class="sourceLineNo">7286</span>  }<a name="line.7286"></a>
-<span class="sourceLineNo">7287</span><a name="line.7287"></a>
-<span class="sourceLineNo">7288</span>  /**<a name="line.7288"></a>
-<span class="sourceLineNo">7289</span>   * Do a specific Get on passed &lt;code&gt;columnFamily&lt;/code&gt; and column qualifiers.<a name="line.7289"></a>
-<span class="sourceLineNo">7290</span>   * @param mutation Mutation we are doing this Get for.<a name="line.7290"></a>
-<span class="sourceLineNo">7291</span>   * @param columnFamily Which column family on row (TODO: Go all Gets in one go)<a name="line.7291"></a>
-<span class="sourceLineNo">7292</span>   * @param coordinates Cells from &lt;code&gt;mutation&lt;/code&gt; used as coordinates applied to Get.<a name="line.7292"></a>
-<span class="sourceLineNo">7293</span>   * @return Return list of Cells found.<a name="line.7293"></a>
-<span class="sourceLineNo">7294</span>   */<a name="line.7294"></a>
-<span class="sourceLineNo">7295</span>  private List&lt;Cell&gt; get(final Mutation mutation, final Store store,<a name="line.7295"></a>
-<span class="sourceLineNo">7296</span>          final List&lt;Cell&gt; coordinates, final IsolationLevel isolation, final TimeRange tr)<a name="line.7296"></a>
-<span class="sourceLineNo">7297</span>  throws IOException {<a name="line.7297"></a>
-<span class="sourceLineNo">7298</span>    // Sort the cells so that they match the order that they appear in the Get results. Otherwise,<a name="line.7298"></a>
-<span class="sourceLineNo">7299</span>    // we won't be able to find the existing values if the cells are not specified in order by the<a name="line.7299"></a>
-<span class="sourceLineNo">7300</span>    // client since cells are in an array list.<a name="line.7300"></a>
-<span class="sourceLineNo">7301</span>    // TODO: I don't get why we are sorting. St.Ack 20150107<a name="line.7301"></a>
-<span class="sourceLineNo">7302</span>    sort(coordinates, store.getComparator());<a name="line.7302"></a>
-<span class="sourceLineNo">7303</span>    Get get = new Get(mutation.getRow());<a name="line.7303"></a>
-<span class="sourceLineNo">7304</span>    if (isolation != null) {<a name="line.7304"></a>
-<span class="sourceLineNo">7305</span>      get.setIsolationLevel(isolation);<a name="line.7305"></a>
-<span class="sourceLineNo">7306</span>    }<a name="line.7306"></a>
-<span class="sourceLineNo">7307</span>    for (Cell cell: coordinates) {<a name="line.7307"></a>
-<span class="sourceLineNo">7308</span>      get.addColumn(store.getFamily().getName(), CellUtil.cloneQualifier(cell));<a name="line.7308"></a>
-<span class="sourceLineNo">7309</span>    }<a name="line.7309"></a>
-<span class="sourceLineNo">7310</span>    // Increments carry time range. If an Increment instance, put it on the Get.<a name="line.7310"></a>
-<span class="sourceLineNo">7311</span>    if (tr != null) {<a name="line.7311"></a>
-<span class="sourceLineNo">7312</span>      get.setTimeRange(tr.getMin(), tr.getMax());<a name="line.7312"></a>
-<span class="sourceLineNo">7313</span>    }<a name="line.7313"></a>
-<span class="sourceLineNo">7314</span>    return get(get, false);<a name="line.7314"></a>
-<span class="sourceLineNo">7315</span>  }<a name="line.7315"></a>
-<span class="sourceLineNo">7316</span><a name="line.7316"></a>
-<span class="sourceLineNo">7317</span>  /**<a name="line.7317"></a>
-<span class="sourceLineNo">7318</span>   * @return Sorted list of &lt;code&gt;cells&lt;/code&gt; using &lt;code&gt;comparator&lt;/code&gt;<a name="line.7318"></a>
-<span class="sourceLineNo">7319</span>   */<a name="line.7319"></a>
-<span class="sourceLineNo">7320</span>  private static List&lt;Cell&gt; sort(List&lt;Cell&gt; cells, final Comparator&lt;Cell&gt; comparator) {<a name="line.7320"></a>
-<span class="sourceLineNo">7321</span>    Collections.sort(cells, comparator);<a name="line.7321"></a>
-<span class="sourceLineNo">7322</span>    return cells;<a name="line.7322"></a>
-<span class="sourceLineNo">7323</span>  }<a name="line.7323"></a>
-<span class="sourceLineNo">7324</span><a name="line.7324"></a>
-<span class="sourceLineNo">7325</span>  //<a name="line.7325"></a>
-<span class="sourceLineNo">7326</span>  // New HBASE-880 Helpers<a name="line.7326"></a>
+<span class="sourceLineNo">7128</span>   * Does Get of current value and then adds passed in deltas for this Store returning the result.<a name="line.7128"></a>
+<span class="sourceLineNo">7129</span>   *<a name="line.7129"></a>
+<span class="sourceLineNo">7130</span>   * @param op Whether Increment or Append<a name="line.7130"></a>
+<span class="sourceLineNo">7131</span>   * @param mutation The encompassing Mutation object<a name="line.7131"></a>
+<span class="sourceLineNo">7132</span>   * @param deltas Changes to apply to this Store; either increment amount or data to append<a name="line.7132"></a>
+<span class="sourceLineNo">7133</span>   * @param results In here we accumulate all the Cells we are to return to the client; this List<a name="line.7133"></a>
+<span class="sourceLineNo">7134</span>   *  can be larger than what we return in case where delta is zero; i.e. don't write<a name="line.7134"></a>
+<span class="sourceLineNo">7135</span>   *  out new values, just return current value. If null, client doesn't want results returned.<a name="line.7135"></a>
+<span class="sourceLineNo">7136</span>   * @return Resulting Cells after &lt;code&gt;deltas&lt;/code&gt; have been applied to current<a name="line.7136"></a>
+<span class="sourceLineNo">7137</span>   *  values. Side effect is our filling out of the &lt;code&gt;results&lt;/code&gt; List.<a name="line.7137"></a>
+<span class="sourceLineNo">7138</span>   */<a name="line.7138"></a>
+<span class="sourceLineNo">7139</span>  private List&lt;Cell&gt; reckonDeltasByStore(final Store store, final Operation op,<a name="line.7139"></a>
+<span class="sourceLineNo">7140</span>      final Mutation mutation, final Durability effectiveDurability, final long now,<a name="line.7140"></a>
+<span class="sourceLineNo">7141</span>      final List&lt;Cell&gt; deltas, final List&lt;Cell&gt; results)<a name="line.7141"></a>
+<span class="sourceLineNo">7142</span>  throws IOException {<a name="line.7142"></a>
+<span class="sourceLineNo">7143</span>    byte [] columnFamily = store.getFamily().getName();<a name="line.7143"></a>
+<span class="sourceLineNo">7144</span>    List&lt;Cell&gt; toApply = new ArrayList&lt;Cell&gt;(deltas.size());<a name="line.7144"></a>
+<span class="sourceLineNo">7145</span>    // Get previous values for all columns in this family.<a name="line.7145"></a>
+<span class="sourceLineNo">7146</span>    List&lt;Cell&gt; currentValues = get(mutation, store, deltas,<a name="line.7146"></a>
+<span class="sourceLineNo">7147</span>        null/*Default IsolationLevel*/,<a name="line.7147"></a>
+<span class="sourceLineNo">7148</span>        op == Operation.INCREMENT? ((Increment)mutation).getTimeRange(): null);<a name="line.7148"></a>
+<span class="sourceLineNo">7149</span>    // Iterate the input columns and update existing values if they were found, otherwise<a name="line.7149"></a>
+<span class="sourceLineNo">7150</span>    // add new column initialized to the delta amount<a name="line.7150"></a>
+<span class="sourceLineNo">7151</span>    int currentValuesIndex = 0;<a name="line.7151"></a>
+<span class="sourceLineNo">7152</span>    for (int i = 0; i &lt; deltas.size(); i++) {<a name="line.7152"></a>
+<span class="sourceLineNo">7153</span>      Cell delta = deltas.get(i);<a name="line.7153"></a>
+<span class="sourceLineNo">7154</span>      Cell currentValue = null;<a name="line.7154"></a>
+<span class="sourceLineNo">7155</span>      if (currentValuesIndex &lt; currentValues.size() &amp;&amp;<a name="line.7155"></a>
+<span class="sourceLineNo">7156</span>          CellUtil.matchingQualifier(currentValues.get(currentValuesIndex), delta)) {<a name="line.7156"></a>
+<span class="sourceLineNo">7157</span>        currentValue = currentValues.get(currentValuesIndex);<a name="line.7157"></a>
+<span class="sourceLineNo">7158</span>        if (i &lt; (deltas.size() - 1) &amp;&amp; !CellUtil.matchingQualifier(delta, deltas.get(i + 1))) {<a name="line.7158"></a>
+<span class="sourceLineNo">7159</span>          currentValuesIndex++;<a name="line.7159"></a>
+<span class="sourceLineNo">7160</span>        }<a name="line.7160"></a>
+<span class="sourceLineNo">7161</span>      }<a name="line.7161"></a>
+<span class="sourceLineNo">7162</span>      // Switch on whether this an increment or an append building the new Cell to apply.<a name="line.7162"></a>
+<span class="sourceLineNo">7163</span>      Cell newCell = null;<a name="line.7163"></a>
+<span class="sourceLineNo">7164</span>      MutationType mutationType = null;<a name="line.7164"></a>
+<span class="sourceLineNo">7165</span>      boolean apply = true;<a name="line.7165"></a>
+<span class="sourceLineNo">7166</span>      switch (op) {<a name="line.7166"></a>
+<span class="sourceLineNo">7167</span>        case INCREMENT:<a name="line.7167"></a>
+<span class="sourceLineNo">7168</span>          mutationType = MutationType.INCREMENT;<a name="line.7168"></a>
+<span class="sourceLineNo">7169</span>          // If delta amount to apply is 0, don't write WAL or MemStore.<a name="line.7169"></a>
+<span class="sourceLineNo">7170</span>          long deltaAmount = getLongValue(delta);<a name="line.7170"></a>
+<span class="sourceLineNo">7171</span>          apply = deltaAmount != 0;<a name="line.7171"></a>
+<span class="sourceLineNo">7172</span>          newCell = reckonIncrement(delta, deltaAmount, currentValue, columnFamily, now,<a name="line.7172"></a>
+<span class="sourceLineNo">7173</span>            (Increment)mutation);<a name="line.7173"></a>
+<span class="sourceLineNo">7174</span>          break;<a name="line.7174"></a>
+<span class="sourceLineNo">7175</span>        case APPEND:<a name="line.7175"></a>
+<span class="sourceLineNo">7176</span>          mutationType = MutationType.APPEND;<a name="line.7176"></a>
+<span class="sourceLineNo">7177</span>          // Always apply Append. TODO: Does empty delta value mean reset Cell? It seems to.<a name="line.7177"></a>
+<span class="sourceLineNo">7178</span>          newCell = reckonAppend(delta, currentValue, now, (Append)mutation);<a name="line.7178"></a>
+<span class="sourceLineNo">7179</span>          break;<a name="line.7179"></a>
+<span class="sourceLineNo">7180</span>        default: throw new UnsupportedOperationException(op.toString());<a name="line.7180"></a>
+<span class="sourceLineNo">7181</span>      }<a name="line.7181"></a>
+<span class="sourceLineNo">7182</span><a name="line.7182"></a>
+<span class="sourceLineNo">7183</span>      // Give coprocessors a chance to update the new cell<a name="line.7183"></a>
+<span class="sourceLineNo">7184</span>      if (coprocessorHost != null) {<a name="line.7184"></a>
+<span class="sourceLineNo">7185</span>        newCell =<a name="line.7185"></a>
+<span class="sourceLineNo">7186</span>            coprocessorHost.postMutationBeforeWAL(mutationType, mutation, currentValue, newCell);<a name="line.7186"></a>
+<span class="sourceLineNo">7187</span>      }<a name="line.7187"></a>
+<span class="sourceLineNo">7188</span>      // If apply, we need to update memstore/WAL with new value; add it toApply.<a name="line.7188"></a>
+<span class="sourceLineNo">7189</span>      if (apply) {<a name="line.7189"></a>
+<span class="sourceLineNo">7190</span>        toApply.add(newCell);<a name="line.7190"></a>
+<span class="sourceLineNo">7191</span>      }<a name="line.7191"></a>
+<span class="sourceLineNo">7192</span>      // Add to results to get returned to the Client. If null, cilent does not want results.<a name="line.7192"></a>
+<span class="sourceLineNo">7193</span>      if (results != null) {<a name="line.7193"></a>
+<span class="sourceLineNo">7194</span>        results.add(newCell);<a name="line.7194"></a>
+<span class="sourceLineNo">7195</span>      }<a name="line.7195"></a>
+<span class="sourceLineNo">7196</span>    }<a name="line.7196"></a>
+<span class="sourceLineNo">7197</span>    return toApply;<a name="line.7197"></a>
+<span class="sourceLineNo">7198</span>  }<a name="line.7198"></a>
+<span class="sourceLineNo">7199</span><a name="line.7199"></a>
+<span class="sourceLineNo">7200</span>  /**<a name="line.7200"></a>
+<span class="sourceLineNo">7201</span>   * Calculate new Increment Cell.<a name="line.7201"></a>
+<span class="sourceLineNo">7202</span>   * @return New Increment Cell with delta applied to currentValue if currentValue is not null;<a name="line.7202"></a>
+<span class="sourceLineNo">7203</span>   *  otherwise, a new Cell with the delta set as its value.<a name="line.7203"></a>
+<span class="sourceLineNo">7204</span>   */<a name="line.7204"></a>
+<span class="sourceLineNo">7205</span>  private Cell reckonIncrement(final Cell delta, final long deltaAmount, final Cell currentValue,<a name="line.7205"></a>
+<span class="sourceLineNo">7206</span>      byte [] columnFamily, final long now, Mutation mutation)<a name="line.7206"></a>
+<span class="sourceLineNo">7207</span>  throws IOException {<a name="line.7207"></a>
+<span class="sourceLineNo">7208</span>    // Forward any tags found on the delta.<a name="line.7208"></a>
+<span class="sourceLineNo">7209</span>    List&lt;Tag&gt; tags = TagUtil.carryForwardTags(delta);<a name="line.7209"></a>
+<span class="sourceLineNo">7210</span>    long newValue = deltaAmount;<a name="line.7210"></a>
+<span class="sourceLineNo">7211</span>    long ts = now;<a name="line.7211"></a>
+<span class="sourceLineNo">7212</span>    if (currentValue != null) {<a name="line.7212"></a>
+<span class="sourceLineNo">7213</span>      tags = TagUtil.carryForwardTags(tags, currentValue);<a name="line.7213"></a>
+<span class="sourceLineNo">7214</span>      ts = Math.max(now, currentValue.getTimestamp());<a name="line.7214"></a>
+<span class="sourceLineNo">7215</span>      newValue += getLongValue(currentValue);<a name="line.7215"></a>
+<span class="sourceLineNo">7216</span>    }<a name="line.7216"></a>
+<span class="sourceLineNo">7217</span>    // Now make up the new Cell. TODO: FIX. This is carnel knowledge of how KeyValues are made...<a name="line.7217"></a>
+<span class="sourceLineNo">7218</span>    // doesn't work well with offheaping or if we are doing a different Cell type.<a name="line.7218"></a>
+<span class="sourceLineNo">7219</span>    byte [] incrementAmountInBytes = Bytes.toBytes(newValue);<a name="line.7219"></a>
+<span class="sourceLineNo">7220</span>    tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7220"></a>
+<span class="sourceLineNo">7221</span>    byte [] row = mutation.getRow();<a name="line.7221"></a>
+<span class="sourceLineNo">7222</span>    return new KeyValue(row, 0, row.length,<a name="line.7222"></a>
+<span class="sourceLineNo">7223</span>      columnFamily, 0, columnFamily.length,<a name="line.7223"></a>
+<span class="sourceLineNo">7224</span>      delta.getQualifierArray(), delta.getQualifierOffset(), delta.getQualifierLength(),<a name="line.7224"></a>
+<span class="sourceLineNo">7225</span>      ts, KeyValue.Type.Put,<a name="line.7225"></a>
+<span class="sourceLineNo">7226</span>      incrementAmountInBytes, 0, incrementAmountInBytes.length,<a name="line.7226"></a>
+<span class="sourceLineNo">7227</span>      tags);<a name="line.7227"></a>
+<span class="sourceLineNo">7228</span>  }<a name="line.7228"></a>
+<span class="sourceLineNo">7229</span><a name="line.7229"></a>
+<span class="sourceLineNo">7230</span>  private Cell reckonAppend(final Cell delta, final Cell currentValue, final long now,<a name="line.7230"></a>
+<span class="sourceLineNo">7231</span>      Append mutation)<a name="line.7231"></a>
+<span class="sourceLineNo">7232</span>  throws IOException {<a name="line.7232"></a>
+<span class="sourceLineNo">7233</span>    // Forward any tags found on the delta.<a name="line.7233"></a>
+<span class="sourceLineNo">7234</span>    List&lt;Tag&gt; tags = TagUtil.carryForwardTags(delta);<a name="line.7234"></a>
+<span class="sourceLineNo">7235</span>    long ts = now;<a name="line.7235"></a>
+<span class="sourceLineNo">7236</span>    Cell newCell = null;<a name="line.7236"></a>
+<span class="sourceLineNo">7237</span>    byte [] row = mutation.getRow();<a name="line.7237"></a>
+<span class="sourceLineNo">7238</span>    if (currentValue != null) {<a name="line.7238"></a>
+<span class="sourceLineNo">7239</span>      tags = TagUtil.carryForwardTags(tags, currentValue);<a name="line.7239"></a>
+<span class="sourceLineNo">7240</span>      ts = Math.max(now, currentValue.getTimestamp());<a name="line.7240"></a>
+<span class="sourceLineNo">7241</span>      tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7241"></a>
+<span class="sourceLineNo">7242</span>      byte[] tagBytes = TagUtil.fromList(tags);<a name="line.7242"></a>
+<span class="sourceLineNo">7243</span>      // Allocate an empty cell and copy in all parts.<a name="line.7243"></a>
+<span class="sourceLineNo">7244</span>      // TODO: This is intimate knowledge of how a KeyValue is made. Undo!!! Prevents our doing<a name="line.7244"></a>
+<span class="sourceLineNo">7245</span>      // other Cell types. Copying on-heap too if an off-heap Cell.<a name="line.7245"></a>
+<span class="sourceLineNo">7246</span>      newCell = new KeyValue(row.length, delta.getFamilyLength(),<a name="line.7246"></a>
+<span class="sourceLineNo">7247</span>        delta.getQualifierLength(), ts, KeyValue.Type.Put,<a name="line.7247"></a>
+<span class="sourceLineNo">7248</span>        delta.getValueLength() + currentValue.getValueLength(),<a name="line.7248"></a>
+<span class="sourceLineNo">7249</span>        tagBytes == null? 0: tagBytes.length);<a name="line.7249"></a>
+<span class="sourceLineNo">7250</span>      // Copy in row, family, and qualifier<a name="line.7250"></a>
+<span class="sourceLineNo">7251</span>      System.arraycopy(row, 0, newCell.getRowArray(), newCell.getRowOffset(), row.length);<a name="line.7251"></a>
+<span class="sourceLineNo">7252</span>      System.arraycopy(delta.getFamilyArray(), delta.getFamilyOffset(),<a name="line.7252"></a>
+<span class="sourceLineNo">7253</span>          newCell.getFamilyArray(), newCell.getFamilyOffset(), delta.getFamilyLength());<a name="line.7253"></a>
+<span class="sourceLineNo">7254</span>      System.arraycopy(delta.getQualifierArray(), delta.getQualifierOffset(),<a name="line.7254"></a>
+<span class="sourceLineNo">7255</span>          newCell.getQualifierArray(), newCell.getQualifierOffset(), delta.getQualifierLength());<a name="line.7255"></a>
+<span class="sourceLineNo">7256</span>      // Copy in the value<a name="line.7256"></a>
+<span class="sourceLineNo">7257</span>      CellUtil.copyValueTo(currentValue, newCell.getValueArray(), newCell.getValueOffset());<a name="line.7257"></a>
+<span class="sourceLineNo">7258</span>      System.arraycopy(delta.getValueArray(), delta.getValueOffset(),<a name="line.7258"></a>
+<span class="sourceLineNo">7259</span>          newCell.getValueArray(), newCell.getValueOffset() + currentValue.getValueLength(),<a name="line.7259"></a>
+<span class="sourceLineNo">7260</span>          delta.getValueLength());<a name="line.7260"></a>
+<span class="sourceLineNo">7261</span>      // Copy in tag data<a name="line.7261"></a>
+<span class="sourceLineNo">7262</span>      if (tagBytes != null) {<a name="line.7262"></a>
+<span class="sourceLineNo">7263</span>        System.arraycopy(tagBytes, 0,<a name="line.7263"></a>
+<span class="sourceLineNo">7264</span>            newCell.getTagsArray(), newCell.getTagsOffset(), tagBytes.length);<a name="line.7264"></a>
+<span class="sourceLineNo">7265</span>      }<a name="line.7265"></a>
+<span class="sourceLineNo">7266</span>    } else {<a name="line.7266"></a>
+<span class="sourceLineNo">7267</span>      // Append's KeyValue.Type==Put and ts==HConstants.LATEST_TIMESTAMP<a name="line.7267"></a>
+<span class="sourceLineNo">7268</span>      CellUtil.updateLatestStamp(delta, now);<a name="line.7268"></a>
+<span class="sourceLineNo">7269</span>      newCell = delta;<a name="line.7269"></a>
+<span class="sourceLineNo">7270</span>      tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7270"></a>
+<span class="sourceLineNo">7271</span>      if (tags != null) {<a name="line.7271"></a>
+<span class="sourceLineNo">7272</span>        newCell = new TagRewriteCell(delta, TagUtil.fromList(tags));<a name="line.7272"></a>
+<span class="sourceLineNo">7273</span>      }<a name="line.7273"></a>
+<span class="sourceLineNo">7274</span>    }<a name="line.7274"></a>
+<span class="sourceLineNo">7275</span>    return newCell;<a name="line.7275"></a>
+<span class="sourceLineNo">7276</span>  }<a name="line.7276"></a>
+<span class="sourceLineNo">7277</span><a name="line.7277"></a>
+<span class="sourceLineNo">7278</span>  /**<a name="line.7278"></a>
+<span class="sourceLineNo">7279</span>   * @return Get the long out of the passed in Cell<a name="line.7279"></a>
+<span class="sourceLineNo">7280</span>   */<a name="line.7280"></a>
+<span class="sourceLineNo">7281</span>  private static long getLongValue(final Cell cell) throws DoNotRetryIOException {<a name="line.7281"></a>
+<span class="sourceLineNo">7282</span>    int len = cell.getValueLength();<a name="line.7282"></a>
+<span class="sourceLineNo">7283</span>    if (len != Bytes.SIZEOF_LONG) {<a name="line.7283"></a>
+<span class="sourceLineNo">7284</span>      // throw DoNotRetryIOException instead of IllegalArgumentException<a name="line.7284"></a>
+<span class="sourceLineNo">7285</span>      throw new DoNotRetryIOException("Field is not a long, it's " + len + " bytes wide");<a name="line.7285"></a>
+<span class="sourceLineNo">7286</span>    }<a name="line.7286"></a>
+<span class="sourceLineNo">7287</span>    return Bytes.toLong(cell.getValueArray(), cell.getValueOffset(), len);<a name="line.7287"></a>
+<span class="sourceLineNo">7288</span>  }<a name="line.7288"></a>
+<span class="sourceLineNo">7289</span><a name="line.7289"></a>
+<span class="sourceLineNo">7290</span>  /**<a name="line.7290"></a>
+<span class="sourceLineNo">7291</span>   * Do a specific Get on passed &lt;code&gt;columnFamily&lt;/code&gt; and column qualifiers.<a name="line.7291"></a>
+<span class="sourceLineNo">7292</span>   * @param mutation Mutation we are doing this Get for.<a name="line.7292"></a>
+<span class="sourceLineNo">7293</span>   * @param columnFamily Which column family on row (TODO: Go all Gets in one go)<a name="line.7293"></a>
+<span class="sourceLineNo">7294</span>   * @param coordinates Cells from &lt;code&gt;mutation&lt;/code&gt; used as coordinates applied to Get.<a name="line.7294"></a>
+<span class="sourceLineNo">7295</span>   * @return Return list of Cells found.<a name="line.7295"></a>
+<span class="sourceLineNo">7296</span>   */<a name="line.7296"></a>
+<span class="sourceLineNo">7297</span>  private List&lt;Cell&gt; get(final Mutation mutation, final Store store,<a name="line.7297"></a>
+<span class="sourceLineNo">7298</span>          final List&lt;Cell&gt; coordinates, final IsolationLevel isolation, final TimeRange tr)<a name="line.7298"></a>
+<span class="sourceLineNo">7299</span>  throws IOException {<a name="line.7299"></a>
+<span class="sourceLineNo">7300</span>    // Sort the cells so that they match the order that they appear in the Get results. Otherwise,<a name="line.7300"></a>
+<span class="sourceLineNo">7301</span>    // we won't be able to find the existing values if the cells are not specified in order by the<a name="line.7301"></a>
+<span class="sourceLineNo">7302</span>    // client since cells are in an array list.<a name="line.7302"></a>
+<span class="sourceLineNo">7303</span>    // TODO: I don't get why we are sorting. St.Ack 20150107<a name="line.7303"></a>
+<span class="sourceLineNo">7304</span>    sort(coordinates, store.getComparator());<a name="line.7304"></a>
+<span class="sourceLineNo">7305</span>    Get get = new Get(mutation.getRow());<a name="line.7305"></a>
+<span class="sourceLineNo">7306</span>    if (isolation != null) {<a name="line.7306"></a>
+<span class="sourceLineNo">7307</span>      get.setIsolationLevel(isolation);<a name="line.7307"></a>
+<span class="sourceLineNo">7308</span>    }<a name="line.7308"></a>
+<span class="sourceLineNo">7309</span>    for (Cell cell: coordinates) {<a name="line.7309"></a>
+<span class="sourceLineNo">7310</span>      get.addColumn(store.getFamily().getName(), CellUtil.cloneQualifier(cell));<a name="line.7310"></a>
+<span class="sourceLineNo">7311</span>    }<a name="line.7311"></a>
+<span class="sourceLineNo">7312</span>    // Increments carry time range. If an Increment instance, put it on the Get.<a name="line.7312"></a>
+<span class="sourceLineNo">7313</span>    if (tr != null) {<a name="line.7313"></a>
+<span class="sourceLineNo">7314</span>      get.setTimeRange(tr.getMin(), tr.getMax());<a name="line.7314"></a>
+<span class="sourceLineNo">7315</span>    }<a name="line.7315"></a>
+<span class="sourceLineNo">7316</span>    return get(get, false);<a name="line.7316"></a>
+<span class="sourceLineNo">7317</span>  }<a name="line.7317"></a>
+<span class="sourceLineNo">7318</span><a name="line.7318"></a>
+<span class="sourceLineNo">7319</span>  /**<a name="line.7319"></a>
+<span class="sourceLineNo">7320</span>   * @return Sorted list of &lt;code&gt;cells&lt;/code&gt; using &lt;code&gt;comparator&lt;/code&gt;<a name="line.7320"></a>
+<span class="sourceLineNo">7321</span>   */<a name="line.7321"></a>
+<span class="sourceLineNo">7322</span>  private static List&lt;Cell&gt; sort(List&lt;Cell&gt; cells, final Comparator&lt;Cell&gt; comparator) {<a name="line.7322"></a>
+<span class="sourceLineNo">7323</span>    Collections.sort(cells, comparator);<a name="line.7323"></a>
+<span class="sourceLineNo">7324</span>    return cells;<a name="line.7324"></a>
+<span class="sourceLineNo">7325</span>  }<a name="line.7325"></a>
+<span class="sourceLineNo">7326</span><a name="line.7326"></a>
 <span class="sourceLineNo">7327</span>  //<a name="line.7327"></a>
-<span class="sourceLineNo">7328</span><a name="line.7328"></a>
-<span class="sourceLineNo">7329</span>  void checkFamily(final byte [] family)<a name="line.7329"></a>
-<span class="sourceLineNo">7330</span>  throws NoSuchColumnFamilyException {<a name="line.7330"></a>
-<span class="sourceLineNo">7331</span>    if (!this.htableDescriptor.hasFamily(family)) {<a name="line.7331"></a>
-<span class="sourceLineNo">7332</span>      throw new NoSuchColumnFamilyException("Column family " +<a name="line.7332"></a>
-<span class="sourceLineNo">7333</span>          Bytes.toString(family) + " does not exist in region " + this<a name="line.7333"></a>
-<span class="sourceLineNo">7334</span>          + " in table " + this.htableDescriptor);<a name="line.7334"></a>
-<span class="sourceLineNo">7335</span>    }<a name="line.7335"></a>
-<span class="sourceLineNo">7336</span>  }<a name="line.7336"></a>
-<span class="sourceLineNo">7337</span><a name="line.7337"></a>
-<span class="sourceLineNo">7338</span>  public static final long FIXED_OVERHEAD = ClassSize.align(<a name="line.7338"></a>
-<span class="sourceLineNo">7339</span>      ClassSize.OBJECT +<a name="line.7339"></a>
-<span class="sourceLineNo">7340</span>      ClassSize.ARRAY +<a name="line.7340"></a>
-<span class="sourceLineNo">7341</span>      45 * ClassSize.REFERENCE + 2 * Bytes.SIZEOF_INT +<a name="line.7341"></a>
-<span class="sourceLineNo">7342</span>      (14 * Bytes.SIZEOF_LONG) +<a name="line.7342"></a>
-<span class="sourceLineNo">7343</span>      5 * Bytes.SIZEOF_BOOLEAN);<a name="line.7343"></a>
-<span class="sourceLineNo">7344</span><a name="line.7344"></a>
-<span class="sourceLineNo">7345</span>  // woefully out of date - currently missing:<a name="line.7345"></a>
-<span class="sourceLineNo">7346</span>  // 1 x HashMap - coprocessorServiceHandlers<a name="line.7346"></a>
-<span class="sourceLineNo">7347</span>  // 6 x Counter - numMutationsWithoutWAL, dataInMemoryWithoutWAL,<a name="line.7347"></a>
-<span class="sourceLineNo">7348</span>  //   checkAndMutateChecksPassed, checkAndMutateChecksFailed, readRequestsCount,<a name="line.7348"></a>
-<span class="sourceLineNo">7349</span>  //   writeRequestsCount<a name="line.7349"></a>
-<span class="sourceLineNo">7350</span>  // 1 x HRegion$WriteState - writestate<a name="line.7350"></a>
-<span class="sourceLineNo">7351</span>  // 1 x RegionCoprocessorHost - coprocessorHost<a name="line.7351"></a>
-<span class="sourceLineNo">7352</span>  // 1 x RegionSplitPolicy - splitPolicy<a name="line.7352"></a>
-<span class="sourceLineNo">7353</span>  // 1 x MetricsRegion - metricsRegion<a name="line.7353"></a>
-<span class="sourceLineNo">7354</span>  // 1 x MetricsRegionWrapperImpl - metricsRegionWrapper<a name="line.7354"></a>
-<span class="sourceLineNo">7355</span>  public static final long DEEP_OVERHEAD = FIXED_OVERHEAD +<a name="line.7355"></a>
-<span class="sourceLineNo">7356</span>      ClassSize.OBJECT + // closeLock<a name="line.7356"></a>
-<span class="sourceLineNo">7357</span>      (2 * ClassSize.ATOMIC_BOOLEAN) + // closed, closing<a name="line.7357"></a>
-<span class="sourceLineNo">7358</span>      (3 * ClassSize.ATOMIC_LONG) + // memStoreSize, numPutsWithoutWAL, dataInMemoryWithoutWAL<a name="line.7358"></a>
-<span class="sourceLineNo">7359</span>      (2 * ClassSize.CONCURRENT_HASHMAP) +  // lockedRows, scannerReadPoints<a name="line.7359"></a>
-<span class="sourceLineNo">7360</span>      WriteState.HEAP_SIZE + // writestate<a name="line.7360"></a>
-<span class="sourceLineNo">7361</span>      ClassSize.CONCURRENT_SKIPLISTMAP + ClassSize.CONCURRENT_SKIPLISTMAP_ENTRY + // stores<a name="line.7361"></a>
-<span class="sourceLineNo">7362</span>      (2 * ClassSize.REENTRANT_LOCK) + // lock, updatesLock<a name="line.7362"></a>
-<span class="sourceLineNo">7363</span>      MultiVersionConcurrencyControl.FIXED_SIZE // mvcc<a name="line.7363"></a>
-<span class="sourceLineNo">7364</span>      + ClassSize.TREEMAP // maxSeqIdInStores<a name="line.7364"></a>
-<span class="sourceLineNo">7365</span>      + 2 * ClassSize.ATOMIC_INTEGER // majorInProgress, minorInProgress<a name="line.7365"></a>
-<span class="sourceLineNo">7366</span>      ;<a name="line.7366"></a>
-<span class="sourceLineNo">7367</span><a name="line.7367"></a>
-<span class="sourceLineNo">7368</span>  @Override<a name="line.7368"></a>
-<span class="sourceLineNo">7369</span>  public long heapSize() {<a name="line.7369"></a>
-<span class="sourceLineNo">7370</span>    long heapSize = DEEP_OVERHEAD;<a name="line.7370"></a>
-<span class="sourceLineNo">7371</span>    for (Store store : this.stores.values()) {<a name="line.7371"></a>
-<span class="sourceLineNo">7372</span>      heapSize += store.heapSize();<a name="line.7372"></a>
-<span class="sourceLineNo">7373</span>    }<a name="line.7373"></a>
-<span class="sourceLineNo">7374</span>    // this does not take into account row locks, recent flushes, mvcc entries, and more<a name="line.7374"></a>
-<span class="sourceLineNo">7375</span>    return heapSize;<a name="line.7375"></a>
-<span class="sourceLineNo">7376</span>  }<a name="line.7376"></a>
-<span class="sourceLineNo">7377</span><a name="line.7377"></a>
-<span class="sourceLineNo">7378</span>  @Override<a name="line.7378"></a>
-<span class="sourceLineNo">7379</span>  public boolean registerService(Service instance) {<a name="line.7379"></a>
-<span class="sourceLineNo">7380</span>    /*<a name="line.7380"></a>
-<span class="sourceLineNo">7381</span>     * No stacking of instances is allowed for a single service name<a name="line.7381"></a>
-<span class="sourceLineNo">7382</span>     */<a name="line.7382"></a>
-<span class="sourceLineNo">7383</span>    Descriptors.ServiceDescriptor serviceDesc = instance.getDescriptorForType();<a name="line.7383"></a>
-<span class="sourceLineNo">7384</span>    if (coprocessorServiceHandlers.containsKey(serviceDesc.getFullName())) {<a name="line.7384"></a>
-<span class="sourceLineNo">7385</span>      LOG.error("Coprocessor service " + serviceDesc.getFullName() +<a name="line.7385"></a>
-<span class="sourceLineNo">7386</span>              " already registered, rejecting request from " + instance<a name="line.7386"></a>
-<span class="sourceLineNo">7387</span>      );<a name="line.7387"></a>
-<span class="sourceLineNo">7388</span>      return false;<a name="line.7388"></a>
-<span class="sourceLineNo">7389</span>    }<a name="line.7389"></a>
-<span class="sourceLineNo">7390</span><a name="line.7390"></a>
-<span class="sourceLineNo">7391</span>    coprocessorServiceHandlers.put(serviceDesc.getFullName(), instance);<a name="line.7391"></a>
-<span class="sourceLineNo">7392</span>    if (LOG.isDebugEnabled()) {<a name="line.7392"></a>
-<span class="sourceLineNo">7393</span>      LOG.debug("Registered coprocessor service: region=" +<a name="line.7393"></a>
-<span class="sourceLineNo">7394</span>          Bytes.toStringBinary(getRegionInfo().getRegionName()) +<a name="line.7394"></a>
-<span class="sourceLineNo">7395</span>          " service=" + serviceDesc.getFullName());<a name="line.7395"></a>
-<span class="sourceLineNo">7396</span>    }<a name="line.7396"></a>
-<span class="sourceLineNo">7397</span>    return true;<a name="line.7397"></a>
-<span class="sourceLineNo">7398</span>  }<a name="line.7398"></a>
-<span class="sourceLineNo">7399</span><a name="line.7399"></a>
-<span class="sourceLineNo">7400</span>  @Override<a name="line.7400"></a>
-<span class="sourceLineNo">7401</span>  public Message execService(RpcController controller, CoprocessorServiceCall call)<a name="line.7401"></a>
-<span class="sourceLineNo">7402</span>      throws IOException {<a name="line.7402"></a>
-<span class="sourceLineNo">7403</span>    String serviceName = call.getServiceName();<a name="line.7403"></a>
-<span class="sourceLineNo">7404</span>    String methodName = call.getMethodName();<a name="line.7404"></a>
-<span class="sourceLineNo">7405</span>    if (!coprocessorServiceHandlers.containsKey(serviceName)) {<a name="line.7405"></a>
-<span class="sourceLineNo">7406</span>      throw new UnknownProtocolException(null,<a name="line.7406"></a>
-<span class="sourceLineNo">7407</span>          "No registered coprocessor service found for name "+serviceName+<a name="line.7407"></a>
-<span class="sourceLineNo">7408</span>          " in region "+Bytes.toStringBinary(getRegionInfo().getRegionName()));<a name="line.7408"></a>
-<span class="sourceLineNo">7409</span>    }<a name="line.7409"></a>
-<span class="sourceLineNo">7410</span><a name="line.7410"></a>
-<span class="sourceLineNo">7411</span>    Service service = coprocessorServiceHandlers.get(serviceName);<a name="line.7411"></a>
-<span class="sourceLineNo">7412</span>    Descriptors.ServiceDescriptor serviceDesc = service.getDescriptorForType();<a name="line.7412"></a>
-<span class="sourceLineNo">7413</span>    Descriptors.MethodDescriptor methodDesc = serviceDesc.findMethodByName(methodName);<a name="line.7413"></a>
-<span class="sourceLineNo">7414</span>    if (methodDesc == null) {<a name="line.7414"></a>
-<span class="sourceLineNo">7415</span>      throw new UnknownProtocolException(service.getClass(),<a name="line.7415"></a>
-<span class="sourceLineNo">7416</span>          "Unknown method "+methodName+" called on service "+serviceName+<a name="line.7416"></a>
-<span class="sourceLineNo">7417</span>              " in region "+Bytes.toStringBinary(getRegionInfo().getRegionName()));<a name="line.7417"></a>
-<span class="sourceLineNo">7418</span>    }<a name="line.7418"></a>
-<span class="sourceLineNo">7419</span><a name="line.7419"></a>
-<span class="sourceLineNo">7420</span>    Message.Builder builder = service.getRequestPrototype(methodDesc).newBuilderForType();<a name="line.7420"></a>
-<span class="sourceLineNo">7421</span>    ProtobufUtil.mergeFrom(builder, call.getRequest());<a name="line.7421"></a>
-<span class="sourceLineNo">7422</span>    Message request = builder.build();<a name="line.7422"></a>
-<span class="sourceLineNo">7423</span><a name="line.7423"></a>
-<span class="sourceLineNo">7424</span>    if (coprocessorHost != null) {<a name="line.7424"></a>
-<span class="sourceLineNo">7425</span>      request = coprocessorHost.preEndpointInvocation(service, methodName, request);<a name="line.7425"></a>
-<span class="sourceLineNo">7426</span>    }<a name="line.7426"></a>
-<span class="sourceLineNo">7427</span><a name="line.7427"></a>
-<span class="sourceLineNo">7428</span>    final Message.Builder responseBuilder =<a name="line.7428"></a>
-<span class="sourceLineNo">7429</span>        service.getResponsePrototype(methodDesc).newBuilderForType();<a name="line.7429"></a>
-<span class="sourceLineNo">7430</span>    service.callMethod(methodDesc, controller, request, new RpcCallback&lt;Message&gt;() {<a name="line.7430"></a>
-<span class="sourceLineNo">7431</span>      @Override<a name="line.7431"></a>
-<span class="sourceLineNo">7432</span>      public void run(Message message) {<a name="line.7432"></a>
-<span class="sourceLineNo">7433</span>        if (message != null) {<a name="line.7433"></a>
-<span class="sourceLineNo">7434</span>          responseBuilder.mergeFrom(message);<a name="line.7434"></a>
-<span class="sourceLineNo">7435</span>        }<a name="line.7435"></a>
-<span class="sourceLineNo">7436</span>      }<a name="line.7436"></a>
-<span class="sourceLineNo">7437</span>    });<a name="line.7437"></a>
-<span class="sourceLineNo">7438</span><a name="line.7438"></a>
-<span class="sourceLineNo">7439</span>    if (coprocessorHost != null) {<a name="line.7439"></a>
-<span class="sourceLineNo">7440</span>      coprocessorHost.postEndpointInvocation(service, methodName, request, responseBuilder);<a name="line.7440"></a>
-<span class="sourceLineNo">7441</span>    }<a name="line.7441"></a>
-<span class="sourceLineNo">7442</span><a name="line.7442"></a>
-<span class="sourceLineNo">7443</span>    IOException exception = ResponseConverter.getControllerException(controller);<a name="line.7443"></a>
-<span class="sourceLineNo">7444</span>    if (exception != null) {<a name="line.7444"></a>
-<span class="sourceLineNo">7445</span>      throw exception;<a name="line.7445"></a>
-<span class="sourceLineNo">7446</span>    }<a name="line.7446"></a>
-<span class="sourceLineNo">7447</span><a name="l

<TRUNCATED>

[23/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html
index 42bf74e..29bc296 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html
@@ -34,27 +34,27 @@
 <span class="sourceLineNo">026</span><a name="line.26"></a>
 <span class="sourceLineNo">027</span>{<a name="line.27"></a>
 <span class="sourceLineNo">028</span>  private final HRegionServer regionServer;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>  private final String filter;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>  private final String bcv;<a name="line.30"></a>
+<span class="sourceLineNo">029</span>  private final String format;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>  private final String filter;<a name="line.30"></a>
 <span class="sourceLineNo">031</span>  private final String bcn;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>  private final String format;<a name="line.32"></a>
+<span class="sourceLineNo">032</span>  private final String bcv;<a name="line.32"></a>
 <span class="sourceLineNo">033</span>  protected static org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl.ImplData __jamon_setOptionalArguments(org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl.ImplData p_implData)<a name="line.33"></a>
 <span class="sourceLineNo">034</span>  {<a name="line.34"></a>
-<span class="sourceLineNo">035</span>    if(! p_implData.getFilter__IsNotDefault())<a name="line.35"></a>
+<span class="sourceLineNo">035</span>    if(! p_implData.getFormat__IsNotDefault())<a name="line.35"></a>
 <span class="sourceLineNo">036</span>    {<a name="line.36"></a>
-<span class="sourceLineNo">037</span>      p_implData.setFilter("general");<a name="line.37"></a>
+<span class="sourceLineNo">037</span>      p_implData.setFormat("html");<a name="line.37"></a>
 <span class="sourceLineNo">038</span>    }<a name="line.38"></a>
-<span class="sourceLineNo">039</span>    if(! p_implData.getBcv__IsNotDefault())<a name="line.39"></a>
+<span class="sourceLineNo">039</span>    if(! p_implData.getFilter__IsNotDefault())<a name="line.39"></a>
 <span class="sourceLineNo">040</span>    {<a name="line.40"></a>
-<span class="sourceLineNo">041</span>      p_implData.setBcv("");<a name="line.41"></a>
+<span class="sourceLineNo">041</span>      p_implData.setFilter("general");<a name="line.41"></a>
 <span class="sourceLineNo">042</span>    }<a name="line.42"></a>
 <span class="sourceLineNo">043</span>    if(! p_implData.getBcn__IsNotDefault())<a name="line.43"></a>
 <span class="sourceLineNo">044</span>    {<a name="line.44"></a>
 <span class="sourceLineNo">045</span>      p_implData.setBcn("");<a name="line.45"></a>
 <span class="sourceLineNo">046</span>    }<a name="line.46"></a>
-<span class="sourceLineNo">047</span>    if(! p_implData.getFormat__IsNotDefault())<a name="line.47"></a>
+<span class="sourceLineNo">047</span>    if(! p_implData.getBcv__IsNotDefault())<a name="line.47"></a>
 <span class="sourceLineNo">048</span>    {<a name="line.48"></a>
-<span class="sourceLineNo">049</span>      p_implData.setFormat("html");<a name="line.49"></a>
+<span class="sourceLineNo">049</span>      p_implData.setBcv("");<a name="line.49"></a>
 <span class="sourceLineNo">050</span>    }<a name="line.50"></a>
 <span class="sourceLineNo">051</span>    return p_implData;<a name="line.51"></a>
 <span class="sourceLineNo">052</span>  }<a name="line.52"></a>
@@ -62,10 +62,10 @@
 <span class="sourceLineNo">054</span>  {<a name="line.54"></a>
 <span class="sourceLineNo">055</span>    super(p_templateManager, __jamon_setOptionalArguments(p_implData));<a name="line.55"></a>
 <span class="sourceLineNo">056</span>    regionServer = p_implData.getRegionServer();<a name="line.56"></a>
-<span class="sourceLineNo">057</span>    filter = p_implData.getFilter();<a name="line.57"></a>
-<span class="sourceLineNo">058</span>    bcv = p_implData.getBcv();<a name="line.58"></a>
+<span class="sourceLineNo">057</span>    format = p_implData.getFormat();<a name="line.57"></a>
+<span class="sourceLineNo">058</span>    filter = p_implData.getFilter();<a name="line.58"></a>
 <span class="sourceLineNo">059</span>    bcn = p_implData.getBcn();<a name="line.59"></a>
-<span class="sourceLineNo">060</span>    format = p_implData.getFormat();<a name="line.60"></a>
+<span class="sourceLineNo">060</span>    bcv = p_implData.getBcv();<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>  @Override public void renderNoFlush(final java.io.Writer jamonWriter)<a name="line.63"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/src-html/org/apache/hadoop/hbase/util/OrderedBytes.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/OrderedBytes.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/OrderedBytes.html
index 4e66df3..804d5fb 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/OrderedBytes.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/OrderedBytes.html
@@ -1511,242 +1511,261 @@
 <span class="sourceLineNo">1503</span>   * false otherwise.<a name="line.1503"></a>
 <span class="sourceLineNo">1504</span>   */<a name="line.1504"></a>
 <span class="sourceLineNo">1505</span>  public static boolean isEncodedValue(PositionedByteRange src) {<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>    return isNull(src) || isNumeric(src) || isFixedInt32(src) || isFixedInt64(src)<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>        || isFixedFloat32(src) || isFixedFloat64(src) || isText(src) || isBlobCopy(src)<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>        || isBlobVar(src);<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>  }<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span><a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>  /**<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>   * Return true when the next encoded value in {@code src} is null, false<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>   * otherwise.<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>   */<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>  public static boolean isNull(PositionedByteRange src) {<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>    return NULL ==<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>        (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>  }<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span><a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>  /**<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>   * Return true when the next encoded value in {@code src} uses Numeric<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>   * encoding, false otherwise. {@code NaN}, {@code +/-Inf} are valid Numeric<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>   * values.<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>   */<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>  public static boolean isNumeric(PositionedByteRange src) {<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>    byte x = (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>    return x &gt;= NEG_INF &amp;&amp; x &lt;= NAN;<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>  }<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span><a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>  /**<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>   * Return true when the next encoded value in {@code src} uses Numeric<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>   * encoding and is {@code Infinite}, false otherwise.<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>   */<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span>  public static boolean isNumericInfinite(PositionedByteRange src) {<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>    byte x = (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>    return NEG_INF == x || POS_INF == x;<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>  }<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span><a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>  /**<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>   * Return true when the next encoded value in {@code src} uses Numeric<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>   * encoding and is {@code NaN}, false otherwise.<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>   */<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>  public static boolean isNumericNaN(PositionedByteRange src) {<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>    return NAN == (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>  }<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span><a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>  /**<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>   * Return true when the next encoded value in {@code src} uses Numeric<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>   * encoding and is {@code 0}, false otherwise.<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>   */<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>  public static boolean isNumericZero(PositionedByteRange src) {<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>    return ZERO ==<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>        (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>  }<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span><a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>  /**<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>   * Return true when the next encoded value in {@code src} uses fixed-width<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>   * Int32 encoding, false otherwise.<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>   */<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>  public static boolean isFixedInt32(PositionedByteRange src) {<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>    return FIXED_INT32 ==<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>        (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>  }<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span><a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>  /**<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>   * Return true when the next encoded value in {@code src} uses fixed-width<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>   * Int64 encoding, false otherwise.<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>   */<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>  public static boolean isFixedInt64(PositionedByteRange src) {<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>    return FIXED_INT64 ==<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>        (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>  }<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span><a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>  /**<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>   * Return true when the next encoded value in {@code src} uses fixed-width<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>   * Float32 encoding, false otherwise.<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>   */<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>  public static boolean isFixedFloat32(PositionedByteRange src) {<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>    return FIXED_FLOAT32 ==<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>        (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>  }<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span><a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>  /**<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>   * Return true when the next encoded value in {@code src} uses fixed-width<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>   * Float64 encoding, false otherwise.<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>   */<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>  public static boolean isFixedFloat64(PositionedByteRange src) {<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>    return FIXED_FLOAT64 ==<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>        (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>  }<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span><a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>  /**<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>   * Return true when the next encoded value in {@code src} uses Text encoding,<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>   * false otherwise.<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>   */<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>  public static boolean isText(PositionedByteRange src) {<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>    return TEXT ==<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>        (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>  }<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span><a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>  /**<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>   * Return true when the next encoded value in {@code src} uses BlobVar<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>   * encoding, false otherwise.<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>   */<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>  public static boolean isBlobVar(PositionedByteRange src) {<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>    return BLOB_VAR ==<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>        (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>  }<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span><a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>  /**<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>   * Return true when the next encoded value in {@code src} uses BlobCopy<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>   * encoding, false otherwise.<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>   */<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>  public static boolean isBlobCopy(PositionedByteRange src) {<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>    return BLOB_COPY ==<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>        (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>  }<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span><a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>  /**<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>   * Skip {@code buff}'s position forward over one encoded value.<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>   * @return number of bytes skipped.<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>   */<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>  public static int skip(PositionedByteRange src) {<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>    final int start = src.getPosition();<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>    byte header = src.get();<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>    Order ord = (-1 == Integer.signum(header)) ? DESCENDING : ASCENDING;<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>    header = ord.apply(header);<a name="line.1627"></a>
+<span class="sourceLineNo">1506</span>    return isNull(src) || isNumeric(src) || isFixedInt8(src) || isFixedInt16(src)<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>        || isFixedInt32(src) || isFixedInt64(src)<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>        || isFixedFloat32(src) || isFixedFloat64(src) || isText(src) || isBlobCopy(src)<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>        || isBlobVar(src);<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>  }<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span><a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>  /**<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>   * Return true when the next encoded value in {@code src} is null, false<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>   * otherwise.<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>   */<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>  public static boolean isNull(PositionedByteRange src) {<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>    return NULL ==<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>        (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>  }<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span><a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>  /**<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>   * Return true when the next encoded value in {@code src} uses Numeric<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>   * encoding, false otherwise. {@code NaN}, {@code +/-Inf} are valid Numeric<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>   * values.<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>   */<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>  public static boolean isNumeric(PositionedByteRange src) {<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>    byte x = (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>    return x &gt;= NEG_INF &amp;&amp; x &lt;= NAN;<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>  }<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span><a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>  /**<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>   * Return true when the next encoded value in {@code src} uses Numeric<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>   * encoding and is {@code Infinite}, false otherwise.<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>   */<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>  public static boolean isNumericInfinite(PositionedByteRange src) {<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>    byte x = (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>    return NEG_INF == x || POS_INF == x;<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>  }<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span><a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>  /**<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>   * Return true when the next encoded value in {@code src} uses Numeric<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>   * encoding and is {@code NaN}, false otherwise.<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>   */<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>  public static boolean isNumericNaN(PositionedByteRange src) {<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>    return NAN == (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>  }<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span><a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>  /**<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>   * Return true when the next encoded value in {@code src} uses Numeric<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>   * encoding and is {@code 0}, false otherwise.<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>   */<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>  public static boolean isNumericZero(PositionedByteRange src) {<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>    return ZERO ==<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>        (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>  }<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span><a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>  /**<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>   * Return true when the next encoded value in {@code src} uses fixed-width<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>   * Int8 encoding, false otherwise.<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>   */<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>  public static boolean isFixedInt8(PositionedByteRange src) {<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>    return FIXED_INT8 ==<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>        (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>  }<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span><a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>  /**<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>   * Return true when the next encoded value in {@code src} uses fixed-width<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>   * Int16 encoding, false otherwise.<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>   */<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>  public static boolean isFixedInt16(PositionedByteRange src) {<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>    return FIXED_INT16 ==<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>        (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>  }<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span><a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>  /**<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>   * Return true when the next encoded value in {@code src} uses fixed-width<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>   * Int32 encoding, false otherwise.<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>   */<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>  public static boolean isFixedInt32(PositionedByteRange src) {<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>    return FIXED_INT32 ==<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>        (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>  }<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span><a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>  /**<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>   * Return true when the next encoded value in {@code src} uses fixed-width<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>   * Int64 encoding, false otherwise.<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>   */<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>  public static boolean isFixedInt64(PositionedByteRange src) {<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>    return FIXED_INT64 ==<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>        (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span>  }<a name="line.1591"></a>
+<span class="sourceLineNo">1592</span><a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>  /**<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>   * Return true when the next encoded value in {@code src} uses fixed-width<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>   * Float32 encoding, false otherwise.<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>   */<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>  public static boolean isFixedFloat32(PositionedByteRange src) {<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>    return FIXED_FLOAT32 ==<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>        (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>  }<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span><a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>  /**<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>   * Return true when the next encoded value in {@code src} uses fixed-width<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>   * Float64 encoding, false otherwise.<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>   */<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>  public static boolean isFixedFloat64(PositionedByteRange src) {<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>    return FIXED_FLOAT64 ==<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>        (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>  }<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span><a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>  /**<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>   * Return true when the next encoded value in {@code src} uses Text encoding,<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>   * false otherwise.<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>   */<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>  public static boolean isText(PositionedByteRange src) {<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>    return TEXT ==<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span>        (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span>  }<a name="line.1618"></a>
+<span class="sourceLineNo">1619</span><a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>  /**<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>   * Return true when the next encoded value in {@code src} uses BlobVar<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>   * encoding, false otherwise.<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span>   */<a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>  public static boolean isBlobVar(PositionedByteRange src) {<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>    return BLOB_VAR ==<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>        (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span>  }<a name="line.1627"></a>
 <span class="sourceLineNo">1628</span><a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>    switch (header) {<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>      case NULL:<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>      case NEG_INF:<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>        return 1;<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span>      case NEG_LARGE: /* Large negative number: 0x08, ~E, ~M */<a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>        skipVaruint64(src, DESCENDING != ord);<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>        skipSignificand(src, DESCENDING != ord);<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>        return src.getPosition() - start;<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>      case NEG_MED_MIN: /* Medium negative number: 0x13-E, ~M */<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>      case NEG_MED_MIN + 0x01:<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>      case NEG_MED_MIN + 0x02:<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>      case NEG_MED_MIN + 0x03:<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>      case NEG_MED_MIN + 0x04:<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>      case NEG_MED_MIN + 0x05:<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>      case NEG_MED_MIN + 0x06:<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>      case NEG_MED_MIN + 0x07:<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>      case NEG_MED_MIN + 0x08:<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>      case NEG_MED_MIN + 0x09:<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>      case NEG_MED_MAX:<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span>        skipSignificand(src, DESCENDING != ord);<a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>        return src.getPosition() - start;<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>      case NEG_SMALL: /* Small negative number: 0x14, -E, ~M */<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span>        skipVaruint64(src, DESCENDING == ord);<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>        skipSignificand(src, DESCENDING != ord);<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>        return src.getPosition() - start;<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span>      case ZERO:<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>        return 1;<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>      case POS_SMALL: /* Small positive number: 0x16, ~-E, M */<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>        skipVaruint64(src, DESCENDING != ord);<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span>        skipSignificand(src, DESCENDING == ord);<a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>        return src.getPosition() - start;<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>      case POS_MED_MIN: /* Medium positive number: 0x17+E, M */<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>      case POS_MED_MIN + 0x01:<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>      case POS_MED_MIN + 0x02:<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>      case POS_MED_MIN + 0x03:<a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>      case POS_MED_MIN + 0x04:<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>      case POS_MED_MIN + 0x05:<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>      case POS_MED_MIN + 0x06:<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>      case POS_MED_MIN + 0x07:<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>      case POS_MED_MIN + 0x08:<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>      case POS_MED_MIN + 0x09:<a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>      case POS_MED_MAX:<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>        skipSignificand(src, DESCENDING == ord);<a name="line.1671"></a>
+<span class="sourceLineNo">1629</span>  /**<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span>   * Return true when the next encoded value in {@code src} uses BlobCopy<a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>   * encoding, false otherwise.<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span>   */<a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>  public static boolean isBlobCopy(PositionedByteRange src) {<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>    return BLOB_COPY ==<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>        (-1 == Integer.signum(src.peek()) ? DESCENDING : ASCENDING).apply(src.peek());<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>  }<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span><a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>  /**<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span>   * Skip {@code buff}'s position forward over one encoded value.<a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>   * @return number of bytes skipped.<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>   */<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>  public static int skip(PositionedByteRange src) {<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>    final int start = src.getPosition();<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>    byte header = src.get();<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>    Order ord = (-1 == Integer.signum(header)) ? DESCENDING : ASCENDING;<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>    header = ord.apply(header);<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span><a name="line.1647"></a>
+<span class="sourceLineNo">1648</span>    switch (header) {<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>      case NULL:<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>      case NEG_INF:<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>        return 1;<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>      case NEG_LARGE: /* Large negative number: 0x08, ~E, ~M */<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span>        skipVaruint64(src, DESCENDING != ord);<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>        skipSignificand(src, DESCENDING != ord);<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span>        return src.getPosition() - start;<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>      case NEG_MED_MIN: /* Medium negative number: 0x13-E, ~M */<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span>      case NEG_MED_MIN + 0x01:<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>      case NEG_MED_MIN + 0x02:<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>      case NEG_MED_MIN + 0x03:<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>      case NEG_MED_MIN + 0x04:<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>      case NEG_MED_MIN + 0x05:<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>      case NEG_MED_MIN + 0x06:<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>      case NEG_MED_MIN + 0x07:<a name="line.1663"></a>
+<span class="sourceLineNo">1664</span>      case NEG_MED_MIN + 0x08:<a name="line.1664"></a>
+<span class="sourceLineNo">1665</span>      case NEG_MED_MIN + 0x09:<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>      case NEG_MED_MAX:<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>        skipSignificand(src, DESCENDING != ord);<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>        return src.getPosition() - start;<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>      case NEG_SMALL: /* Small negative number: 0x14, -E, ~M */<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>        skipVaruint64(src, DESCENDING == ord);<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>        skipSignificand(src, DESCENDING != ord);<a name="line.1671"></a>
 <span class="sourceLineNo">1672</span>        return src.getPosition() - start;<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>      case POS_LARGE: /* Large positive number: 0x22, E, M */<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>        skipVaruint64(src, DESCENDING == ord);<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>        skipSignificand(src, DESCENDING == ord);<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>        return src.getPosition() - start;<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>      case POS_INF:<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>        return 1;<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>      case NAN:<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>        return 1;<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span>      case FIXED_INT8:<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>        src.setPosition(src.getPosition() + 1);<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>        return src.getPosition() - start;<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>      case FIXED_INT16:<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>        src.setPosition(src.getPosition() + 2);<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>        return src.getPosition() - start;<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>      case FIXED_INT32:<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>        src.setPosition(src.getPosition() + 4);<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>        return src.getPosition() - start;<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>      case FIXED_INT64:<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>        src.setPosition(src.getPosition() + 8);<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>        return src.getPosition() - start;<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>      case FIXED_FLOAT32:<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>        src.setPosition(src.getPosition() + 4);<a name="line.1694"></a>
+<span class="sourceLineNo">1673</span>      case ZERO:<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>        return 1;<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span>      case POS_SMALL: /* Small positive number: 0x16, ~-E, M */<a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>        skipVaruint64(src, DESCENDING != ord);<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>        skipSignificand(src, DESCENDING == ord);<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>        return src.getPosition() - start;<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>      case POS_MED_MIN: /* Medium positive number: 0x17+E, M */<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>      case POS_MED_MIN + 0x01:<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>      case POS_MED_MIN + 0x02:<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>      case POS_MED_MIN + 0x03:<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span>      case POS_MED_MIN + 0x04:<a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>      case POS_MED_MIN + 0x05:<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>      case POS_MED_MIN + 0x06:<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span>      case POS_MED_MIN + 0x07:<a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>      case POS_MED_MIN + 0x08:<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>      case POS_MED_MIN + 0x09:<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>      case POS_MED_MAX:<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>        skipSignificand(src, DESCENDING == ord);<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>        return src.getPosition() - start;<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>      case POS_LARGE: /* Large positive number: 0x22, E, M */<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span>        skipVaruint64(src, DESCENDING == ord);<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>        skipSignificand(src, DESCENDING == ord);<a name="line.1694"></a>
 <span class="sourceLineNo">1695</span>        return src.getPosition() - start;<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>      case FIXED_FLOAT64:<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>        src.setPosition(src.getPosition() + 8);<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>        return src.getPosition() - start;<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>      case TEXT:<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>        // for null-terminated values, skip to the end.<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>        do {<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>          header = ord.apply(src.get());<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>        } while (header != TERM);<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>        return src.getPosition() - start;<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>      case BLOB_VAR:<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>        // read until we find a 0 in the MSB<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>        do {<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>          header = ord.apply(src.get());<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>        } while ((byte) (header &amp; 0x80) != TERM);<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>        return src.getPosition() - start;<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>      case BLOB_COPY:<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>        if (Order.DESCENDING == ord) {<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span>          // if descending, read to termination byte.<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>          do {<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>            header = ord.apply(src.get());<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>          } while (header != TERM);<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>          return src.getPosition() - start;<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span>        } else {<a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>          // otherwise, just skip to the end.<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>          src.setPosition(src.getLength());<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span>          return src.getPosition() - start;<a name="line.1721"></a>
-<span class="sourceLineNo">1722</span>        }<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span>      default:<a name="line.1723"></a>
-<span class="sourceLineNo">1724</span>        throw unexpectedHeader(header);<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>    }<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>  }<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span><a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>  /**<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>   * Return the number of encoded entries remaining in {@code buff}. The<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>   * state of {@code buff} is not modified through use of this method.<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>   */<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>  public static int length(PositionedByteRange buff) {<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>    PositionedByteRange b =<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>        new SimplePositionedMutableByteRange(buff.getBytes(), buff.getOffset(), buff.getLength());<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>    b.setPosition(buff.getPosition());<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>    int cnt = 0;<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>    for (; isEncodedValue(b); skip(buff), cnt++)<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>      ;<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>    return cnt;<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>  }<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>}<a name="line.1741"></a>
+<span class="sourceLineNo">1696</span>      case POS_INF:<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>        return 1;<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>      case NAN:<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span>        return 1;<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>      case FIXED_INT8:<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>        src.setPosition(src.getPosition() + 1);<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>        return src.getPosition() - start;<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>      case FIXED_INT16:<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>        src.setPosition(src.getPosition() + 2);<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>        return src.getPosition() - start;<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>      case FIXED_INT32:<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>        src.setPosition(src.getPosition() + 4);<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>        return src.getPosition() - start;<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>      case FIXED_INT64:<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span>        src.setPosition(src.getPosition() + 8);<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>        return src.getPosition() - start;<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>      case FIXED_FLOAT32:<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>        src.setPosition(src.getPosition() + 4);<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>        return src.getPosition() - start;<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>      case FIXED_FLOAT64:<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>        src.setPosition(src.getPosition() + 8);<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>        return src.getPosition() - start;<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>      case TEXT:<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span>        // for null-terminated values, skip to the end.<a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>        do {<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>          header = ord.apply(src.get());<a name="line.1721"></a>
+<span class="sourceLineNo">1722</span>        } while (header != TERM);<a name="line.1722"></a>
+<span class="sourceLineNo">1723</span>        return src.getPosition() - start;<a name="line.1723"></a>
+<span class="sourceLineNo">1724</span>      case BLOB_VAR:<a name="line.1724"></a>
+<span class="sourceLineNo">1725</span>        // read until we find a 0 in the MSB<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>        do {<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>          header = ord.apply(src.get());<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>        } while ((byte) (header &amp; 0x80) != TERM);<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>        return src.getPosition() - start;<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span>      case BLOB_COPY:<a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>        if (Order.DESCENDING == ord) {<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>          // if descending, read to termination byte.<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>          do {<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>            header = ord.apply(src.get());<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>          } while (header != TERM);<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>          return src.getPosition() - start;<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>        } else {<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span>          // otherwise, just skip to the end.<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>          src.setPosition(src.getLength());<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>          return src.getPosition() - start;<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>        }<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>      default:<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>        throw unexpectedHeader(header);<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>    }<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>  }<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span><a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>  /**<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>   * Return the number of encoded entries remaining in {@code buff}. The<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span>   * state of {@code buff} is not modified through use of this method.<a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>   */<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>  public static int length(PositionedByteRange buff) {<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>    PositionedByteRange b =<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>        new SimplePositionedMutableByteRange(buff.getBytes(), buff.getOffset(), buff.getLength());<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>    b.setPosition(buff.getPosition());<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>    int cnt = 0;<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>    for (; isEncodedValue(b); skip(b), cnt++)<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>      ;<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>    return cnt;<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>  }<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>}<a name="line.1760"></a>
 
 
 


[35/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/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 1d64963..a232cc8 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
@@ -6980,880 +6980,882 @@
 <span class="sourceLineNo">6972</span>      lock(this.updatesLock.readLock());<a name="line.6972"></a>
 <span class="sourceLineNo">6973</span>      try {<a name="line.6973"></a>
 <span class="sourceLineNo">6974</span>        Result cpResult = doCoprocessorPreCall(op, mutation);<a name="line.6974"></a>
-<span class="sourceLineNo">6975</span>        if (cpResult != null) return cpResult;<a name="line.6975"></a>
-<span class="sourceLineNo">6976</span>        Durability effectiveDurability = getEffectiveDurability(mutation.getDurability());<a name="line.6976"></a>
-<span class="sourceLineNo">6977</span>        Map&lt;Store, List&lt;Cell&gt;&gt; forMemStore =<a name="line.6977"></a>
-<span class="sourceLineNo">6978</span>            new HashMap&lt;Store, List&lt;Cell&gt;&gt;(mutation.getFamilyCellMap().size());<a name="line.6978"></a>
-<span class="sourceLineNo">6979</span>        // Reckon Cells to apply to WAL --  in returned walEdit -- and what to add to memstore and<a name="line.6979"></a>
-<span class="sourceLineNo">6980</span>        // what to return back to the client (in 'forMemStore' and 'results' respectively).<a name="line.6980"></a>
-<span class="sourceLineNo">6981</span>        WALEdit walEdit = reckonDeltas(op, mutation, effectiveDurability, forMemStore, results);<a name="line.6981"></a>
-<span class="sourceLineNo">6982</span>        // Actually write to WAL now if a walEdit to apply.<a name="line.6982"></a>
-<span class="sourceLineNo">6983</span>        if (walEdit != null &amp;&amp; !walEdit.isEmpty()) {<a name="line.6983"></a>
-<span class="sourceLineNo">6984</span>          writeEntry = doWALAppend(walEdit, durability, nonceGroup, nonce);<a name="line.6984"></a>
-<span class="sourceLineNo">6985</span>        } else {<a name="line.6985"></a>
-<span class="sourceLineNo">6986</span>          // If walEdits is empty, it means we skipped the WAL; update counters and start an mvcc<a name="line.6986"></a>
-<span class="sourceLineNo">6987</span>          // transaction.<a name="line.6987"></a>
-<span class="sourceLineNo">6988</span>          recordMutationWithoutWal(mutation.getFamilyCellMap());<a name="line.6988"></a>
-<span class="sourceLineNo">6989</span>          writeEntry = mvcc.begin();<a name="line.6989"></a>
-<span class="sourceLineNo">6990</span>        }<a name="line.6990"></a>
-<span class="sourceLineNo">6991</span>        // Now write to MemStore. Do it a column family at a time.<a name="line.6991"></a>
-<span class="sourceLineNo">6992</span>        long sequenceId = writeEntry.getWriteNumber();<a name="line.6992"></a>
-<span class="sourceLineNo">6993</span>        for (Map.Entry&lt;Store, List&lt;Cell&gt;&gt; e: forMemStore.entrySet()) {<a name="line.6993"></a>
-<span class="sourceLineNo">6994</span>          accumulatedResultSize +=<a name="line.6994"></a>
-<span class="sourceLineNo">6995</span>              applyToMemstore(e.getKey(), e.getValue(), true, false, sequenceId);<a name="line.6995"></a>
-<span class="sourceLineNo">6996</span>        }<a name="line.6996"></a>
-<span class="sourceLineNo">6997</span>        mvcc.completeAndWait(writeEntry);<a name="line.6997"></a>
-<span class="sourceLineNo">6998</span>        writeEntry = null;<a name="line.6998"></a>
-<span class="sourceLineNo">6999</span>      } finally {<a name="line.6999"></a>
-<span class="sourceLineNo">7000</span>        this.updatesLock.readLock().unlock();<a name="line.7000"></a>
-<span class="sourceLineNo">7001</span>      }<a name="line.7001"></a>
-<span class="sourceLineNo">7002</span>      // If results is null, then client asked that we not return the calculated results.<a name="line.7002"></a>
-<span class="sourceLineNo">7003</span>      return results !=  null? Result.create(results): null;<a name="line.7003"></a>
-<span class="sourceLineNo">7004</span>    } finally {<a name="line.7004"></a>
-<span class="sourceLineNo">7005</span>      // Call complete always, even on success. doDelta is doing a Get READ_UNCOMMITTED when it goes<a name="line.7005"></a>
-<span class="sourceLineNo">7006</span>      // to get current value under an exclusive lock so no need so no need to wait to return to<a name="line.7006"></a>
-<span class="sourceLineNo">7007</span>      // the client. Means only way to read-your-own-increment or append is to come in with an<a name="line.7007"></a>
-<span class="sourceLineNo">7008</span>      // a 0 increment.<a name="line.7008"></a>
-<span class="sourceLineNo">7009</span>      if (writeEntry != null) mvcc.complete(writeEntry);<a name="line.7009"></a>
-<span class="sourceLineNo">7010</span>      rowLock.release();<a name="line.7010"></a>
-<span class="sourceLineNo">7011</span>      // Request a cache flush if over the limit.  Do it outside update lock.<a name="line.7011"></a>
-<span class="sourceLineNo">7012</span>      if (isFlushSize(this.addAndGetGlobalMemstoreSize(accumulatedResultSize))) requestFlush();<a name="line.7012"></a>
-<span class="sourceLineNo">7013</span>      closeRegionOperation(op);<a name="line.7013"></a>
-<span class="sourceLineNo">7014</span>      if (this.metricsRegion != null) {<a name="line.7014"></a>
-<span class="sourceLineNo">7015</span>        switch (op) {<a name="line.7015"></a>
-<span class="sourceLineNo">7016</span>          case INCREMENT:<a name="line.7016"></a>
-<span class="sourceLineNo">7017</span>            this.metricsRegion.updateIncrement();<a name="line.7017"></a>
-<span class="sourceLineNo">7018</span>            break;<a name="line.7018"></a>
-<span class="sourceLineNo">7019</span>          case APPEND:<a name="line.7019"></a>
-<span class="sourceLineNo">7020</span>            this.metricsRegion.updateAppend();<a name="line.7020"></a>
-<span class="sourceLineNo">7021</span>            break;<a name="line.7021"></a>
-<span class="sourceLineNo">7022</span>          default:<a name="line.7022"></a>
+<span class="sourceLineNo">6975</span>        if (cpResult != null) {<a name="line.6975"></a>
+<span class="sourceLineNo">6976</span>          return returnResults? cpResult: null;<a name="line.6976"></a>
+<span class="sourceLineNo">6977</span>        }<a name="line.6977"></a>
+<span class="sourceLineNo">6978</span>        Durability effectiveDurability = getEffectiveDurability(mutation.getDurability());<a name="line.6978"></a>
+<span class="sourceLineNo">6979</span>        Map&lt;Store, List&lt;Cell&gt;&gt; forMemStore =<a name="line.6979"></a>
+<span class="sourceLineNo">6980</span>            new HashMap&lt;Store, List&lt;Cell&gt;&gt;(mutation.getFamilyCellMap().size());<a name="line.6980"></a>
+<span class="sourceLineNo">6981</span>        // Reckon Cells to apply to WAL --  in returned walEdit -- and what to add to memstore and<a name="line.6981"></a>
+<span class="sourceLineNo">6982</span>        // what to return back to the client (in 'forMemStore' and 'results' respectively).<a name="line.6982"></a>
+<span class="sourceLineNo">6983</span>        WALEdit walEdit = reckonDeltas(op, mutation, effectiveDurability, forMemStore, results);<a name="line.6983"></a>
+<span class="sourceLineNo">6984</span>        // Actually write to WAL now if a walEdit to apply.<a name="line.6984"></a>
+<span class="sourceLineNo">6985</span>        if (walEdit != null &amp;&amp; !walEdit.isEmpty()) {<a name="line.6985"></a>
+<span class="sourceLineNo">6986</span>          writeEntry = doWALAppend(walEdit, durability, nonceGroup, nonce);<a name="line.6986"></a>
+<span class="sourceLineNo">6987</span>        } else {<a name="line.6987"></a>
+<span class="sourceLineNo">6988</span>          // If walEdits is empty, it means we skipped the WAL; update counters and start an mvcc<a name="line.6988"></a>
+<span class="sourceLineNo">6989</span>          // transaction.<a name="line.6989"></a>
+<span class="sourceLineNo">6990</span>          recordMutationWithoutWal(mutation.getFamilyCellMap());<a name="line.6990"></a>
+<span class="sourceLineNo">6991</span>          writeEntry = mvcc.begin();<a name="line.6991"></a>
+<span class="sourceLineNo">6992</span>        }<a name="line.6992"></a>
+<span class="sourceLineNo">6993</span>        // Now write to MemStore. Do it a column family at a time.<a name="line.6993"></a>
+<span class="sourceLineNo">6994</span>        long sequenceId = writeEntry.getWriteNumber();<a name="line.6994"></a>
+<span class="sourceLineNo">6995</span>        for (Map.Entry&lt;Store, List&lt;Cell&gt;&gt; e: forMemStore.entrySet()) {<a name="line.6995"></a>
+<span class="sourceLineNo">6996</span>          accumulatedResultSize +=<a name="line.6996"></a>
+<span class="sourceLineNo">6997</span>              applyToMemstore(e.getKey(), e.getValue(), true, false, sequenceId);<a name="line.6997"></a>
+<span class="sourceLineNo">6998</span>        }<a name="line.6998"></a>
+<span class="sourceLineNo">6999</span>        mvcc.completeAndWait(writeEntry);<a name="line.6999"></a>
+<span class="sourceLineNo">7000</span>        writeEntry = null;<a name="line.7000"></a>
+<span class="sourceLineNo">7001</span>      } finally {<a name="line.7001"></a>
+<span class="sourceLineNo">7002</span>        this.updatesLock.readLock().unlock();<a name="line.7002"></a>
+<span class="sourceLineNo">7003</span>      }<a name="line.7003"></a>
+<span class="sourceLineNo">7004</span>      // If results is null, then client asked that we not return the calculated results.<a name="line.7004"></a>
+<span class="sourceLineNo">7005</span>      return results != null &amp;&amp; returnResults? Result.create(results): null;<a name="line.7005"></a>
+<span class="sourceLineNo">7006</span>    } finally {<a name="line.7006"></a>
+<span class="sourceLineNo">7007</span>      // Call complete always, even on success. doDelta is doing a Get READ_UNCOMMITTED when it goes<a name="line.7007"></a>
+<span class="sourceLineNo">7008</span>      // to get current value under an exclusive lock so no need so no need to wait to return to<a name="line.7008"></a>
+<span class="sourceLineNo">7009</span>      // the client. Means only way to read-your-own-increment or append is to come in with an<a name="line.7009"></a>
+<span class="sourceLineNo">7010</span>      // a 0 increment.<a name="line.7010"></a>
+<span class="sourceLineNo">7011</span>      if (writeEntry != null) mvcc.complete(writeEntry);<a name="line.7011"></a>
+<span class="sourceLineNo">7012</span>      rowLock.release();<a name="line.7012"></a>
+<span class="sourceLineNo">7013</span>      // Request a cache flush if over the limit.  Do it outside update lock.<a name="line.7013"></a>
+<span class="sourceLineNo">7014</span>      if (isFlushSize(this.addAndGetGlobalMemstoreSize(accumulatedResultSize))) requestFlush();<a name="line.7014"></a>
+<span class="sourceLineNo">7015</span>      closeRegionOperation(op);<a name="line.7015"></a>
+<span class="sourceLineNo">7016</span>      if (this.metricsRegion != null) {<a name="line.7016"></a>
+<span class="sourceLineNo">7017</span>        switch (op) {<a name="line.7017"></a>
+<span class="sourceLineNo">7018</span>          case INCREMENT:<a name="line.7018"></a>
+<span class="sourceLineNo">7019</span>            this.metricsRegion.updateIncrement();<a name="line.7019"></a>
+<span class="sourceLineNo">7020</span>            break;<a name="line.7020"></a>
+<span class="sourceLineNo">7021</span>          case APPEND:<a name="line.7021"></a>
+<span class="sourceLineNo">7022</span>            this.metricsRegion.updateAppend();<a name="line.7022"></a>
 <span class="sourceLineNo">7023</span>            break;<a name="line.7023"></a>
-<span class="sourceLineNo">7024</span>        }<a name="line.7024"></a>
-<span class="sourceLineNo">7025</span>      }<a name="line.7025"></a>
-<span class="sourceLineNo">7026</span>    }<a name="line.7026"></a>
-<span class="sourceLineNo">7027</span>  }<a name="line.7027"></a>
-<span class="sourceLineNo">7028</span><a name="line.7028"></a>
-<span class="sourceLineNo">7029</span>  private WriteEntry doWALAppend(WALEdit walEdit, Durability durability, long nonceGroup,<a name="line.7029"></a>
-<span class="sourceLineNo">7030</span>      long nonce)<a name="line.7030"></a>
-<span class="sourceLineNo">7031</span>  throws IOException {<a name="line.7031"></a>
-<span class="sourceLineNo">7032</span>    return doWALAppend(walEdit, durability, WALKey.EMPTY_UUIDS, System.currentTimeMillis(),<a name="line.7032"></a>
-<span class="sourceLineNo">7033</span>      nonceGroup, nonce);<a name="line.7033"></a>
-<span class="sourceLineNo">7034</span>  }<a name="line.7034"></a>
-<span class="sourceLineNo">7035</span><a name="line.7035"></a>
-<span class="sourceLineNo">7036</span>  /**<a name="line.7036"></a>
-<span class="sourceLineNo">7037</span>   * @return writeEntry associated with this append<a name="line.7037"></a>
-<span class="sourceLineNo">7038</span>   */<a name="line.7038"></a>
-<span class="sourceLineNo">7039</span>  private WriteEntry doWALAppend(WALEdit walEdit, Durability durability, List&lt;UUID&gt; clusterIds,<a name="line.7039"></a>
-<span class="sourceLineNo">7040</span>      long now, long nonceGroup, long nonce)<a name="line.7040"></a>
-<span class="sourceLineNo">7041</span>  throws IOException {<a name="line.7041"></a>
-<span class="sourceLineNo">7042</span>    WriteEntry writeEntry = null;<a name="line.7042"></a>
-<span class="sourceLineNo">7043</span>    // Using default cluster id, as this can only happen in the originating cluster.<a name="line.7043"></a>
-<span class="sourceLineNo">7044</span>    // A slave cluster receives the final value (not the delta) as a Put. We use HLogKey<a name="line.7044"></a>
-<span class="sourceLineNo">7045</span>    // here instead of WALKey directly to support legacy coprocessors.<a name="line.7045"></a>
-<span class="sourceLineNo">7046</span>    WALKey walKey = new WALKey(this.getRegionInfo().getEncodedNameAsBytes(),<a name="line.7046"></a>
-<span class="sourceLineNo">7047</span>      this.htableDescriptor.getTableName(), WALKey.NO_SEQUENCE_ID, now, clusterIds,<a name="line.7047"></a>
-<span class="sourceLineNo">7048</span>      nonceGroup, nonce, mvcc);<a name="line.7048"></a>
-<span class="sourceLineNo">7049</span>    try {<a name="line.7049"></a>
-<span class="sourceLineNo">7050</span>      long txid =<a name="line.7050"></a>
-<span class="sourceLineNo">7051</span>        this.wal.append(this.htableDescriptor, this.getRegionInfo(), walKey, walEdit, true);<a name="line.7051"></a>
-<span class="sourceLineNo">7052</span>      // Call sync on our edit.<a name="line.7052"></a>
-<span class="sourceLineNo">7053</span>      if (txid != 0) sync(txid, durability);<a name="line.7053"></a>
-<span class="sourceLineNo">7054</span>      writeEntry = walKey.getWriteEntry();<a name="line.7054"></a>
-<span class="sourceLineNo">7055</span>    } catch (IOException ioe) {<a name="line.7055"></a>
-<span class="sourceLineNo">7056</span>      if (walKey != null) mvcc.complete(walKey.getWriteEntry());<a name="line.7056"></a>
-<span class="sourceLineNo">7057</span>      throw ioe;<a name="line.7057"></a>
-<span class="sourceLineNo">7058</span>    }<a name="line.7058"></a>
-<span class="sourceLineNo">7059</span>    return writeEntry;<a name="line.7059"></a>
-<span class="sourceLineNo">7060</span>  }<a name="line.7060"></a>
-<span class="sourceLineNo">7061</span><a name="line.7061"></a>
-<span class="sourceLineNo">7062</span>  /**<a name="line.7062"></a>
-<span class="sourceLineNo">7063</span>   * Do coprocessor pre-increment or pre-append call.<a name="line.7063"></a>
-<span class="sourceLineNo">7064</span>   * @return Result returned out of the coprocessor, which means bypass all further processing and<a name="line.7064"></a>
-<span class="sourceLineNo">7065</span>   *  return the proffered Result instead, or null which means proceed.<a name="line.7065"></a>
-<span class="sourceLineNo">7066</span>   */<a name="line.7066"></a>
-<span class="sourceLineNo">7067</span>  private Result doCoprocessorPreCall(final Operation op, final Mutation mutation)<a name="line.7067"></a>
-<span class="sourceLineNo">7068</span>  throws IOException {<a name="line.7068"></a>
-<span class="sourceLineNo">7069</span>    Result result = null;<a name="line.7069"></a>
-<span class="sourceLineNo">7070</span>    if (this.coprocessorHost != null) {<a name="line.7070"></a>
-<span class="sourceLineNo">7071</span>      switch(op) {<a name="line.7071"></a>
-<span class="sourceLineNo">7072</span>        case INCREMENT:<a name="line.7072"></a>
-<span class="sourceLineNo">7073</span>          result = this.coprocessorHost.preIncrementAfterRowLock((Increment)mutation);<a name="line.7073"></a>
-<span class="sourceLineNo">7074</span>          break;<a name="line.7074"></a>
-<span class="sourceLineNo">7075</span>        case APPEND:<a name="line.7075"></a>
-<span class="sourceLineNo">7076</span>          result = this.coprocessorHost.preAppendAfterRowLock((Append)mutation);<a name="line.7076"></a>
-<span class="sourceLineNo">7077</span>          break;<a name="line.7077"></a>
-<span class="sourceLineNo">7078</span>        default: throw new UnsupportedOperationException(op.toString());<a name="line.7078"></a>
-<span class="sourceLineNo">7079</span>      }<a name="line.7079"></a>
-<span class="sourceLineNo">7080</span>    }<a name="line.7080"></a>
-<span class="sourceLineNo">7081</span>    return result;<a name="line.7081"></a>
-<span class="sourceLineNo">7082</span>  }<a name="line.7082"></a>
-<span class="sourceLineNo">7083</span><a name="line.7083"></a>
-<span class="sourceLineNo">7084</span>  /**<a name="line.7084"></a>
-<span class="sourceLineNo">7085</span>   * Reckon the Cells to apply to WAL, memstore, and to return to the Client; these Sets are not<a name="line.7085"></a>
-<span class="sourceLineNo">7086</span>   * always the same dependent on whether to write WAL or if the amount to increment is zero (in<a name="line.7086"></a>
-<span class="sourceLineNo">7087</span>   * this case we write back nothing, just return latest Cell value to the client).<a name="line.7087"></a>
-<span class="sourceLineNo">7088</span>   *<a name="line.7088"></a>
-<span class="sourceLineNo">7089</span>   * @param results Fill in here what goes back to the Client if it is non-null (if null, client<a name="line.7089"></a>
-<span class="sourceLineNo">7090</span>   *  doesn't want results).<a name="line.7090"></a>
-<span class="sourceLineNo">7091</span>   * @param forMemStore Fill in here what to apply to the MemStore (by Store).<a name="line.7091"></a>
-<span class="sourceLineNo">7092</span>   * @return A WALEdit to apply to WAL or null if we are to skip the WAL.<a name="line.7092"></a>
-<span class="sourceLineNo">7093</span>   */<a name="line.7093"></a>
-<span class="sourceLineNo">7094</span>  private WALEdit reckonDeltas(final Operation op, final Mutation mutation,<a name="line.7094"></a>
-<span class="sourceLineNo">7095</span>      final Durability effectiveDurability, final Map&lt;Store, List&lt;Cell&gt;&gt; forMemStore,<a name="line.7095"></a>
-<span class="sourceLineNo">7096</span>      final List&lt;Cell&gt; results)<a name="line.7096"></a>
-<span class="sourceLineNo">7097</span>  throws IOException {<a name="line.7097"></a>
-<span class="sourceLineNo">7098</span>    WALEdit walEdit = null;<a name="line.7098"></a>
-<span class="sourceLineNo">7099</span>    long now = EnvironmentEdgeManager.currentTime();<a name="line.7099"></a>
-<span class="sourceLineNo">7100</span>    final boolean writeToWAL = effectiveDurability != Durability.SKIP_WAL;<a name="line.7100"></a>
-<span class="sourceLineNo">7101</span>    // Process a Store/family at a time.<a name="line.7101"></a>
-<span class="sourceLineNo">7102</span>    for (Map.Entry&lt;byte [], List&lt;Cell&gt;&gt; entry: mutation.getFamilyCellMap().entrySet()) {<a name="line.7102"></a>
-<span class="sourceLineNo">7103</span>      final byte [] columnFamilyName = entry.getKey();<a name="line.7103"></a>
-<span class="sourceLineNo">7104</span>      List&lt;Cell&gt; deltas = entry.getValue();<a name="line.7104"></a>
-<span class="sourceLineNo">7105</span>      Store store = this.stores.get(columnFamilyName);<a name="line.7105"></a>
-<span class="sourceLineNo">7106</span>      // Reckon for the Store what to apply to WAL and MemStore.<a name="line.7106"></a>
-<span class="sourceLineNo">7107</span>      List&lt;Cell&gt; toApply =<a name="line.7107"></a>
-<span class="sourceLineNo">7108</span>        reckonDeltasByStore(store, op, mutation, effectiveDurability, now, deltas, results);<a name="line.7108"></a>
-<span class="sourceLineNo">7109</span>      if (!toApply.isEmpty()) {<a name="line.7109"></a>
-<span class="sourceLineNo">7110</span>        forMemStore.put(store, toApply);<a name="line.7110"></a>
-<span class="sourceLineNo">7111</span>        if (writeToWAL) {<a name="line.7111"></a>
-<span class="sourceLineNo">7112</span>          if (walEdit == null) {<a name="line.7112"></a>
-<span class="sourceLineNo">7113</span>            walEdit = new WALEdit();<a name="line.7113"></a>
-<span class="sourceLineNo">7114</span>          }<a name="line.7114"></a>
-<span class="sourceLineNo">7115</span>          walEdit.getCells().addAll(toApply);<a name="line.7115"></a>
-<span class="sourceLineNo">7116</span>        }<a name="line.7116"></a>
-<span class="sourceLineNo">7117</span>      }<a name="line.7117"></a>
-<span class="sourceLineNo">7118</span>    }<a name="line.7118"></a>
-<span class="sourceLineNo">7119</span>    return walEdit;<a name="line.7119"></a>
-<span class="sourceLineNo">7120</span>  }<a name="line.7120"></a>
-<span class="sourceLineNo">7121</span><a name="line.7121"></a>
-<span class="sourceLineNo">7122</span>  /**<a name="line.7122"></a>
-<span class="sourceLineNo">7123</span>   * Reckon the Cells to apply to WAL, memstore, and to return to the Client in passed<a name="line.7123"></a>
-<span class="sourceLineNo">7124</span>   * column family/Store.<a name="line.7124"></a>
-<span class="sourceLineNo">7125</span>   *<a name="line.7125"></a>
-<span class="sourceLineNo">7126</span>   * Does Get of current value and then adds passed in deltas for this Store returning the result.<a name="line.7126"></a>
+<span class="sourceLineNo">7024</span>          default:<a name="line.7024"></a>
+<span class="sourceLineNo">7025</span>            break;<a name="line.7025"></a>
+<span class="sourceLineNo">7026</span>        }<a name="line.7026"></a>
+<span class="sourceLineNo">7027</span>      }<a name="line.7027"></a>
+<span class="sourceLineNo">7028</span>    }<a name="line.7028"></a>
+<span class="sourceLineNo">7029</span>  }<a name="line.7029"></a>
+<span class="sourceLineNo">7030</span><a name="line.7030"></a>
+<span class="sourceLineNo">7031</span>  private WriteEntry doWALAppend(WALEdit walEdit, Durability durability, long nonceGroup,<a name="line.7031"></a>
+<span class="sourceLineNo">7032</span>      long nonce)<a name="line.7032"></a>
+<span class="sourceLineNo">7033</span>  throws IOException {<a name="line.7033"></a>
+<span class="sourceLineNo">7034</span>    return doWALAppend(walEdit, durability, WALKey.EMPTY_UUIDS, System.currentTimeMillis(),<a name="line.7034"></a>
+<span class="sourceLineNo">7035</span>      nonceGroup, nonce);<a name="line.7035"></a>
+<span class="sourceLineNo">7036</span>  }<a name="line.7036"></a>
+<span class="sourceLineNo">7037</span><a name="line.7037"></a>
+<span class="sourceLineNo">7038</span>  /**<a name="line.7038"></a>
+<span class="sourceLineNo">7039</span>   * @return writeEntry associated with this append<a name="line.7039"></a>
+<span class="sourceLineNo">7040</span>   */<a name="line.7040"></a>
+<span class="sourceLineNo">7041</span>  private WriteEntry doWALAppend(WALEdit walEdit, Durability durability, List&lt;UUID&gt; clusterIds,<a name="line.7041"></a>
+<span class="sourceLineNo">7042</span>      long now, long nonceGroup, long nonce)<a name="line.7042"></a>
+<span class="sourceLineNo">7043</span>  throws IOException {<a name="line.7043"></a>
+<span class="sourceLineNo">7044</span>    WriteEntry writeEntry = null;<a name="line.7044"></a>
+<span class="sourceLineNo">7045</span>    // Using default cluster id, as this can only happen in the originating cluster.<a name="line.7045"></a>
+<span class="sourceLineNo">7046</span>    // A slave cluster receives the final value (not the delta) as a Put. We use HLogKey<a name="line.7046"></a>
+<span class="sourceLineNo">7047</span>    // here instead of WALKey directly to support legacy coprocessors.<a name="line.7047"></a>
+<span class="sourceLineNo">7048</span>    WALKey walKey = new WALKey(this.getRegionInfo().getEncodedNameAsBytes(),<a name="line.7048"></a>
+<span class="sourceLineNo">7049</span>      this.htableDescriptor.getTableName(), WALKey.NO_SEQUENCE_ID, now, clusterIds,<a name="line.7049"></a>
+<span class="sourceLineNo">7050</span>      nonceGroup, nonce, mvcc);<a name="line.7050"></a>
+<span class="sourceLineNo">7051</span>    try {<a name="line.7051"></a>
+<span class="sourceLineNo">7052</span>      long txid =<a name="line.7052"></a>
+<span class="sourceLineNo">7053</span>        this.wal.append(this.htableDescriptor, this.getRegionInfo(), walKey, walEdit, true);<a name="line.7053"></a>
+<span class="sourceLineNo">7054</span>      // Call sync on our edit.<a name="line.7054"></a>
+<span class="sourceLineNo">7055</span>      if (txid != 0) sync(txid, durability);<a name="line.7055"></a>
+<span class="sourceLineNo">7056</span>      writeEntry = walKey.getWriteEntry();<a name="line.7056"></a>
+<span class="sourceLineNo">7057</span>    } catch (IOException ioe) {<a name="line.7057"></a>
+<span class="sourceLineNo">7058</span>      if (walKey != null) mvcc.complete(walKey.getWriteEntry());<a name="line.7058"></a>
+<span class="sourceLineNo">7059</span>      throw ioe;<a name="line.7059"></a>
+<span class="sourceLineNo">7060</span>    }<a name="line.7060"></a>
+<span class="sourceLineNo">7061</span>    return writeEntry;<a name="line.7061"></a>
+<span class="sourceLineNo">7062</span>  }<a name="line.7062"></a>
+<span class="sourceLineNo">7063</span><a name="line.7063"></a>
+<span class="sourceLineNo">7064</span>  /**<a name="line.7064"></a>
+<span class="sourceLineNo">7065</span>   * Do coprocessor pre-increment or pre-append call.<a name="line.7065"></a>
+<span class="sourceLineNo">7066</span>   * @return Result returned out of the coprocessor, which means bypass all further processing and<a name="line.7066"></a>
+<span class="sourceLineNo">7067</span>   *  return the proffered Result instead, or null which means proceed.<a name="line.7067"></a>
+<span class="sourceLineNo">7068</span>   */<a name="line.7068"></a>
+<span class="sourceLineNo">7069</span>  private Result doCoprocessorPreCall(final Operation op, final Mutation mutation)<a name="line.7069"></a>
+<span class="sourceLineNo">7070</span>  throws IOException {<a name="line.7070"></a>
+<span class="sourceLineNo">7071</span>    Result result = null;<a name="line.7071"></a>
+<span class="sourceLineNo">7072</span>    if (this.coprocessorHost != null) {<a name="line.7072"></a>
+<span class="sourceLineNo">7073</span>      switch(op) {<a name="line.7073"></a>
+<span class="sourceLineNo">7074</span>        case INCREMENT:<a name="line.7074"></a>
+<span class="sourceLineNo">7075</span>          result = this.coprocessorHost.preIncrementAfterRowLock((Increment)mutation);<a name="line.7075"></a>
+<span class="sourceLineNo">7076</span>          break;<a name="line.7076"></a>
+<span class="sourceLineNo">7077</span>        case APPEND:<a name="line.7077"></a>
+<span class="sourceLineNo">7078</span>          result = this.coprocessorHost.preAppendAfterRowLock((Append)mutation);<a name="line.7078"></a>
+<span class="sourceLineNo">7079</span>          break;<a name="line.7079"></a>
+<span class="sourceLineNo">7080</span>        default: throw new UnsupportedOperationException(op.toString());<a name="line.7080"></a>
+<span class="sourceLineNo">7081</span>      }<a name="line.7081"></a>
+<span class="sourceLineNo">7082</span>    }<a name="line.7082"></a>
+<span class="sourceLineNo">7083</span>    return result;<a name="line.7083"></a>
+<span class="sourceLineNo">7084</span>  }<a name="line.7084"></a>
+<span class="sourceLineNo">7085</span><a name="line.7085"></a>
+<span class="sourceLineNo">7086</span>  /**<a name="line.7086"></a>
+<span class="sourceLineNo">7087</span>   * Reckon the Cells to apply to WAL, memstore, and to return to the Client; these Sets are not<a name="line.7087"></a>
+<span class="sourceLineNo">7088</span>   * always the same dependent on whether to write WAL or if the amount to increment is zero (in<a name="line.7088"></a>
+<span class="sourceLineNo">7089</span>   * this case we write back nothing, just return latest Cell value to the client).<a name="line.7089"></a>
+<span class="sourceLineNo">7090</span>   *<a name="line.7090"></a>
+<span class="sourceLineNo">7091</span>   * @param results Fill in here what goes back to the Client if it is non-null (if null, client<a name="line.7091"></a>
+<span class="sourceLineNo">7092</span>   *  doesn't want results).<a name="line.7092"></a>
+<span class="sourceLineNo">7093</span>   * @param forMemStore Fill in here what to apply to the MemStore (by Store).<a name="line.7093"></a>
+<span class="sourceLineNo">7094</span>   * @return A WALEdit to apply to WAL or null if we are to skip the WAL.<a name="line.7094"></a>
+<span class="sourceLineNo">7095</span>   */<a name="line.7095"></a>
+<span class="sourceLineNo">7096</span>  private WALEdit reckonDeltas(final Operation op, final Mutation mutation,<a name="line.7096"></a>
+<span class="sourceLineNo">7097</span>      final Durability effectiveDurability, final Map&lt;Store, List&lt;Cell&gt;&gt; forMemStore,<a name="line.7097"></a>
+<span class="sourceLineNo">7098</span>      final List&lt;Cell&gt; results)<a name="line.7098"></a>
+<span class="sourceLineNo">7099</span>  throws IOException {<a name="line.7099"></a>
+<span class="sourceLineNo">7100</span>    WALEdit walEdit = null;<a name="line.7100"></a>
+<span class="sourceLineNo">7101</span>    long now = EnvironmentEdgeManager.currentTime();<a name="line.7101"></a>
+<span class="sourceLineNo">7102</span>    final boolean writeToWAL = effectiveDurability != Durability.SKIP_WAL;<a name="line.7102"></a>
+<span class="sourceLineNo">7103</span>    // Process a Store/family at a time.<a name="line.7103"></a>
+<span class="sourceLineNo">7104</span>    for (Map.Entry&lt;byte [], List&lt;Cell&gt;&gt; entry: mutation.getFamilyCellMap().entrySet()) {<a name="line.7104"></a>
+<span class="sourceLineNo">7105</span>      final byte [] columnFamilyName = entry.getKey();<a name="line.7105"></a>
+<span class="sourceLineNo">7106</span>      List&lt;Cell&gt; deltas = entry.getValue();<a name="line.7106"></a>
+<span class="sourceLineNo">7107</span>      Store store = this.stores.get(columnFamilyName);<a name="line.7107"></a>
+<span class="sourceLineNo">7108</span>      // Reckon for the Store what to apply to WAL and MemStore.<a name="line.7108"></a>
+<span class="sourceLineNo">7109</span>      List&lt;Cell&gt; toApply =<a name="line.7109"></a>
+<span class="sourceLineNo">7110</span>        reckonDeltasByStore(store, op, mutation, effectiveDurability, now, deltas, results);<a name="line.7110"></a>
+<span class="sourceLineNo">7111</span>      if (!toApply.isEmpty()) {<a name="line.7111"></a>
+<span class="sourceLineNo">7112</span>        forMemStore.put(store, toApply);<a name="line.7112"></a>
+<span class="sourceLineNo">7113</span>        if (writeToWAL) {<a name="line.7113"></a>
+<span class="sourceLineNo">7114</span>          if (walEdit == null) {<a name="line.7114"></a>
+<span class="sourceLineNo">7115</span>            walEdit = new WALEdit();<a name="line.7115"></a>
+<span class="sourceLineNo">7116</span>          }<a name="line.7116"></a>
+<span class="sourceLineNo">7117</span>          walEdit.getCells().addAll(toApply);<a name="line.7117"></a>
+<span class="sourceLineNo">7118</span>        }<a name="line.7118"></a>
+<span class="sourceLineNo">7119</span>      }<a name="line.7119"></a>
+<span class="sourceLineNo">7120</span>    }<a name="line.7120"></a>
+<span class="sourceLineNo">7121</span>    return walEdit;<a name="line.7121"></a>
+<span class="sourceLineNo">7122</span>  }<a name="line.7122"></a>
+<span class="sourceLineNo">7123</span><a name="line.7123"></a>
+<span class="sourceLineNo">7124</span>  /**<a name="line.7124"></a>
+<span class="sourceLineNo">7125</span>   * Reckon the Cells to apply to WAL, memstore, and to return to the Client in passed<a name="line.7125"></a>
+<span class="sourceLineNo">7126</span>   * column family/Store.<a name="line.7126"></a>
 <span class="sourceLineNo">7127</span>   *<a name="line.7127"></a>
-<span class="sourceLineNo">7128</span>   * @param op Whether Increment or Append<a name="line.7128"></a>
-<span class="sourceLineNo">7129</span>   * @param mutation The encompassing Mutation object<a name="line.7129"></a>
-<span class="sourceLineNo">7130</span>   * @param deltas Changes to apply to this Store; either increment amount or data to append<a name="line.7130"></a>
-<span class="sourceLineNo">7131</span>   * @param results In here we accumulate all the Cells we are to return to the client; this List<a name="line.7131"></a>
-<span class="sourceLineNo">7132</span>   *  can be larger than what we return in case where delta is zero; i.e. don't write<a name="line.7132"></a>
-<span class="sourceLineNo">7133</span>   *  out new values, just return current value. If null, client doesn't want results returned.<a name="line.7133"></a>
-<span class="sourceLineNo">7134</span>   * @return Resulting Cells after &lt;code&gt;deltas&lt;/code&gt; have been applied to current<a name="line.7134"></a>
-<span class="sourceLineNo">7135</span>   *  values. Side effect is our filling out of the &lt;code&gt;results&lt;/code&gt; List.<a name="line.7135"></a>
-<span class="sourceLineNo">7136</span>   */<a name="line.7136"></a>
-<span class="sourceLineNo">7137</span>  private List&lt;Cell&gt; reckonDeltasByStore(final Store store, final Operation op,<a name="line.7137"></a>
-<span class="sourceLineNo">7138</span>      final Mutation mutation, final Durability effectiveDurability, final long now,<a name="line.7138"></a>
-<span class="sourceLineNo">7139</span>      final List&lt;Cell&gt; deltas, final List&lt;Cell&gt; results)<a name="line.7139"></a>
-<span class="sourceLineNo">7140</span>  throws IOException {<a name="line.7140"></a>
-<span class="sourceLineNo">7141</span>    byte [] columnFamily = store.getFamily().getName();<a name="line.7141"></a>
-<span class="sourceLineNo">7142</span>    List&lt;Cell&gt; toApply = new ArrayList&lt;Cell&gt;(deltas.size());<a name="line.7142"></a>
-<span class="sourceLineNo">7143</span>    // Get previous values for all columns in this family.<a name="line.7143"></a>
-<span class="sourceLineNo">7144</span>    List&lt;Cell&gt; currentValues = get(mutation, store, deltas,<a name="line.7144"></a>
-<span class="sourceLineNo">7145</span>        null/*Default IsolationLevel*/,<a name="line.7145"></a>
-<span class="sourceLineNo">7146</span>        op == Operation.INCREMENT? ((Increment)mutation).getTimeRange(): null);<a name="line.7146"></a>
-<span class="sourceLineNo">7147</span>    // Iterate the input columns and update existing values if they were found, otherwise<a name="line.7147"></a>
-<span class="sourceLineNo">7148</span>    // add new column initialized to the delta amount<a name="line.7148"></a>
-<span class="sourceLineNo">7149</span>    int currentValuesIndex = 0;<a name="line.7149"></a>
-<span class="sourceLineNo">7150</span>    for (int i = 0; i &lt; deltas.size(); i++) {<a name="line.7150"></a>
-<span class="sourceLineNo">7151</span>      Cell delta = deltas.get(i);<a name="line.7151"></a>
-<span class="sourceLineNo">7152</span>      Cell currentValue = null;<a name="line.7152"></a>
-<span class="sourceLineNo">7153</span>      if (currentValuesIndex &lt; currentValues.size() &amp;&amp;<a name="line.7153"></a>
-<span class="sourceLineNo">7154</span>          CellUtil.matchingQualifier(currentValues.get(currentValuesIndex), delta)) {<a name="line.7154"></a>
-<span class="sourceLineNo">7155</span>        currentValue = currentValues.get(currentValuesIndex);<a name="line.7155"></a>
-<span class="sourceLineNo">7156</span>        if (i &lt; (deltas.size() - 1) &amp;&amp; !CellUtil.matchingQualifier(delta, deltas.get(i + 1))) {<a name="line.7156"></a>
-<span class="sourceLineNo">7157</span>          currentValuesIndex++;<a name="line.7157"></a>
-<span class="sourceLineNo">7158</span>        }<a name="line.7158"></a>
-<span class="sourceLineNo">7159</span>      }<a name="line.7159"></a>
-<span class="sourceLineNo">7160</span>      // Switch on whether this an increment or an append building the new Cell to apply.<a name="line.7160"></a>
-<span class="sourceLineNo">7161</span>      Cell newCell = null;<a name="line.7161"></a>
-<span class="sourceLineNo">7162</span>      MutationType mutationType = null;<a name="line.7162"></a>
-<span class="sourceLineNo">7163</span>      boolean apply = true;<a name="line.7163"></a>
-<span class="sourceLineNo">7164</span>      switch (op) {<a name="line.7164"></a>
-<span class="sourceLineNo">7165</span>        case INCREMENT:<a name="line.7165"></a>
-<span class="sourceLineNo">7166</span>          mutationType = MutationType.INCREMENT;<a name="line.7166"></a>
-<span class="sourceLineNo">7167</span>          // If delta amount to apply is 0, don't write WAL or MemStore.<a name="line.7167"></a>
-<span class="sourceLineNo">7168</span>          long deltaAmount = getLongValue(delta);<a name="line.7168"></a>
-<span class="sourceLineNo">7169</span>          apply = deltaAmount != 0;<a name="line.7169"></a>
-<span class="sourceLineNo">7170</span>          newCell = reckonIncrement(delta, deltaAmount, currentValue, columnFamily, now,<a name="line.7170"></a>
-<span class="sourceLineNo">7171</span>            (Increment)mutation);<a name="line.7171"></a>
-<span class="sourceLineNo">7172</span>          break;<a name="line.7172"></a>
-<span class="sourceLineNo">7173</span>        case APPEND:<a name="line.7173"></a>
-<span class="sourceLineNo">7174</span>          mutationType = MutationType.APPEND;<a name="line.7174"></a>
-<span class="sourceLineNo">7175</span>          // Always apply Append. TODO: Does empty delta value mean reset Cell? It seems to.<a name="line.7175"></a>
-<span class="sourceLineNo">7176</span>          newCell = reckonAppend(delta, currentValue, now, (Append)mutation);<a name="line.7176"></a>
-<span class="sourceLineNo">7177</span>          break;<a name="line.7177"></a>
-<span class="sourceLineNo">7178</span>        default: throw new UnsupportedOperationException(op.toString());<a name="line.7178"></a>
-<span class="sourceLineNo">7179</span>      }<a name="line.7179"></a>
-<span class="sourceLineNo">7180</span><a name="line.7180"></a>
-<span class="sourceLineNo">7181</span>      // Give coprocessors a chance to update the new cell<a name="line.7181"></a>
-<span class="sourceLineNo">7182</span>      if (coprocessorHost != null) {<a name="line.7182"></a>
-<span class="sourceLineNo">7183</span>        newCell =<a name="line.7183"></a>
-<span class="sourceLineNo">7184</span>            coprocessorHost.postMutationBeforeWAL(mutationType, mutation, currentValue, newCell);<a name="line.7184"></a>
-<span class="sourceLineNo">7185</span>      }<a name="line.7185"></a>
-<span class="sourceLineNo">7186</span>      // If apply, we need to update memstore/WAL with new value; add it toApply.<a name="line.7186"></a>
-<span class="sourceLineNo">7187</span>      if (apply) {<a name="line.7187"></a>
-<span class="sourceLineNo">7188</span>        toApply.add(newCell);<a name="line.7188"></a>
-<span class="sourceLineNo">7189</span>      }<a name="line.7189"></a>
-<span class="sourceLineNo">7190</span>      // Add to results to get returned to the Client. If null, cilent does not want results.<a name="line.7190"></a>
-<span class="sourceLineNo">7191</span>      if (results != null) {<a name="line.7191"></a>
-<span class="sourceLineNo">7192</span>        results.add(newCell);<a name="line.7192"></a>
-<span class="sourceLineNo">7193</span>      }<a name="line.7193"></a>
-<span class="sourceLineNo">7194</span>    }<a name="line.7194"></a>
-<span class="sourceLineNo">7195</span>    return toApply;<a name="line.7195"></a>
-<span class="sourceLineNo">7196</span>  }<a name="line.7196"></a>
-<span class="sourceLineNo">7197</span><a name="line.7197"></a>
-<span class="sourceLineNo">7198</span>  /**<a name="line.7198"></a>
-<span class="sourceLineNo">7199</span>   * Calculate new Increment Cell.<a name="line.7199"></a>
-<span class="sourceLineNo">7200</span>   * @return New Increment Cell with delta applied to currentValue if currentValue is not null;<a name="line.7200"></a>
-<span class="sourceLineNo">7201</span>   *  otherwise, a new Cell with the delta set as its value.<a name="line.7201"></a>
-<span class="sourceLineNo">7202</span>   */<a name="line.7202"></a>
-<span class="sourceLineNo">7203</span>  private Cell reckonIncrement(final Cell delta, final long deltaAmount, final Cell currentValue,<a name="line.7203"></a>
-<span class="sourceLineNo">7204</span>      byte [] columnFamily, final long now, Mutation mutation)<a name="line.7204"></a>
-<span class="sourceLineNo">7205</span>  throws IOException {<a name="line.7205"></a>
-<span class="sourceLineNo">7206</span>    // Forward any tags found on the delta.<a name="line.7206"></a>
-<span class="sourceLineNo">7207</span>    List&lt;Tag&gt; tags = TagUtil.carryForwardTags(delta);<a name="line.7207"></a>
-<span class="sourceLineNo">7208</span>    long newValue = deltaAmount;<a name="line.7208"></a>
-<span class="sourceLineNo">7209</span>    long ts = now;<a name="line.7209"></a>
-<span class="sourceLineNo">7210</span>    if (currentValue != null) {<a name="line.7210"></a>
-<span class="sourceLineNo">7211</span>      tags = TagUtil.carryForwardTags(tags, currentValue);<a name="line.7211"></a>
-<span class="sourceLineNo">7212</span>      ts = Math.max(now, currentValue.getTimestamp());<a name="line.7212"></a>
-<span class="sourceLineNo">7213</span>      newValue += getLongValue(currentValue);<a name="line.7213"></a>
-<span class="sourceLineNo">7214</span>    }<a name="line.7214"></a>
-<span class="sourceLineNo">7215</span>    // Now make up the new Cell. TODO: FIX. This is carnel knowledge of how KeyValues are made...<a name="line.7215"></a>
-<span class="sourceLineNo">7216</span>    // doesn't work well with offheaping or if we are doing a different Cell type.<a name="line.7216"></a>
-<span class="sourceLineNo">7217</span>    byte [] incrementAmountInBytes = Bytes.toBytes(newValue);<a name="line.7217"></a>
-<span class="sourceLineNo">7218</span>    tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7218"></a>
-<span class="sourceLineNo">7219</span>    byte [] row = mutation.getRow();<a name="line.7219"></a>
-<span class="sourceLineNo">7220</span>    return new KeyValue(row, 0, row.length,<a name="line.7220"></a>
-<span class="sourceLineNo">7221</span>      columnFamily, 0, columnFamily.length,<a name="line.7221"></a>
-<span class="sourceLineNo">7222</span>      delta.getQualifierArray(), delta.getQualifierOffset(), delta.getQualifierLength(),<a name="line.7222"></a>
-<span class="sourceLineNo">7223</span>      ts, KeyValue.Type.Put,<a name="line.7223"></a>
-<span class="sourceLineNo">7224</span>      incrementAmountInBytes, 0, incrementAmountInBytes.length,<a name="line.7224"></a>
-<span class="sourceLineNo">7225</span>      tags);<a name="line.7225"></a>
-<span class="sourceLineNo">7226</span>  }<a name="line.7226"></a>
-<span class="sourceLineNo">7227</span><a name="line.7227"></a>
-<span class="sourceLineNo">7228</span>  private Cell reckonAppend(final Cell delta, final Cell currentValue, final long now,<a name="line.7228"></a>
-<span class="sourceLineNo">7229</span>      Append mutation)<a name="line.7229"></a>
-<span class="sourceLineNo">7230</span>  throws IOException {<a name="line.7230"></a>
-<span class="sourceLineNo">7231</span>    // Forward any tags found on the delta.<a name="line.7231"></a>
-<span class="sourceLineNo">7232</span>    List&lt;Tag&gt; tags = TagUtil.carryForwardTags(delta);<a name="line.7232"></a>
-<span class="sourceLineNo">7233</span>    long ts = now;<a name="line.7233"></a>
-<span class="sourceLineNo">7234</span>    Cell newCell = null;<a name="line.7234"></a>
-<span class="sourceLineNo">7235</span>    byte [] row = mutation.getRow();<a name="line.7235"></a>
-<span class="sourceLineNo">7236</span>    if (currentValue != null) {<a name="line.7236"></a>
-<span class="sourceLineNo">7237</span>      tags = TagUtil.carryForwardTags(tags, currentValue);<a name="line.7237"></a>
-<span class="sourceLineNo">7238</span>      ts = Math.max(now, currentValue.getTimestamp());<a name="line.7238"></a>
-<span class="sourceLineNo">7239</span>      tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7239"></a>
-<span class="sourceLineNo">7240</span>      byte[] tagBytes = TagUtil.fromList(tags);<a name="line.7240"></a>
-<span class="sourceLineNo">7241</span>      // Allocate an empty cell and copy in all parts.<a name="line.7241"></a>
-<span class="sourceLineNo">7242</span>      // TODO: This is intimate knowledge of how a KeyValue is made. Undo!!! Prevents our doing<a name="line.7242"></a>
-<span class="sourceLineNo">7243</span>      // other Cell types. Copying on-heap too if an off-heap Cell.<a name="line.7243"></a>
-<span class="sourceLineNo">7244</span>      newCell = new KeyValue(row.length, delta.getFamilyLength(),<a name="line.7244"></a>
-<span class="sourceLineNo">7245</span>        delta.getQualifierLength(), ts, KeyValue.Type.Put,<a name="line.7245"></a>
-<span class="sourceLineNo">7246</span>        delta.getValueLength() + currentValue.getValueLength(),<a name="line.7246"></a>
-<span class="sourceLineNo">7247</span>        tagBytes == null? 0: tagBytes.length);<a name="line.7247"></a>
-<span class="sourceLineNo">7248</span>      // Copy in row, family, and qualifier<a name="line.7248"></a>
-<span class="sourceLineNo">7249</span>      System.arraycopy(row, 0, newCell.getRowArray(), newCell.getRowOffset(), row.length);<a name="line.7249"></a>
-<span class="sourceLineNo">7250</span>      System.arraycopy(delta.getFamilyArray(), delta.getFamilyOffset(),<a name="line.7250"></a>
-<span class="sourceLineNo">7251</span>          newCell.getFamilyArray(), newCell.getFamilyOffset(), delta.getFamilyLength());<a name="line.7251"></a>
-<span class="sourceLineNo">7252</span>      System.arraycopy(delta.getQualifierArray(), delta.getQualifierOffset(),<a name="line.7252"></a>
-<span class="sourceLineNo">7253</span>          newCell.getQualifierArray(), newCell.getQualifierOffset(), delta.getQualifierLength());<a name="line.7253"></a>
-<span class="sourceLineNo">7254</span>      // Copy in the value<a name="line.7254"></a>
-<span class="sourceLineNo">7255</span>      CellUtil.copyValueTo(currentValue, newCell.getValueArray(), newCell.getValueOffset());<a name="line.7255"></a>
-<span class="sourceLineNo">7256</span>      System.arraycopy(delta.getValueArray(), delta.getValueOffset(),<a name="line.7256"></a>
-<span class="sourceLineNo">7257</span>          newCell.getValueArray(), newCell.getValueOffset() + currentValue.getValueLength(),<a name="line.7257"></a>
-<span class="sourceLineNo">7258</span>          delta.getValueLength());<a name="line.7258"></a>
-<span class="sourceLineNo">7259</span>      // Copy in tag data<a name="line.7259"></a>
-<span class="sourceLineNo">7260</span>      if (tagBytes != null) {<a name="line.7260"></a>
-<span class="sourceLineNo">7261</span>        System.arraycopy(tagBytes, 0,<a name="line.7261"></a>
-<span class="sourceLineNo">7262</span>            newCell.getTagsArray(), newCell.getTagsOffset(), tagBytes.length);<a name="line.7262"></a>
-<span class="sourceLineNo">7263</span>      }<a name="line.7263"></a>
-<span class="sourceLineNo">7264</span>    } else {<a name="line.7264"></a>
-<span class="sourceLineNo">7265</span>      // Append's KeyValue.Type==Put and ts==HConstants.LATEST_TIMESTAMP<a name="line.7265"></a>
-<span class="sourceLineNo">7266</span>      CellUtil.updateLatestStamp(delta, now);<a name="line.7266"></a>
-<span class="sourceLineNo">7267</span>      newCell = delta;<a name="line.7267"></a>
-<span class="sourceLineNo">7268</span>      tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7268"></a>
-<span class="sourceLineNo">7269</span>      if (tags != null) {<a name="line.7269"></a>
-<span class="sourceLineNo">7270</span>        newCell = new TagRewriteCell(delta, TagUtil.fromList(tags));<a name="line.7270"></a>
-<span class="sourceLineNo">7271</span>      }<a name="line.7271"></a>
-<span class="sourceLineNo">7272</span>    }<a name="line.7272"></a>
-<span class="sourceLineNo">7273</span>    return newCell;<a name="line.7273"></a>
-<span class="sourceLineNo">7274</span>  }<a name="line.7274"></a>
-<span class="sourceLineNo">7275</span><a name="line.7275"></a>
-<span class="sourceLineNo">7276</span>  /**<a name="line.7276"></a>
-<span class="sourceLineNo">7277</span>   * @return Get the long out of the passed in Cell<a name="line.7277"></a>
-<span class="sourceLineNo">7278</span>   */<a name="line.7278"></a>
-<span class="sourceLineNo">7279</span>  private static long getLongValue(final Cell cell) throws DoNotRetryIOException {<a name="line.7279"></a>
-<span class="sourceLineNo">7280</span>    int len = cell.getValueLength();<a name="line.7280"></a>
-<span class="sourceLineNo">7281</span>    if (len != Bytes.SIZEOF_LONG) {<a name="line.7281"></a>
-<span class="sourceLineNo">7282</span>      // throw DoNotRetryIOException instead of IllegalArgumentException<a name="line.7282"></a>
-<span class="sourceLineNo">7283</span>      throw new DoNotRetryIOException("Field is not a long, it's " + len + " bytes wide");<a name="line.7283"></a>
-<span class="sourceLineNo">7284</span>    }<a name="line.7284"></a>
-<span class="sourceLineNo">7285</span>    return Bytes.toLong(cell.getValueArray(), cell.getValueOffset(), len);<a name="line.7285"></a>
-<span class="sourceLineNo">7286</span>  }<a name="line.7286"></a>
-<span class="sourceLineNo">7287</span><a name="line.7287"></a>
-<span class="sourceLineNo">7288</span>  /**<a name="line.7288"></a>
-<span class="sourceLineNo">7289</span>   * Do a specific Get on passed &lt;code&gt;columnFamily&lt;/code&gt; and column qualifiers.<a name="line.7289"></a>
-<span class="sourceLineNo">7290</span>   * @param mutation Mutation we are doing this Get for.<a name="line.7290"></a>
-<span class="sourceLineNo">7291</span>   * @param columnFamily Which column family on row (TODO: Go all Gets in one go)<a name="line.7291"></a>
-<span class="sourceLineNo">7292</span>   * @param coordinates Cells from &lt;code&gt;mutation&lt;/code&gt; used as coordinates applied to Get.<a name="line.7292"></a>
-<span class="sourceLineNo">7293</span>   * @return Return list of Cells found.<a name="line.7293"></a>
-<span class="sourceLineNo">7294</span>   */<a name="line.7294"></a>
-<span class="sourceLineNo">7295</span>  private List&lt;Cell&gt; get(final Mutation mutation, final Store store,<a name="line.7295"></a>
-<span class="sourceLineNo">7296</span>          final List&lt;Cell&gt; coordinates, final IsolationLevel isolation, final TimeRange tr)<a name="line.7296"></a>
-<span class="sourceLineNo">7297</span>  throws IOException {<a name="line.7297"></a>
-<span class="sourceLineNo">7298</span>    // Sort the cells so that they match the order that they appear in the Get results. Otherwise,<a name="line.7298"></a>
-<span class="sourceLineNo">7299</span>    // we won't be able to find the existing values if the cells are not specified in order by the<a name="line.7299"></a>
-<span class="sourceLineNo">7300</span>    // client since cells are in an array list.<a name="line.7300"></a>
-<span class="sourceLineNo">7301</span>    // TODO: I don't get why we are sorting. St.Ack 20150107<a name="line.7301"></a>
-<span class="sourceLineNo">7302</span>    sort(coordinates, store.getComparator());<a name="line.7302"></a>
-<span class="sourceLineNo">7303</span>    Get get = new Get(mutation.getRow());<a name="line.7303"></a>
-<span class="sourceLineNo">7304</span>    if (isolation != null) {<a name="line.7304"></a>
-<span class="sourceLineNo">7305</span>      get.setIsolationLevel(isolation);<a name="line.7305"></a>
-<span class="sourceLineNo">7306</span>    }<a name="line.7306"></a>
-<span class="sourceLineNo">7307</span>    for (Cell cell: coordinates) {<a name="line.7307"></a>
-<span class="sourceLineNo">7308</span>      get.addColumn(store.getFamily().getName(), CellUtil.cloneQualifier(cell));<a name="line.7308"></a>
-<span class="sourceLineNo">7309</span>    }<a name="line.7309"></a>
-<span class="sourceLineNo">7310</span>    // Increments carry time range. If an Increment instance, put it on the Get.<a name="line.7310"></a>
-<span class="sourceLineNo">7311</span>    if (tr != null) {<a name="line.7311"></a>
-<span class="sourceLineNo">7312</span>      get.setTimeRange(tr.getMin(), tr.getMax());<a name="line.7312"></a>
-<span class="sourceLineNo">7313</span>    }<a name="line.7313"></a>
-<span class="sourceLineNo">7314</span>    return get(get, false);<a name="line.7314"></a>
-<span class="sourceLineNo">7315</span>  }<a name="line.7315"></a>
-<span class="sourceLineNo">7316</span><a name="line.7316"></a>
-<span class="sourceLineNo">7317</span>  /**<a name="line.7317"></a>
-<span class="sourceLineNo">7318</span>   * @return Sorted list of &lt;code&gt;cells&lt;/code&gt; using &lt;code&gt;comparator&lt;/code&gt;<a name="line.7318"></a>
-<span class="sourceLineNo">7319</span>   */<a name="line.7319"></a>
-<span class="sourceLineNo">7320</span>  private static List&lt;Cell&gt; sort(List&lt;Cell&gt; cells, final Comparator&lt;Cell&gt; comparator) {<a name="line.7320"></a>
-<span class="sourceLineNo">7321</span>    Collections.sort(cells, comparator);<a name="line.7321"></a>
-<span class="sourceLineNo">7322</span>    return cells;<a name="line.7322"></a>
-<span class="sourceLineNo">7323</span>  }<a name="line.7323"></a>
-<span class="sourceLineNo">7324</span><a name="line.7324"></a>
-<span class="sourceLineNo">7325</span>  //<a name="line.7325"></a>
-<span class="sourceLineNo">7326</span>  // New HBASE-880 Helpers<a name="line.7326"></a>
+<span class="sourceLineNo">7128</span>   * Does Get of current value and then adds passed in deltas for this Store returning the result.<a name="line.7128"></a>
+<span class="sourceLineNo">7129</span>   *<a name="line.7129"></a>
+<span class="sourceLineNo">7130</span>   * @param op Whether Increment or Append<a name="line.7130"></a>
+<span class="sourceLineNo">7131</span>   * @param mutation The encompassing Mutation object<a name="line.7131"></a>
+<span class="sourceLineNo">7132</span>   * @param deltas Changes to apply to this Store; either increment amount or data to append<a name="line.7132"></a>
+<span class="sourceLineNo">7133</span>   * @param results In here we accumulate all the Cells we are to return to the client; this List<a name="line.7133"></a>
+<span class="sourceLineNo">7134</span>   *  can be larger than what we return in case where delta is zero; i.e. don't write<a name="line.7134"></a>
+<span class="sourceLineNo">7135</span>   *  out new values, just return current value. If null, client doesn't want results returned.<a name="line.7135"></a>
+<span class="sourceLineNo">7136</span>   * @return Resulting Cells after &lt;code&gt;deltas&lt;/code&gt; have been applied to current<a name="line.7136"></a>
+<span class="sourceLineNo">7137</span>   *  values. Side effect is our filling out of the &lt;code&gt;results&lt;/code&gt; List.<a name="line.7137"></a>
+<span class="sourceLineNo">7138</span>   */<a name="line.7138"></a>
+<span class="sourceLineNo">7139</span>  private List&lt;Cell&gt; reckonDeltasByStore(final Store store, final Operation op,<a name="line.7139"></a>
+<span class="sourceLineNo">7140</span>      final Mutation mutation, final Durability effectiveDurability, final long now,<a name="line.7140"></a>
+<span class="sourceLineNo">7141</span>      final List&lt;Cell&gt; deltas, final List&lt;Cell&gt; results)<a name="line.7141"></a>
+<span class="sourceLineNo">7142</span>  throws IOException {<a name="line.7142"></a>
+<span class="sourceLineNo">7143</span>    byte [] columnFamily = store.getFamily().getName();<a name="line.7143"></a>
+<span class="sourceLineNo">7144</span>    List&lt;Cell&gt; toApply = new ArrayList&lt;Cell&gt;(deltas.size());<a name="line.7144"></a>
+<span class="sourceLineNo">7145</span>    // Get previous values for all columns in this family.<a name="line.7145"></a>
+<span class="sourceLineNo">7146</span>    List&lt;Cell&gt; currentValues = get(mutation, store, deltas,<a name="line.7146"></a>
+<span class="sourceLineNo">7147</span>        null/*Default IsolationLevel*/,<a name="line.7147"></a>
+<span class="sourceLineNo">7148</span>        op == Operation.INCREMENT? ((Increment)mutation).getTimeRange(): null);<a name="line.7148"></a>
+<span class="sourceLineNo">7149</span>    // Iterate the input columns and update existing values if they were found, otherwise<a name="line.7149"></a>
+<span class="sourceLineNo">7150</span>    // add new column initialized to the delta amount<a name="line.7150"></a>
+<span class="sourceLineNo">7151</span>    int currentValuesIndex = 0;<a name="line.7151"></a>
+<span class="sourceLineNo">7152</span>    for (int i = 0; i &lt; deltas.size(); i++) {<a name="line.7152"></a>
+<span class="sourceLineNo">7153</span>      Cell delta = deltas.get(i);<a name="line.7153"></a>
+<span class="sourceLineNo">7154</span>      Cell currentValue = null;<a name="line.7154"></a>
+<span class="sourceLineNo">7155</span>      if (currentValuesIndex &lt; currentValues.size() &amp;&amp;<a name="line.7155"></a>
+<span class="sourceLineNo">7156</span>          CellUtil.matchingQualifier(currentValues.get(currentValuesIndex), delta)) {<a name="line.7156"></a>
+<span class="sourceLineNo">7157</span>        currentValue = currentValues.get(currentValuesIndex);<a name="line.7157"></a>
+<span class="sourceLineNo">7158</span>        if (i &lt; (deltas.size() - 1) &amp;&amp; !CellUtil.matchingQualifier(delta, deltas.get(i + 1))) {<a name="line.7158"></a>
+<span class="sourceLineNo">7159</span>          currentValuesIndex++;<a name="line.7159"></a>
+<span class="sourceLineNo">7160</span>        }<a name="line.7160"></a>
+<span class="sourceLineNo">7161</span>      }<a name="line.7161"></a>
+<span class="sourceLineNo">7162</span>      // Switch on whether this an increment or an append building the new Cell to apply.<a name="line.7162"></a>
+<span class="sourceLineNo">7163</span>      Cell newCell = null;<a name="line.7163"></a>
+<span class="sourceLineNo">7164</span>      MutationType mutationType = null;<a name="line.7164"></a>
+<span class="sourceLineNo">7165</span>      boolean apply = true;<a name="line.7165"></a>
+<span class="sourceLineNo">7166</span>      switch (op) {<a name="line.7166"></a>
+<span class="sourceLineNo">7167</span>        case INCREMENT:<a name="line.7167"></a>
+<span class="sourceLineNo">7168</span>          mutationType = MutationType.INCREMENT;<a name="line.7168"></a>
+<span class="sourceLineNo">7169</span>          // If delta amount to apply is 0, don't write WAL or MemStore.<a name="line.7169"></a>
+<span class="sourceLineNo">7170</span>          long deltaAmount = getLongValue(delta);<a name="line.7170"></a>
+<span class="sourceLineNo">7171</span>          apply = deltaAmount != 0;<a name="line.7171"></a>
+<span class="sourceLineNo">7172</span>          newCell = reckonIncrement(delta, deltaAmount, currentValue, columnFamily, now,<a name="line.7172"></a>
+<span class="sourceLineNo">7173</span>            (Increment)mutation);<a name="line.7173"></a>
+<span class="sourceLineNo">7174</span>          break;<a name="line.7174"></a>
+<span class="sourceLineNo">7175</span>        case APPEND:<a name="line.7175"></a>
+<span class="sourceLineNo">7176</span>          mutationType = MutationType.APPEND;<a name="line.7176"></a>
+<span class="sourceLineNo">7177</span>          // Always apply Append. TODO: Does empty delta value mean reset Cell? It seems to.<a name="line.7177"></a>
+<span class="sourceLineNo">7178</span>          newCell = reckonAppend(delta, currentValue, now, (Append)mutation);<a name="line.7178"></a>
+<span class="sourceLineNo">7179</span>          break;<a name="line.7179"></a>
+<span class="sourceLineNo">7180</span>        default: throw new UnsupportedOperationException(op.toString());<a name="line.7180"></a>
+<span class="sourceLineNo">7181</span>      }<a name="line.7181"></a>
+<span class="sourceLineNo">7182</span><a name="line.7182"></a>
+<span class="sourceLineNo">7183</span>      // Give coprocessors a chance to update the new cell<a name="line.7183"></a>
+<span class="sourceLineNo">7184</span>      if (coprocessorHost != null) {<a name="line.7184"></a>
+<span class="sourceLineNo">7185</span>        newCell =<a name="line.7185"></a>
+<span class="sourceLineNo">7186</span>            coprocessorHost.postMutationBeforeWAL(mutationType, mutation, currentValue, newCell);<a name="line.7186"></a>
+<span class="sourceLineNo">7187</span>      }<a name="line.7187"></a>
+<span class="sourceLineNo">7188</span>      // If apply, we need to update memstore/WAL with new value; add it toApply.<a name="line.7188"></a>
+<span class="sourceLineNo">7189</span>      if (apply) {<a name="line.7189"></a>
+<span class="sourceLineNo">7190</span>        toApply.add(newCell);<a name="line.7190"></a>
+<span class="sourceLineNo">7191</span>      }<a name="line.7191"></a>
+<span class="sourceLineNo">7192</span>      // Add to results to get returned to the Client. If null, cilent does not want results.<a name="line.7192"></a>
+<span class="sourceLineNo">7193</span>      if (results != null) {<a name="line.7193"></a>
+<span class="sourceLineNo">7194</span>        results.add(newCell);<a name="line.7194"></a>
+<span class="sourceLineNo">7195</span>      }<a name="line.7195"></a>
+<span class="sourceLineNo">7196</span>    }<a name="line.7196"></a>
+<span class="sourceLineNo">7197</span>    return toApply;<a name="line.7197"></a>
+<span class="sourceLineNo">7198</span>  }<a name="line.7198"></a>
+<span class="sourceLineNo">7199</span><a name="line.7199"></a>
+<span class="sourceLineNo">7200</span>  /**<a name="line.7200"></a>
+<span class="sourceLineNo">7201</span>   * Calculate new Increment Cell.<a name="line.7201"></a>
+<span class="sourceLineNo">7202</span>   * @return New Increment Cell with delta applied to currentValue if currentValue is not null;<a name="line.7202"></a>
+<span class="sourceLineNo">7203</span>   *  otherwise, a new Cell with the delta set as its value.<a name="line.7203"></a>
+<span class="sourceLineNo">7204</span>   */<a name="line.7204"></a>
+<span class="sourceLineNo">7205</span>  private Cell reckonIncrement(final Cell delta, final long deltaAmount, final Cell currentValue,<a name="line.7205"></a>
+<span class="sourceLineNo">7206</span>      byte [] columnFamily, final long now, Mutation mutation)<a name="line.7206"></a>
+<span class="sourceLineNo">7207</span>  throws IOException {<a name="line.7207"></a>
+<span class="sourceLineNo">7208</span>    // Forward any tags found on the delta.<a name="line.7208"></a>
+<span class="sourceLineNo">7209</span>    List&lt;Tag&gt; tags = TagUtil.carryForwardTags(delta);<a name="line.7209"></a>
+<span class="sourceLineNo">7210</span>    long newValue = deltaAmount;<a name="line.7210"></a>
+<span class="sourceLineNo">7211</span>    long ts = now;<a name="line.7211"></a>
+<span class="sourceLineNo">7212</span>    if (currentValue != null) {<a name="line.7212"></a>
+<span class="sourceLineNo">7213</span>      tags = TagUtil.carryForwardTags(tags, currentValue);<a name="line.7213"></a>
+<span class="sourceLineNo">7214</span>      ts = Math.max(now, currentValue.getTimestamp());<a name="line.7214"></a>
+<span class="sourceLineNo">7215</span>      newValue += getLongValue(currentValue);<a name="line.7215"></a>
+<span class="sourceLineNo">7216</span>    }<a name="line.7216"></a>
+<span class="sourceLineNo">7217</span>    // Now make up the new Cell. TODO: FIX. This is carnel knowledge of how KeyValues are made...<a name="line.7217"></a>
+<span class="sourceLineNo">7218</span>    // doesn't work well with offheaping or if we are doing a different Cell type.<a name="line.7218"></a>
+<span class="sourceLineNo">7219</span>    byte [] incrementAmountInBytes = Bytes.toBytes(newValue);<a name="line.7219"></a>
+<span class="sourceLineNo">7220</span>    tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7220"></a>
+<span class="sourceLineNo">7221</span>    byte [] row = mutation.getRow();<a name="line.7221"></a>
+<span class="sourceLineNo">7222</span>    return new KeyValue(row, 0, row.length,<a name="line.7222"></a>
+<span class="sourceLineNo">7223</span>      columnFamily, 0, columnFamily.length,<a name="line.7223"></a>
+<span class="sourceLineNo">7224</span>      delta.getQualifierArray(), delta.getQualifierOffset(), delta.getQualifierLength(),<a name="line.7224"></a>
+<span class="sourceLineNo">7225</span>      ts, KeyValue.Type.Put,<a name="line.7225"></a>
+<span class="sourceLineNo">7226</span>      incrementAmountInBytes, 0, incrementAmountInBytes.length,<a name="line.7226"></a>
+<span class="sourceLineNo">7227</span>      tags);<a name="line.7227"></a>
+<span class="sourceLineNo">7228</span>  }<a name="line.7228"></a>
+<span class="sourceLineNo">7229</span><a name="line.7229"></a>
+<span class="sourceLineNo">7230</span>  private Cell reckonAppend(final Cell delta, final Cell currentValue, final long now,<a name="line.7230"></a>
+<span class="sourceLineNo">7231</span>      Append mutation)<a name="line.7231"></a>
+<span class="sourceLineNo">7232</span>  throws IOException {<a name="line.7232"></a>
+<span class="sourceLineNo">7233</span>    // Forward any tags found on the delta.<a name="line.7233"></a>
+<span class="sourceLineNo">7234</span>    List&lt;Tag&gt; tags = TagUtil.carryForwardTags(delta);<a name="line.7234"></a>
+<span class="sourceLineNo">7235</span>    long ts = now;<a name="line.7235"></a>
+<span class="sourceLineNo">7236</span>    Cell newCell = null;<a name="line.7236"></a>
+<span class="sourceLineNo">7237</span>    byte [] row = mutation.getRow();<a name="line.7237"></a>
+<span class="sourceLineNo">7238</span>    if (currentValue != null) {<a name="line.7238"></a>
+<span class="sourceLineNo">7239</span>      tags = TagUtil.carryForwardTags(tags, currentValue);<a name="line.7239"></a>
+<span class="sourceLineNo">7240</span>      ts = Math.max(now, currentValue.getTimestamp());<a name="line.7240"></a>
+<span class="sourceLineNo">7241</span>      tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7241"></a>
+<span class="sourceLineNo">7242</span>      byte[] tagBytes = TagUtil.fromList(tags);<a name="line.7242"></a>
+<span class="sourceLineNo">7243</span>      // Allocate an empty cell and copy in all parts.<a name="line.7243"></a>
+<span class="sourceLineNo">7244</span>      // TODO: This is intimate knowledge of how a KeyValue is made. Undo!!! Prevents our doing<a name="line.7244"></a>
+<span class="sourceLineNo">7245</span>      // other Cell types. Copying on-heap too if an off-heap Cell.<a name="line.7245"></a>
+<span class="sourceLineNo">7246</span>      newCell = new KeyValue(row.length, delta.getFamilyLength(),<a name="line.7246"></a>
+<span class="sourceLineNo">7247</span>        delta.getQualifierLength(), ts, KeyValue.Type.Put,<a name="line.7247"></a>
+<span class="sourceLineNo">7248</span>        delta.getValueLength() + currentValue.getValueLength(),<a name="line.7248"></a>
+<span class="sourceLineNo">7249</span>        tagBytes == null? 0: tagBytes.length);<a name="line.7249"></a>
+<span class="sourceLineNo">7250</span>      // Copy in row, family, and qualifier<a name="line.7250"></a>
+<span class="sourceLineNo">7251</span>      System.arraycopy(row, 0, newCell.getRowArray(), newCell.getRowOffset(), row.length);<a name="line.7251"></a>
+<span class="sourceLineNo">7252</span>      System.arraycopy(delta.getFamilyArray(), delta.getFamilyOffset(),<a name="line.7252"></a>
+<span class="sourceLineNo">7253</span>          newCell.getFamilyArray(), newCell.getFamilyOffset(), delta.getFamilyLength());<a name="line.7253"></a>
+<span class="sourceLineNo">7254</span>      System.arraycopy(delta.getQualifierArray(), delta.getQualifierOffset(),<a name="line.7254"></a>
+<span class="sourceLineNo">7255</span>          newCell.getQualifierArray(), newCell.getQualifierOffset(), delta.getQualifierLength());<a name="line.7255"></a>
+<span class="sourceLineNo">7256</span>      // Copy in the value<a name="line.7256"></a>
+<span class="sourceLineNo">7257</span>      CellUtil.copyValueTo(currentValue, newCell.getValueArray(), newCell.getValueOffset());<a name="line.7257"></a>
+<span class="sourceLineNo">7258</span>      System.arraycopy(delta.getValueArray(), delta.getValueOffset(),<a name="line.7258"></a>
+<span class="sourceLineNo">7259</span>          newCell.getValueArray(), newCell.getValueOffset() + currentValue.getValueLength(),<a name="line.7259"></a>
+<span class="sourceLineNo">7260</span>          delta.getValueLength());<a name="line.7260"></a>
+<span class="sourceLineNo">7261</span>      // Copy in tag data<a name="line.7261"></a>
+<span class="sourceLineNo">7262</span>      if (tagBytes != null) {<a name="line.7262"></a>
+<span class="sourceLineNo">7263</span>        System.arraycopy(tagBytes, 0,<a name="line.7263"></a>
+<span class="sourceLineNo">7264</span>            newCell.getTagsArray(), newCell.getTagsOffset(), tagBytes.length);<a name="line.7264"></a>
+<span class="sourceLineNo">7265</span>      }<a name="line.7265"></a>
+<span class="sourceLineNo">7266</span>    } else {<a name="line.7266"></a>
+<span class="sourceLineNo">7267</span>      // Append's KeyValue.Type==Put and ts==HConstants.LATEST_TIMESTAMP<a name="line.7267"></a>
+<span class="sourceLineNo">7268</span>      CellUtil.updateLatestStamp(delta, now);<a name="line.7268"></a>
+<span class="sourceLineNo">7269</span>      newCell = delta;<a name="line.7269"></a>
+<span class="sourceLineNo">7270</span>      tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7270"></a>
+<span class="sourceLineNo">7271</span>      if (tags != null) {<a name="line.7271"></a>
+<span class="sourceLineNo">7272</span>        newCell = new TagRewriteCell(delta, TagUtil.fromList(tags));<a name="line.7272"></a>
+<span class="sourceLineNo">7273</span>      }<a name="line.7273"></a>
+<span class="sourceLineNo">7274</span>    }<a name="line.7274"></a>
+<span class="sourceLineNo">7275</span>    return newCell;<a name="line.7275"></a>
+<span class="sourceLineNo">7276</span>  }<a name="line.7276"></a>
+<span class="sourceLineNo">7277</span><a name="line.7277"></a>
+<span class="sourceLineNo">7278</span>  /**<a name="line.7278"></a>
+<span class="sourceLineNo">7279</span>   * @return Get the long out of the passed in Cell<a name="line.7279"></a>
+<span class="sourceLineNo">7280</span>   */<a name="line.7280"></a>
+<span class="sourceLineNo">7281</span>  private static long getLongValue(final Cell cell) throws DoNotRetryIOException {<a name="line.7281"></a>
+<span class="sourceLineNo">7282</span>    int len = cell.getValueLength();<a name="line.7282"></a>
+<span class="sourceLineNo">7283</span>    if (len != Bytes.SIZEOF_LONG) {<a name="line.7283"></a>
+<span class="sourceLineNo">7284</span>      // throw DoNotRetryIOException instead of IllegalArgumentException<a name="line.7284"></a>
+<span class="sourceLineNo">7285</span>      throw new DoNotRetryIOException("Field is not a long, it's " + len + " bytes wide");<a name="line.7285"></a>
+<span class="sourceLineNo">7286</span>    }<a name="line.7286"></a>
+<span class="sourceLineNo">7287</span>    return Bytes.toLong(cell.getValueArray(), cell.getValueOffset(), len);<a name="line.7287"></a>
+<span class="sourceLineNo">7288</span>  }<a name="line.7288"></a>
+<span class="sourceLineNo">7289</span><a name="line.7289"></a>
+<span class="sourceLineNo">7290</span>  /**<a name="line.7290"></a>
+<span class="sourceLineNo">7291</span>   * Do a specific Get on passed &lt;code&gt;columnFamily&lt;/code&gt; and column qualifiers.<a name="line.7291"></a>
+<span class="sourceLineNo">7292</span>   * @param mutation Mutation we are doing this Get for.<a name="line.7292"></a>
+<span class="sourceLineNo">7293</span>   * @param columnFamily Which column family on row (TODO: Go all Gets in one go)<a name="line.7293"></a>
+<span class="sourceLineNo">7294</span>   * @param coordinates Cells from &lt;code&gt;mutation&lt;/code&gt; used as coordinates applied to Get.<a name="line.7294"></a>
+<span class="sourceLineNo">7295</span>   * @return Return list of Cells found.<a name="line.7295"></a>
+<span class="sourceLineNo">7296</span>   */<a name="line.7296"></a>
+<span class="sourceLineNo">7297</span>  private List&lt;Cell&gt; get(final Mutation mutation, final Store store,<a name="line.7297"></a>
+<span class="sourceLineNo">7298</span>          final List&lt;Cell&gt; coordinates, final IsolationLevel isolation, final TimeRange tr)<a name="line.7298"></a>
+<span class="sourceLineNo">7299</span>  throws IOException {<a name="line.7299"></a>
+<span class="sourceLineNo">7300</span>    // Sort the cells so that they match the order that they appear in the Get results. Otherwise,<a name="line.7300"></a>
+<span class="sourceLineNo">7301</span>    // we won't be able to find the existing values if the cells are not specified in order by the<a name="line.7301"></a>
+<span class="sourceLineNo">7302</span>    // client since cells are in an array list.<a name="line.7302"></a>
+<span class="sourceLineNo">7303</span>    // TODO: I don't get why we are sorting. St.Ack 20150107<a name="line.7303"></a>
+<span class="sourceLineNo">7304</span>    sort(coordinates, store.getComparator());<a name="line.7304"></a>
+<span class="sourceLineNo">7305</span>    Get get = new Get(mutation.getRow());<a name="line.7305"></a>
+<span class="sourceLineNo">7306</span>    if (isolation != null) {<a name="line.7306"></a>
+<span class="sourceLineNo">7307</span>      get.setIsolationLevel(isolation);<a name="line.7307"></a>
+<span class="sourceLineNo">7308</span>    }<a name="line.7308"></a>
+<span class="sourceLineNo">7309</span>    for (Cell cell: coordinates) {<a name="line.7309"></a>
+<span class="sourceLineNo">7310</span>      get.addColumn(store.getFamily().getName(), CellUtil.cloneQualifier(cell));<a name="line.7310"></a>
+<span class="sourceLineNo">7311</span>    }<a name="line.7311"></a>
+<span class="sourceLineNo">7312</span>    // Increments carry time range. If an Increment instance, put it on the Get.<a name="line.7312"></a>
+<span class="sourceLineNo">7313</span>    if (tr != null) {<a name="line.7313"></a>
+<span class="sourceLineNo">7314</span>      get.setTimeRange(tr.getMin(), tr.getMax());<a name="line.7314"></a>
+<span class="sourceLineNo">7315</span>    }<a name="line.7315"></a>
+<span class="sourceLineNo">7316</span>    return get(get, false);<a name="line.7316"></a>
+<span class="sourceLineNo">7317</span>  }<a name="line.7317"></a>
+<span class="sourceLineNo">7318</span><a name="line.7318"></a>
+<span class="sourceLineNo">7319</span>  /**<a name="line.7319"></a>
+<span class="sourceLineNo">7320</span>   * @return Sorted list of &lt;code&gt;cells&lt;/code&gt; using &lt;code&gt;comparator&lt;/code&gt;<a name="line.7320"></a>
+<span class="sourceLineNo">7321</span>   */<a name="line.7321"></a>
+<span class="sourceLineNo">7322</span>  private static List&lt;Cell&gt; sort(List&lt;Cell&gt; cells, final Comparator&lt;Cell&gt; comparator) {<a name="line.7322"></a>
+<span class="sourceLineNo">7323</span>    Collections.sort(cells, comparator);<a name="line.7323"></a>
+<span class="sourceLineNo">7324</span>    return cells;<a name="line.7324"></a>
+<span class="sourceLineNo">7325</span>  }<a name="line.7325"></a>
+<span class="sourceLineNo">7326</span><a name="line.7326"></a>
 <span class="sourceLineNo">7327</span>  //<a name="line.7327"></a>
-<span class="sourceLineNo">7328</span><a name="line.7328"></a>
-<span class="sourceLineNo">7329</span>  void checkFamily(final byte [] family)<a name="line.7329"></a>
-<span class="sourceLineNo">7330</span>  throws NoSuchColumnFamilyException {<a name="line.7330"></a>
-<span class="sourceLineNo">7331</span>    if (!this.htableDescriptor.hasFamily(family)) {<a name="line.7331"></a>
-<span class="sourceLineNo">7332</span>      throw new NoSuchColumnFamilyException("Column family " +<a name="line.7332"></a>
-<span class="sourceLineNo">7333</span>          Bytes.toString(family) + " does not exist in region " + this<a name="line.7333"></a>
-<span class="sourceLineNo">7334</span>          + " in table " + this.htableDescriptor);<a name="line.7334"></a>
-<span class="sourceLineNo">7335</span>    }<a name="line.7335"></a>
-<span class="sourceLineNo">7336</span>  }<a name="line.7336"></a>
-<span class="sourceLineNo">7337</span><a name="line.7337"></a>
-<span class="sourceLineNo">7338</span>  public static final long FIXED_OVERHEAD = ClassSize.align(<a name="line.7338"></a>
-<span class="sourceLineNo">7339</span>      ClassSize.OBJECT +<a name="line.7339"></a>
-<span class="sourceLineNo">7340</span>      ClassSize.ARRAY +<a name="line.7340"></a>
-<span class="sourceLineNo">7341</span>      45 * ClassSize.REFERENCE + 2 * Bytes.SIZEOF_INT +<a name="line.7341"></a>
-<span class="sourceLineNo">7342</span>      (14 * Bytes.SIZEOF_LONG) +<a name="line.7342"></a>
-<span class="sourceLineNo">7343</span>      5 * Bytes.SIZEOF_BOOLEAN);<a name="line.7343"></a>
-<span class="sourceLineNo">7344</span><a name="line.7344"></a>
-<span class="sourceLineNo">7345</span>  // woefully out of date - currently missing:<a name="line.7345"></a>
-<span class="sourceLineNo">7346</span>  // 1 x HashMap - coprocessorServiceHandlers<a name="line.7346"></a>
-<span class="sourceLineNo">7347</span>  // 6 x Counter - numMutationsWithoutWAL, dataInMemoryWithoutWAL,<a name="line.7347"></a>
-<span class="sourceLineNo">7348</span>  //   checkAndMutateChecksPassed, checkAndMutateChecksFailed, readRequestsCount,<a name="line.7348"></a>
-<span class="sourceLineNo">7349</span>  //   writeRequestsCount<a name="line.7349"></a>
-<span class="sourceLineNo">7350</span>  // 1 x HRegion$WriteState - writestate<a name="line.7350"></a>
-<span class="sourceLineNo">7351</span>  // 1 x RegionCoprocessorHost - coprocessorHost<a name="line.7351"></a>
-<span class="sourceLineNo">7352</span>  // 1 x RegionSplitPolicy - splitPolicy<a name="line.7352"></a>
-<span class="sourceLineNo">7353</span>  // 1 x MetricsRegion - metricsRegion<a name="line.7353"></a>
-<span class="sourceLineNo">7354</span>  // 1 x MetricsRegionWrapperImpl - metricsRegionWrapper<a name="line.7354"></a>
-<span class="sourceLineNo">7355</span>  public static final long DEEP_OVERHEAD = FIXED_OVERHEAD +<a name="line.7355"></a>
-<span class="sourceLineNo">7356</span>      ClassSize.OBJECT + // closeLock<a name="line.7356"></a>
-<span class="sourceLineNo">7357</span>      (2 * ClassSize.ATOMIC_BOOLEAN) + // closed, closing<a name="line.7357"></a>
-<span class="sourceLineNo">7358</span>      (3 * ClassSize.ATOMIC_LONG) + // memStoreSize, numPutsWithoutWAL, dataInMemoryWithoutWAL<a name="line.7358"></a>
-<span class="sourceLineNo">7359</span>      (2 * ClassSize.CONCURRENT_HASHMAP) +  // lockedRows, scannerReadPoints<a name="line.7359"></a>
-<span class="sourceLineNo">7360</span>      WriteState.HEAP_SIZE + // writestate<a name="line.7360"></a>
-<span class="sourceLineNo">7361</span>      ClassSize.CONCURRENT_SKIPLISTMAP + ClassSize.CONCURRENT_SKIPLISTMAP_ENTRY + // stores<a name="line.7361"></a>
-<span class="sourceLineNo">7362</span>      (2 * ClassSize.REENTRANT_LOCK) + // lock, updatesLock<a name="line.7362"></a>
-<span class="sourceLineNo">7363</span>      MultiVersionConcurrencyControl.FIXED_SIZE // mvcc<a name="line.7363"></a>
-<span class="sourceLineNo">7364</span>      + ClassSize.TREEMAP // maxSeqIdInStores<a name="line.7364"></a>
-<span class="sourceLineNo">7365</span>      + 2 * ClassSize.ATOMIC_INTEGER // majorInProgress, minorInProgress<a name="line.7365"></a>
-<span class="sourceLineNo">7366</span>      ;<a name="line.7366"></a>
-<span class="sourceLineNo">7367</span><a name="line.7367"></a>
-<span class="sourceLineNo">7368</span>  @Override<a name="line.7368"></a>
-<span class="sourceLineNo">7369</span>  public long heapSize() {<a name="line.7369"></a>
-<span class="sourceLineNo">7370</span>    long heapSize = DEEP_OVERHEAD;<a name="line.7370"></a>
-<span class="sourceLineNo">7371</span>    for (Store store : this.stores.values()) {<a name="line.7371"></a>
-<span class="sourceLineNo">7372</span>      heapSize += store.heapSize();<a name="line.7372"></a>
-<span class="sourceLineNo">7373</span>    }<a name="line.7373"></a>
-<span class="sourceLineNo">7374</span>    // this does not take into account row locks, recent flushes, mvcc entries, and more<a name="line.7374"></a>
-<span class="sourceLineNo">7375</span>    return heapSize;<a name="line.7375"></a>
-<span class="sourceLineNo">7376</span>  }<a name="line.7376"></a>
-<span class="sourceLineNo">7377</span><a name="line.7377"></a>
-<span class="sourceLineNo">7378</span>  @Override<a name="line.7378"></a>
-<span class="sourceLineNo">7379</span>  public boolean registerService(Service instance) {<a name="line.7379"></a>
-<span class="sourceLineNo">7380</span>    /*<a name="line.7380"></a>
-<span class="sourceLineNo">7381</span>     * No stacking of instances is allowed for a single service name<a name="line.7381"></a>
-<span class="sourceLineNo">7382</span>     */<a name="line.7382"></a>
-<span class="sourceLineNo">7383</span>    Descriptors.ServiceDescriptor serviceDesc = instance.getDescriptorForType();<a name="line.7383"></a>
-<span class="sourceLineNo">7384</span>    if (coprocessorServiceHandlers.containsKey(serviceDesc.getFullName())) {<a name="line.7384"></a>
-<span class="sourceLineNo">7385</span>      LOG.error("Coprocessor service " + serviceDesc.getFullName() +<a name="line.7385"></a>
-<span class="sourceLineNo">7386</span>              " already registered, rejecting request from " + instance<a name="line.7386"></a>
-<span class="sourceLineNo">7387</span>      );<a name="line.7387"></a>
-<span class="sourceLineNo">7388</span>      return false;<a name="line.7388"></a>
-<span class="sourceLineNo">7389</span>    }<a name="line.7389"></a>
-<span class="sourceLineNo">7390</span><a name="line.7390"></a>
-<span class="sourceLineNo">7391</span>    coprocessorServiceHandlers.put(serviceDesc.getFullName(), instance);<a name="line.7391"></a>
-<span class="sourceLineNo">7392</span>    if (LOG.isDebugEnabled()) {<a name="line.7392"></a>
-<span class="sourceLineNo">7393</span>      LOG.debug("Registered coprocessor service: region=" +<a name="line.7393"></a>
-<span class="sourceLineNo">7394</span>          Bytes.toStringBinary(getRegionInfo().getRegionName()) +<a name="line.7394"></a>
-<span class="sourceLineNo">7395</span>          " service=" + serviceDesc.getFullName());<a name="line.7395"></a>
-<span class="sourceLineNo">7396</span>    }<a name="line.7396"></a>
-<span class="sourceLineNo">7397</span>    return true;<a name="line.7397"></a>
-<span class="sourceLineNo">7398</span>  }<a name="line.7398"></a>
-<span class="sourceLineNo">7399</span><a name="line.7399"></a>
-<span class="sourceLineNo">7400</span>  @Override<a name="line.7400"></a>
-<span class="sourceLineNo">7401</span>  public Message execService(RpcController controller, CoprocessorServiceCall call)<a name="line.7401"></a>
-<span class="sourceLineNo">7402</span>      throws IOException {<a name="line.7402"></a>
-<span class="sourceLineNo">7403</span>    String serviceName = call.getServiceName();<a name="line.7403"></a>
-<span class="sourceLineNo">7404</span>    String methodName = call.getMethodName();<a name="line.7404"></a>
-<span class="sourceLineNo">7405</span>    if (!coprocessorServiceHandlers.containsKey(serviceName)) {<a name="line.7405"></a>
-<span class="sourceLineNo">7406</span>      throw new UnknownProtocolException(null,<a name="line.7406"></a>
-<span class="sourceLineNo">7407</span>          "No registered coprocessor service found for name "+serviceName+<a name="line.7407"></a>
-<span class="sourceLineNo">7408</span>          " in region "+Bytes.toStringBinary(getRegionInfo().getRegionName()));<a name="line.7408"></a>
-<span class="sourceLineNo">7409</span>    }<a name="line.7409"></a>
-<span class="sourceLineNo">7410</span><a name="line.7410"></a>
-<span class="sourceLineNo">7411</span>    Service service = coprocessorServiceHandlers.get(serviceName);<a name="line.7411"></a>
-<span class="sourceLineNo">7412</span>    Descriptors.ServiceDescriptor serviceDesc = service.getDescriptorForType();<a name="line.7412"></a>
-<span class="sourceLineNo">7413</span>    Descriptors.MethodDescriptor methodDesc = serviceDesc.findMethodByName(methodName);<a name="line.7413"></a>
-<span class="sourceLineNo">7414</span>    if (methodDesc == null) {<a name="line.7414"></a>
-<span class="sourceLineNo">7415</span>      throw new UnknownProtocolException(service.getClass(),<a name="line.7415"></a>
-<span class="sourceLineNo">7416</span>          "Unknown method "+methodName+" called on service "+serviceName+<a name="line.7416"></a>
-<span class="sourceLineNo">7417</span>              " in region "+Bytes.toStringBinary(getRegionInfo().getRegionName()));<a name="line.7417"></a>
-<span class="sourceLineNo">7418</span>    }<a name="line.7418"></a>
-<span class="sourceLineNo">7419</span><a name="line.7419"></a>
-<span class="sourceLineNo">7420</span>    Message.Builder builder = service.getRequestPrototype(methodDesc).newBuilderForType();<a name="line.7420"></a>
-<span class="sourceLineNo">7421</span>    ProtobufUtil.mergeFrom(builder, call.getRequest());<a name="line.7421"></a>
-<span class="sourceLineNo">7422</span>    Message request = builder.build();<a name="line.7422"></a>
-<span class="sourceLineNo">7423</span><a name="line.7423"></a>
-<span class="sourceLineNo">7424</span>    if (coprocessorHost != null) {<a name="line.7424"></a>
-<span class="sourceLineNo">7425</span>      request = coprocessorHost.preEndpointInvocation(service, methodName, request);<a name="line.7425"></a>
-<span class="sourceLineNo">7426</span>    }<a name="line.7426"></a>
-<span class="sourceLineNo">7427</span><a name="line.7427"></a>
-<span class="sourceLineNo">7428</span>    final Message.Builder responseBuilder =<a name="line.7428"></a>
-<span class="sourceLineNo">7429</span>        service.getResponsePrototype(methodDesc).newBuilderForType();<a name="line.7429"></a>
-<span class="sourceLineNo">7430</span>    service.callMethod(methodDesc, controller, request, new RpcCallback&lt;Message&gt;() {<a name="line.7430"></a>
-<span class="sourceLineNo">7431</span>      @Override<a name="line.7431"></a>
-<span class="sourceLineNo">7432</span>      public void run(Message message) {<a name="line.7432"></a>
-<span class="sourceLineNo">7433</span>        if (message != null) {<a name="line.7433"></a>
-<span class="sourceLineNo">7434</span>          responseBuilder.mergeFrom(message);<a name="line.7434"></a>
-<span class="sourceLineNo">7435</span>        }<a name="line.7435"></a>
-<span class="sourceLineNo">7436</span>      }<a name="line.7436"></a>
-<span class="sourceLineNo">7437</span>    });<a name="line.7437"></a>
-<span class="sourceLineNo">7438</span><a name="line.7438"></a>
-<span class="sourceLineNo">7439</span>    if (coprocessorHost != null) {<a name="line.7439"></a>
-<span class="sourceLineNo">7440</span>      coprocessorHost.postEndpointInvocation(service, methodName, request, responseBuilder);<a name="line.7440"></a>
-<span class="sourceLineNo">7441</span>    }<a name="line.7441"></a>
-<span class="sourceLineNo">7442</span><a name="line.7442"></a>
-<span class="sourceLineNo">7443</span>    IOException exception = ResponseConverter.getControllerException(controller);<a name="line.7443"></a>
-<span class="sourceLineNo">7444</span>    if (exception != null) {<a name="line.7444"></a>
-<span class="sourceLineNo">7445</span>      throw exception;<a name="line.7445"></a>
-<span class="sourceLineNo">7446</span>    

<TRUNCATED>

[50/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/apidocs/org/apache/hadoop/hbase/client/Mutation.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/client/Mutation.html b/apidocs/org/apache/hadoop/hbase/client/Mutation.html
index 18874a3..1bf65fe 100644
--- a/apidocs/org/apache/hadoop/hbase/client/Mutation.html
+++ b/apidocs/org/apache/hadoop/hbase/client/Mutation.html
@@ -374,7 +374,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>row</h4>
-<pre>protected&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.85">row</a></pre>
+<pre>protected&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.87">row</a></pre>
 </li>
 </ul>
 <a name="ts">
@@ -383,7 +383,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>ts</h4>
-<pre>protected&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.86">ts</a></pre>
+<pre>protected&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.88">ts</a></pre>
 </li>
 </ul>
 <a name="durability">
@@ -392,7 +392,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>durability</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.87">durability</a></pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.89">durability</a></pre>
 </li>
 </ul>
 <a name="familyMap">
@@ -401,7 +401,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockListLast">
 <li class="blockList">
 <h4>familyMap</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a>&lt;byte[],<a href="http://docs.oracle.com/javase/7/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; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.90">familyMap</a></pre>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a>&lt;byte[],<a href="http://docs.oracle.com/javase/7/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; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.92">familyMap</a></pre>
 </li>
 </ul>
 </li>
@@ -435,7 +435,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>cellScanner</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.CellScanner&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.94">cellScanner</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.CellScanner&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.96">cellScanner</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code>cellScanner</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.CellScannable</code></dd>
@@ -448,7 +448,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>getFingerprint</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.155">getFingerprint</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.157">getFingerprint</a>()</pre>
 <div class="block">Compile the column family (i.e. schema) information
  into a Map. Useful for parsing and aggregation by debugging,
  logging, and administration tools.</div>
@@ -464,7 +464,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>toMap</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.175">toMap</a>(int&nbsp;maxCols)</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.177">toMap</a>(int&nbsp;maxCols)</pre>
 <div class="block">Compile the details beyond the scope of getFingerprint (row, columns,
  timestamps, etc.) into a Map along with the fingerprinted information.
  Useful for debugging, logging, and administration tools.</div>
@@ -481,7 +481,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>setDurability</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.238">setDurability</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;d)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.240">setDurability</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;d)</pre>
 <div class="block">Set the durability for this mutation</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>d</code> - </dd></dl>
 </li>
@@ -492,7 +492,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>getDurability</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.244">getDurability</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.246">getDurability</a>()</pre>
 <div class="block">Get the current durability</div>
 </li>
 </ul>
@@ -502,7 +502,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>getFamilyCellMap</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a>&lt;byte[],<a href="http://docs.oracle.com/javase/7/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;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.252">getFamilyCellMap</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a>&lt;byte[],<a href="http://docs.oracle.com/javase/7/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;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.254">getFamilyCellMap</a>()</pre>
 <div class="block">Method for retrieving the put's familyMap</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>familyMap</dd></dl>
 </li>
@@ -513,7 +513,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>setFamilyCellMap</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.259">setFamilyCellMap</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a>&lt;byte[],<a href="http://docs.oracle.com/javase/7/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;map)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.261">setFamilyCellMap</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a>&lt;byte[],<a href="http://docs.oracle.com/javase/7/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;map)</pre>
 <div class="block">Method for setting the put's familyMap</div>
 </li>
 </ul>
@@ -523,7 +523,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>isEmpty</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.270">isEmpty</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.272">isEmpty</a>()</pre>
 <div class="block">Method to check if the familyMap is empty</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>true if empty, false otherwise</dd></dl>
 </li>
@@ -534,7 +534,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>getRow</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.279">getRow</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.281">getRow</a>()</pre>
 <div class="block">Method for retrieving the delete's row</div>
 <dl>
 <dt><strong>Specified by:</strong></dt>
@@ -548,7 +548,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>compareTo</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.284">compareTo</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Row.html" title="interface in org.apache.hadoop.hbase.client">Row</a>&nbsp;d)</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.286">compareTo</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Row.html" title="interface in org.apache.hadoop.hbase.client">Row</a>&nbsp;d)</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html?is-external=true#compareTo(T)" title="class or interface in java.lang">compareTo</a></code>&nbsp;in interface&nbsp;<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Row.html" title="interface in org.apache.hadoop.hbase.client">Row</a>&gt;</code></dd>
@@ -561,7 +561,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>getTimeStamp</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.292">getTimeStamp</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.294">getTimeStamp</a>()</pre>
 <div class="block">Method for retrieving the timestamp</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>timestamp</dd></dl>
 </li>
@@ -572,7 +572,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>setClusterIds</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.300">setClusterIds</a>(<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a>&gt;&nbsp;clusterIds)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.302">setClusterIds</a>(<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a>&gt;&nbsp;clusterIds)</pre>
 <div class="block">Marks that the clusters with the given clusterIds have consumed the mutation</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>clusterIds</code> - of the clusters that have consumed the mutation</dd></dl>
 </li>
@@ -583,7 +583,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>getClusterIds</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.314">getClusterIds</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.316">getClusterIds</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>the set of clusterIds that have consumed the mutation</dd></dl>
 </li>
 </ul>
@@ -593,7 +593,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>setCellVisibility</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.332">setCellVisibility</a>(org.apache.hadoop.hbase.security.visibility.CellVisibility&nbsp;expression)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.334">setCellVisibility</a>(org.apache.hadoop.hbase.security.visibility.CellVisibility&nbsp;expression)</pre>
 <div class="block">Sets the visibility expression associated with cells in this Mutation.
  It is illegal to set <code>CellVisibility</code> on <code>Delete</code> mutation.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>expression</code> - </dd></dl>
@@ -605,7 +605,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>getCellVisibility</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.security.visibility.CellVisibility&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.342">getCellVisibility</a>()
+<pre>public&nbsp;org.apache.hadoop.hbase.security.visibility.CellVisibility&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.344">getCellVisibility</a>()
                                                                              throws org.apache.hadoop.hbase.exceptions.DeserializationException</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>CellVisibility associated with cells in this Mutation.</dd>
 <dt><span class="strong">Throws:</span></dt>
@@ -618,7 +618,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>size</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.352">size</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.354">size</a>()</pre>
 <div class="block">Number of KeyValues carried by this Mutation.</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>the total number of KeyValues</dd></dl>
 </li>
@@ -629,7 +629,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>numFamilies</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.363">numFamilies</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.365">numFamilies</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>the number of different families</dd></dl>
 </li>
 </ul>
@@ -639,7 +639,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>heapSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.371">heapSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.373">heapSize</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code>heapSize</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.io.HeapSize</code></dd>
@@ -652,7 +652,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>getACL</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.404">getACL</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.406">getACL</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>The serialized ACL for this operation, or null if none</dd></dl>
 </li>
 </ul>
@@ -662,7 +662,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>setACL</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.412">setACL</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.414">setACL</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
               org.apache.hadoop.hbase.security.access.Permission&nbsp;perms)</pre>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>user</code> - User short name</dd><dd><code>perms</code> - Permissions for the user</dd></dl>
 </li>
@@ -673,7 +673,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>setACL</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.421">setACL</a>(<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hadoop.hbase.security.access.Permission&gt;&nbsp;perms)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.423">setACL</a>(<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hadoop.hbase.security.access.Permission&gt;&nbsp;perms)</pre>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>perms</code> - A map of permissions for a user or users</dd></dl>
 </li>
 </ul>
@@ -683,7 +683,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>getTTL</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.436">getTTL</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.438">getTTL</a>()</pre>
 <div class="block">Return the TTL requested for the result of the mutation, in milliseconds.</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>the TTL requested for the result of the mutation, in milliseconds,
  or Long.MAX_VALUE if unset</dd></dl>
@@ -695,7 +695,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>setTTL</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.449">setTTL</a>(long&nbsp;ttl)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.451">setTTL</a>(long&nbsp;ttl)</pre>
 <div class="block">Set the TTL desired for the result of the mutation, in milliseconds.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>ttl</code> - the TTL desired for the result of the mutation, in milliseconds</dd>
 <dt><span class="strong">Returns:</span></dt><dd>this</dd></dl>
@@ -707,7 +707,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" titl
 <ul class="blockListLast">
 <li class="blockList">
 <h4>extraHeapSize</h4>
-<pre>protected&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.458">extraHeapSize</a>()</pre>
+<pre>protected&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Mutation.html#line.477">extraHeapSize</a>()</pre>
 <div class="block">Subclasses should override this method to add the heap size of their own fields.</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>the heap size to add (will be aligned).</dd></dl>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/apidocs/org/apache/hadoop/hbase/client/class-use/Mutation.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/client/class-use/Mutation.html b/apidocs/org/apache/hadoop/hbase/client/class-use/Mutation.html
index 808573e..c0ca016 100644
--- a/apidocs/org/apache/hadoop/hbase/client/class-use/Mutation.html
+++ b/apidocs/org/apache/hadoop/hbase/client/class-use/Mutation.html
@@ -170,6 +170,10 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 </td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a></code></td>
+<td class="colLast"><span class="strong">Mutation.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/client/Mutation.html#setReturnResults(boolean)">setReturnResults</a></strong>(boolean&nbsp;returnResults)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a></code></td>
 <td class="colLast"><span class="strong">Mutation.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/client/Mutation.html#setTTL(long)">setTTL</a></strong>(long&nbsp;ttl)</code>
 <div class="block">Set the TTL desired for the result of the mutation, in milliseconds.</div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/apidocs/org/apache/hadoop/hbase/util/OrderedBytes.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/util/OrderedBytes.html b/apidocs/org/apache/hadoop/hbase/util/OrderedBytes.html
index 2730e3e..95abff4 100644
--- a/apidocs/org/apache/hadoop/hbase/util/OrderedBytes.html
+++ b/apidocs/org/apache/hadoop/hbase/util/OrderedBytes.html
@@ -636,18 +636,32 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static boolean</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/OrderedBytes.html#isFixedInt16(org.apache.hadoop.hbase.util.PositionedByteRange)">isFixedInt16</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</code>
+<div class="block">Return true when the next encoded value in <code>src</code> uses fixed-width
+ Int16 encoding, false otherwise.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/OrderedBytes.html#isFixedInt32(org.apache.hadoop.hbase.util.PositionedByteRange)">isFixedInt32</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</code>
 <div class="block">Return true when the next encoded value in <code>src</code> uses fixed-width
  Int32 encoding, false otherwise.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/OrderedBytes.html#isFixedInt64(org.apache.hadoop.hbase.util.PositionedByteRange)">isFixedInt64</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</code>
 <div class="block">Return true when the next encoded value in <code>src</code> uses fixed-width
  Int64 encoding, false otherwise.</div>
 </td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><code>static boolean</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/OrderedBytes.html#isFixedInt8(org.apache.hadoop.hbase.util.PositionedByteRange)">isFixedInt8</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</code>
+<div class="block">Return true when the next encoded value in <code>src</code> uses fixed-width
+ Int8 encoding, false otherwise.</div>
+</td>
+</tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/OrderedBytes.html#isNull(org.apache.hadoop.hbase.util.PositionedByteRange)">isNull</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</code>
@@ -1276,7 +1290,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isNull</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1515">isNull</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1516">isNull</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
 <div class="block">Return true when the next encoded value in <code>src</code> is null, false
  otherwise.</div>
 </li>
@@ -1287,7 +1301,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isNumeric</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1525">isNumeric</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1526">isNumeric</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
 <div class="block">Return true when the next encoded value in <code>src</code> uses Numeric
  encoding, false otherwise. <code>NaN</code>, <code>+/-Inf</code> are valid Numeric
  values.</div>
@@ -1299,7 +1313,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isNumericInfinite</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1534">isNumericInfinite</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1535">isNumericInfinite</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
 <div class="block">Return true when the next encoded value in <code>src</code> uses Numeric
  encoding and is <code>Infinite</code>, false otherwise.</div>
 </li>
@@ -1310,7 +1324,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isNumericNaN</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1543">isNumericNaN</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1544">isNumericNaN</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
 <div class="block">Return true when the next encoded value in <code>src</code> uses Numeric
  encoding and is <code>NaN</code>, false otherwise.</div>
 </li>
@@ -1321,18 +1335,40 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isNumericZero</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1551">isNumericZero</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1552">isNumericZero</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
 <div class="block">Return true when the next encoded value in <code>src</code> uses Numeric
  encoding and is <code>0</code>, false otherwise.</div>
 </li>
 </ul>
+<a name="isFixedInt8(org.apache.hadoop.hbase.util.PositionedByteRange)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>isFixedInt8</h4>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1561">isFixedInt8</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
+<div class="block">Return true when the next encoded value in <code>src</code> uses fixed-width
+ Int8 encoding, false otherwise.</div>
+</li>
+</ul>
+<a name="isFixedInt16(org.apache.hadoop.hbase.util.PositionedByteRange)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>isFixedInt16</h4>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1570">isFixedInt16</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
+<div class="block">Return true when the next encoded value in <code>src</code> uses fixed-width
+ Int16 encoding, false otherwise.</div>
+</li>
+</ul>
 <a name="isFixedInt32(org.apache.hadoop.hbase.util.PositionedByteRange)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>isFixedInt32</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1560">isFixedInt32</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1579">isFixedInt32</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
 <div class="block">Return true when the next encoded value in <code>src</code> uses fixed-width
  Int32 encoding, false otherwise.</div>
 </li>
@@ -1343,7 +1379,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isFixedInt64</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1569">isFixedInt64</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1588">isFixedInt64</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
 <div class="block">Return true when the next encoded value in <code>src</code> uses fixed-width
  Int64 encoding, false otherwise.</div>
 </li>
@@ -1354,7 +1390,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isFixedFloat32</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1578">isFixedFloat32</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1597">isFixedFloat32</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
 <div class="block">Return true when the next encoded value in <code>src</code> uses fixed-width
  Float32 encoding, false otherwise.</div>
 </li>
@@ -1365,7 +1401,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isFixedFloat64</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1587">isFixedFloat64</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1606">isFixedFloat64</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
 <div class="block">Return true when the next encoded value in <code>src</code> uses fixed-width
  Float64 encoding, false otherwise.</div>
 </li>
@@ -1376,7 +1412,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isText</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1596">isText</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1615">isText</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
 <div class="block">Return true when the next encoded value in <code>src</code> uses Text encoding,
  false otherwise.</div>
 </li>
@@ -1387,7 +1423,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isBlobVar</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1605">isBlobVar</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1624">isBlobVar</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
 <div class="block">Return true when the next encoded value in <code>src</code> uses BlobVar
  encoding, false otherwise.</div>
 </li>
@@ -1398,7 +1434,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isBlobCopy</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1614">isBlobCopy</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1633">isBlobCopy</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
 <div class="block">Return true when the next encoded value in <code>src</code> uses BlobCopy
  encoding, false otherwise.</div>
 </li>
@@ -1409,7 +1445,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>skip</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1623">skip</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1642">skip</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</pre>
 <div class="block">Skip <code>buff</code>'s position forward over one encoded value.</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>number of bytes skipped.</dd></dl>
 </li>
@@ -1420,7 +1456,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>length</h4>
-<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1732">length</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;buff)</pre>
+<pre>public static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/OrderedBytes.html#line.1751">length</a>(<a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;buff)</pre>
 <div class="block">Return the number of encoded entries remaining in <code>buff</code>. The
  state of <code>buff</code> is not modified through use of this method.</div>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/apidocs/org/apache/hadoop/hbase/util/class-use/PositionedByteRange.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/util/class-use/PositionedByteRange.html b/apidocs/org/apache/hadoop/hbase/util/class-use/PositionedByteRange.html
index 986a03c..a9ef32b 100644
--- a/apidocs/org/apache/hadoop/hbase/util/class-use/PositionedByteRange.html
+++ b/apidocs/org/apache/hadoop/hbase/util/class-use/PositionedByteRange.html
@@ -1269,18 +1269,32 @@
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static boolean</code></td>
+<td class="colLast"><span class="strong">OrderedBytes.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/OrderedBytes.html#isFixedInt16(org.apache.hadoop.hbase.util.PositionedByteRange)">isFixedInt16</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</code>
+<div class="block">Return true when the next encoded value in <code>src</code> uses fixed-width
+ Int16 encoding, false otherwise.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><span class="strong">OrderedBytes.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/OrderedBytes.html#isFixedInt32(org.apache.hadoop.hbase.util.PositionedByteRange)">isFixedInt32</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</code>
 <div class="block">Return true when the next encoded value in <code>src</code> uses fixed-width
  Int32 encoding, false otherwise.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><span class="strong">OrderedBytes.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/OrderedBytes.html#isFixedInt64(org.apache.hadoop.hbase.util.PositionedByteRange)">isFixedInt64</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</code>
 <div class="block">Return true when the next encoded value in <code>src</code> uses fixed-width
  Int64 encoding, false otherwise.</div>
 </td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static boolean</code></td>
+<td class="colLast"><span class="strong">OrderedBytes.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/OrderedBytes.html#isFixedInt8(org.apache.hadoop.hbase.util.PositionedByteRange)">isFixedInt8</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</code>
+<div class="block">Return true when the next encoded value in <code>src</code> uses fixed-width
+ Int8 encoding, false otherwise.</div>
+</td>
+</tr>
 <tr class="altColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><span class="strong">OrderedBytes.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/OrderedBytes.html#isNull(org.apache.hadoop.hbase.util.PositionedByteRange)">isNull</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a>&nbsp;src)</code>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/apidocs/src-html/org/apache/hadoop/hbase/ProcedureInfo.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/ProcedureInfo.html b/apidocs/src-html/org/apache/hadoop/hbase/ProcedureInfo.html
index 8178706..bf877b1 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/ProcedureInfo.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/ProcedureInfo.html
@@ -57,210 +57,211 @@
 <span class="sourceLineNo">049</span><a name="line.49"></a>
 <span class="sourceLineNo">050</span>  private long clientAckTime = -1;<a name="line.50"></a>
 <span class="sourceLineNo">051</span><a name="line.51"></a>
-<span class="sourceLineNo">052</span>  public ProcedureInfo(<a name="line.52"></a>
-<span class="sourceLineNo">053</span>      final long procId,<a name="line.53"></a>
-<span class="sourceLineNo">054</span>      final String procName,<a name="line.54"></a>
-<span class="sourceLineNo">055</span>      final String procOwner,<a name="line.55"></a>
-<span class="sourceLineNo">056</span>      final ProcedureState procState,<a name="line.56"></a>
-<span class="sourceLineNo">057</span>      final long parentId,<a name="line.57"></a>
-<span class="sourceLineNo">058</span>      final NonceKey nonceKey,<a name="line.58"></a>
-<span class="sourceLineNo">059</span>      final ForeignExceptionMessage exception,<a name="line.59"></a>
-<span class="sourceLineNo">060</span>      final long lastUpdate,<a name="line.60"></a>
-<span class="sourceLineNo">061</span>      final long startTime,<a name="line.61"></a>
-<span class="sourceLineNo">062</span>      final byte[] result) {<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    this.procId = procId;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    this.procName = procName;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    this.procOwner = procOwner;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    this.procState = procState;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    this.parentId = parentId;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    this.nonceKey = nonceKey;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    this.lastUpdate = lastUpdate;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    this.startTime = startTime;<a name="line.70"></a>
-<span class="sourceLineNo">071</span><a name="line.71"></a>
-<span class="sourceLineNo">072</span>    // If the procedure is completed, we should treat exception and result differently<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    this.exception = exception;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    this.result = result;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  }<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="CN_IDIOM_NO_SUPER_CALL",<a name="line.77"></a>
-<span class="sourceLineNo">078</span>      justification="Intentional; calling super class clone doesn't make sense here.")<a name="line.78"></a>
-<span class="sourceLineNo">079</span>  public ProcedureInfo clone() {<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    return new ProcedureInfo(procId, procName, procOwner, procState, parentId, nonceKey,<a name="line.80"></a>
-<span class="sourceLineNo">081</span>      exception, lastUpdate, startTime, result);<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  }<a name="line.82"></a>
-<span class="sourceLineNo">083</span><a name="line.83"></a>
-<span class="sourceLineNo">084</span>  public long getProcId() {<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    return procId;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>  }<a name="line.86"></a>
-<span class="sourceLineNo">087</span><a name="line.87"></a>
-<span class="sourceLineNo">088</span>  public String getProcName() {<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    return procName;<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>  public String getProcOwner() {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    return procOwner;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  }<a name="line.94"></a>
-<span class="sourceLineNo">095</span><a name="line.95"></a>
-<span class="sourceLineNo">096</span>  public ProcedureState getProcState() {<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    return procState;<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>  public boolean hasParentId() {<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    return (parentId != -1);<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  }<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>  public long getParentId() {<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    return parentId;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  }<a name="line.106"></a>
-<span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span>  public NonceKey getNonceKey() {<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    return nonceKey;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  }<a name="line.110"></a>
-<span class="sourceLineNo">111</span><a name="line.111"></a>
-<span class="sourceLineNo">112</span>  public boolean isFailed() {<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    return exception != null;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>  }<a name="line.114"></a>
-<span class="sourceLineNo">115</span><a name="line.115"></a>
-<span class="sourceLineNo">116</span>  public IOException getException() {<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    if (isFailed()) {<a name="line.117"></a>
-<span class="sourceLineNo">118</span>      return ForeignExceptionUtil.toIOException(exception);<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    }<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    return null;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>  }<a name="line.121"></a>
-<span class="sourceLineNo">122</span><a name="line.122"></a>
-<span class="sourceLineNo">123</span>  @InterfaceAudience.Private<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  public ForeignExceptionMessage getForeignExceptionMessage() {<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    return exception;<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 String getExceptionCause() {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    assert isFailed();<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    return exception.getGenericException().getClassName();<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>  public String getExceptionMessage() {<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    assert isFailed();<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    return exception.getGenericException().getMessage();<a name="line.135"></a>
-<span class="sourceLineNo">136</span>  }<a name="line.136"></a>
-<span class="sourceLineNo">137</span><a name="line.137"></a>
-<span class="sourceLineNo">138</span>  public String getExceptionFullMessage() {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    assert isFailed();<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    return getExceptionCause() + " - " + getExceptionMessage();<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>  public boolean hasResultData() {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    return result != null;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  }<a name="line.145"></a>
-<span class="sourceLineNo">146</span><a name="line.146"></a>
-<span class="sourceLineNo">147</span>  public byte[] getResult() {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    return result;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  }<a name="line.149"></a>
-<span class="sourceLineNo">150</span><a name="line.150"></a>
-<span class="sourceLineNo">151</span>  public long getStartTime() {<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    return startTime;<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>  public long getLastUpdate() {<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    return lastUpdate;<a name="line.156"></a>
-<span class="sourceLineNo">157</span>  }<a name="line.157"></a>
-<span class="sourceLineNo">158</span><a name="line.158"></a>
-<span class="sourceLineNo">159</span>  public long executionTime() {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    return lastUpdate - startTime;<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>  @InterfaceAudience.Private<a name="line.163"></a>
-<span class="sourceLineNo">164</span>  public boolean hasClientAckTime() {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    return clientAckTime &gt; 0;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  }<a name="line.166"></a>
-<span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span>  @InterfaceAudience.Private<a name="line.168"></a>
-<span class="sourceLineNo">169</span>  public long getClientAckTime() {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    return clientAckTime;<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>  @InterfaceAudience.Private<a name="line.173"></a>
-<span class="sourceLineNo">174</span>  public void setClientAckTime(final long timestamp) {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    this.clientAckTime = timestamp;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>  }<a name="line.176"></a>
-<span class="sourceLineNo">177</span><a name="line.177"></a>
-<span class="sourceLineNo">178</span>  /**<a name="line.178"></a>
-<span class="sourceLineNo">179</span>   * @return Convert the current {@link ProcedureInfo} into a Protocol Buffers Procedure<a name="line.179"></a>
-<span class="sourceLineNo">180</span>   * instance.<a name="line.180"></a>
-<span class="sourceLineNo">181</span>   */<a name="line.181"></a>
-<span class="sourceLineNo">182</span>  @InterfaceAudience.Private<a name="line.182"></a>
-<span class="sourceLineNo">183</span>  public static ProcedureProtos.Procedure convertToProcedureProto(<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      final ProcedureInfo procInfo) {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    ProcedureProtos.Procedure.Builder builder = ProcedureProtos.Procedure.newBuilder();<a name="line.185"></a>
-<span class="sourceLineNo">186</span><a name="line.186"></a>
-<span class="sourceLineNo">187</span>    builder.setClassName(procInfo.getProcName());<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    builder.setProcId(procInfo.getProcId());<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    builder.setStartTime(procInfo.getStartTime());<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    builder.setState(procInfo.getProcState());<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    builder.setLastUpdate(procInfo.getLastUpdate());<a name="line.191"></a>
-<span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span>    if (procInfo.hasParentId()) {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      builder.setParentId(procInfo.getParentId());<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    }<a name="line.195"></a>
-<span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span>    if (procInfo.getProcOwner() != null) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>       builder.setOwner(procInfo.getProcOwner());<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>    if (procInfo.isFailed()) {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>        builder.setException(procInfo.getForeignExceptionMessage());<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>
-<span class="sourceLineNo">205</span>    if (procInfo.hasResultData()) {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      builder.setResult(ByteStringer.wrap(procInfo.getResult()));<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>    return builder.build();<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>   * Helper to convert the protobuf object.<a name="line.213"></a>
-<span class="sourceLineNo">214</span>   * @return Convert the current Protocol Buffers Procedure to {@link ProcedureInfo}<a name="line.214"></a>
-<span class="sourceLineNo">215</span>   * instance.<a name="line.215"></a>
-<span class="sourceLineNo">216</span>   */<a name="line.216"></a>
-<span class="sourceLineNo">217</span>  @InterfaceAudience.Private<a name="line.217"></a>
-<span class="sourceLineNo">218</span>  public static ProcedureInfo convert(final ProcedureProtos.Procedure procProto) {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    NonceKey nonceKey = null;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    if (procProto.getNonce() != HConstants.NO_NONCE) {<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      nonceKey = new NonceKey(procProto.getNonceGroup(), procProto.getNonce());<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    }<a name="line.222"></a>
-<span class="sourceLineNo">223</span><a name="line.223"></a>
-<span class="sourceLineNo">224</span>    return new ProcedureInfo(<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      procProto.getProcId(),<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      procProto.getClassName(),<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      procProto.getOwner(),<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      procProto.getState(),<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      procProto.hasParentId() ? procProto.getParentId() : -1,<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      nonceKey,<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      procProto.hasException() ? procProto.getException() : null,<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      procProto.getLastUpdate(),<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      procProto.getStartTime(),<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      procProto.hasResult() ? procProto.getResult().toByteArray() : null);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>  }<a name="line.235"></a>
-<span class="sourceLineNo">236</span><a name="line.236"></a>
-<span class="sourceLineNo">237</span>  /**<a name="line.237"></a>
-<span class="sourceLineNo">238</span>   * Check if the user is this procedure's owner<a name="line.238"></a>
-<span class="sourceLineNo">239</span>   * @param procInfo the procedure to check<a name="line.239"></a>
-<span class="sourceLineNo">240</span>   * @param user the user<a name="line.240"></a>
-<span class="sourceLineNo">241</span>   * @return true if the user is the owner of the procedure,<a name="line.241"></a>
-<span class="sourceLineNo">242</span>   *   false otherwise or the owner is unknown.<a name="line.242"></a>
-<span class="sourceLineNo">243</span>   */<a name="line.243"></a>
-<span class="sourceLineNo">244</span>  @InterfaceAudience.Private<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  public static boolean isProcedureOwner(final ProcedureInfo procInfo, final User user) {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    if (user == null) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      return false;<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    }<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    String procOwner = procInfo.getProcOwner();<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    if (procOwner == null) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      return false;<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    }<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    return procOwner.equals(user.getShortName());<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">052</span>  @InterfaceAudience.Private<a name="line.52"></a>
+<span class="sourceLineNo">053</span>  public ProcedureInfo(<a name="line.53"></a>
+<span class="sourceLineNo">054</span>      final long procId,<a name="line.54"></a>
+<span class="sourceLineNo">055</span>      final String procName,<a name="line.55"></a>
+<span class="sourceLineNo">056</span>      final String procOwner,<a name="line.56"></a>
+<span class="sourceLineNo">057</span>      final ProcedureState procState,<a name="line.57"></a>
+<span class="sourceLineNo">058</span>      final long parentId,<a name="line.58"></a>
+<span class="sourceLineNo">059</span>      final NonceKey nonceKey,<a name="line.59"></a>
+<span class="sourceLineNo">060</span>      final ForeignExceptionMessage exception,<a name="line.60"></a>
+<span class="sourceLineNo">061</span>      final long lastUpdate,<a name="line.61"></a>
+<span class="sourceLineNo">062</span>      final long startTime,<a name="line.62"></a>
+<span class="sourceLineNo">063</span>      final byte[] result) {<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    this.procId = procId;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    this.procName = procName;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    this.procOwner = procOwner;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    this.procState = procState;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    this.parentId = parentId;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    this.nonceKey = nonceKey;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    this.lastUpdate = lastUpdate;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    this.startTime = startTime;<a name="line.71"></a>
+<span class="sourceLineNo">072</span><a name="line.72"></a>
+<span class="sourceLineNo">073</span>    // If the procedure is completed, we should treat exception and result differently<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    this.exception = exception;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    this.result = result;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>  }<a name="line.76"></a>
+<span class="sourceLineNo">077</span><a name="line.77"></a>
+<span class="sourceLineNo">078</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="CN_IDIOM_NO_SUPER_CALL",<a name="line.78"></a>
+<span class="sourceLineNo">079</span>      justification="Intentional; calling super class clone doesn't make sense here.")<a name="line.79"></a>
+<span class="sourceLineNo">080</span>  public ProcedureInfo clone() {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    return new ProcedureInfo(procId, procName, procOwner, procState, parentId, nonceKey,<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      exception, lastUpdate, startTime, result);<a name="line.82"></a>
+<span class="sourceLineNo">083</span>  }<a name="line.83"></a>
+<span class="sourceLineNo">084</span><a name="line.84"></a>
+<span class="sourceLineNo">085</span>  public long getProcId() {<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    return procId;<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>  public String getProcName() {<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    return procName;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  }<a name="line.91"></a>
+<span class="sourceLineNo">092</span><a name="line.92"></a>
+<span class="sourceLineNo">093</span>  public String getProcOwner() {<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    return procOwner;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  }<a name="line.95"></a>
+<span class="sourceLineNo">096</span><a name="line.96"></a>
+<span class="sourceLineNo">097</span>  public ProcedureState getProcState() {<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    return procState;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  }<a name="line.99"></a>
+<span class="sourceLineNo">100</span><a name="line.100"></a>
+<span class="sourceLineNo">101</span>  public boolean hasParentId() {<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    return (parentId != -1);<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  }<a name="line.103"></a>
+<span class="sourceLineNo">104</span><a name="line.104"></a>
+<span class="sourceLineNo">105</span>  public long getParentId() {<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    return parentId;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  }<a name="line.107"></a>
+<span class="sourceLineNo">108</span><a name="line.108"></a>
+<span class="sourceLineNo">109</span>  public NonceKey getNonceKey() {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    return nonceKey;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>  }<a name="line.111"></a>
+<span class="sourceLineNo">112</span><a name="line.112"></a>
+<span class="sourceLineNo">113</span>  public boolean isFailed() {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    return exception != null;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  }<a name="line.115"></a>
+<span class="sourceLineNo">116</span><a name="line.116"></a>
+<span class="sourceLineNo">117</span>  public IOException getException() {<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    if (isFailed()) {<a name="line.118"></a>
+<span class="sourceLineNo">119</span>      return ForeignExceptionUtil.toIOException(exception);<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    }<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    return null;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>  }<a name="line.122"></a>
+<span class="sourceLineNo">123</span><a name="line.123"></a>
+<span class="sourceLineNo">124</span>  @InterfaceAudience.Private<a name="line.124"></a>
+<span class="sourceLineNo">125</span>  public ForeignExceptionMessage getForeignExceptionMessage() {<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    return exception;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>  }<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span>  public String getExceptionCause() {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    assert isFailed();<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    return exception.getGenericException().getClassName();<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>  public String getExceptionMessage() {<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    assert isFailed();<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    return exception.getGenericException().getMessage();<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>  public String getExceptionFullMessage() {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    assert isFailed();<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    return getExceptionCause() + " - " + getExceptionMessage();<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  }<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span>  public boolean hasResultData() {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    return result != 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>  public byte[] getResult() {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    return result;<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>  public long getStartTime() {<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    return startTime;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  }<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span>  public long getLastUpdate() {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    return lastUpdate;<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>  public long executionTime() {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    return lastUpdate - startTime;<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>  @InterfaceAudience.Private<a name="line.164"></a>
+<span class="sourceLineNo">165</span>  public boolean hasClientAckTime() {<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    return clientAckTime &gt; 0;<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>  @InterfaceAudience.Private<a name="line.169"></a>
+<span class="sourceLineNo">170</span>  public long getClientAckTime() {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    return clientAckTime;<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>  @InterfaceAudience.Private<a name="line.174"></a>
+<span class="sourceLineNo">175</span>  public void setClientAckTime(final long timestamp) {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    this.clientAckTime = timestamp;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>  }<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>   * @return Convert the current {@link ProcedureInfo} into a Protocol Buffers Procedure<a name="line.180"></a>
+<span class="sourceLineNo">181</span>   * instance.<a name="line.181"></a>
+<span class="sourceLineNo">182</span>   */<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  @InterfaceAudience.Private<a name="line.183"></a>
+<span class="sourceLineNo">184</span>  public static ProcedureProtos.Procedure convertToProcedureProto(<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      final ProcedureInfo procInfo) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    ProcedureProtos.Procedure.Builder builder = ProcedureProtos.Procedure.newBuilder();<a name="line.186"></a>
+<span class="sourceLineNo">187</span><a name="line.187"></a>
+<span class="sourceLineNo">188</span>    builder.setClassName(procInfo.getProcName());<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    builder.setProcId(procInfo.getProcId());<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    builder.setStartTime(procInfo.getStartTime());<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    builder.setState(procInfo.getProcState());<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    builder.setLastUpdate(procInfo.getLastUpdate());<a name="line.192"></a>
+<span class="sourceLineNo">193</span><a name="line.193"></a>
+<span class="sourceLineNo">194</span>    if (procInfo.hasParentId()) {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      builder.setParentId(procInfo.getParentId());<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>    if (procInfo.getProcOwner() != null) {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>       builder.setOwner(procInfo.getProcOwner());<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>    if (procInfo.isFailed()) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>        builder.setException(procInfo.getForeignExceptionMessage());<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    }<a name="line.204"></a>
+<span class="sourceLineNo">205</span><a name="line.205"></a>
+<span class="sourceLineNo">206</span>    if (procInfo.hasResultData()) {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      builder.setResult(ByteStringer.wrap(procInfo.getResult()));<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>    return builder.build();<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>  /**<a name="line.213"></a>
+<span class="sourceLineNo">214</span>   * Helper to convert the protobuf object.<a name="line.214"></a>
+<span class="sourceLineNo">215</span>   * @return Convert the current Protocol Buffers Procedure to {@link ProcedureInfo}<a name="line.215"></a>
+<span class="sourceLineNo">216</span>   * instance.<a name="line.216"></a>
+<span class="sourceLineNo">217</span>   */<a name="line.217"></a>
+<span class="sourceLineNo">218</span>  @InterfaceAudience.Private<a name="line.218"></a>
+<span class="sourceLineNo">219</span>  public static ProcedureInfo convert(final ProcedureProtos.Procedure procProto) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    NonceKey nonceKey = null;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    if (procProto.getNonce() != HConstants.NO_NONCE) {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      nonceKey = new NonceKey(procProto.getNonceGroup(), procProto.getNonce());<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    }<a name="line.223"></a>
+<span class="sourceLineNo">224</span><a name="line.224"></a>
+<span class="sourceLineNo">225</span>    return new ProcedureInfo(<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      procProto.getProcId(),<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      procProto.getClassName(),<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      procProto.getOwner(),<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      procProto.getState(),<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      procProto.hasParentId() ? procProto.getParentId() : -1,<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      nonceKey,<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      procProto.hasException() ? procProto.getException() : null,<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      procProto.getLastUpdate(),<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      procProto.getStartTime(),<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      procProto.hasResult() ? procProto.getResult().toByteArray() : null);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>  }<a name="line.236"></a>
+<span class="sourceLineNo">237</span><a name="line.237"></a>
+<span class="sourceLineNo">238</span>  /**<a name="line.238"></a>
+<span class="sourceLineNo">239</span>   * Check if the user is this procedure's owner<a name="line.239"></a>
+<span class="sourceLineNo">240</span>   * @param procInfo the procedure to check<a name="line.240"></a>
+<span class="sourceLineNo">241</span>   * @param user the user<a name="line.241"></a>
+<span class="sourceLineNo">242</span>   * @return true if the user is the owner of the procedure,<a name="line.242"></a>
+<span class="sourceLineNo">243</span>   *   false otherwise or the owner is unknown.<a name="line.243"></a>
+<span class="sourceLineNo">244</span>   */<a name="line.244"></a>
+<span class="sourceLineNo">245</span>  @InterfaceAudience.Private<a name="line.245"></a>
+<span class="sourceLineNo">246</span>  public static boolean isProcedureOwner(final ProcedureInfo procInfo, final User user) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    if (user == null) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      return false;<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    }<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    String procOwner = procInfo.getProcOwner();<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    if (procOwner == null) {<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      return false;<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    }<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    return procOwner.equals(user.getShortName());<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>
 
 
 


[32/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/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 1d64963..a232cc8 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
@@ -6980,880 +6980,882 @@
 <span class="sourceLineNo">6972</span>      lock(this.updatesLock.readLock());<a name="line.6972"></a>
 <span class="sourceLineNo">6973</span>      try {<a name="line.6973"></a>
 <span class="sourceLineNo">6974</span>        Result cpResult = doCoprocessorPreCall(op, mutation);<a name="line.6974"></a>
-<span class="sourceLineNo">6975</span>        if (cpResult != null) return cpResult;<a name="line.6975"></a>
-<span class="sourceLineNo">6976</span>        Durability effectiveDurability = getEffectiveDurability(mutation.getDurability());<a name="line.6976"></a>
-<span class="sourceLineNo">6977</span>        Map&lt;Store, List&lt;Cell&gt;&gt; forMemStore =<a name="line.6977"></a>
-<span class="sourceLineNo">6978</span>            new HashMap&lt;Store, List&lt;Cell&gt;&gt;(mutation.getFamilyCellMap().size());<a name="line.6978"></a>
-<span class="sourceLineNo">6979</span>        // Reckon Cells to apply to WAL --  in returned walEdit -- and what to add to memstore and<a name="line.6979"></a>
-<span class="sourceLineNo">6980</span>        // what to return back to the client (in 'forMemStore' and 'results' respectively).<a name="line.6980"></a>
-<span class="sourceLineNo">6981</span>        WALEdit walEdit = reckonDeltas(op, mutation, effectiveDurability, forMemStore, results);<a name="line.6981"></a>
-<span class="sourceLineNo">6982</span>        // Actually write to WAL now if a walEdit to apply.<a name="line.6982"></a>
-<span class="sourceLineNo">6983</span>        if (walEdit != null &amp;&amp; !walEdit.isEmpty()) {<a name="line.6983"></a>
-<span class="sourceLineNo">6984</span>          writeEntry = doWALAppend(walEdit, durability, nonceGroup, nonce);<a name="line.6984"></a>
-<span class="sourceLineNo">6985</span>        } else {<a name="line.6985"></a>
-<span class="sourceLineNo">6986</span>          // If walEdits is empty, it means we skipped the WAL; update counters and start an mvcc<a name="line.6986"></a>
-<span class="sourceLineNo">6987</span>          // transaction.<a name="line.6987"></a>
-<span class="sourceLineNo">6988</span>          recordMutationWithoutWal(mutation.getFamilyCellMap());<a name="line.6988"></a>
-<span class="sourceLineNo">6989</span>          writeEntry = mvcc.begin();<a name="line.6989"></a>
-<span class="sourceLineNo">6990</span>        }<a name="line.6990"></a>
-<span class="sourceLineNo">6991</span>        // Now write to MemStore. Do it a column family at a time.<a name="line.6991"></a>
-<span class="sourceLineNo">6992</span>        long sequenceId = writeEntry.getWriteNumber();<a name="line.6992"></a>
-<span class="sourceLineNo">6993</span>        for (Map.Entry&lt;Store, List&lt;Cell&gt;&gt; e: forMemStore.entrySet()) {<a name="line.6993"></a>
-<span class="sourceLineNo">6994</span>          accumulatedResultSize +=<a name="line.6994"></a>
-<span class="sourceLineNo">6995</span>              applyToMemstore(e.getKey(), e.getValue(), true, false, sequenceId);<a name="line.6995"></a>
-<span class="sourceLineNo">6996</span>        }<a name="line.6996"></a>
-<span class="sourceLineNo">6997</span>        mvcc.completeAndWait(writeEntry);<a name="line.6997"></a>
-<span class="sourceLineNo">6998</span>        writeEntry = null;<a name="line.6998"></a>
-<span class="sourceLineNo">6999</span>      } finally {<a name="line.6999"></a>
-<span class="sourceLineNo">7000</span>        this.updatesLock.readLock().unlock();<a name="line.7000"></a>
-<span class="sourceLineNo">7001</span>      }<a name="line.7001"></a>
-<span class="sourceLineNo">7002</span>      // If results is null, then client asked that we not return the calculated results.<a name="line.7002"></a>
-<span class="sourceLineNo">7003</span>      return results !=  null? Result.create(results): null;<a name="line.7003"></a>
-<span class="sourceLineNo">7004</span>    } finally {<a name="line.7004"></a>
-<span class="sourceLineNo">7005</span>      // Call complete always, even on success. doDelta is doing a Get READ_UNCOMMITTED when it goes<a name="line.7005"></a>
-<span class="sourceLineNo">7006</span>      // to get current value under an exclusive lock so no need so no need to wait to return to<a name="line.7006"></a>
-<span class="sourceLineNo">7007</span>      // the client. Means only way to read-your-own-increment or append is to come in with an<a name="line.7007"></a>
-<span class="sourceLineNo">7008</span>      // a 0 increment.<a name="line.7008"></a>
-<span class="sourceLineNo">7009</span>      if (writeEntry != null) mvcc.complete(writeEntry);<a name="line.7009"></a>
-<span class="sourceLineNo">7010</span>      rowLock.release();<a name="line.7010"></a>
-<span class="sourceLineNo">7011</span>      // Request a cache flush if over the limit.  Do it outside update lock.<a name="line.7011"></a>
-<span class="sourceLineNo">7012</span>      if (isFlushSize(this.addAndGetGlobalMemstoreSize(accumulatedResultSize))) requestFlush();<a name="line.7012"></a>
-<span class="sourceLineNo">7013</span>      closeRegionOperation(op);<a name="line.7013"></a>
-<span class="sourceLineNo">7014</span>      if (this.metricsRegion != null) {<a name="line.7014"></a>
-<span class="sourceLineNo">7015</span>        switch (op) {<a name="line.7015"></a>
-<span class="sourceLineNo">7016</span>          case INCREMENT:<a name="line.7016"></a>
-<span class="sourceLineNo">7017</span>            this.metricsRegion.updateIncrement();<a name="line.7017"></a>
-<span class="sourceLineNo">7018</span>            break;<a name="line.7018"></a>
-<span class="sourceLineNo">7019</span>          case APPEND:<a name="line.7019"></a>
-<span class="sourceLineNo">7020</span>            this.metricsRegion.updateAppend();<a name="line.7020"></a>
-<span class="sourceLineNo">7021</span>            break;<a name="line.7021"></a>
-<span class="sourceLineNo">7022</span>          default:<a name="line.7022"></a>
+<span class="sourceLineNo">6975</span>        if (cpResult != null) {<a name="line.6975"></a>
+<span class="sourceLineNo">6976</span>          return returnResults? cpResult: null;<a name="line.6976"></a>
+<span class="sourceLineNo">6977</span>        }<a name="line.6977"></a>
+<span class="sourceLineNo">6978</span>        Durability effectiveDurability = getEffectiveDurability(mutation.getDurability());<a name="line.6978"></a>
+<span class="sourceLineNo">6979</span>        Map&lt;Store, List&lt;Cell&gt;&gt; forMemStore =<a name="line.6979"></a>
+<span class="sourceLineNo">6980</span>            new HashMap&lt;Store, List&lt;Cell&gt;&gt;(mutation.getFamilyCellMap().size());<a name="line.6980"></a>
+<span class="sourceLineNo">6981</span>        // Reckon Cells to apply to WAL --  in returned walEdit -- and what to add to memstore and<a name="line.6981"></a>
+<span class="sourceLineNo">6982</span>        // what to return back to the client (in 'forMemStore' and 'results' respectively).<a name="line.6982"></a>
+<span class="sourceLineNo">6983</span>        WALEdit walEdit = reckonDeltas(op, mutation, effectiveDurability, forMemStore, results);<a name="line.6983"></a>
+<span class="sourceLineNo">6984</span>        // Actually write to WAL now if a walEdit to apply.<a name="line.6984"></a>
+<span class="sourceLineNo">6985</span>        if (walEdit != null &amp;&amp; !walEdit.isEmpty()) {<a name="line.6985"></a>
+<span class="sourceLineNo">6986</span>          writeEntry = doWALAppend(walEdit, durability, nonceGroup, nonce);<a name="line.6986"></a>
+<span class="sourceLineNo">6987</span>        } else {<a name="line.6987"></a>
+<span class="sourceLineNo">6988</span>          // If walEdits is empty, it means we skipped the WAL; update counters and start an mvcc<a name="line.6988"></a>
+<span class="sourceLineNo">6989</span>          // transaction.<a name="line.6989"></a>
+<span class="sourceLineNo">6990</span>          recordMutationWithoutWal(mutation.getFamilyCellMap());<a name="line.6990"></a>
+<span class="sourceLineNo">6991</span>          writeEntry = mvcc.begin();<a name="line.6991"></a>
+<span class="sourceLineNo">6992</span>        }<a name="line.6992"></a>
+<span class="sourceLineNo">6993</span>        // Now write to MemStore. Do it a column family at a time.<a name="line.6993"></a>
+<span class="sourceLineNo">6994</span>        long sequenceId = writeEntry.getWriteNumber();<a name="line.6994"></a>
+<span class="sourceLineNo">6995</span>        for (Map.Entry&lt;Store, List&lt;Cell&gt;&gt; e: forMemStore.entrySet()) {<a name="line.6995"></a>
+<span class="sourceLineNo">6996</span>          accumulatedResultSize +=<a name="line.6996"></a>
+<span class="sourceLineNo">6997</span>              applyToMemstore(e.getKey(), e.getValue(), true, false, sequenceId);<a name="line.6997"></a>
+<span class="sourceLineNo">6998</span>        }<a name="line.6998"></a>
+<span class="sourceLineNo">6999</span>        mvcc.completeAndWait(writeEntry);<a name="line.6999"></a>
+<span class="sourceLineNo">7000</span>        writeEntry = null;<a name="line.7000"></a>
+<span class="sourceLineNo">7001</span>      } finally {<a name="line.7001"></a>
+<span class="sourceLineNo">7002</span>        this.updatesLock.readLock().unlock();<a name="line.7002"></a>
+<span class="sourceLineNo">7003</span>      }<a name="line.7003"></a>
+<span class="sourceLineNo">7004</span>      // If results is null, then client asked that we not return the calculated results.<a name="line.7004"></a>
+<span class="sourceLineNo">7005</span>      return results != null &amp;&amp; returnResults? Result.create(results): null;<a name="line.7005"></a>
+<span class="sourceLineNo">7006</span>    } finally {<a name="line.7006"></a>
+<span class="sourceLineNo">7007</span>      // Call complete always, even on success. doDelta is doing a Get READ_UNCOMMITTED when it goes<a name="line.7007"></a>
+<span class="sourceLineNo">7008</span>      // to get current value under an exclusive lock so no need so no need to wait to return to<a name="line.7008"></a>
+<span class="sourceLineNo">7009</span>      // the client. Means only way to read-your-own-increment or append is to come in with an<a name="line.7009"></a>
+<span class="sourceLineNo">7010</span>      // a 0 increment.<a name="line.7010"></a>
+<span class="sourceLineNo">7011</span>      if (writeEntry != null) mvcc.complete(writeEntry);<a name="line.7011"></a>
+<span class="sourceLineNo">7012</span>      rowLock.release();<a name="line.7012"></a>
+<span class="sourceLineNo">7013</span>      // Request a cache flush if over the limit.  Do it outside update lock.<a name="line.7013"></a>
+<span class="sourceLineNo">7014</span>      if (isFlushSize(this.addAndGetGlobalMemstoreSize(accumulatedResultSize))) requestFlush();<a name="line.7014"></a>
+<span class="sourceLineNo">7015</span>      closeRegionOperation(op);<a name="line.7015"></a>
+<span class="sourceLineNo">7016</span>      if (this.metricsRegion != null) {<a name="line.7016"></a>
+<span class="sourceLineNo">7017</span>        switch (op) {<a name="line.7017"></a>
+<span class="sourceLineNo">7018</span>          case INCREMENT:<a name="line.7018"></a>
+<span class="sourceLineNo">7019</span>            this.metricsRegion.updateIncrement();<a name="line.7019"></a>
+<span class="sourceLineNo">7020</span>            break;<a name="line.7020"></a>
+<span class="sourceLineNo">7021</span>          case APPEND:<a name="line.7021"></a>
+<span class="sourceLineNo">7022</span>            this.metricsRegion.updateAppend();<a name="line.7022"></a>
 <span class="sourceLineNo">7023</span>            break;<a name="line.7023"></a>
-<span class="sourceLineNo">7024</span>        }<a name="line.7024"></a>
-<span class="sourceLineNo">7025</span>      }<a name="line.7025"></a>
-<span class="sourceLineNo">7026</span>    }<a name="line.7026"></a>
-<span class="sourceLineNo">7027</span>  }<a name="line.7027"></a>
-<span class="sourceLineNo">7028</span><a name="line.7028"></a>
-<span class="sourceLineNo">7029</span>  private WriteEntry doWALAppend(WALEdit walEdit, Durability durability, long nonceGroup,<a name="line.7029"></a>
-<span class="sourceLineNo">7030</span>      long nonce)<a name="line.7030"></a>
-<span class="sourceLineNo">7031</span>  throws IOException {<a name="line.7031"></a>
-<span class="sourceLineNo">7032</span>    return doWALAppend(walEdit, durability, WALKey.EMPTY_UUIDS, System.currentTimeMillis(),<a name="line.7032"></a>
-<span class="sourceLineNo">7033</span>      nonceGroup, nonce);<a name="line.7033"></a>
-<span class="sourceLineNo">7034</span>  }<a name="line.7034"></a>
-<span class="sourceLineNo">7035</span><a name="line.7035"></a>
-<span class="sourceLineNo">7036</span>  /**<a name="line.7036"></a>
-<span class="sourceLineNo">7037</span>   * @return writeEntry associated with this append<a name="line.7037"></a>
-<span class="sourceLineNo">7038</span>   */<a name="line.7038"></a>
-<span class="sourceLineNo">7039</span>  private WriteEntry doWALAppend(WALEdit walEdit, Durability durability, List&lt;UUID&gt; clusterIds,<a name="line.7039"></a>
-<span class="sourceLineNo">7040</span>      long now, long nonceGroup, long nonce)<a name="line.7040"></a>
-<span class="sourceLineNo">7041</span>  throws IOException {<a name="line.7041"></a>
-<span class="sourceLineNo">7042</span>    WriteEntry writeEntry = null;<a name="line.7042"></a>
-<span class="sourceLineNo">7043</span>    // Using default cluster id, as this can only happen in the originating cluster.<a name="line.7043"></a>
-<span class="sourceLineNo">7044</span>    // A slave cluster receives the final value (not the delta) as a Put. We use HLogKey<a name="line.7044"></a>
-<span class="sourceLineNo">7045</span>    // here instead of WALKey directly to support legacy coprocessors.<a name="line.7045"></a>
-<span class="sourceLineNo">7046</span>    WALKey walKey = new WALKey(this.getRegionInfo().getEncodedNameAsBytes(),<a name="line.7046"></a>
-<span class="sourceLineNo">7047</span>      this.htableDescriptor.getTableName(), WALKey.NO_SEQUENCE_ID, now, clusterIds,<a name="line.7047"></a>
-<span class="sourceLineNo">7048</span>      nonceGroup, nonce, mvcc);<a name="line.7048"></a>
-<span class="sourceLineNo">7049</span>    try {<a name="line.7049"></a>
-<span class="sourceLineNo">7050</span>      long txid =<a name="line.7050"></a>
-<span class="sourceLineNo">7051</span>        this.wal.append(this.htableDescriptor, this.getRegionInfo(), walKey, walEdit, true);<a name="line.7051"></a>
-<span class="sourceLineNo">7052</span>      // Call sync on our edit.<a name="line.7052"></a>
-<span class="sourceLineNo">7053</span>      if (txid != 0) sync(txid, durability);<a name="line.7053"></a>
-<span class="sourceLineNo">7054</span>      writeEntry = walKey.getWriteEntry();<a name="line.7054"></a>
-<span class="sourceLineNo">7055</span>    } catch (IOException ioe) {<a name="line.7055"></a>
-<span class="sourceLineNo">7056</span>      if (walKey != null) mvcc.complete(walKey.getWriteEntry());<a name="line.7056"></a>
-<span class="sourceLineNo">7057</span>      throw ioe;<a name="line.7057"></a>
-<span class="sourceLineNo">7058</span>    }<a name="line.7058"></a>
-<span class="sourceLineNo">7059</span>    return writeEntry;<a name="line.7059"></a>
-<span class="sourceLineNo">7060</span>  }<a name="line.7060"></a>
-<span class="sourceLineNo">7061</span><a name="line.7061"></a>
-<span class="sourceLineNo">7062</span>  /**<a name="line.7062"></a>
-<span class="sourceLineNo">7063</span>   * Do coprocessor pre-increment or pre-append call.<a name="line.7063"></a>
-<span class="sourceLineNo">7064</span>   * @return Result returned out of the coprocessor, which means bypass all further processing and<a name="line.7064"></a>
-<span class="sourceLineNo">7065</span>   *  return the proffered Result instead, or null which means proceed.<a name="line.7065"></a>
-<span class="sourceLineNo">7066</span>   */<a name="line.7066"></a>
-<span class="sourceLineNo">7067</span>  private Result doCoprocessorPreCall(final Operation op, final Mutation mutation)<a name="line.7067"></a>
-<span class="sourceLineNo">7068</span>  throws IOException {<a name="line.7068"></a>
-<span class="sourceLineNo">7069</span>    Result result = null;<a name="line.7069"></a>
-<span class="sourceLineNo">7070</span>    if (this.coprocessorHost != null) {<a name="line.7070"></a>
-<span class="sourceLineNo">7071</span>      switch(op) {<a name="line.7071"></a>
-<span class="sourceLineNo">7072</span>        case INCREMENT:<a name="line.7072"></a>
-<span class="sourceLineNo">7073</span>          result = this.coprocessorHost.preIncrementAfterRowLock((Increment)mutation);<a name="line.7073"></a>
-<span class="sourceLineNo">7074</span>          break;<a name="line.7074"></a>
-<span class="sourceLineNo">7075</span>        case APPEND:<a name="line.7075"></a>
-<span class="sourceLineNo">7076</span>          result = this.coprocessorHost.preAppendAfterRowLock((Append)mutation);<a name="line.7076"></a>
-<span class="sourceLineNo">7077</span>          break;<a name="line.7077"></a>
-<span class="sourceLineNo">7078</span>        default: throw new UnsupportedOperationException(op.toString());<a name="line.7078"></a>
-<span class="sourceLineNo">7079</span>      }<a name="line.7079"></a>
-<span class="sourceLineNo">7080</span>    }<a name="line.7080"></a>
-<span class="sourceLineNo">7081</span>    return result;<a name="line.7081"></a>
-<span class="sourceLineNo">7082</span>  }<a name="line.7082"></a>
-<span class="sourceLineNo">7083</span><a name="line.7083"></a>
-<span class="sourceLineNo">7084</span>  /**<a name="line.7084"></a>
-<span class="sourceLineNo">7085</span>   * Reckon the Cells to apply to WAL, memstore, and to return to the Client; these Sets are not<a name="line.7085"></a>
-<span class="sourceLineNo">7086</span>   * always the same dependent on whether to write WAL or if the amount to increment is zero (in<a name="line.7086"></a>
-<span class="sourceLineNo">7087</span>   * this case we write back nothing, just return latest Cell value to the client).<a name="line.7087"></a>
-<span class="sourceLineNo">7088</span>   *<a name="line.7088"></a>
-<span class="sourceLineNo">7089</span>   * @param results Fill in here what goes back to the Client if it is non-null (if null, client<a name="line.7089"></a>
-<span class="sourceLineNo">7090</span>   *  doesn't want results).<a name="line.7090"></a>
-<span class="sourceLineNo">7091</span>   * @param forMemStore Fill in here what to apply to the MemStore (by Store).<a name="line.7091"></a>
-<span class="sourceLineNo">7092</span>   * @return A WALEdit to apply to WAL or null if we are to skip the WAL.<a name="line.7092"></a>
-<span class="sourceLineNo">7093</span>   */<a name="line.7093"></a>
-<span class="sourceLineNo">7094</span>  private WALEdit reckonDeltas(final Operation op, final Mutation mutation,<a name="line.7094"></a>
-<span class="sourceLineNo">7095</span>      final Durability effectiveDurability, final Map&lt;Store, List&lt;Cell&gt;&gt; forMemStore,<a name="line.7095"></a>
-<span class="sourceLineNo">7096</span>      final List&lt;Cell&gt; results)<a name="line.7096"></a>
-<span class="sourceLineNo">7097</span>  throws IOException {<a name="line.7097"></a>
-<span class="sourceLineNo">7098</span>    WALEdit walEdit = null;<a name="line.7098"></a>
-<span class="sourceLineNo">7099</span>    long now = EnvironmentEdgeManager.currentTime();<a name="line.7099"></a>
-<span class="sourceLineNo">7100</span>    final boolean writeToWAL = effectiveDurability != Durability.SKIP_WAL;<a name="line.7100"></a>
-<span class="sourceLineNo">7101</span>    // Process a Store/family at a time.<a name="line.7101"></a>
-<span class="sourceLineNo">7102</span>    for (Map.Entry&lt;byte [], List&lt;Cell&gt;&gt; entry: mutation.getFamilyCellMap().entrySet()) {<a name="line.7102"></a>
-<span class="sourceLineNo">7103</span>      final byte [] columnFamilyName = entry.getKey();<a name="line.7103"></a>
-<span class="sourceLineNo">7104</span>      List&lt;Cell&gt; deltas = entry.getValue();<a name="line.7104"></a>
-<span class="sourceLineNo">7105</span>      Store store = this.stores.get(columnFamilyName);<a name="line.7105"></a>
-<span class="sourceLineNo">7106</span>      // Reckon for the Store what to apply to WAL and MemStore.<a name="line.7106"></a>
-<span class="sourceLineNo">7107</span>      List&lt;Cell&gt; toApply =<a name="line.7107"></a>
-<span class="sourceLineNo">7108</span>        reckonDeltasByStore(store, op, mutation, effectiveDurability, now, deltas, results);<a name="line.7108"></a>
-<span class="sourceLineNo">7109</span>      if (!toApply.isEmpty()) {<a name="line.7109"></a>
-<span class="sourceLineNo">7110</span>        forMemStore.put(store, toApply);<a name="line.7110"></a>
-<span class="sourceLineNo">7111</span>        if (writeToWAL) {<a name="line.7111"></a>
-<span class="sourceLineNo">7112</span>          if (walEdit == null) {<a name="line.7112"></a>
-<span class="sourceLineNo">7113</span>            walEdit = new WALEdit();<a name="line.7113"></a>
-<span class="sourceLineNo">7114</span>          }<a name="line.7114"></a>
-<span class="sourceLineNo">7115</span>          walEdit.getCells().addAll(toApply);<a name="line.7115"></a>
-<span class="sourceLineNo">7116</span>        }<a name="line.7116"></a>
-<span class="sourceLineNo">7117</span>      }<a name="line.7117"></a>
-<span class="sourceLineNo">7118</span>    }<a name="line.7118"></a>
-<span class="sourceLineNo">7119</span>    return walEdit;<a name="line.7119"></a>
-<span class="sourceLineNo">7120</span>  }<a name="line.7120"></a>
-<span class="sourceLineNo">7121</span><a name="line.7121"></a>
-<span class="sourceLineNo">7122</span>  /**<a name="line.7122"></a>
-<span class="sourceLineNo">7123</span>   * Reckon the Cells to apply to WAL, memstore, and to return to the Client in passed<a name="line.7123"></a>
-<span class="sourceLineNo">7124</span>   * column family/Store.<a name="line.7124"></a>
-<span class="sourceLineNo">7125</span>   *<a name="line.7125"></a>
-<span class="sourceLineNo">7126</span>   * Does Get of current value and then adds passed in deltas for this Store returning the result.<a name="line.7126"></a>
+<span class="sourceLineNo">7024</span>          default:<a name="line.7024"></a>
+<span class="sourceLineNo">7025</span>            break;<a name="line.7025"></a>
+<span class="sourceLineNo">7026</span>        }<a name="line.7026"></a>
+<span class="sourceLineNo">7027</span>      }<a name="line.7027"></a>
+<span class="sourceLineNo">7028</span>    }<a name="line.7028"></a>
+<span class="sourceLineNo">7029</span>  }<a name="line.7029"></a>
+<span class="sourceLineNo">7030</span><a name="line.7030"></a>
+<span class="sourceLineNo">7031</span>  private WriteEntry doWALAppend(WALEdit walEdit, Durability durability, long nonceGroup,<a name="line.7031"></a>
+<span class="sourceLineNo">7032</span>      long nonce)<a name="line.7032"></a>
+<span class="sourceLineNo">7033</span>  throws IOException {<a name="line.7033"></a>
+<span class="sourceLineNo">7034</span>    return doWALAppend(walEdit, durability, WALKey.EMPTY_UUIDS, System.currentTimeMillis(),<a name="line.7034"></a>
+<span class="sourceLineNo">7035</span>      nonceGroup, nonce);<a name="line.7035"></a>
+<span class="sourceLineNo">7036</span>  }<a name="line.7036"></a>
+<span class="sourceLineNo">7037</span><a name="line.7037"></a>
+<span class="sourceLineNo">7038</span>  /**<a name="line.7038"></a>
+<span class="sourceLineNo">7039</span>   * @return writeEntry associated with this append<a name="line.7039"></a>
+<span class="sourceLineNo">7040</span>   */<a name="line.7040"></a>
+<span class="sourceLineNo">7041</span>  private WriteEntry doWALAppend(WALEdit walEdit, Durability durability, List&lt;UUID&gt; clusterIds,<a name="line.7041"></a>
+<span class="sourceLineNo">7042</span>      long now, long nonceGroup, long nonce)<a name="line.7042"></a>
+<span class="sourceLineNo">7043</span>  throws IOException {<a name="line.7043"></a>
+<span class="sourceLineNo">7044</span>    WriteEntry writeEntry = null;<a name="line.7044"></a>
+<span class="sourceLineNo">7045</span>    // Using default cluster id, as this can only happen in the originating cluster.<a name="line.7045"></a>
+<span class="sourceLineNo">7046</span>    // A slave cluster receives the final value (not the delta) as a Put. We use HLogKey<a name="line.7046"></a>
+<span class="sourceLineNo">7047</span>    // here instead of WALKey directly to support legacy coprocessors.<a name="line.7047"></a>
+<span class="sourceLineNo">7048</span>    WALKey walKey = new WALKey(this.getRegionInfo().getEncodedNameAsBytes(),<a name="line.7048"></a>
+<span class="sourceLineNo">7049</span>      this.htableDescriptor.getTableName(), WALKey.NO_SEQUENCE_ID, now, clusterIds,<a name="line.7049"></a>
+<span class="sourceLineNo">7050</span>      nonceGroup, nonce, mvcc);<a name="line.7050"></a>
+<span class="sourceLineNo">7051</span>    try {<a name="line.7051"></a>
+<span class="sourceLineNo">7052</span>      long txid =<a name="line.7052"></a>
+<span class="sourceLineNo">7053</span>        this.wal.append(this.htableDescriptor, this.getRegionInfo(), walKey, walEdit, true);<a name="line.7053"></a>
+<span class="sourceLineNo">7054</span>      // Call sync on our edit.<a name="line.7054"></a>
+<span class="sourceLineNo">7055</span>      if (txid != 0) sync(txid, durability);<a name="line.7055"></a>
+<span class="sourceLineNo">7056</span>      writeEntry = walKey.getWriteEntry();<a name="line.7056"></a>
+<span class="sourceLineNo">7057</span>    } catch (IOException ioe) {<a name="line.7057"></a>
+<span class="sourceLineNo">7058</span>      if (walKey != null) mvcc.complete(walKey.getWriteEntry());<a name="line.7058"></a>
+<span class="sourceLineNo">7059</span>      throw ioe;<a name="line.7059"></a>
+<span class="sourceLineNo">7060</span>    }<a name="line.7060"></a>
+<span class="sourceLineNo">7061</span>    return writeEntry;<a name="line.7061"></a>
+<span class="sourceLineNo">7062</span>  }<a name="line.7062"></a>
+<span class="sourceLineNo">7063</span><a name="line.7063"></a>
+<span class="sourceLineNo">7064</span>  /**<a name="line.7064"></a>
+<span class="sourceLineNo">7065</span>   * Do coprocessor pre-increment or pre-append call.<a name="line.7065"></a>
+<span class="sourceLineNo">7066</span>   * @return Result returned out of the coprocessor, which means bypass all further processing and<a name="line.7066"></a>
+<span class="sourceLineNo">7067</span>   *  return the proffered Result instead, or null which means proceed.<a name="line.7067"></a>
+<span class="sourceLineNo">7068</span>   */<a name="line.7068"></a>
+<span class="sourceLineNo">7069</span>  private Result doCoprocessorPreCall(final Operation op, final Mutation mutation)<a name="line.7069"></a>
+<span class="sourceLineNo">7070</span>  throws IOException {<a name="line.7070"></a>
+<span class="sourceLineNo">7071</span>    Result result = null;<a name="line.7071"></a>
+<span class="sourceLineNo">7072</span>    if (this.coprocessorHost != null) {<a name="line.7072"></a>
+<span class="sourceLineNo">7073</span>      switch(op) {<a name="line.7073"></a>
+<span class="sourceLineNo">7074</span>        case INCREMENT:<a name="line.7074"></a>
+<span class="sourceLineNo">7075</span>          result = this.coprocessorHost.preIncrementAfterRowLock((Increment)mutation);<a name="line.7075"></a>
+<span class="sourceLineNo">7076</span>          break;<a name="line.7076"></a>
+<span class="sourceLineNo">7077</span>        case APPEND:<a name="line.7077"></a>
+<span class="sourceLineNo">7078</span>          result = this.coprocessorHost.preAppendAfterRowLock((Append)mutation);<a name="line.7078"></a>
+<span class="sourceLineNo">7079</span>          break;<a name="line.7079"></a>
+<span class="sourceLineNo">7080</span>        default: throw new UnsupportedOperationException(op.toString());<a name="line.7080"></a>
+<span class="sourceLineNo">7081</span>      }<a name="line.7081"></a>
+<span class="sourceLineNo">7082</span>    }<a name="line.7082"></a>
+<span class="sourceLineNo">7083</span>    return result;<a name="line.7083"></a>
+<span class="sourceLineNo">7084</span>  }<a name="line.7084"></a>
+<span class="sourceLineNo">7085</span><a name="line.7085"></a>
+<span class="sourceLineNo">7086</span>  /**<a name="line.7086"></a>
+<span class="sourceLineNo">7087</span>   * Reckon the Cells to apply to WAL, memstore, and to return to the Client; these Sets are not<a name="line.7087"></a>
+<span class="sourceLineNo">7088</span>   * always the same dependent on whether to write WAL or if the amount to increment is zero (in<a name="line.7088"></a>
+<span class="sourceLineNo">7089</span>   * this case we write back nothing, just return latest Cell value to the client).<a name="line.7089"></a>
+<span class="sourceLineNo">7090</span>   *<a name="line.7090"></a>
+<span class="sourceLineNo">7091</span>   * @param results Fill in here what goes back to the Client if it is non-null (if null, client<a name="line.7091"></a>
+<span class="sourceLineNo">7092</span>   *  doesn't want results).<a name="line.7092"></a>
+<span class="sourceLineNo">7093</span>   * @param forMemStore Fill in here what to apply to the MemStore (by Store).<a name="line.7093"></a>
+<span class="sourceLineNo">7094</span>   * @return A WALEdit to apply to WAL or null if we are to skip the WAL.<a name="line.7094"></a>
+<span class="sourceLineNo">7095</span>   */<a name="line.7095"></a>
+<span class="sourceLineNo">7096</span>  private WALEdit reckonDeltas(final Operation op, final Mutation mutation,<a name="line.7096"></a>
+<span class="sourceLineNo">7097</span>      final Durability effectiveDurability, final Map&lt;Store, List&lt;Cell&gt;&gt; forMemStore,<a name="line.7097"></a>
+<span class="sourceLineNo">7098</span>      final List&lt;Cell&gt; results)<a name="line.7098"></a>
+<span class="sourceLineNo">7099</span>  throws IOException {<a name="line.7099"></a>
+<span class="sourceLineNo">7100</span>    WALEdit walEdit = null;<a name="line.7100"></a>
+<span class="sourceLineNo">7101</span>    long now = EnvironmentEdgeManager.currentTime();<a name="line.7101"></a>
+<span class="sourceLineNo">7102</span>    final boolean writeToWAL = effectiveDurability != Durability.SKIP_WAL;<a name="line.7102"></a>
+<span class="sourceLineNo">7103</span>    // Process a Store/family at a time.<a name="line.7103"></a>
+<span class="sourceLineNo">7104</span>    for (Map.Entry&lt;byte [], List&lt;Cell&gt;&gt; entry: mutation.getFamilyCellMap().entrySet()) {<a name="line.7104"></a>
+<span class="sourceLineNo">7105</span>      final byte [] columnFamilyName = entry.getKey();<a name="line.7105"></a>
+<span class="sourceLineNo">7106</span>      List&lt;Cell&gt; deltas = entry.getValue();<a name="line.7106"></a>
+<span class="sourceLineNo">7107</span>      Store store = this.stores.get(columnFamilyName);<a name="line.7107"></a>
+<span class="sourceLineNo">7108</span>      // Reckon for the Store what to apply to WAL and MemStore.<a name="line.7108"></a>
+<span class="sourceLineNo">7109</span>      List&lt;Cell&gt; toApply =<a name="line.7109"></a>
+<span class="sourceLineNo">7110</span>        reckonDeltasByStore(store, op, mutation, effectiveDurability, now, deltas, results);<a name="line.7110"></a>
+<span class="sourceLineNo">7111</span>      if (!toApply.isEmpty()) {<a name="line.7111"></a>
+<span class="sourceLineNo">7112</span>        forMemStore.put(store, toApply);<a name="line.7112"></a>
+<span class="sourceLineNo">7113</span>        if (writeToWAL) {<a name="line.7113"></a>
+<span class="sourceLineNo">7114</span>          if (walEdit == null) {<a name="line.7114"></a>
+<span class="sourceLineNo">7115</span>            walEdit = new WALEdit();<a name="line.7115"></a>
+<span class="sourceLineNo">7116</span>          }<a name="line.7116"></a>
+<span class="sourceLineNo">7117</span>          walEdit.getCells().addAll(toApply);<a name="line.7117"></a>
+<span class="sourceLineNo">7118</span>        }<a name="line.7118"></a>
+<span class="sourceLineNo">7119</span>      }<a name="line.7119"></a>
+<span class="sourceLineNo">7120</span>    }<a name="line.7120"></a>
+<span class="sourceLineNo">7121</span>    return walEdit;<a name="line.7121"></a>
+<span class="sourceLineNo">7122</span>  }<a name="line.7122"></a>
+<span class="sourceLineNo">7123</span><a name="line.7123"></a>
+<span class="sourceLineNo">7124</span>  /**<a name="line.7124"></a>
+<span class="sourceLineNo">7125</span>   * Reckon the Cells to apply to WAL, memstore, and to return to the Client in passed<a name="line.7125"></a>
+<span class="sourceLineNo">7126</span>   * column family/Store.<a name="line.7126"></a>
 <span class="sourceLineNo">7127</span>   *<a name="line.7127"></a>
-<span class="sourceLineNo">7128</span>   * @param op Whether Increment or Append<a name="line.7128"></a>
-<span class="sourceLineNo">7129</span>   * @param mutation The encompassing Mutation object<a name="line.7129"></a>
-<span class="sourceLineNo">7130</span>   * @param deltas Changes to apply to this Store; either increment amount or data to append<a name="line.7130"></a>
-<span class="sourceLineNo">7131</span>   * @param results In here we accumulate all the Cells we are to return to the client; this List<a name="line.7131"></a>
-<span class="sourceLineNo">7132</span>   *  can be larger than what we return in case where delta is zero; i.e. don't write<a name="line.7132"></a>
-<span class="sourceLineNo">7133</span>   *  out new values, just return current value. If null, client doesn't want results returned.<a name="line.7133"></a>
-<span class="sourceLineNo">7134</span>   * @return Resulting Cells after &lt;code&gt;deltas&lt;/code&gt; have been applied to current<a name="line.7134"></a>
-<span class="sourceLineNo">7135</span>   *  values. Side effect is our filling out of the &lt;code&gt;results&lt;/code&gt; List.<a name="line.7135"></a>
-<span class="sourceLineNo">7136</span>   */<a name="line.7136"></a>
-<span class="sourceLineNo">7137</span>  private List&lt;Cell&gt; reckonDeltasByStore(final Store store, final Operation op,<a name="line.7137"></a>
-<span class="sourceLineNo">7138</span>      final Mutation mutation, final Durability effectiveDurability, final long now,<a name="line.7138"></a>
-<span class="sourceLineNo">7139</span>      final List&lt;Cell&gt; deltas, final List&lt;Cell&gt; results)<a name="line.7139"></a>
-<span class="sourceLineNo">7140</span>  throws IOException {<a name="line.7140"></a>
-<span class="sourceLineNo">7141</span>    byte [] columnFamily = store.getFamily().getName();<a name="line.7141"></a>
-<span class="sourceLineNo">7142</span>    List&lt;Cell&gt; toApply = new ArrayList&lt;Cell&gt;(deltas.size());<a name="line.7142"></a>
-<span class="sourceLineNo">7143</span>    // Get previous values for all columns in this family.<a name="line.7143"></a>
-<span class="sourceLineNo">7144</span>    List&lt;Cell&gt; currentValues = get(mutation, store, deltas,<a name="line.7144"></a>
-<span class="sourceLineNo">7145</span>        null/*Default IsolationLevel*/,<a name="line.7145"></a>
-<span class="sourceLineNo">7146</span>        op == Operation.INCREMENT? ((Increment)mutation).getTimeRange(): null);<a name="line.7146"></a>
-<span class="sourceLineNo">7147</span>    // Iterate the input columns and update existing values if they were found, otherwise<a name="line.7147"></a>
-<span class="sourceLineNo">7148</span>    // add new column initialized to the delta amount<a name="line.7148"></a>
-<span class="sourceLineNo">7149</span>    int currentValuesIndex = 0;<a name="line.7149"></a>
-<span class="sourceLineNo">7150</span>    for (int i = 0; i &lt; deltas.size(); i++) {<a name="line.7150"></a>
-<span class="sourceLineNo">7151</span>      Cell delta = deltas.get(i);<a name="line.7151"></a>
-<span class="sourceLineNo">7152</span>      Cell currentValue = null;<a name="line.7152"></a>
-<span class="sourceLineNo">7153</span>      if (currentValuesIndex &lt; currentValues.size() &amp;&amp;<a name="line.7153"></a>
-<span class="sourceLineNo">7154</span>          CellUtil.matchingQualifier(currentValues.get(currentValuesIndex), delta)) {<a name="line.7154"></a>
-<span class="sourceLineNo">7155</span>        currentValue = currentValues.get(currentValuesIndex);<a name="line.7155"></a>
-<span class="sourceLineNo">7156</span>        if (i &lt; (deltas.size() - 1) &amp;&amp; !CellUtil.matchingQualifier(delta, deltas.get(i + 1))) {<a name="line.7156"></a>
-<span class="sourceLineNo">7157</span>          currentValuesIndex++;<a name="line.7157"></a>
-<span class="sourceLineNo">7158</span>        }<a name="line.7158"></a>
-<span class="sourceLineNo">7159</span>      }<a name="line.7159"></a>
-<span class="sourceLineNo">7160</span>      // Switch on whether this an increment or an append building the new Cell to apply.<a name="line.7160"></a>
-<span class="sourceLineNo">7161</span>      Cell newCell = null;<a name="line.7161"></a>
-<span class="sourceLineNo">7162</span>      MutationType mutationType = null;<a name="line.7162"></a>
-<span class="sourceLineNo">7163</span>      boolean apply = true;<a name="line.7163"></a>
-<span class="sourceLineNo">7164</span>      switch (op) {<a name="line.7164"></a>
-<span class="sourceLineNo">7165</span>        case INCREMENT:<a name="line.7165"></a>
-<span class="sourceLineNo">7166</span>          mutationType = MutationType.INCREMENT;<a name="line.7166"></a>
-<span class="sourceLineNo">7167</span>          // If delta amount to apply is 0, don't write WAL or MemStore.<a name="line.7167"></a>
-<span class="sourceLineNo">7168</span>          long deltaAmount = getLongValue(delta);<a name="line.7168"></a>
-<span class="sourceLineNo">7169</span>          apply = deltaAmount != 0;<a name="line.7169"></a>
-<span class="sourceLineNo">7170</span>          newCell = reckonIncrement(delta, deltaAmount, currentValue, columnFamily, now,<a name="line.7170"></a>
-<span class="sourceLineNo">7171</span>            (Increment)mutation);<a name="line.7171"></a>
-<span class="sourceLineNo">7172</span>          break;<a name="line.7172"></a>
-<span class="sourceLineNo">7173</span>        case APPEND:<a name="line.7173"></a>
-<span class="sourceLineNo">7174</span>          mutationType = MutationType.APPEND;<a name="line.7174"></a>
-<span class="sourceLineNo">7175</span>          // Always apply Append. TODO: Does empty delta value mean reset Cell? It seems to.<a name="line.7175"></a>
-<span class="sourceLineNo">7176</span>          newCell = reckonAppend(delta, currentValue, now, (Append)mutation);<a name="line.7176"></a>
-<span class="sourceLineNo">7177</span>          break;<a name="line.7177"></a>
-<span class="sourceLineNo">7178</span>        default: throw new UnsupportedOperationException(op.toString());<a name="line.7178"></a>
-<span class="sourceLineNo">7179</span>      }<a name="line.7179"></a>
-<span class="sourceLineNo">7180</span><a name="line.7180"></a>
-<span class="sourceLineNo">7181</span>      // Give coprocessors a chance to update the new cell<a name="line.7181"></a>
-<span class="sourceLineNo">7182</span>      if (coprocessorHost != null) {<a name="line.7182"></a>
-<span class="sourceLineNo">7183</span>        newCell =<a name="line.7183"></a>
-<span class="sourceLineNo">7184</span>            coprocessorHost.postMutationBeforeWAL(mutationType, mutation, currentValue, newCell);<a name="line.7184"></a>
-<span class="sourceLineNo">7185</span>      }<a name="line.7185"></a>
-<span class="sourceLineNo">7186</span>      // If apply, we need to update memstore/WAL with new value; add it toApply.<a name="line.7186"></a>
-<span class="sourceLineNo">7187</span>      if (apply) {<a name="line.7187"></a>
-<span class="sourceLineNo">7188</span>        toApply.add(newCell);<a name="line.7188"></a>
-<span class="sourceLineNo">7189</span>      }<a name="line.7189"></a>
-<span class="sourceLineNo">7190</span>      // Add to results to get returned to the Client. If null, cilent does not want results.<a name="line.7190"></a>
-<span class="sourceLineNo">7191</span>      if (results != null) {<a name="line.7191"></a>
-<span class="sourceLineNo">7192</span>        results.add(newCell);<a name="line.7192"></a>
-<span class="sourceLineNo">7193</span>      }<a name="line.7193"></a>
-<span class="sourceLineNo">7194</span>    }<a name="line.7194"></a>
-<span class="sourceLineNo">7195</span>    return toApply;<a name="line.7195"></a>
-<span class="sourceLineNo">7196</span>  }<a name="line.7196"></a>
-<span class="sourceLineNo">7197</span><a name="line.7197"></a>
-<span class="sourceLineNo">7198</span>  /**<a name="line.7198"></a>
-<span class="sourceLineNo">7199</span>   * Calculate new Increment Cell.<a name="line.7199"></a>
-<span class="sourceLineNo">7200</span>   * @return New Increment Cell with delta applied to currentValue if currentValue is not null;<a name="line.7200"></a>
-<span class="sourceLineNo">7201</span>   *  otherwise, a new Cell with the delta set as its value.<a name="line.7201"></a>
-<span class="sourceLineNo">7202</span>   */<a name="line.7202"></a>
-<span class="sourceLineNo">7203</span>  private Cell reckonIncrement(final Cell delta, final long deltaAmount, final Cell currentValue,<a name="line.7203"></a>
-<span class="sourceLineNo">7204</span>      byte [] columnFamily, final long now, Mutation mutation)<a name="line.7204"></a>
-<span class="sourceLineNo">7205</span>  throws IOException {<a name="line.7205"></a>
-<span class="sourceLineNo">7206</span>    // Forward any tags found on the delta.<a name="line.7206"></a>
-<span class="sourceLineNo">7207</span>    List&lt;Tag&gt; tags = TagUtil.carryForwardTags(delta);<a name="line.7207"></a>
-<span class="sourceLineNo">7208</span>    long newValue = deltaAmount;<a name="line.7208"></a>
-<span class="sourceLineNo">7209</span>    long ts = now;<a name="line.7209"></a>
-<span class="sourceLineNo">7210</span>    if (currentValue != null) {<a name="line.7210"></a>
-<span class="sourceLineNo">7211</span>      tags = TagUtil.carryForwardTags(tags, currentValue);<a name="line.7211"></a>
-<span class="sourceLineNo">7212</span>      ts = Math.max(now, currentValue.getTimestamp());<a name="line.7212"></a>
-<span class="sourceLineNo">7213</span>      newValue += getLongValue(currentValue);<a name="line.7213"></a>
-<span class="sourceLineNo">7214</span>    }<a name="line.7214"></a>
-<span class="sourceLineNo">7215</span>    // Now make up the new Cell. TODO: FIX. This is carnel knowledge of how KeyValues are made...<a name="line.7215"></a>
-<span class="sourceLineNo">7216</span>    // doesn't work well with offheaping or if we are doing a different Cell type.<a name="line.7216"></a>
-<span class="sourceLineNo">7217</span>    byte [] incrementAmountInBytes = Bytes.toBytes(newValue);<a name="line.7217"></a>
-<span class="sourceLineNo">7218</span>    tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7218"></a>
-<span class="sourceLineNo">7219</span>    byte [] row = mutation.getRow();<a name="line.7219"></a>
-<span class="sourceLineNo">7220</span>    return new KeyValue(row, 0, row.length,<a name="line.7220"></a>
-<span class="sourceLineNo">7221</span>      columnFamily, 0, columnFamily.length,<a name="line.7221"></a>
-<span class="sourceLineNo">7222</span>      delta.getQualifierArray(), delta.getQualifierOffset(), delta.getQualifierLength(),<a name="line.7222"></a>
-<span class="sourceLineNo">7223</span>      ts, KeyValue.Type.Put,<a name="line.7223"></a>
-<span class="sourceLineNo">7224</span>      incrementAmountInBytes, 0, incrementAmountInBytes.length,<a name="line.7224"></a>
-<span class="sourceLineNo">7225</span>      tags);<a name="line.7225"></a>
-<span class="sourceLineNo">7226</span>  }<a name="line.7226"></a>
-<span class="sourceLineNo">7227</span><a name="line.7227"></a>
-<span class="sourceLineNo">7228</span>  private Cell reckonAppend(final Cell delta, final Cell currentValue, final long now,<a name="line.7228"></a>
-<span class="sourceLineNo">7229</span>      Append mutation)<a name="line.7229"></a>
-<span class="sourceLineNo">7230</span>  throws IOException {<a name="line.7230"></a>
-<span class="sourceLineNo">7231</span>    // Forward any tags found on the delta.<a name="line.7231"></a>
-<span class="sourceLineNo">7232</span>    List&lt;Tag&gt; tags = TagUtil.carryForwardTags(delta);<a name="line.7232"></a>
-<span class="sourceLineNo">7233</span>    long ts = now;<a name="line.7233"></a>
-<span class="sourceLineNo">7234</span>    Cell newCell = null;<a name="line.7234"></a>
-<span class="sourceLineNo">7235</span>    byte [] row = mutation.getRow();<a name="line.7235"></a>
-<span class="sourceLineNo">7236</span>    if (currentValue != null) {<a name="line.7236"></a>
-<span class="sourceLineNo">7237</span>      tags = TagUtil.carryForwardTags(tags, currentValue);<a name="line.7237"></a>
-<span class="sourceLineNo">7238</span>      ts = Math.max(now, currentValue.getTimestamp());<a name="line.7238"></a>
-<span class="sourceLineNo">7239</span>      tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7239"></a>
-<span class="sourceLineNo">7240</span>      byte[] tagBytes = TagUtil.fromList(tags);<a name="line.7240"></a>
-<span class="sourceLineNo">7241</span>      // Allocate an empty cell and copy in all parts.<a name="line.7241"></a>
-<span class="sourceLineNo">7242</span>      // TODO: This is intimate knowledge of how a KeyValue is made. Undo!!! Prevents our doing<a name="line.7242"></a>
-<span class="sourceLineNo">7243</span>      // other Cell types. Copying on-heap too if an off-heap Cell.<a name="line.7243"></a>
-<span class="sourceLineNo">7244</span>      newCell = new KeyValue(row.length, delta.getFamilyLength(),<a name="line.7244"></a>
-<span class="sourceLineNo">7245</span>        delta.getQualifierLength(), ts, KeyValue.Type.Put,<a name="line.7245"></a>
-<span class="sourceLineNo">7246</span>        delta.getValueLength() + currentValue.getValueLength(),<a name="line.7246"></a>
-<span class="sourceLineNo">7247</span>        tagBytes == null? 0: tagBytes.length);<a name="line.7247"></a>
-<span class="sourceLineNo">7248</span>      // Copy in row, family, and qualifier<a name="line.7248"></a>
-<span class="sourceLineNo">7249</span>      System.arraycopy(row, 0, newCell.getRowArray(), newCell.getRowOffset(), row.length);<a name="line.7249"></a>
-<span class="sourceLineNo">7250</span>      System.arraycopy(delta.getFamilyArray(), delta.getFamilyOffset(),<a name="line.7250"></a>
-<span class="sourceLineNo">7251</span>          newCell.getFamilyArray(), newCell.getFamilyOffset(), delta.getFamilyLength());<a name="line.7251"></a>
-<span class="sourceLineNo">7252</span>      System.arraycopy(delta.getQualifierArray(), delta.getQualifierOffset(),<a name="line.7252"></a>
-<span class="sourceLineNo">7253</span>          newCell.getQualifierArray(), newCell.getQualifierOffset(), delta.getQualifierLength());<a name="line.7253"></a>
-<span class="sourceLineNo">7254</span>      // Copy in the value<a name="line.7254"></a>
-<span class="sourceLineNo">7255</span>      CellUtil.copyValueTo(currentValue, newCell.getValueArray(), newCell.getValueOffset());<a name="line.7255"></a>
-<span class="sourceLineNo">7256</span>      System.arraycopy(delta.getValueArray(), delta.getValueOffset(),<a name="line.7256"></a>
-<span class="sourceLineNo">7257</span>          newCell.getValueArray(), newCell.getValueOffset() + currentValue.getValueLength(),<a name="line.7257"></a>
-<span class="sourceLineNo">7258</span>          delta.getValueLength());<a name="line.7258"></a>
-<span class="sourceLineNo">7259</span>      // Copy in tag data<a name="line.7259"></a>
-<span class="sourceLineNo">7260</span>      if (tagBytes != null) {<a name="line.7260"></a>
-<span class="sourceLineNo">7261</span>        System.arraycopy(tagBytes, 0,<a name="line.7261"></a>
-<span class="sourceLineNo">7262</span>            newCell.getTagsArray(), newCell.getTagsOffset(), tagBytes.length);<a name="line.7262"></a>
-<span class="sourceLineNo">7263</span>      }<a name="line.7263"></a>
-<span class="sourceLineNo">7264</span>    } else {<a name="line.7264"></a>
-<span class="sourceLineNo">7265</span>      // Append's KeyValue.Type==Put and ts==HConstants.LATEST_TIMESTAMP<a name="line.7265"></a>
-<span class="sourceLineNo">7266</span>      CellUtil.updateLatestStamp(delta, now);<a name="line.7266"></a>
-<span class="sourceLineNo">7267</span>      newCell = delta;<a name="line.7267"></a>
-<span class="sourceLineNo">7268</span>      tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7268"></a>
-<span class="sourceLineNo">7269</span>      if (tags != null) {<a name="line.7269"></a>
-<span class="sourceLineNo">7270</span>        newCell = new TagRewriteCell(delta, TagUtil.fromList(tags));<a name="line.7270"></a>
-<span class="sourceLineNo">7271</span>      }<a name="line.7271"></a>
-<span class="sourceLineNo">7272</span>    }<a name="line.7272"></a>
-<span class="sourceLineNo">7273</span>    return newCell;<a name="line.7273"></a>
-<span class="sourceLineNo">7274</span>  }<a name="line.7274"></a>
-<span class="sourceLineNo">7275</span><a name="line.7275"></a>
-<span class="sourceLineNo">7276</span>  /**<a name="line.7276"></a>
-<span class="sourceLineNo">7277</span>   * @return Get the long out of the passed in Cell<a name="line.7277"></a>
-<span class="sourceLineNo">7278</span>   */<a name="line.7278"></a>
-<span class="sourceLineNo">7279</span>  private static long getLongValue(final Cell cell) throws DoNotRetryIOException {<a name="line.7279"></a>
-<span class="sourceLineNo">7280</span>    int len = cell.getValueLength();<a name="line.7280"></a>
-<span class="sourceLineNo">7281</span>    if (len != Bytes.SIZEOF_LONG) {<a name="line.7281"></a>
-<span class="sourceLineNo">7282</span>      // throw DoNotRetryIOException instead of IllegalArgumentException<a name="line.7282"></a>
-<span class="sourceLineNo">7283</span>      throw new DoNotRetryIOException("Field is not a long, it's " + len + " bytes wide");<a name="line.7283"></a>
-<span class="sourceLineNo">7284</span>    }<a name="line.7284"></a>
-<span class="sourceLineNo">7285</span>    return Bytes.toLong(cell.getValueArray(), cell.getValueOffset(), len);<a name="line.7285"></a>
-<span class="sourceLineNo">7286</span>  }<a name="line.7286"></a>
-<span class="sourceLineNo">7287</span><a name="line.7287"></a>
-<span class="sourceLineNo">7288</span>  /**<a name="line.7288"></a>
-<span class="sourceLineNo">7289</span>   * Do a specific Get on passed &lt;code&gt;columnFamily&lt;/code&gt; and column qualifiers.<a name="line.7289"></a>
-<span class="sourceLineNo">7290</span>   * @param mutation Mutation we are doing this Get for.<a name="line.7290"></a>
-<span class="sourceLineNo">7291</span>   * @param columnFamily Which column family on row (TODO: Go all Gets in one go)<a name="line.7291"></a>
-<span class="sourceLineNo">7292</span>   * @param coordinates Cells from &lt;code&gt;mutation&lt;/code&gt; used as coordinates applied to Get.<a name="line.7292"></a>
-<span class="sourceLineNo">7293</span>   * @return Return list of Cells found.<a name="line.7293"></a>
-<span class="sourceLineNo">7294</span>   */<a name="line.7294"></a>
-<span class="sourceLineNo">7295</span>  private List&lt;Cell&gt; get(final Mutation mutation, final Store store,<a name="line.7295"></a>
-<span class="sourceLineNo">7296</span>          final List&lt;Cell&gt; coordinates, final IsolationLevel isolation, final TimeRange tr)<a name="line.7296"></a>
-<span class="sourceLineNo">7297</span>  throws IOException {<a name="line.7297"></a>
-<span class="sourceLineNo">7298</span>    // Sort the cells so that they match the order that they appear in the Get results. Otherwise,<a name="line.7298"></a>
-<span class="sourceLineNo">7299</span>    // we won't be able to find the existing values if the cells are not specified in order by the<a name="line.7299"></a>
-<span class="sourceLineNo">7300</span>    // client since cells are in an array list.<a name="line.7300"></a>
-<span class="sourceLineNo">7301</span>    // TODO: I don't get why we are sorting. St.Ack 20150107<a name="line.7301"></a>
-<span class="sourceLineNo">7302</span>    sort(coordinates, store.getComparator());<a name="line.7302"></a>
-<span class="sourceLineNo">7303</span>    Get get = new Get(mutation.getRow());<a name="line.7303"></a>
-<span class="sourceLineNo">7304</span>    if (isolation != null) {<a name="line.7304"></a>
-<span class="sourceLineNo">7305</span>      get.setIsolationLevel(isolation);<a name="line.7305"></a>
-<span class="sourceLineNo">7306</span>    }<a name="line.7306"></a>
-<span class="sourceLineNo">7307</span>    for (Cell cell: coordinates) {<a name="line.7307"></a>
-<span class="sourceLineNo">7308</span>      get.addColumn(store.getFamily().getName(), CellUtil.cloneQualifier(cell));<a name="line.7308"></a>
-<span class="sourceLineNo">7309</span>    }<a name="line.7309"></a>
-<span class="sourceLineNo">7310</span>    // Increments carry time range. If an Increment instance, put it on the Get.<a name="line.7310"></a>
-<span class="sourceLineNo">7311</span>    if (tr != null) {<a name="line.7311"></a>
-<span class="sourceLineNo">7312</span>      get.setTimeRange(tr.getMin(), tr.getMax());<a name="line.7312"></a>
-<span class="sourceLineNo">7313</span>    }<a name="line.7313"></a>
-<span class="sourceLineNo">7314</span>    return get(get, false);<a name="line.7314"></a>
-<span class="sourceLineNo">7315</span>  }<a name="line.7315"></a>
-<span class="sourceLineNo">7316</span><a name="line.7316"></a>
-<span class="sourceLineNo">7317</span>  /**<a name="line.7317"></a>
-<span class="sourceLineNo">7318</span>   * @return Sorted list of &lt;code&gt;cells&lt;/code&gt; using &lt;code&gt;comparator&lt;/code&gt;<a name="line.7318"></a>
-<span class="sourceLineNo">7319</span>   */<a name="line.7319"></a>
-<span class="sourceLineNo">7320</span>  private static List&lt;Cell&gt; sort(List&lt;Cell&gt; cells, final Comparator&lt;Cell&gt; comparator) {<a name="line.7320"></a>
-<span class="sourceLineNo">7321</span>    Collections.sort(cells, comparator);<a name="line.7321"></a>
-<span class="sourceLineNo">7322</span>    return cells;<a name="line.7322"></a>
-<span class="sourceLineNo">7323</span>  }<a name="line.7323"></a>
-<span class="sourceLineNo">7324</span><a name="line.7324"></a>
-<span class="sourceLineNo">7325</span>  //<a name="line.7325"></a>
-<span class="sourceLineNo">7326</span>  // New HBASE-880 Helpers<a name="line.7326"></a>
+<span class="sourceLineNo">7128</span>   * Does Get of current value and then adds passed in deltas for this Store returning the result.<a name="line.7128"></a>
+<span class="sourceLineNo">7129</span>   *<a name="line.7129"></a>
+<span class="sourceLineNo">7130</span>   * @param op Whether Increment or Append<a name="line.7130"></a>
+<span class="sourceLineNo">7131</span>   * @param mutation The encompassing Mutation object<a name="line.7131"></a>
+<span class="sourceLineNo">7132</span>   * @param deltas Changes to apply to this Store; either increment amount or data to append<a name="line.7132"></a>
+<span class="sourceLineNo">7133</span>   * @param results In here we accumulate all the Cells we are to return to the client; this List<a name="line.7133"></a>
+<span class="sourceLineNo">7134</span>   *  can be larger than what we return in case where delta is zero; i.e. don't write<a name="line.7134"></a>
+<span class="sourceLineNo">7135</span>   *  out new values, just return current value. If null, client doesn't want results returned.<a name="line.7135"></a>
+<span class="sourceLineNo">7136</span>   * @return Resulting Cells after &lt;code&gt;deltas&lt;/code&gt; have been applied to current<a name="line.7136"></a>
+<span class="sourceLineNo">7137</span>   *  values. Side effect is our filling out of the &lt;code&gt;results&lt;/code&gt; List.<a name="line.7137"></a>
+<span class="sourceLineNo">7138</span>   */<a name="line.7138"></a>
+<span class="sourceLineNo">7139</span>  private List&lt;Cell&gt; reckonDeltasByStore(final Store store, final Operation op,<a name="line.7139"></a>
+<span class="sourceLineNo">7140</span>      final Mutation mutation, final Durability effectiveDurability, final long now,<a name="line.7140"></a>
+<span class="sourceLineNo">7141</span>      final List&lt;Cell&gt; deltas, final List&lt;Cell&gt; results)<a name="line.7141"></a>
+<span class="sourceLineNo">7142</span>  throws IOException {<a name="line.7142"></a>
+<span class="sourceLineNo">7143</span>    byte [] columnFamily = store.getFamily().getName();<a name="line.7143"></a>
+<span class="sourceLineNo">7144</span>    List&lt;Cell&gt; toApply = new ArrayList&lt;Cell&gt;(deltas.size());<a name="line.7144"></a>
+<span class="sourceLineNo">7145</span>    // Get previous values for all columns in this family.<a name="line.7145"></a>
+<span class="sourceLineNo">7146</span>    List&lt;Cell&gt; currentValues = get(mutation, store, deltas,<a name="line.7146"></a>
+<span class="sourceLineNo">7147</span>        null/*Default IsolationLevel*/,<a name="line.7147"></a>
+<span class="sourceLineNo">7148</span>        op == Operation.INCREMENT? ((Increment)mutation).getTimeRange(): null);<a name="line.7148"></a>
+<span class="sourceLineNo">7149</span>    // Iterate the input columns and update existing values if they were found, otherwise<a name="line.7149"></a>
+<span class="sourceLineNo">7150</span>    // add new column initialized to the delta amount<a name="line.7150"></a>
+<span class="sourceLineNo">7151</span>    int currentValuesIndex = 0;<a name="line.7151"></a>
+<span class="sourceLineNo">7152</span>    for (int i = 0; i &lt; deltas.size(); i++) {<a name="line.7152"></a>
+<span class="sourceLineNo">7153</span>      Cell delta = deltas.get(i);<a name="line.7153"></a>
+<span class="sourceLineNo">7154</span>      Cell currentValue = null;<a name="line.7154"></a>
+<span class="sourceLineNo">7155</span>      if (currentValuesIndex &lt; currentValues.size() &amp;&amp;<a name="line.7155"></a>
+<span class="sourceLineNo">7156</span>          CellUtil.matchingQualifier(currentValues.get(currentValuesIndex), delta)) {<a name="line.7156"></a>
+<span class="sourceLineNo">7157</span>        currentValue = currentValues.get(currentValuesIndex);<a name="line.7157"></a>
+<span class="sourceLineNo">7158</span>        if (i &lt; (deltas.size() - 1) &amp;&amp; !CellUtil.matchingQualifier(delta, deltas.get(i + 1))) {<a name="line.7158"></a>
+<span class="sourceLineNo">7159</span>          currentValuesIndex++;<a name="line.7159"></a>
+<span class="sourceLineNo">7160</span>        }<a name="line.7160"></a>
+<span class="sourceLineNo">7161</span>      }<a name="line.7161"></a>
+<span class="sourceLineNo">7162</span>      // Switch on whether this an increment or an append building the new Cell to apply.<a name="line.7162"></a>
+<span class="sourceLineNo">7163</span>      Cell newCell = null;<a name="line.7163"></a>
+<span class="sourceLineNo">7164</span>      MutationType mutationType = null;<a name="line.7164"></a>
+<span class="sourceLineNo">7165</span>      boolean apply = true;<a name="line.7165"></a>
+<span class="sourceLineNo">7166</span>      switch (op) {<a name="line.7166"></a>
+<span class="sourceLineNo">7167</span>        case INCREMENT:<a name="line.7167"></a>
+<span class="sourceLineNo">7168</span>          mutationType = MutationType.INCREMENT;<a name="line.7168"></a>
+<span class="sourceLineNo">7169</span>          // If delta amount to apply is 0, don't write WAL or MemStore.<a name="line.7169"></a>
+<span class="sourceLineNo">7170</span>          long deltaAmount = getLongValue(delta);<a name="line.7170"></a>
+<span class="sourceLineNo">7171</span>          apply = deltaAmount != 0;<a name="line.7171"></a>
+<span class="sourceLineNo">7172</span>          newCell = reckonIncrement(delta, deltaAmount, currentValue, columnFamily, now,<a name="line.7172"></a>
+<span class="sourceLineNo">7173</span>            (Increment)mutation);<a name="line.7173"></a>
+<span class="sourceLineNo">7174</span>          break;<a name="line.7174"></a>
+<span class="sourceLineNo">7175</span>        case APPEND:<a name="line.7175"></a>
+<span class="sourceLineNo">7176</span>          mutationType = MutationType.APPEND;<a name="line.7176"></a>
+<span class="sourceLineNo">7177</span>          // Always apply Append. TODO: Does empty delta value mean reset Cell? It seems to.<a name="line.7177"></a>
+<span class="sourceLineNo">7178</span>          newCell = reckonAppend(delta, currentValue, now, (Append)mutation);<a name="line.7178"></a>
+<span class="sourceLineNo">7179</span>          break;<a name="line.7179"></a>
+<span class="sourceLineNo">7180</span>        default: throw new UnsupportedOperationException(op.toString());<a name="line.7180"></a>
+<span class="sourceLineNo">7181</span>      }<a name="line.7181"></a>
+<span class="sourceLineNo">7182</span><a name="line.7182"></a>
+<span class="sourceLineNo">7183</span>      // Give coprocessors a chance to update the new cell<a name="line.7183"></a>
+<span class="sourceLineNo">7184</span>      if (coprocessorHost != null) {<a name="line.7184"></a>
+<span class="sourceLineNo">7185</span>        newCell =<a name="line.7185"></a>
+<span class="sourceLineNo">7186</span>            coprocessorHost.postMutationBeforeWAL(mutationType, mutation, currentValue, newCell);<a name="line.7186"></a>
+<span class="sourceLineNo">7187</span>      }<a name="line.7187"></a>
+<span class="sourceLineNo">7188</span>      // If apply, we need to update memstore/WAL with new value; add it toApply.<a name="line.7188"></a>
+<span class="sourceLineNo">7189</span>      if (apply) {<a name="line.7189"></a>
+<span class="sourceLineNo">7190</span>        toApply.add(newCell);<a name="line.7190"></a>
+<span class="sourceLineNo">7191</span>      }<a name="line.7191"></a>
+<span class="sourceLineNo">7192</span>      // Add to results to get returned to the Client. If null, cilent does not want results.<a name="line.7192"></a>
+<span class="sourceLineNo">7193</span>      if (results != null) {<a name="line.7193"></a>
+<span class="sourceLineNo">7194</span>        results.add(newCell);<a name="line.7194"></a>
+<span class="sourceLineNo">7195</span>      }<a name="line.7195"></a>
+<span class="sourceLineNo">7196</span>    }<a name="line.7196"></a>
+<span class="sourceLineNo">7197</span>    return toApply;<a name="line.7197"></a>
+<span class="sourceLineNo">7198</span>  }<a name="line.7198"></a>
+<span class="sourceLineNo">7199</span><a name="line.7199"></a>
+<span class="sourceLineNo">7200</span>  /**<a name="line.7200"></a>
+<span class="sourceLineNo">7201</span>   * Calculate new Increment Cell.<a name="line.7201"></a>
+<span class="sourceLineNo">7202</span>   * @return New Increment Cell with delta applied to currentValue if currentValue is not null;<a name="line.7202"></a>
+<span class="sourceLineNo">7203</span>   *  otherwise, a new Cell with the delta set as its value.<a name="line.7203"></a>
+<span class="sourceLineNo">7204</span>   */<a name="line.7204"></a>
+<span class="sourceLineNo">7205</span>  private Cell reckonIncrement(final Cell delta, final long deltaAmount, final Cell currentValue,<a name="line.7205"></a>
+<span class="sourceLineNo">7206</span>      byte [] columnFamily, final long now, Mutation mutation)<a name="line.7206"></a>
+<span class="sourceLineNo">7207</span>  throws IOException {<a name="line.7207"></a>
+<span class="sourceLineNo">7208</span>    // Forward any tags found on the delta.<a name="line.7208"></a>
+<span class="sourceLineNo">7209</span>    List&lt;Tag&gt; tags = TagUtil.carryForwardTags(delta);<a name="line.7209"></a>
+<span class="sourceLineNo">7210</span>    long newValue = deltaAmount;<a name="line.7210"></a>
+<span class="sourceLineNo">7211</span>    long ts = now;<a name="line.7211"></a>
+<span class="sourceLineNo">7212</span>    if (currentValue != null) {<a name="line.7212"></a>
+<span class="sourceLineNo">7213</span>      tags = TagUtil.carryForwardTags(tags, currentValue);<a name="line.7213"></a>
+<span class="sourceLineNo">7214</span>      ts = Math.max(now, currentValue.getTimestamp());<a name="line.7214"></a>
+<span class="sourceLineNo">7215</span>      newValue += getLongValue(currentValue);<a name="line.7215"></a>
+<span class="sourceLineNo">7216</span>    }<a name="line.7216"></a>
+<span class="sourceLineNo">7217</span>    // Now make up the new Cell. TODO: FIX. This is carnel knowledge of how KeyValues are made...<a name="line.7217"></a>
+<span class="sourceLineNo">7218</span>    // doesn't work well with offheaping or if we are doing a different Cell type.<a name="line.7218"></a>
+<span class="sourceLineNo">7219</span>    byte [] incrementAmountInBytes = Bytes.toBytes(newValue);<a name="line.7219"></a>
+<span class="sourceLineNo">7220</span>    tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7220"></a>
+<span class="sourceLineNo">7221</span>    byte [] row = mutation.getRow();<a name="line.7221"></a>
+<span class="sourceLineNo">7222</span>    return new KeyValue(row, 0, row.length,<a name="line.7222"></a>
+<span class="sourceLineNo">7223</span>      columnFamily, 0, columnFamily.length,<a name="line.7223"></a>
+<span class="sourceLineNo">7224</span>      delta.getQualifierArray(), delta.getQualifierOffset(), delta.getQualifierLength(),<a name="line.7224"></a>
+<span class="sourceLineNo">7225</span>      ts, KeyValue.Type.Put,<a name="line.7225"></a>
+<span class="sourceLineNo">7226</span>      incrementAmountInBytes, 0, incrementAmountInBytes.length,<a name="line.7226"></a>
+<span class="sourceLineNo">7227</span>      tags);<a name="line.7227"></a>
+<span class="sourceLineNo">7228</span>  }<a name="line.7228"></a>
+<span class="sourceLineNo">7229</span><a name="line.7229"></a>
+<span class="sourceLineNo">7230</span>  private Cell reckonAppend(final Cell delta, final Cell currentValue, final long now,<a name="line.7230"></a>
+<span class="sourceLineNo">7231</span>      Append mutation)<a name="line.7231"></a>
+<span class="sourceLineNo">7232</span>  throws IOException {<a name="line.7232"></a>
+<span class="sourceLineNo">7233</span>    // Forward any tags found on the delta.<a name="line.7233"></a>
+<span class="sourceLineNo">7234</span>    List&lt;Tag&gt; tags = TagUtil.carryForwardTags(delta);<a name="line.7234"></a>
+<span class="sourceLineNo">7235</span>    long ts = now;<a name="line.7235"></a>
+<span class="sourceLineNo">7236</span>    Cell newCell = null;<a name="line.7236"></a>
+<span class="sourceLineNo">7237</span>    byte [] row = mutation.getRow();<a name="line.7237"></a>
+<span class="sourceLineNo">7238</span>    if (currentValue != null) {<a name="line.7238"></a>
+<span class="sourceLineNo">7239</span>      tags = TagUtil.carryForwardTags(tags, currentValue);<a name="line.7239"></a>
+<span class="sourceLineNo">7240</span>      ts = Math.max(now, currentValue.getTimestamp());<a name="line.7240"></a>
+<span class="sourceLineNo">7241</span>      tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7241"></a>
+<span class="sourceLineNo">7242</span>      byte[] tagBytes = TagUtil.fromList(tags);<a name="line.7242"></a>
+<span class="sourceLineNo">7243</span>      // Allocate an empty cell and copy in all parts.<a name="line.7243"></a>
+<span class="sourceLineNo">7244</span>      // TODO: This is intimate knowledge of how a KeyValue is made. Undo!!! Prevents our doing<a name="line.7244"></a>
+<span class="sourceLineNo">7245</span>      // other Cell types. Copying on-heap too if an off-heap Cell.<a name="line.7245"></a>
+<span class="sourceLineNo">7246</span>      newCell = new KeyValue(row.length, delta.getFamilyLength(),<a name="line.7246"></a>
+<span class="sourceLineNo">7247</span>        delta.getQualifierLength(), ts, KeyValue.Type.Put,<a name="line.7247"></a>
+<span class="sourceLineNo">7248</span>        delta.getValueLength() + currentValue.getValueLength(),<a name="line.7248"></a>
+<span class="sourceLineNo">7249</span>        tagBytes == null? 0: tagBytes.length);<a name="line.7249"></a>
+<span class="sourceLineNo">7250</span>      // Copy in row, family, and qualifier<a name="line.7250"></a>
+<span class="sourceLineNo">7251</span>      System.arraycopy(row, 0, newCell.getRowArray(), newCell.getRowOffset(), row.length);<a name="line.7251"></a>
+<span class="sourceLineNo">7252</span>      System.arraycopy(delta.getFamilyArray(), delta.getFamilyOffset(),<a name="line.7252"></a>
+<span class="sourceLineNo">7253</span>          newCell.getFamilyArray(), newCell.getFamilyOffset(), delta.getFamilyLength());<a name="line.7253"></a>
+<span class="sourceLineNo">7254</span>      System.arraycopy(delta.getQualifierArray(), delta.getQualifierOffset(),<a name="line.7254"></a>
+<span class="sourceLineNo">7255</span>          newCell.getQualifierArray(), newCell.getQualifierOffset(), delta.getQualifierLength());<a name="line.7255"></a>
+<span class="sourceLineNo">7256</span>      // Copy in the value<a name="line.7256"></a>
+<span class="sourceLineNo">7257</span>      CellUtil.copyValueTo(currentValue, newCell.getValueArray(), newCell.getValueOffset());<a name="line.7257"></a>
+<span class="sourceLineNo">7258</span>      System.arraycopy(delta.getValueArray(), delta.getValueOffset(),<a name="line.7258"></a>
+<span class="sourceLineNo">7259</span>          newCell.getValueArray(), newCell.getValueOffset() + currentValue.getValueLength(),<a name="line.7259"></a>
+<span class="sourceLineNo">7260</span>          delta.getValueLength());<a name="line.7260"></a>
+<span class="sourceLineNo">7261</span>      // Copy in tag data<a name="line.7261"></a>
+<span class="sourceLineNo">7262</span>      if (tagBytes != null) {<a name="line.7262"></a>
+<span class="sourceLineNo">7263</span>        System.arraycopy(tagBytes, 0,<a name="line.7263"></a>
+<span class="sourceLineNo">7264</span>            newCell.getTagsArray(), newCell.getTagsOffset(), tagBytes.length);<a name="line.7264"></a>
+<span class="sourceLineNo">7265</span>      }<a name="line.7265"></a>
+<span class="sourceLineNo">7266</span>    } else {<a name="line.7266"></a>
+<span class="sourceLineNo">7267</span>      // Append's KeyValue.Type==Put and ts==HConstants.LATEST_TIMESTAMP<a name="line.7267"></a>
+<span class="sourceLineNo">7268</span>      CellUtil.updateLatestStamp(delta, now);<a name="line.7268"></a>
+<span class="sourceLineNo">7269</span>      newCell = delta;<a name="line.7269"></a>
+<span class="sourceLineNo">7270</span>      tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7270"></a>
+<span class="sourceLineNo">7271</span>      if (tags != null) {<a name="line.7271"></a>
+<span class="sourceLineNo">7272</span>        newCell = new TagRewriteCell(delta, TagUtil.fromList(tags));<a name="line.7272"></a>
+<span class="sourceLineNo">7273</span>      }<a name="line.7273"></a>
+<span class="sourceLineNo">7274</span>    }<a name="line.7274"></a>
+<span class="sourceLineNo">7275</span>    return newCell;<a name="line.7275"></a>
+<span class="sourceLineNo">7276</span>  }<a name="line.7276"></a>
+<span class="sourceLineNo">7277</span><a name="line.7277"></a>
+<span class="sourceLineNo">7278</span>  /**<a name="line.7278"></a>
+<span class="sourceLineNo">7279</span>   * @return Get the long out of the passed in Cell<a name="line.7279"></a>
+<span class="sourceLineNo">7280</span>   */<a name="line.7280"></a>
+<span class="sourceLineNo">7281</span>  private static long getLongValue(final Cell cell) throws DoNotRetryIOException {<a name="line.7281"></a>
+<span class="sourceLineNo">7282</span>    int len = cell.getValueLength();<a name="line.7282"></a>
+<span class="sourceLineNo">7283</span>    if (len != Bytes.SIZEOF_LONG) {<a name="line.7283"></a>
+<span class="sourceLineNo">7284</span>      // throw DoNotRetryIOException instead of IllegalArgumentException<a name="line.7284"></a>
+<span class="sourceLineNo">7285</span>      throw new DoNotRetryIOException("Field is not a long, it's " + len + " bytes wide");<a name="line.7285"></a>
+<span class="sourceLineNo">7286</span>    }<a name="line.7286"></a>
+<span class="sourceLineNo">7287</span>    return Bytes.toLong(cell.getValueArray(), cell.getValueOffset(), len);<a name="line.7287"></a>
+<span class="sourceLineNo">7288</span>  }<a name="line.7288"></a>
+<span class="sourceLineNo">7289</span><a name="line.7289"></a>
+<span class="sourceLineNo">7290</span>  /**<a name="line.7290"></a>
+<span class="sourceLineNo">7291</span>   * Do a specific Get on passed &lt;code&gt;columnFamily&lt;/code&gt; and column qualifiers.<a name="line.7291"></a>
+<span class="sourceLineNo">7292</span>   * @param mutation Mutation we are doing this Get for.<a name="line.7292"></a>
+<span class="sourceLineNo">7293</span>   * @param columnFamily Which column family on row (TODO: Go all Gets in one go)<a name="line.7293"></a>
+<span class="sourceLineNo">7294</span>   * @param coordinates Cells from &lt;code&gt;mutation&lt;/code&gt; used as coordinates applied to Get.<a name="line.7294"></a>
+<span class="sourceLineNo">7295</span>   * @return Return list of Cells found.<a name="line.7295"></a>
+<span class="sourceLineNo">7296</span>   */<a name="line.7296"></a>
+<span class="sourceLineNo">7297</span>  private List&lt;Cell&gt; get(final Mutation mutation, final Store store,<a name="line.7297"></a>
+<span class="sourceLineNo">7298</span>          final List&lt;Cell&gt; coordinates, final IsolationLevel isolation, final TimeRange tr)<a name="line.7298"></a>
+<span class="sourceLineNo">7299</span>  throws IOException {<a name="line.7299"></a>
+<span class="sourceLineNo">7300</span>    // Sort the cells so that they match the order that they appear in the Get results. Otherwise,<a name="line.7300"></a>
+<span class="sourceLineNo">7301</span>    // we won't be able to find the existing values if the cells are not specified in order by the<a name="line.7301"></a>
+<span class="sourceLineNo">7302</span>    // client since cells are in an array list.<a name="line.7302"></a>
+<span class="sourceLineNo">7303</span>    // TODO: I don't get why we are sorting. St.Ack 20150107<a name="line.7303"></a>
+<span class="sourceLineNo">7304</span>    sort(coordinates, store.getComparator());<a name="line.7304"></a>
+<span class="sourceLineNo">7305</span>    Get get = new Get(mutation.getRow());<a name="line.7305"></a>
+<span class="sourceLineNo">7306</span>    if (isolation != null) {<a name="line.7306"></a>
+<span class="sourceLineNo">7307</span>      get.setIsolationLevel(isolation);<a name="line.7307"></a>
+<span class="sourceLineNo">7308</span>    }<a name="line.7308"></a>
+<span class="sourceLineNo">7309</span>    for (Cell cell: coordinates) {<a name="line.7309"></a>
+<span class="sourceLineNo">7310</span>      get.addColumn(store.getFamily().getName(), CellUtil.cloneQualifier(cell));<a name="line.7310"></a>
+<span class="sourceLineNo">7311</span>    }<a name="line.7311"></a>
+<span class="sourceLineNo">7312</span>    // Increments carry time range. If an Increment instance, put it on the Get.<a name="line.7312"></a>
+<span class="sourceLineNo">7313</span>    if (tr != null) {<a name="line.7313"></a>
+<span class="sourceLineNo">7314</span>      get.setTimeRange(tr.getMin(), tr.getMax());<a name="line.7314"></a>
+<span class="sourceLineNo">7315</span>    }<a name="line.7315"></a>
+<span class="sourceLineNo">7316</span>    return get(get, false);<a name="line.7316"></a>
+<span class="sourceLineNo">7317</span>  }<a name="line.7317"></a>
+<span class="sourceLineNo">7318</span><a name="line.7318"></a>
+<span class="sourceLineNo">7319</span>  /**<a name="line.7319"></a>
+<span class="sourceLineNo">7320</span>   * @return Sorted list of &lt;code&gt;cells&lt;/code&gt; using &lt;code&gt;comparator&lt;/code&gt;<a name="line.7320"></a>
+<span class="sourceLineNo">7321</span>   */<a name="line.7321"></a>
+<span class="sourceLineNo">7322</span>  private static List&lt;Cell&gt; sort(List&lt;Cell&gt; cells, final Comparator&lt;Cell&gt; comparator) {<a name="line.7322"></a>
+<span class="sourceLineNo">7323</span>    Collections.sort(cells, comparator);<a name="line.7323"></a>
+<span class="sourceLineNo">7324</span>    return cells;<a name="line.7324"></a>
+<span class="sourceLineNo">7325</span>  }<a name="line.7325"></a>
+<span class="sourceLineNo">7326</span><a name="line.7326"></a>
 <span class="sourceLineNo">7327</span>  //<a name="line.7327"></a>
-<span class="sourceLineNo">7328</span><a name="line.7328"></a>
-<span class="sourceLineNo">7329</span>  void checkFamily(final byte [] family)<a name="line.7329"></a>
-<span class="sourceLineNo">7330</span>  throws NoSuchColumnFamilyException {<a name="line.7330"></a>
-<span class="sourceLineNo">7331</span>    if (!this.htableDescriptor.hasFamily(family)) {<a name="line.7331"></a>
-<span class="sourceLineNo">7332</span>      throw new NoSuchColumnFamilyException("Column family " +<a name="line.7332"></a>
-<span class="sourceLineNo">7333</span>          Bytes.toString(family) + " does not exist in region " + this<a name="line.7333"></a>
-<span class="sourceLineNo">7334</span>          + " in table " + this.htableDescriptor);<a name="line.7334"></a>
-<span class="sourceLineNo">7335</span>    }<a name="line.7335"></a>
-<span class="sourceLineNo">7336</span>  }<a name="line.7336"></a>
-<span class="sourceLineNo">7337</span><a name="line.7337"></a>
-<span class="sourceLineNo">7338</span>  public static final long FIXED_OVERHEAD = ClassSize.align(<a name="line.7338"></a>
-<span class="sourceLineNo">7339</span>      ClassSize.OBJECT +<a name="line.7339"></a>
-<span class="sourceLineNo">7340</span>      ClassSize.ARRAY +<a name="line.7340"></a>
-<span class="sourceLineNo">7341</span>      45 * ClassSize.REFERENCE + 2 * Bytes.SIZEOF_INT +<a name="line.7341"></a>
-<span class="sourceLineNo">7342</span>      (14 * Bytes.SIZEOF_LONG) +<a name="line.7342"></a>
-<span class="sourceLineNo">7343</span>      5 * Bytes.SIZEOF_BOOLEAN);<a name="line.7343"></a>
-<span class="sourceLineNo">7344</span><a name="line.7344"></a>
-<span class="sourceLineNo">7345</span>  // woefully out of date - currently missing:<a name="line.7345"></a>
-<span class="sourceLineNo">7346</span>  // 1 x HashMap - coprocessorServiceHandlers<a name="line.7346"></a>
-<span class="sourceLineNo">7347</span>  // 6 x Counter - numMutationsWithoutWAL, dataInMemoryWithoutWAL,<a name="line.7347"></a>
-<span class="sourceLineNo">7348</span>  //   checkAndMutateChecksPassed, checkAndMutateChecksFailed, readRequestsCount,<a name="line.7348"></a>
-<span class="sourceLineNo">7349</span>  //   writeRequestsCount<a name="line.7349"></a>
-<span class="sourceLineNo">7350</span>  // 1 x HRegion$WriteState - writestate<a name="line.7350"></a>
-<span class="sourceLineNo">7351</span>  // 1 x RegionCoprocessorHost - coprocessorHost<a name="line.7351"></a>
-<span class="sourceLineNo">7352</span>  // 1 x RegionSplitPolicy - splitPolicy<a name="line.7352"></a>
-<span class="sourceLineNo">7353</span>  // 1 x MetricsRegion - metricsRegion<a name="line.7353"></a>
-<span class="sourceLineNo">7354</span>  // 1 x MetricsRegionWrapperImpl - metricsRegionWrapper<a name="line.7354"></a>
-<span class="sourceLineNo">7355</span>  public static final long DEEP_OVERHEAD = FIXED_OVERHEAD +<a name="line.7355"></a>
-<span class="sourceLineNo">7356</span>      ClassSize.OBJECT + // closeLock<a name="line.7356"></a>
-<span class="sourceLineNo">7357</span>      (2 * ClassSize.ATOMIC_BOOLEAN) + // closed, closing<a name="line.7357"></a>
-<span class="sourceLineNo">7358</span>      (3 * ClassSize.ATOMIC_LONG) + // memStoreSize, numPutsWithoutWAL, dataInMemoryWithoutWAL<a name="line.7358"></a>
-<span class="sourceLineNo">7359</span>      (2 * ClassSize.CONCURRENT_HASHMAP) +  // lockedRows, scannerReadPoints<a name="line.7359"></a>
-<span class="sourceLineNo">7360</span>      WriteState.HEAP_SIZE + // writestate<a name="line.7360"></a>
-<span class="sourceLineNo">7361</span>      ClassSize.CONCURRENT_SKIPLISTMAP + ClassSize.CONCURRENT_SKIPLISTMAP_ENTRY + // stores<a name="line.7361"></a>
-<span class="sourceLineNo">7362</span>      (2 * ClassSize.REENTRANT_LOCK) + // lock, updatesLock<a name="line.7362"></a>
-<span class="sourceLineNo">7363</span>      MultiVersionConcurrencyControl.FIXED_SIZE // mvcc<a name="line.7363"></a>
-<span class="sourceLineNo">7364</span>      + ClassSize.TREEMAP // maxSeqIdInStores<a name="line.7364"></a>
-<span class="sourceLineNo">7365</span>      + 2 * ClassSize.ATOMIC_INTEGER // majorInProgress, minorInProgress<a name="line.7365"></a>
-<span class="sourceLineNo">7366</span>      ;<a name="line.7366"></a>
-<span class="sourceLineNo">7367</span><a name="line.7367"></a>
-<span class="sourceLineNo">7368</span>  @Override<a name="line.7368"></a>
-<span class="sourceLineNo">7369</span>  public long heapSize() {<a name="line.7369"></a>
-<span class="sourceLineNo">7370</span>    long heapSize = DEEP_OVERHEAD;<a name="line.7370"></a>
-<span class="sourceLineNo">7371</span>    for (Store store : this.stores.values()) {<a name="line.7371"></a>
-<span class="sourceLineNo">7372</span>      heapSize += store.heapSize();<a name="line.7372"></a>
-<span class="sourceLineNo">7373</span>    }<a name="line.7373"></a>
-<span class="sourceLineNo">7374</span>    // this does not take into account row locks, recent flushes, mvcc entries, and more<a name="line.7374"></a>
-<span class="sourceLineNo">7375</span>    return heapSize;<a name="line.7375"></a>
-<span class="sourceLineNo">7376</span>  }<a name="line.7376"></a>
-<span class="sourceLineNo">7377</span><a name="line.7377"></a>
-<span class="sourceLineNo">7378</span>  @Override<a name="line.7378"></a>
-<span class="sourceLineNo">7379</span>  public boolean registerService(Service instance) {<a name="line.7379"></a>
-<span class="sourceLineNo">7380</span>    /*<a name="line.7380"></a>
-<span class="sourceLineNo">7381</span>     * No stacking of instances is allowed for a single service name<a name="line.7381"></a>
-<span class="sourceLineNo">7382</span>     */<a name="line.7382"></a>
-<span class="sourceLineNo">7383</span>    Descriptors.ServiceDescriptor serviceDesc = instance.getDescriptorForType();<a name="line.7383"></a>
-<span class="sourceLineNo">7384</span>    if (coprocessorServiceHandlers.containsKey(serviceDesc.getFullName())) {<a name="line.7384"></a>
-<span class="sourceLineNo">7385</span>      LOG.error("Coprocessor service " + serviceDesc.getFullName() +<a name="line.7385"></a>
-<span class="sourceLineNo">7386</span>              " already registered, rejecting request from " + instance<a name="line.7386"></a>
-<span class="sourceLineNo">7387</span>      );<a name="line.7387"></a>
-<span class="sourceLineNo">7388</span>      return false;<a name="line.7388"></a>
-<span class="sourceLineNo">7389</span>    }<a name="line.7389"></a>
-<span class="sourceLineNo">7390</span><a name="line.7390"></a>
-<span class="sourceLineNo">7391</span>    coprocessorServiceHandlers.put(serviceDesc.getFullName(), instance);<a name="line.7391"></a>
-<span class="sourceLineNo">7392</span>    if (LOG.isDebugEnabled()) {<a name="line.7392"></a>
-<span class="sourceLineNo">7393</span>      LOG.debug("Registered coprocessor service: region=" +<a name="line.7393"></a>
-<span class="sourceLineNo">7394</span>          Bytes.toStringBinary(getRegionInfo().getRegionName()) +<a name="line.7394"></a>
-<span class="sourceLineNo">7395</span>          " service=" + serviceDesc.getFullName());<a name="line.7395"></a>
-<span class="sourceLineNo">7396</span>    }<a name="line.7396"></a>
-<span class="sourceLineNo">7397</span>    return true;<a name="line.7397"></a>
-<span class="sourceLineNo">7398</span>  }<a name="line.7398"></a>
-<span class="sourceLineNo">7399</span><a name="line.7399"></a>
-<span class="sourceLineNo">7400</span>  @Override<a name="line.7400"></a>
-<span class="sourceLineNo">7401</span>  public Message execService(RpcController controller, CoprocessorServiceCall call)<a name="line.7401"></a>
-<span class="sourceLineNo">7402</span>      throws IOException {<a name="line.7402"></a>
-<span class="sourceLineNo">7403</span>    String serviceName = call.getServiceName();<a name="line.7403"></a>
-<span class="sourceLineNo">7404</span>    String methodName = call.getMethodName();<a name="line.7404"></a>
-<span class="sourceLineNo">7405</span>    if (!coprocessorServiceHandlers.containsKey(serviceName)) {<a name="line.7405"></a>
-<span class="sourceLineNo">7406</span>      throw new UnknownProtocolException(null,<a name="line.7406"></a>
-<span class="sourceLineNo">7407</span>          "No registered coprocessor service found for name "+serviceName+<a name="line.7407"></a>
-<span class="sourceLineNo">7408</span>          " in region "+Bytes.toStringBinary(getRegionInfo().getRegionName()));<a name="line.7408"></a>
-<span class="sourceLineNo">7409</span>    }<a name="line.7409"></a>
-<span class="sourceLineNo">7410</span><a name="line.7410"></a>
-<span class="sourceLineNo">7411</span>    Service service = coprocessorServiceHandlers.get(serviceName);<a name="line.7411"></a>
-<span class="sourceLineNo">7412</span>    Descriptors.ServiceDescriptor serviceDesc = service.getDescriptorForType();<a name="line.7412"></a>
-<span class="sourceLineNo">7413</span>    Descriptors.MethodDescriptor methodDesc = serviceDesc.findMethodByName(methodName);<a name="line.7413"></a>
-<span class="sourceLineNo">7414</span>    if (methodDesc == null) {<a name="line.7414"></a>
-<span class="sourceLineNo">7415</span>      throw new UnknownProtocolException(service.getClass(),<a name="line.7415"></a>
-<span class="sourceLineNo">7416</span>          "Unknown method "+methodName+" called on service "+serviceName+<a name="line.7416"></a>
-<span class="sourceLineNo">7417</span>              " in region "+Bytes.toStringBinary(getRegionInfo().getRegionName()));<a name="line.7417"></a>
-<span class="sourceLineNo">7418</span>    }<a name="line.7418"></a>
-<span class="sourceLineNo">7419</span><a name="line.7419"></a>
-<span class="sourceLineNo">7420</span>    Message.Builder builder = service.getRequestPrototype(methodDesc).newBuilderForType();<a name="line.7420"></a>
-<span class="sourceLineNo">7421</span>    ProtobufUtil.mergeFrom(builder, call.getRequest());<a name="line.7421"></a>
-<span class="sourceLineNo">7422</span>    Message request = builder.build();<a name="line.7422"></a>
-<span class="sourceLineNo">7423</span><a name="line.7423"></a>
-<span class="sourceLineNo">7424</span>    if (coprocessorHost != null) {<a name="line.7424"></a>
-<span class="sourceLineNo">7425</span>      request = coprocessorHost.preEndpointInvocation(service, methodName, request);<a name="line.7425"></a>
-<span class="sourceLineNo">7426</span>    }<a name="line.7426"></a>
-<span class="sourceLineNo">7427</span><a name="line.7427"></a>
-<span class="sourceLineNo">7428</span>    final Message.Builder responseBuilder =<a name="line.7428"></a>
-<span class="sourceLineNo">7429</span>        service.getResponsePrototype(methodDesc).newBuilderForType();<a name="line.7429"></a>
-<span class="sourceLineNo">7430</span>    service.callMethod(methodDesc, controller, request, new RpcCallback&lt;Message&gt;() {<a name="line.7430"></a>
-<span class="sourceLineNo">7431</span>      @Override<a name="line.7431"></a>
-<span class="sourceLineNo">7432</span>      public void run(Message message) {<a name="line.7432"></a>
-<span class="sourceLineNo">7433</span>        if (message != null) {<a name="line.7433"></a>
-<span class="sourceLineNo">7434</span>          responseBuilder.mergeFrom(message);<a name="line.7434"></a>
-<span class="sourceLineNo">7435</span>        }<a name="line.7435"></a>
-<span class="sourceLineNo">7436</span>      }<a name="line.7436"></a>
-<span class="sourceLineNo">7437</span>    });<a name="line.7437"></a>
-<span class="sourceLineNo">7438</span><a name="line.7438"></a>
-<span class="sourceLineNo">7439</span>    if (coprocessorHost != null) {<a name="line.7439"></a>
-<span class="sourceLineNo">7440</span>      coprocessorHost.postEndpointInvocation(service, methodName, request, responseBuilder);<a name="line.7440"></a>
-<span class="sourceLineNo">7441</span>    }<a name="line.7441"></a>
-<span class="sourceLineNo">7442</span><a name="line.7442"></a>
-<span class="sourceLineNo">7443</span>    IOException exception = ResponseConverter.getControllerException(controller);<a name="line.7443"></a>
-<span class="sourceLineNo">7444</span>    if (exception != null) {<a name="line.7444"></a>
-<span class="sourceLineNo">7445</span>      throw exception;<a name="line.7445"></a>
-<span class="sourceLin

<TRUNCATED>

[27/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/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 1d64963..a232cc8 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
@@ -6980,880 +6980,882 @@
 <span class="sourceLineNo">6972</span>      lock(this.updatesLock.readLock());<a name="line.6972"></a>
 <span class="sourceLineNo">6973</span>      try {<a name="line.6973"></a>
 <span class="sourceLineNo">6974</span>        Result cpResult = doCoprocessorPreCall(op, mutation);<a name="line.6974"></a>
-<span class="sourceLineNo">6975</span>        if (cpResult != null) return cpResult;<a name="line.6975"></a>
-<span class="sourceLineNo">6976</span>        Durability effectiveDurability = getEffectiveDurability(mutation.getDurability());<a name="line.6976"></a>
-<span class="sourceLineNo">6977</span>        Map&lt;Store, List&lt;Cell&gt;&gt; forMemStore =<a name="line.6977"></a>
-<span class="sourceLineNo">6978</span>            new HashMap&lt;Store, List&lt;Cell&gt;&gt;(mutation.getFamilyCellMap().size());<a name="line.6978"></a>
-<span class="sourceLineNo">6979</span>        // Reckon Cells to apply to WAL --  in returned walEdit -- and what to add to memstore and<a name="line.6979"></a>
-<span class="sourceLineNo">6980</span>        // what to return back to the client (in 'forMemStore' and 'results' respectively).<a name="line.6980"></a>
-<span class="sourceLineNo">6981</span>        WALEdit walEdit = reckonDeltas(op, mutation, effectiveDurability, forMemStore, results);<a name="line.6981"></a>
-<span class="sourceLineNo">6982</span>        // Actually write to WAL now if a walEdit to apply.<a name="line.6982"></a>
-<span class="sourceLineNo">6983</span>        if (walEdit != null &amp;&amp; !walEdit.isEmpty()) {<a name="line.6983"></a>
-<span class="sourceLineNo">6984</span>          writeEntry = doWALAppend(walEdit, durability, nonceGroup, nonce);<a name="line.6984"></a>
-<span class="sourceLineNo">6985</span>        } else {<a name="line.6985"></a>
-<span class="sourceLineNo">6986</span>          // If walEdits is empty, it means we skipped the WAL; update counters and start an mvcc<a name="line.6986"></a>
-<span class="sourceLineNo">6987</span>          // transaction.<a name="line.6987"></a>
-<span class="sourceLineNo">6988</span>          recordMutationWithoutWal(mutation.getFamilyCellMap());<a name="line.6988"></a>
-<span class="sourceLineNo">6989</span>          writeEntry = mvcc.begin();<a name="line.6989"></a>
-<span class="sourceLineNo">6990</span>        }<a name="line.6990"></a>
-<span class="sourceLineNo">6991</span>        // Now write to MemStore. Do it a column family at a time.<a name="line.6991"></a>
-<span class="sourceLineNo">6992</span>        long sequenceId = writeEntry.getWriteNumber();<a name="line.6992"></a>
-<span class="sourceLineNo">6993</span>        for (Map.Entry&lt;Store, List&lt;Cell&gt;&gt; e: forMemStore.entrySet()) {<a name="line.6993"></a>
-<span class="sourceLineNo">6994</span>          accumulatedResultSize +=<a name="line.6994"></a>
-<span class="sourceLineNo">6995</span>              applyToMemstore(e.getKey(), e.getValue(), true, false, sequenceId);<a name="line.6995"></a>
-<span class="sourceLineNo">6996</span>        }<a name="line.6996"></a>
-<span class="sourceLineNo">6997</span>        mvcc.completeAndWait(writeEntry);<a name="line.6997"></a>
-<span class="sourceLineNo">6998</span>        writeEntry = null;<a name="line.6998"></a>
-<span class="sourceLineNo">6999</span>      } finally {<a name="line.6999"></a>
-<span class="sourceLineNo">7000</span>        this.updatesLock.readLock().unlock();<a name="line.7000"></a>
-<span class="sourceLineNo">7001</span>      }<a name="line.7001"></a>
-<span class="sourceLineNo">7002</span>      // If results is null, then client asked that we not return the calculated results.<a name="line.7002"></a>
-<span class="sourceLineNo">7003</span>      return results !=  null? Result.create(results): null;<a name="line.7003"></a>
-<span class="sourceLineNo">7004</span>    } finally {<a name="line.7004"></a>
-<span class="sourceLineNo">7005</span>      // Call complete always, even on success. doDelta is doing a Get READ_UNCOMMITTED when it goes<a name="line.7005"></a>
-<span class="sourceLineNo">7006</span>      // to get current value under an exclusive lock so no need so no need to wait to return to<a name="line.7006"></a>
-<span class="sourceLineNo">7007</span>      // the client. Means only way to read-your-own-increment or append is to come in with an<a name="line.7007"></a>
-<span class="sourceLineNo">7008</span>      // a 0 increment.<a name="line.7008"></a>
-<span class="sourceLineNo">7009</span>      if (writeEntry != null) mvcc.complete(writeEntry);<a name="line.7009"></a>
-<span class="sourceLineNo">7010</span>      rowLock.release();<a name="line.7010"></a>
-<span class="sourceLineNo">7011</span>      // Request a cache flush if over the limit.  Do it outside update lock.<a name="line.7011"></a>
-<span class="sourceLineNo">7012</span>      if (isFlushSize(this.addAndGetGlobalMemstoreSize(accumulatedResultSize))) requestFlush();<a name="line.7012"></a>
-<span class="sourceLineNo">7013</span>      closeRegionOperation(op);<a name="line.7013"></a>
-<span class="sourceLineNo">7014</span>      if (this.metricsRegion != null) {<a name="line.7014"></a>
-<span class="sourceLineNo">7015</span>        switch (op) {<a name="line.7015"></a>
-<span class="sourceLineNo">7016</span>          case INCREMENT:<a name="line.7016"></a>
-<span class="sourceLineNo">7017</span>            this.metricsRegion.updateIncrement();<a name="line.7017"></a>
-<span class="sourceLineNo">7018</span>            break;<a name="line.7018"></a>
-<span class="sourceLineNo">7019</span>          case APPEND:<a name="line.7019"></a>
-<span class="sourceLineNo">7020</span>            this.metricsRegion.updateAppend();<a name="line.7020"></a>
-<span class="sourceLineNo">7021</span>            break;<a name="line.7021"></a>
-<span class="sourceLineNo">7022</span>          default:<a name="line.7022"></a>
+<span class="sourceLineNo">6975</span>        if (cpResult != null) {<a name="line.6975"></a>
+<span class="sourceLineNo">6976</span>          return returnResults? cpResult: null;<a name="line.6976"></a>
+<span class="sourceLineNo">6977</span>        }<a name="line.6977"></a>
+<span class="sourceLineNo">6978</span>        Durability effectiveDurability = getEffectiveDurability(mutation.getDurability());<a name="line.6978"></a>
+<span class="sourceLineNo">6979</span>        Map&lt;Store, List&lt;Cell&gt;&gt; forMemStore =<a name="line.6979"></a>
+<span class="sourceLineNo">6980</span>            new HashMap&lt;Store, List&lt;Cell&gt;&gt;(mutation.getFamilyCellMap().size());<a name="line.6980"></a>
+<span class="sourceLineNo">6981</span>        // Reckon Cells to apply to WAL --  in returned walEdit -- and what to add to memstore and<a name="line.6981"></a>
+<span class="sourceLineNo">6982</span>        // what to return back to the client (in 'forMemStore' and 'results' respectively).<a name="line.6982"></a>
+<span class="sourceLineNo">6983</span>        WALEdit walEdit = reckonDeltas(op, mutation, effectiveDurability, forMemStore, results);<a name="line.6983"></a>
+<span class="sourceLineNo">6984</span>        // Actually write to WAL now if a walEdit to apply.<a name="line.6984"></a>
+<span class="sourceLineNo">6985</span>        if (walEdit != null &amp;&amp; !walEdit.isEmpty()) {<a name="line.6985"></a>
+<span class="sourceLineNo">6986</span>          writeEntry = doWALAppend(walEdit, durability, nonceGroup, nonce);<a name="line.6986"></a>
+<span class="sourceLineNo">6987</span>        } else {<a name="line.6987"></a>
+<span class="sourceLineNo">6988</span>          // If walEdits is empty, it means we skipped the WAL; update counters and start an mvcc<a name="line.6988"></a>
+<span class="sourceLineNo">6989</span>          // transaction.<a name="line.6989"></a>
+<span class="sourceLineNo">6990</span>          recordMutationWithoutWal(mutation.getFamilyCellMap());<a name="line.6990"></a>
+<span class="sourceLineNo">6991</span>          writeEntry = mvcc.begin();<a name="line.6991"></a>
+<span class="sourceLineNo">6992</span>        }<a name="line.6992"></a>
+<span class="sourceLineNo">6993</span>        // Now write to MemStore. Do it a column family at a time.<a name="line.6993"></a>
+<span class="sourceLineNo">6994</span>        long sequenceId = writeEntry.getWriteNumber();<a name="line.6994"></a>
+<span class="sourceLineNo">6995</span>        for (Map.Entry&lt;Store, List&lt;Cell&gt;&gt; e: forMemStore.entrySet()) {<a name="line.6995"></a>
+<span class="sourceLineNo">6996</span>          accumulatedResultSize +=<a name="line.6996"></a>
+<span class="sourceLineNo">6997</span>              applyToMemstore(e.getKey(), e.getValue(), true, false, sequenceId);<a name="line.6997"></a>
+<span class="sourceLineNo">6998</span>        }<a name="line.6998"></a>
+<span class="sourceLineNo">6999</span>        mvcc.completeAndWait(writeEntry);<a name="line.6999"></a>
+<span class="sourceLineNo">7000</span>        writeEntry = null;<a name="line.7000"></a>
+<span class="sourceLineNo">7001</span>      } finally {<a name="line.7001"></a>
+<span class="sourceLineNo">7002</span>        this.updatesLock.readLock().unlock();<a name="line.7002"></a>
+<span class="sourceLineNo">7003</span>      }<a name="line.7003"></a>
+<span class="sourceLineNo">7004</span>      // If results is null, then client asked that we not return the calculated results.<a name="line.7004"></a>
+<span class="sourceLineNo">7005</span>      return results != null &amp;&amp; returnResults? Result.create(results): null;<a name="line.7005"></a>
+<span class="sourceLineNo">7006</span>    } finally {<a name="line.7006"></a>
+<span class="sourceLineNo">7007</span>      // Call complete always, even on success. doDelta is doing a Get READ_UNCOMMITTED when it goes<a name="line.7007"></a>
+<span class="sourceLineNo">7008</span>      // to get current value under an exclusive lock so no need so no need to wait to return to<a name="line.7008"></a>
+<span class="sourceLineNo">7009</span>      // the client. Means only way to read-your-own-increment or append is to come in with an<a name="line.7009"></a>
+<span class="sourceLineNo">7010</span>      // a 0 increment.<a name="line.7010"></a>
+<span class="sourceLineNo">7011</span>      if (writeEntry != null) mvcc.complete(writeEntry);<a name="line.7011"></a>
+<span class="sourceLineNo">7012</span>      rowLock.release();<a name="line.7012"></a>
+<span class="sourceLineNo">7013</span>      // Request a cache flush if over the limit.  Do it outside update lock.<a name="line.7013"></a>
+<span class="sourceLineNo">7014</span>      if (isFlushSize(this.addAndGetGlobalMemstoreSize(accumulatedResultSize))) requestFlush();<a name="line.7014"></a>
+<span class="sourceLineNo">7015</span>      closeRegionOperation(op);<a name="line.7015"></a>
+<span class="sourceLineNo">7016</span>      if (this.metricsRegion != null) {<a name="line.7016"></a>
+<span class="sourceLineNo">7017</span>        switch (op) {<a name="line.7017"></a>
+<span class="sourceLineNo">7018</span>          case INCREMENT:<a name="line.7018"></a>
+<span class="sourceLineNo">7019</span>            this.metricsRegion.updateIncrement();<a name="line.7019"></a>
+<span class="sourceLineNo">7020</span>            break;<a name="line.7020"></a>
+<span class="sourceLineNo">7021</span>          case APPEND:<a name="line.7021"></a>
+<span class="sourceLineNo">7022</span>            this.metricsRegion.updateAppend();<a name="line.7022"></a>
 <span class="sourceLineNo">7023</span>            break;<a name="line.7023"></a>
-<span class="sourceLineNo">7024</span>        }<a name="line.7024"></a>
-<span class="sourceLineNo">7025</span>      }<a name="line.7025"></a>
-<span class="sourceLineNo">7026</span>    }<a name="line.7026"></a>
-<span class="sourceLineNo">7027</span>  }<a name="line.7027"></a>
-<span class="sourceLineNo">7028</span><a name="line.7028"></a>
-<span class="sourceLineNo">7029</span>  private WriteEntry doWALAppend(WALEdit walEdit, Durability durability, long nonceGroup,<a name="line.7029"></a>
-<span class="sourceLineNo">7030</span>      long nonce)<a name="line.7030"></a>
-<span class="sourceLineNo">7031</span>  throws IOException {<a name="line.7031"></a>
-<span class="sourceLineNo">7032</span>    return doWALAppend(walEdit, durability, WALKey.EMPTY_UUIDS, System.currentTimeMillis(),<a name="line.7032"></a>
-<span class="sourceLineNo">7033</span>      nonceGroup, nonce);<a name="line.7033"></a>
-<span class="sourceLineNo">7034</span>  }<a name="line.7034"></a>
-<span class="sourceLineNo">7035</span><a name="line.7035"></a>
-<span class="sourceLineNo">7036</span>  /**<a name="line.7036"></a>
-<span class="sourceLineNo">7037</span>   * @return writeEntry associated with this append<a name="line.7037"></a>
-<span class="sourceLineNo">7038</span>   */<a name="line.7038"></a>
-<span class="sourceLineNo">7039</span>  private WriteEntry doWALAppend(WALEdit walEdit, Durability durability, List&lt;UUID&gt; clusterIds,<a name="line.7039"></a>
-<span class="sourceLineNo">7040</span>      long now, long nonceGroup, long nonce)<a name="line.7040"></a>
-<span class="sourceLineNo">7041</span>  throws IOException {<a name="line.7041"></a>
-<span class="sourceLineNo">7042</span>    WriteEntry writeEntry = null;<a name="line.7042"></a>
-<span class="sourceLineNo">7043</span>    // Using default cluster id, as this can only happen in the originating cluster.<a name="line.7043"></a>
-<span class="sourceLineNo">7044</span>    // A slave cluster receives the final value (not the delta) as a Put. We use HLogKey<a name="line.7044"></a>
-<span class="sourceLineNo">7045</span>    // here instead of WALKey directly to support legacy coprocessors.<a name="line.7045"></a>
-<span class="sourceLineNo">7046</span>    WALKey walKey = new WALKey(this.getRegionInfo().getEncodedNameAsBytes(),<a name="line.7046"></a>
-<span class="sourceLineNo">7047</span>      this.htableDescriptor.getTableName(), WALKey.NO_SEQUENCE_ID, now, clusterIds,<a name="line.7047"></a>
-<span class="sourceLineNo">7048</span>      nonceGroup, nonce, mvcc);<a name="line.7048"></a>
-<span class="sourceLineNo">7049</span>    try {<a name="line.7049"></a>
-<span class="sourceLineNo">7050</span>      long txid =<a name="line.7050"></a>
-<span class="sourceLineNo">7051</span>        this.wal.append(this.htableDescriptor, this.getRegionInfo(), walKey, walEdit, true);<a name="line.7051"></a>
-<span class="sourceLineNo">7052</span>      // Call sync on our edit.<a name="line.7052"></a>
-<span class="sourceLineNo">7053</span>      if (txid != 0) sync(txid, durability);<a name="line.7053"></a>
-<span class="sourceLineNo">7054</span>      writeEntry = walKey.getWriteEntry();<a name="line.7054"></a>
-<span class="sourceLineNo">7055</span>    } catch (IOException ioe) {<a name="line.7055"></a>
-<span class="sourceLineNo">7056</span>      if (walKey != null) mvcc.complete(walKey.getWriteEntry());<a name="line.7056"></a>
-<span class="sourceLineNo">7057</span>      throw ioe;<a name="line.7057"></a>
-<span class="sourceLineNo">7058</span>    }<a name="line.7058"></a>
-<span class="sourceLineNo">7059</span>    return writeEntry;<a name="line.7059"></a>
-<span class="sourceLineNo">7060</span>  }<a name="line.7060"></a>
-<span class="sourceLineNo">7061</span><a name="line.7061"></a>
-<span class="sourceLineNo">7062</span>  /**<a name="line.7062"></a>
-<span class="sourceLineNo">7063</span>   * Do coprocessor pre-increment or pre-append call.<a name="line.7063"></a>
-<span class="sourceLineNo">7064</span>   * @return Result returned out of the coprocessor, which means bypass all further processing and<a name="line.7064"></a>
-<span class="sourceLineNo">7065</span>   *  return the proffered Result instead, or null which means proceed.<a name="line.7065"></a>
-<span class="sourceLineNo">7066</span>   */<a name="line.7066"></a>
-<span class="sourceLineNo">7067</span>  private Result doCoprocessorPreCall(final Operation op, final Mutation mutation)<a name="line.7067"></a>
-<span class="sourceLineNo">7068</span>  throws IOException {<a name="line.7068"></a>
-<span class="sourceLineNo">7069</span>    Result result = null;<a name="line.7069"></a>
-<span class="sourceLineNo">7070</span>    if (this.coprocessorHost != null) {<a name="line.7070"></a>
-<span class="sourceLineNo">7071</span>      switch(op) {<a name="line.7071"></a>
-<span class="sourceLineNo">7072</span>        case INCREMENT:<a name="line.7072"></a>
-<span class="sourceLineNo">7073</span>          result = this.coprocessorHost.preIncrementAfterRowLock((Increment)mutation);<a name="line.7073"></a>
-<span class="sourceLineNo">7074</span>          break;<a name="line.7074"></a>
-<span class="sourceLineNo">7075</span>        case APPEND:<a name="line.7075"></a>
-<span class="sourceLineNo">7076</span>          result = this.coprocessorHost.preAppendAfterRowLock((Append)mutation);<a name="line.7076"></a>
-<span class="sourceLineNo">7077</span>          break;<a name="line.7077"></a>
-<span class="sourceLineNo">7078</span>        default: throw new UnsupportedOperationException(op.toString());<a name="line.7078"></a>
-<span class="sourceLineNo">7079</span>      }<a name="line.7079"></a>
-<span class="sourceLineNo">7080</span>    }<a name="line.7080"></a>
-<span class="sourceLineNo">7081</span>    return result;<a name="line.7081"></a>
-<span class="sourceLineNo">7082</span>  }<a name="line.7082"></a>
-<span class="sourceLineNo">7083</span><a name="line.7083"></a>
-<span class="sourceLineNo">7084</span>  /**<a name="line.7084"></a>
-<span class="sourceLineNo">7085</span>   * Reckon the Cells to apply to WAL, memstore, and to return to the Client; these Sets are not<a name="line.7085"></a>
-<span class="sourceLineNo">7086</span>   * always the same dependent on whether to write WAL or if the amount to increment is zero (in<a name="line.7086"></a>
-<span class="sourceLineNo">7087</span>   * this case we write back nothing, just return latest Cell value to the client).<a name="line.7087"></a>
-<span class="sourceLineNo">7088</span>   *<a name="line.7088"></a>
-<span class="sourceLineNo">7089</span>   * @param results Fill in here what goes back to the Client if it is non-null (if null, client<a name="line.7089"></a>
-<span class="sourceLineNo">7090</span>   *  doesn't want results).<a name="line.7090"></a>
-<span class="sourceLineNo">7091</span>   * @param forMemStore Fill in here what to apply to the MemStore (by Store).<a name="line.7091"></a>
-<span class="sourceLineNo">7092</span>   * @return A WALEdit to apply to WAL or null if we are to skip the WAL.<a name="line.7092"></a>
-<span class="sourceLineNo">7093</span>   */<a name="line.7093"></a>
-<span class="sourceLineNo">7094</span>  private WALEdit reckonDeltas(final Operation op, final Mutation mutation,<a name="line.7094"></a>
-<span class="sourceLineNo">7095</span>      final Durability effectiveDurability, final Map&lt;Store, List&lt;Cell&gt;&gt; forMemStore,<a name="line.7095"></a>
-<span class="sourceLineNo">7096</span>      final List&lt;Cell&gt; results)<a name="line.7096"></a>
-<span class="sourceLineNo">7097</span>  throws IOException {<a name="line.7097"></a>
-<span class="sourceLineNo">7098</span>    WALEdit walEdit = null;<a name="line.7098"></a>
-<span class="sourceLineNo">7099</span>    long now = EnvironmentEdgeManager.currentTime();<a name="line.7099"></a>
-<span class="sourceLineNo">7100</span>    final boolean writeToWAL = effectiveDurability != Durability.SKIP_WAL;<a name="line.7100"></a>
-<span class="sourceLineNo">7101</span>    // Process a Store/family at a time.<a name="line.7101"></a>
-<span class="sourceLineNo">7102</span>    for (Map.Entry&lt;byte [], List&lt;Cell&gt;&gt; entry: mutation.getFamilyCellMap().entrySet()) {<a name="line.7102"></a>
-<span class="sourceLineNo">7103</span>      final byte [] columnFamilyName = entry.getKey();<a name="line.7103"></a>
-<span class="sourceLineNo">7104</span>      List&lt;Cell&gt; deltas = entry.getValue();<a name="line.7104"></a>
-<span class="sourceLineNo">7105</span>      Store store = this.stores.get(columnFamilyName);<a name="line.7105"></a>
-<span class="sourceLineNo">7106</span>      // Reckon for the Store what to apply to WAL and MemStore.<a name="line.7106"></a>
-<span class="sourceLineNo">7107</span>      List&lt;Cell&gt; toApply =<a name="line.7107"></a>
-<span class="sourceLineNo">7108</span>        reckonDeltasByStore(store, op, mutation, effectiveDurability, now, deltas, results);<a name="line.7108"></a>
-<span class="sourceLineNo">7109</span>      if (!toApply.isEmpty()) {<a name="line.7109"></a>
-<span class="sourceLineNo">7110</span>        forMemStore.put(store, toApply);<a name="line.7110"></a>
-<span class="sourceLineNo">7111</span>        if (writeToWAL) {<a name="line.7111"></a>
-<span class="sourceLineNo">7112</span>          if (walEdit == null) {<a name="line.7112"></a>
-<span class="sourceLineNo">7113</span>            walEdit = new WALEdit();<a name="line.7113"></a>
-<span class="sourceLineNo">7114</span>          }<a name="line.7114"></a>
-<span class="sourceLineNo">7115</span>          walEdit.getCells().addAll(toApply);<a name="line.7115"></a>
-<span class="sourceLineNo">7116</span>        }<a name="line.7116"></a>
-<span class="sourceLineNo">7117</span>      }<a name="line.7117"></a>
-<span class="sourceLineNo">7118</span>    }<a name="line.7118"></a>
-<span class="sourceLineNo">7119</span>    return walEdit;<a name="line.7119"></a>
-<span class="sourceLineNo">7120</span>  }<a name="line.7120"></a>
-<span class="sourceLineNo">7121</span><a name="line.7121"></a>
-<span class="sourceLineNo">7122</span>  /**<a name="line.7122"></a>
-<span class="sourceLineNo">7123</span>   * Reckon the Cells to apply to WAL, memstore, and to return to the Client in passed<a name="line.7123"></a>
-<span class="sourceLineNo">7124</span>   * column family/Store.<a name="line.7124"></a>
-<span class="sourceLineNo">7125</span>   *<a name="line.7125"></a>
-<span class="sourceLineNo">7126</span>   * Does Get of current value and then adds passed in deltas for this Store returning the result.<a name="line.7126"></a>
+<span class="sourceLineNo">7024</span>          default:<a name="line.7024"></a>
+<span class="sourceLineNo">7025</span>            break;<a name="line.7025"></a>
+<span class="sourceLineNo">7026</span>        }<a name="line.7026"></a>
+<span class="sourceLineNo">7027</span>      }<a name="line.7027"></a>
+<span class="sourceLineNo">7028</span>    }<a name="line.7028"></a>
+<span class="sourceLineNo">7029</span>  }<a name="line.7029"></a>
+<span class="sourceLineNo">7030</span><a name="line.7030"></a>
+<span class="sourceLineNo">7031</span>  private WriteEntry doWALAppend(WALEdit walEdit, Durability durability, long nonceGroup,<a name="line.7031"></a>
+<span class="sourceLineNo">7032</span>      long nonce)<a name="line.7032"></a>
+<span class="sourceLineNo">7033</span>  throws IOException {<a name="line.7033"></a>
+<span class="sourceLineNo">7034</span>    return doWALAppend(walEdit, durability, WALKey.EMPTY_UUIDS, System.currentTimeMillis(),<a name="line.7034"></a>
+<span class="sourceLineNo">7035</span>      nonceGroup, nonce);<a name="line.7035"></a>
+<span class="sourceLineNo">7036</span>  }<a name="line.7036"></a>
+<span class="sourceLineNo">7037</span><a name="line.7037"></a>
+<span class="sourceLineNo">7038</span>  /**<a name="line.7038"></a>
+<span class="sourceLineNo">7039</span>   * @return writeEntry associated with this append<a name="line.7039"></a>
+<span class="sourceLineNo">7040</span>   */<a name="line.7040"></a>
+<span class="sourceLineNo">7041</span>  private WriteEntry doWALAppend(WALEdit walEdit, Durability durability, List&lt;UUID&gt; clusterIds,<a name="line.7041"></a>
+<span class="sourceLineNo">7042</span>      long now, long nonceGroup, long nonce)<a name="line.7042"></a>
+<span class="sourceLineNo">7043</span>  throws IOException {<a name="line.7043"></a>
+<span class="sourceLineNo">7044</span>    WriteEntry writeEntry = null;<a name="line.7044"></a>
+<span class="sourceLineNo">7045</span>    // Using default cluster id, as this can only happen in the originating cluster.<a name="line.7045"></a>
+<span class="sourceLineNo">7046</span>    // A slave cluster receives the final value (not the delta) as a Put. We use HLogKey<a name="line.7046"></a>
+<span class="sourceLineNo">7047</span>    // here instead of WALKey directly to support legacy coprocessors.<a name="line.7047"></a>
+<span class="sourceLineNo">7048</span>    WALKey walKey = new WALKey(this.getRegionInfo().getEncodedNameAsBytes(),<a name="line.7048"></a>
+<span class="sourceLineNo">7049</span>      this.htableDescriptor.getTableName(), WALKey.NO_SEQUENCE_ID, now, clusterIds,<a name="line.7049"></a>
+<span class="sourceLineNo">7050</span>      nonceGroup, nonce, mvcc);<a name="line.7050"></a>
+<span class="sourceLineNo">7051</span>    try {<a name="line.7051"></a>
+<span class="sourceLineNo">7052</span>      long txid =<a name="line.7052"></a>
+<span class="sourceLineNo">7053</span>        this.wal.append(this.htableDescriptor, this.getRegionInfo(), walKey, walEdit, true);<a name="line.7053"></a>
+<span class="sourceLineNo">7054</span>      // Call sync on our edit.<a name="line.7054"></a>
+<span class="sourceLineNo">7055</span>      if (txid != 0) sync(txid, durability);<a name="line.7055"></a>
+<span class="sourceLineNo">7056</span>      writeEntry = walKey.getWriteEntry();<a name="line.7056"></a>
+<span class="sourceLineNo">7057</span>    } catch (IOException ioe) {<a name="line.7057"></a>
+<span class="sourceLineNo">7058</span>      if (walKey != null) mvcc.complete(walKey.getWriteEntry());<a name="line.7058"></a>
+<span class="sourceLineNo">7059</span>      throw ioe;<a name="line.7059"></a>
+<span class="sourceLineNo">7060</span>    }<a name="line.7060"></a>
+<span class="sourceLineNo">7061</span>    return writeEntry;<a name="line.7061"></a>
+<span class="sourceLineNo">7062</span>  }<a name="line.7062"></a>
+<span class="sourceLineNo">7063</span><a name="line.7063"></a>
+<span class="sourceLineNo">7064</span>  /**<a name="line.7064"></a>
+<span class="sourceLineNo">7065</span>   * Do coprocessor pre-increment or pre-append call.<a name="line.7065"></a>
+<span class="sourceLineNo">7066</span>   * @return Result returned out of the coprocessor, which means bypass all further processing and<a name="line.7066"></a>
+<span class="sourceLineNo">7067</span>   *  return the proffered Result instead, or null which means proceed.<a name="line.7067"></a>
+<span class="sourceLineNo">7068</span>   */<a name="line.7068"></a>
+<span class="sourceLineNo">7069</span>  private Result doCoprocessorPreCall(final Operation op, final Mutation mutation)<a name="line.7069"></a>
+<span class="sourceLineNo">7070</span>  throws IOException {<a name="line.7070"></a>
+<span class="sourceLineNo">7071</span>    Result result = null;<a name="line.7071"></a>
+<span class="sourceLineNo">7072</span>    if (this.coprocessorHost != null) {<a name="line.7072"></a>
+<span class="sourceLineNo">7073</span>      switch(op) {<a name="line.7073"></a>
+<span class="sourceLineNo">7074</span>        case INCREMENT:<a name="line.7074"></a>
+<span class="sourceLineNo">7075</span>          result = this.coprocessorHost.preIncrementAfterRowLock((Increment)mutation);<a name="line.7075"></a>
+<span class="sourceLineNo">7076</span>          break;<a name="line.7076"></a>
+<span class="sourceLineNo">7077</span>        case APPEND:<a name="line.7077"></a>
+<span class="sourceLineNo">7078</span>          result = this.coprocessorHost.preAppendAfterRowLock((Append)mutation);<a name="line.7078"></a>
+<span class="sourceLineNo">7079</span>          break;<a name="line.7079"></a>
+<span class="sourceLineNo">7080</span>        default: throw new UnsupportedOperationException(op.toString());<a name="line.7080"></a>
+<span class="sourceLineNo">7081</span>      }<a name="line.7081"></a>
+<span class="sourceLineNo">7082</span>    }<a name="line.7082"></a>
+<span class="sourceLineNo">7083</span>    return result;<a name="line.7083"></a>
+<span class="sourceLineNo">7084</span>  }<a name="line.7084"></a>
+<span class="sourceLineNo">7085</span><a name="line.7085"></a>
+<span class="sourceLineNo">7086</span>  /**<a name="line.7086"></a>
+<span class="sourceLineNo">7087</span>   * Reckon the Cells to apply to WAL, memstore, and to return to the Client; these Sets are not<a name="line.7087"></a>
+<span class="sourceLineNo">7088</span>   * always the same dependent on whether to write WAL or if the amount to increment is zero (in<a name="line.7088"></a>
+<span class="sourceLineNo">7089</span>   * this case we write back nothing, just return latest Cell value to the client).<a name="line.7089"></a>
+<span class="sourceLineNo">7090</span>   *<a name="line.7090"></a>
+<span class="sourceLineNo">7091</span>   * @param results Fill in here what goes back to the Client if it is non-null (if null, client<a name="line.7091"></a>
+<span class="sourceLineNo">7092</span>   *  doesn't want results).<a name="line.7092"></a>
+<span class="sourceLineNo">7093</span>   * @param forMemStore Fill in here what to apply to the MemStore (by Store).<a name="line.7093"></a>
+<span class="sourceLineNo">7094</span>   * @return A WALEdit to apply to WAL or null if we are to skip the WAL.<a name="line.7094"></a>
+<span class="sourceLineNo">7095</span>   */<a name="line.7095"></a>
+<span class="sourceLineNo">7096</span>  private WALEdit reckonDeltas(final Operation op, final Mutation mutation,<a name="line.7096"></a>
+<span class="sourceLineNo">7097</span>      final Durability effectiveDurability, final Map&lt;Store, List&lt;Cell&gt;&gt; forMemStore,<a name="line.7097"></a>
+<span class="sourceLineNo">7098</span>      final List&lt;Cell&gt; results)<a name="line.7098"></a>
+<span class="sourceLineNo">7099</span>  throws IOException {<a name="line.7099"></a>
+<span class="sourceLineNo">7100</span>    WALEdit walEdit = null;<a name="line.7100"></a>
+<span class="sourceLineNo">7101</span>    long now = EnvironmentEdgeManager.currentTime();<a name="line.7101"></a>
+<span class="sourceLineNo">7102</span>    final boolean writeToWAL = effectiveDurability != Durability.SKIP_WAL;<a name="line.7102"></a>
+<span class="sourceLineNo">7103</span>    // Process a Store/family at a time.<a name="line.7103"></a>
+<span class="sourceLineNo">7104</span>    for (Map.Entry&lt;byte [], List&lt;Cell&gt;&gt; entry: mutation.getFamilyCellMap().entrySet()) {<a name="line.7104"></a>
+<span class="sourceLineNo">7105</span>      final byte [] columnFamilyName = entry.getKey();<a name="line.7105"></a>
+<span class="sourceLineNo">7106</span>      List&lt;Cell&gt; deltas = entry.getValue();<a name="line.7106"></a>
+<span class="sourceLineNo">7107</span>      Store store = this.stores.get(columnFamilyName);<a name="line.7107"></a>
+<span class="sourceLineNo">7108</span>      // Reckon for the Store what to apply to WAL and MemStore.<a name="line.7108"></a>
+<span class="sourceLineNo">7109</span>      List&lt;Cell&gt; toApply =<a name="line.7109"></a>
+<span class="sourceLineNo">7110</span>        reckonDeltasByStore(store, op, mutation, effectiveDurability, now, deltas, results);<a name="line.7110"></a>
+<span class="sourceLineNo">7111</span>      if (!toApply.isEmpty()) {<a name="line.7111"></a>
+<span class="sourceLineNo">7112</span>        forMemStore.put(store, toApply);<a name="line.7112"></a>
+<span class="sourceLineNo">7113</span>        if (writeToWAL) {<a name="line.7113"></a>
+<span class="sourceLineNo">7114</span>          if (walEdit == null) {<a name="line.7114"></a>
+<span class="sourceLineNo">7115</span>            walEdit = new WALEdit();<a name="line.7115"></a>
+<span class="sourceLineNo">7116</span>          }<a name="line.7116"></a>
+<span class="sourceLineNo">7117</span>          walEdit.getCells().addAll(toApply);<a name="line.7117"></a>
+<span class="sourceLineNo">7118</span>        }<a name="line.7118"></a>
+<span class="sourceLineNo">7119</span>      }<a name="line.7119"></a>
+<span class="sourceLineNo">7120</span>    }<a name="line.7120"></a>
+<span class="sourceLineNo">7121</span>    return walEdit;<a name="line.7121"></a>
+<span class="sourceLineNo">7122</span>  }<a name="line.7122"></a>
+<span class="sourceLineNo">7123</span><a name="line.7123"></a>
+<span class="sourceLineNo">7124</span>  /**<a name="line.7124"></a>
+<span class="sourceLineNo">7125</span>   * Reckon the Cells to apply to WAL, memstore, and to return to the Client in passed<a name="line.7125"></a>
+<span class="sourceLineNo">7126</span>   * column family/Store.<a name="line.7126"></a>
 <span class="sourceLineNo">7127</span>   *<a name="line.7127"></a>
-<span class="sourceLineNo">7128</span>   * @param op Whether Increment or Append<a name="line.7128"></a>
-<span class="sourceLineNo">7129</span>   * @param mutation The encompassing Mutation object<a name="line.7129"></a>
-<span class="sourceLineNo">7130</span>   * @param deltas Changes to apply to this Store; either increment amount or data to append<a name="line.7130"></a>
-<span class="sourceLineNo">7131</span>   * @param results In here we accumulate all the Cells we are to return to the client; this List<a name="line.7131"></a>
-<span class="sourceLineNo">7132</span>   *  can be larger than what we return in case where delta is zero; i.e. don't write<a name="line.7132"></a>
-<span class="sourceLineNo">7133</span>   *  out new values, just return current value. If null, client doesn't want results returned.<a name="line.7133"></a>
-<span class="sourceLineNo">7134</span>   * @return Resulting Cells after &lt;code&gt;deltas&lt;/code&gt; have been applied to current<a name="line.7134"></a>
-<span class="sourceLineNo">7135</span>   *  values. Side effect is our filling out of the &lt;code&gt;results&lt;/code&gt; List.<a name="line.7135"></a>
-<span class="sourceLineNo">7136</span>   */<a name="line.7136"></a>
-<span class="sourceLineNo">7137</span>  private List&lt;Cell&gt; reckonDeltasByStore(final Store store, final Operation op,<a name="line.7137"></a>
-<span class="sourceLineNo">7138</span>      final Mutation mutation, final Durability effectiveDurability, final long now,<a name="line.7138"></a>
-<span class="sourceLineNo">7139</span>      final List&lt;Cell&gt; deltas, final List&lt;Cell&gt; results)<a name="line.7139"></a>
-<span class="sourceLineNo">7140</span>  throws IOException {<a name="line.7140"></a>
-<span class="sourceLineNo">7141</span>    byte [] columnFamily = store.getFamily().getName();<a name="line.7141"></a>
-<span class="sourceLineNo">7142</span>    List&lt;Cell&gt; toApply = new ArrayList&lt;Cell&gt;(deltas.size());<a name="line.7142"></a>
-<span class="sourceLineNo">7143</span>    // Get previous values for all columns in this family.<a name="line.7143"></a>
-<span class="sourceLineNo">7144</span>    List&lt;Cell&gt; currentValues = get(mutation, store, deltas,<a name="line.7144"></a>
-<span class="sourceLineNo">7145</span>        null/*Default IsolationLevel*/,<a name="line.7145"></a>
-<span class="sourceLineNo">7146</span>        op == Operation.INCREMENT? ((Increment)mutation).getTimeRange(): null);<a name="line.7146"></a>
-<span class="sourceLineNo">7147</span>    // Iterate the input columns and update existing values if they were found, otherwise<a name="line.7147"></a>
-<span class="sourceLineNo">7148</span>    // add new column initialized to the delta amount<a name="line.7148"></a>
-<span class="sourceLineNo">7149</span>    int currentValuesIndex = 0;<a name="line.7149"></a>
-<span class="sourceLineNo">7150</span>    for (int i = 0; i &lt; deltas.size(); i++) {<a name="line.7150"></a>
-<span class="sourceLineNo">7151</span>      Cell delta = deltas.get(i);<a name="line.7151"></a>
-<span class="sourceLineNo">7152</span>      Cell currentValue = null;<a name="line.7152"></a>
-<span class="sourceLineNo">7153</span>      if (currentValuesIndex &lt; currentValues.size() &amp;&amp;<a name="line.7153"></a>
-<span class="sourceLineNo">7154</span>          CellUtil.matchingQualifier(currentValues.get(currentValuesIndex), delta)) {<a name="line.7154"></a>
-<span class="sourceLineNo">7155</span>        currentValue = currentValues.get(currentValuesIndex);<a name="line.7155"></a>
-<span class="sourceLineNo">7156</span>        if (i &lt; (deltas.size() - 1) &amp;&amp; !CellUtil.matchingQualifier(delta, deltas.get(i + 1))) {<a name="line.7156"></a>
-<span class="sourceLineNo">7157</span>          currentValuesIndex++;<a name="line.7157"></a>
-<span class="sourceLineNo">7158</span>        }<a name="line.7158"></a>
-<span class="sourceLineNo">7159</span>      }<a name="line.7159"></a>
-<span class="sourceLineNo">7160</span>      // Switch on whether this an increment or an append building the new Cell to apply.<a name="line.7160"></a>
-<span class="sourceLineNo">7161</span>      Cell newCell = null;<a name="line.7161"></a>
-<span class="sourceLineNo">7162</span>      MutationType mutationType = null;<a name="line.7162"></a>
-<span class="sourceLineNo">7163</span>      boolean apply = true;<a name="line.7163"></a>
-<span class="sourceLineNo">7164</span>      switch (op) {<a name="line.7164"></a>
-<span class="sourceLineNo">7165</span>        case INCREMENT:<a name="line.7165"></a>
-<span class="sourceLineNo">7166</span>          mutationType = MutationType.INCREMENT;<a name="line.7166"></a>
-<span class="sourceLineNo">7167</span>          // If delta amount to apply is 0, don't write WAL or MemStore.<a name="line.7167"></a>
-<span class="sourceLineNo">7168</span>          long deltaAmount = getLongValue(delta);<a name="line.7168"></a>
-<span class="sourceLineNo">7169</span>          apply = deltaAmount != 0;<a name="line.7169"></a>
-<span class="sourceLineNo">7170</span>          newCell = reckonIncrement(delta, deltaAmount, currentValue, columnFamily, now,<a name="line.7170"></a>
-<span class="sourceLineNo">7171</span>            (Increment)mutation);<a name="line.7171"></a>
-<span class="sourceLineNo">7172</span>          break;<a name="line.7172"></a>
-<span class="sourceLineNo">7173</span>        case APPEND:<a name="line.7173"></a>
-<span class="sourceLineNo">7174</span>          mutationType = MutationType.APPEND;<a name="line.7174"></a>
-<span class="sourceLineNo">7175</span>          // Always apply Append. TODO: Does empty delta value mean reset Cell? It seems to.<a name="line.7175"></a>
-<span class="sourceLineNo">7176</span>          newCell = reckonAppend(delta, currentValue, now, (Append)mutation);<a name="line.7176"></a>
-<span class="sourceLineNo">7177</span>          break;<a name="line.7177"></a>
-<span class="sourceLineNo">7178</span>        default: throw new UnsupportedOperationException(op.toString());<a name="line.7178"></a>
-<span class="sourceLineNo">7179</span>      }<a name="line.7179"></a>
-<span class="sourceLineNo">7180</span><a name="line.7180"></a>
-<span class="sourceLineNo">7181</span>      // Give coprocessors a chance to update the new cell<a name="line.7181"></a>
-<span class="sourceLineNo">7182</span>      if (coprocessorHost != null) {<a name="line.7182"></a>
-<span class="sourceLineNo">7183</span>        newCell =<a name="line.7183"></a>
-<span class="sourceLineNo">7184</span>            coprocessorHost.postMutationBeforeWAL(mutationType, mutation, currentValue, newCell);<a name="line.7184"></a>
-<span class="sourceLineNo">7185</span>      }<a name="line.7185"></a>
-<span class="sourceLineNo">7186</span>      // If apply, we need to update memstore/WAL with new value; add it toApply.<a name="line.7186"></a>
-<span class="sourceLineNo">7187</span>      if (apply) {<a name="line.7187"></a>
-<span class="sourceLineNo">7188</span>        toApply.add(newCell);<a name="line.7188"></a>
-<span class="sourceLineNo">7189</span>      }<a name="line.7189"></a>
-<span class="sourceLineNo">7190</span>      // Add to results to get returned to the Client. If null, cilent does not want results.<a name="line.7190"></a>
-<span class="sourceLineNo">7191</span>      if (results != null) {<a name="line.7191"></a>
-<span class="sourceLineNo">7192</span>        results.add(newCell);<a name="line.7192"></a>
-<span class="sourceLineNo">7193</span>      }<a name="line.7193"></a>
-<span class="sourceLineNo">7194</span>    }<a name="line.7194"></a>
-<span class="sourceLineNo">7195</span>    return toApply;<a name="line.7195"></a>
-<span class="sourceLineNo">7196</span>  }<a name="line.7196"></a>
-<span class="sourceLineNo">7197</span><a name="line.7197"></a>
-<span class="sourceLineNo">7198</span>  /**<a name="line.7198"></a>
-<span class="sourceLineNo">7199</span>   * Calculate new Increment Cell.<a name="line.7199"></a>
-<span class="sourceLineNo">7200</span>   * @return New Increment Cell with delta applied to currentValue if currentValue is not null;<a name="line.7200"></a>
-<span class="sourceLineNo">7201</span>   *  otherwise, a new Cell with the delta set as its value.<a name="line.7201"></a>
-<span class="sourceLineNo">7202</span>   */<a name="line.7202"></a>
-<span class="sourceLineNo">7203</span>  private Cell reckonIncrement(final Cell delta, final long deltaAmount, final Cell currentValue,<a name="line.7203"></a>
-<span class="sourceLineNo">7204</span>      byte [] columnFamily, final long now, Mutation mutation)<a name="line.7204"></a>
-<span class="sourceLineNo">7205</span>  throws IOException {<a name="line.7205"></a>
-<span class="sourceLineNo">7206</span>    // Forward any tags found on the delta.<a name="line.7206"></a>
-<span class="sourceLineNo">7207</span>    List&lt;Tag&gt; tags = TagUtil.carryForwardTags(delta);<a name="line.7207"></a>
-<span class="sourceLineNo">7208</span>    long newValue = deltaAmount;<a name="line.7208"></a>
-<span class="sourceLineNo">7209</span>    long ts = now;<a name="line.7209"></a>
-<span class="sourceLineNo">7210</span>    if (currentValue != null) {<a name="line.7210"></a>
-<span class="sourceLineNo">7211</span>      tags = TagUtil.carryForwardTags(tags, currentValue);<a name="line.7211"></a>
-<span class="sourceLineNo">7212</span>      ts = Math.max(now, currentValue.getTimestamp());<a name="line.7212"></a>
-<span class="sourceLineNo">7213</span>      newValue += getLongValue(currentValue);<a name="line.7213"></a>
-<span class="sourceLineNo">7214</span>    }<a name="line.7214"></a>
-<span class="sourceLineNo">7215</span>    // Now make up the new Cell. TODO: FIX. This is carnel knowledge of how KeyValues are made...<a name="line.7215"></a>
-<span class="sourceLineNo">7216</span>    // doesn't work well with offheaping or if we are doing a different Cell type.<a name="line.7216"></a>
-<span class="sourceLineNo">7217</span>    byte [] incrementAmountInBytes = Bytes.toBytes(newValue);<a name="line.7217"></a>
-<span class="sourceLineNo">7218</span>    tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7218"></a>
-<span class="sourceLineNo">7219</span>    byte [] row = mutation.getRow();<a name="line.7219"></a>
-<span class="sourceLineNo">7220</span>    return new KeyValue(row, 0, row.length,<a name="line.7220"></a>
-<span class="sourceLineNo">7221</span>      columnFamily, 0, columnFamily.length,<a name="line.7221"></a>
-<span class="sourceLineNo">7222</span>      delta.getQualifierArray(), delta.getQualifierOffset(), delta.getQualifierLength(),<a name="line.7222"></a>
-<span class="sourceLineNo">7223</span>      ts, KeyValue.Type.Put,<a name="line.7223"></a>
-<span class="sourceLineNo">7224</span>      incrementAmountInBytes, 0, incrementAmountInBytes.length,<a name="line.7224"></a>
-<span class="sourceLineNo">7225</span>      tags);<a name="line.7225"></a>
-<span class="sourceLineNo">7226</span>  }<a name="line.7226"></a>
-<span class="sourceLineNo">7227</span><a name="line.7227"></a>
-<span class="sourceLineNo">7228</span>  private Cell reckonAppend(final Cell delta, final Cell currentValue, final long now,<a name="line.7228"></a>
-<span class="sourceLineNo">7229</span>      Append mutation)<a name="line.7229"></a>
-<span class="sourceLineNo">7230</span>  throws IOException {<a name="line.7230"></a>
-<span class="sourceLineNo">7231</span>    // Forward any tags found on the delta.<a name="line.7231"></a>
-<span class="sourceLineNo">7232</span>    List&lt;Tag&gt; tags = TagUtil.carryForwardTags(delta);<a name="line.7232"></a>
-<span class="sourceLineNo">7233</span>    long ts = now;<a name="line.7233"></a>
-<span class="sourceLineNo">7234</span>    Cell newCell = null;<a name="line.7234"></a>
-<span class="sourceLineNo">7235</span>    byte [] row = mutation.getRow();<a name="line.7235"></a>
-<span class="sourceLineNo">7236</span>    if (currentValue != null) {<a name="line.7236"></a>
-<span class="sourceLineNo">7237</span>      tags = TagUtil.carryForwardTags(tags, currentValue);<a name="line.7237"></a>
-<span class="sourceLineNo">7238</span>      ts = Math.max(now, currentValue.getTimestamp());<a name="line.7238"></a>
-<span class="sourceLineNo">7239</span>      tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7239"></a>
-<span class="sourceLineNo">7240</span>      byte[] tagBytes = TagUtil.fromList(tags);<a name="line.7240"></a>
-<span class="sourceLineNo">7241</span>      // Allocate an empty cell and copy in all parts.<a name="line.7241"></a>
-<span class="sourceLineNo">7242</span>      // TODO: This is intimate knowledge of how a KeyValue is made. Undo!!! Prevents our doing<a name="line.7242"></a>
-<span class="sourceLineNo">7243</span>      // other Cell types. Copying on-heap too if an off-heap Cell.<a name="line.7243"></a>
-<span class="sourceLineNo">7244</span>      newCell = new KeyValue(row.length, delta.getFamilyLength(),<a name="line.7244"></a>
-<span class="sourceLineNo">7245</span>        delta.getQualifierLength(), ts, KeyValue.Type.Put,<a name="line.7245"></a>
-<span class="sourceLineNo">7246</span>        delta.getValueLength() + currentValue.getValueLength(),<a name="line.7246"></a>
-<span class="sourceLineNo">7247</span>        tagBytes == null? 0: tagBytes.length);<a name="line.7247"></a>
-<span class="sourceLineNo">7248</span>      // Copy in row, family, and qualifier<a name="line.7248"></a>
-<span class="sourceLineNo">7249</span>      System.arraycopy(row, 0, newCell.getRowArray(), newCell.getRowOffset(), row.length);<a name="line.7249"></a>
-<span class="sourceLineNo">7250</span>      System.arraycopy(delta.getFamilyArray(), delta.getFamilyOffset(),<a name="line.7250"></a>
-<span class="sourceLineNo">7251</span>          newCell.getFamilyArray(), newCell.getFamilyOffset(), delta.getFamilyLength());<a name="line.7251"></a>
-<span class="sourceLineNo">7252</span>      System.arraycopy(delta.getQualifierArray(), delta.getQualifierOffset(),<a name="line.7252"></a>
-<span class="sourceLineNo">7253</span>          newCell.getQualifierArray(), newCell.getQualifierOffset(), delta.getQualifierLength());<a name="line.7253"></a>
-<span class="sourceLineNo">7254</span>      // Copy in the value<a name="line.7254"></a>
-<span class="sourceLineNo">7255</span>      CellUtil.copyValueTo(currentValue, newCell.getValueArray(), newCell.getValueOffset());<a name="line.7255"></a>
-<span class="sourceLineNo">7256</span>      System.arraycopy(delta.getValueArray(), delta.getValueOffset(),<a name="line.7256"></a>
-<span class="sourceLineNo">7257</span>          newCell.getValueArray(), newCell.getValueOffset() + currentValue.getValueLength(),<a name="line.7257"></a>
-<span class="sourceLineNo">7258</span>          delta.getValueLength());<a name="line.7258"></a>
-<span class="sourceLineNo">7259</span>      // Copy in tag data<a name="line.7259"></a>
-<span class="sourceLineNo">7260</span>      if (tagBytes != null) {<a name="line.7260"></a>
-<span class="sourceLineNo">7261</span>        System.arraycopy(tagBytes, 0,<a name="line.7261"></a>
-<span class="sourceLineNo">7262</span>            newCell.getTagsArray(), newCell.getTagsOffset(), tagBytes.length);<a name="line.7262"></a>
-<span class="sourceLineNo">7263</span>      }<a name="line.7263"></a>
-<span class="sourceLineNo">7264</span>    } else {<a name="line.7264"></a>
-<span class="sourceLineNo">7265</span>      // Append's KeyValue.Type==Put and ts==HConstants.LATEST_TIMESTAMP<a name="line.7265"></a>
-<span class="sourceLineNo">7266</span>      CellUtil.updateLatestStamp(delta, now);<a name="line.7266"></a>
-<span class="sourceLineNo">7267</span>      newCell = delta;<a name="line.7267"></a>
-<span class="sourceLineNo">7268</span>      tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7268"></a>
-<span class="sourceLineNo">7269</span>      if (tags != null) {<a name="line.7269"></a>
-<span class="sourceLineNo">7270</span>        newCell = new TagRewriteCell(delta, TagUtil.fromList(tags));<a name="line.7270"></a>
-<span class="sourceLineNo">7271</span>      }<a name="line.7271"></a>
-<span class="sourceLineNo">7272</span>    }<a name="line.7272"></a>
-<span class="sourceLineNo">7273</span>    return newCell;<a name="line.7273"></a>
-<span class="sourceLineNo">7274</span>  }<a name="line.7274"></a>
-<span class="sourceLineNo">7275</span><a name="line.7275"></a>
-<span class="sourceLineNo">7276</span>  /**<a name="line.7276"></a>
-<span class="sourceLineNo">7277</span>   * @return Get the long out of the passed in Cell<a name="line.7277"></a>
-<span class="sourceLineNo">7278</span>   */<a name="line.7278"></a>
-<span class="sourceLineNo">7279</span>  private static long getLongValue(final Cell cell) throws DoNotRetryIOException {<a name="line.7279"></a>
-<span class="sourceLineNo">7280</span>    int len = cell.getValueLength();<a name="line.7280"></a>
-<span class="sourceLineNo">7281</span>    if (len != Bytes.SIZEOF_LONG) {<a name="line.7281"></a>
-<span class="sourceLineNo">7282</span>      // throw DoNotRetryIOException instead of IllegalArgumentException<a name="line.7282"></a>
-<span class="sourceLineNo">7283</span>      throw new DoNotRetryIOException("Field is not a long, it's " + len + " bytes wide");<a name="line.7283"></a>
-<span class="sourceLineNo">7284</span>    }<a name="line.7284"></a>
-<span class="sourceLineNo">7285</span>    return Bytes.toLong(cell.getValueArray(), cell.getValueOffset(), len);<a name="line.7285"></a>
-<span class="sourceLineNo">7286</span>  }<a name="line.7286"></a>
-<span class="sourceLineNo">7287</span><a name="line.7287"></a>
-<span class="sourceLineNo">7288</span>  /**<a name="line.7288"></a>
-<span class="sourceLineNo">7289</span>   * Do a specific Get on passed &lt;code&gt;columnFamily&lt;/code&gt; and column qualifiers.<a name="line.7289"></a>
-<span class="sourceLineNo">7290</span>   * @param mutation Mutation we are doing this Get for.<a name="line.7290"></a>
-<span class="sourceLineNo">7291</span>   * @param columnFamily Which column family on row (TODO: Go all Gets in one go)<a name="line.7291"></a>
-<span class="sourceLineNo">7292</span>   * @param coordinates Cells from &lt;code&gt;mutation&lt;/code&gt; used as coordinates applied to Get.<a name="line.7292"></a>
-<span class="sourceLineNo">7293</span>   * @return Return list of Cells found.<a name="line.7293"></a>
-<span class="sourceLineNo">7294</span>   */<a name="line.7294"></a>
-<span class="sourceLineNo">7295</span>  private List&lt;Cell&gt; get(final Mutation mutation, final Store store,<a name="line.7295"></a>
-<span class="sourceLineNo">7296</span>          final List&lt;Cell&gt; coordinates, final IsolationLevel isolation, final TimeRange tr)<a name="line.7296"></a>
-<span class="sourceLineNo">7297</span>  throws IOException {<a name="line.7297"></a>
-<span class="sourceLineNo">7298</span>    // Sort the cells so that they match the order that they appear in the Get results. Otherwise,<a name="line.7298"></a>
-<span class="sourceLineNo">7299</span>    // we won't be able to find the existing values if the cells are not specified in order by the<a name="line.7299"></a>
-<span class="sourceLineNo">7300</span>    // client since cells are in an array list.<a name="line.7300"></a>
-<span class="sourceLineNo">7301</span>    // TODO: I don't get why we are sorting. St.Ack 20150107<a name="line.7301"></a>
-<span class="sourceLineNo">7302</span>    sort(coordinates, store.getComparator());<a name="line.7302"></a>
-<span class="sourceLineNo">7303</span>    Get get = new Get(mutation.getRow());<a name="line.7303"></a>
-<span class="sourceLineNo">7304</span>    if (isolation != null) {<a name="line.7304"></a>
-<span class="sourceLineNo">7305</span>      get.setIsolationLevel(isolation);<a name="line.7305"></a>
-<span class="sourceLineNo">7306</span>    }<a name="line.7306"></a>
-<span class="sourceLineNo">7307</span>    for (Cell cell: coordinates) {<a name="line.7307"></a>
-<span class="sourceLineNo">7308</span>      get.addColumn(store.getFamily().getName(), CellUtil.cloneQualifier(cell));<a name="line.7308"></a>
-<span class="sourceLineNo">7309</span>    }<a name="line.7309"></a>
-<span class="sourceLineNo">7310</span>    // Increments carry time range. If an Increment instance, put it on the Get.<a name="line.7310"></a>
-<span class="sourceLineNo">7311</span>    if (tr != null) {<a name="line.7311"></a>
-<span class="sourceLineNo">7312</span>      get.setTimeRange(tr.getMin(), tr.getMax());<a name="line.7312"></a>
-<span class="sourceLineNo">7313</span>    }<a name="line.7313"></a>
-<span class="sourceLineNo">7314</span>    return get(get, false);<a name="line.7314"></a>
-<span class="sourceLineNo">7315</span>  }<a name="line.7315"></a>
-<span class="sourceLineNo">7316</span><a name="line.7316"></a>
-<span class="sourceLineNo">7317</span>  /**<a name="line.7317"></a>
-<span class="sourceLineNo">7318</span>   * @return Sorted list of &lt;code&gt;cells&lt;/code&gt; using &lt;code&gt;comparator&lt;/code&gt;<a name="line.7318"></a>
-<span class="sourceLineNo">7319</span>   */<a name="line.7319"></a>
-<span class="sourceLineNo">7320</span>  private static List&lt;Cell&gt; sort(List&lt;Cell&gt; cells, final Comparator&lt;Cell&gt; comparator) {<a name="line.7320"></a>
-<span class="sourceLineNo">7321</span>    Collections.sort(cells, comparator);<a name="line.7321"></a>
-<span class="sourceLineNo">7322</span>    return cells;<a name="line.7322"></a>
-<span class="sourceLineNo">7323</span>  }<a name="line.7323"></a>
-<span class="sourceLineNo">7324</span><a name="line.7324"></a>
-<span class="sourceLineNo">7325</span>  //<a name="line.7325"></a>
-<span class="sourceLineNo">7326</span>  // New HBASE-880 Helpers<a name="line.7326"></a>
+<span class="sourceLineNo">7128</span>   * Does Get of current value and then adds passed in deltas for this Store returning the result.<a name="line.7128"></a>
+<span class="sourceLineNo">7129</span>   *<a name="line.7129"></a>
+<span class="sourceLineNo">7130</span>   * @param op Whether Increment or Append<a name="line.7130"></a>
+<span class="sourceLineNo">7131</span>   * @param mutation The encompassing Mutation object<a name="line.7131"></a>
+<span class="sourceLineNo">7132</span>   * @param deltas Changes to apply to this Store; either increment amount or data to append<a name="line.7132"></a>
+<span class="sourceLineNo">7133</span>   * @param results In here we accumulate all the Cells we are to return to the client; this List<a name="line.7133"></a>
+<span class="sourceLineNo">7134</span>   *  can be larger than what we return in case where delta is zero; i.e. don't write<a name="line.7134"></a>
+<span class="sourceLineNo">7135</span>   *  out new values, just return current value. If null, client doesn't want results returned.<a name="line.7135"></a>
+<span class="sourceLineNo">7136</span>   * @return Resulting Cells after &lt;code&gt;deltas&lt;/code&gt; have been applied to current<a name="line.7136"></a>
+<span class="sourceLineNo">7137</span>   *  values. Side effect is our filling out of the &lt;code&gt;results&lt;/code&gt; List.<a name="line.7137"></a>
+<span class="sourceLineNo">7138</span>   */<a name="line.7138"></a>
+<span class="sourceLineNo">7139</span>  private List&lt;Cell&gt; reckonDeltasByStore(final Store store, final Operation op,<a name="line.7139"></a>
+<span class="sourceLineNo">7140</span>      final Mutation mutation, final Durability effectiveDurability, final long now,<a name="line.7140"></a>
+<span class="sourceLineNo">7141</span>      final List&lt;Cell&gt; deltas, final List&lt;Cell&gt; results)<a name="line.7141"></a>
+<span class="sourceLineNo">7142</span>  throws IOException {<a name="line.7142"></a>
+<span class="sourceLineNo">7143</span>    byte [] columnFamily = store.getFamily().getName();<a name="line.7143"></a>
+<span class="sourceLineNo">7144</span>    List&lt;Cell&gt; toApply = new ArrayList&lt;Cell&gt;(deltas.size());<a name="line.7144"></a>
+<span class="sourceLineNo">7145</span>    // Get previous values for all columns in this family.<a name="line.7145"></a>
+<span class="sourceLineNo">7146</span>    List&lt;Cell&gt; currentValues = get(mutation, store, deltas,<a name="line.7146"></a>
+<span class="sourceLineNo">7147</span>        null/*Default IsolationLevel*/,<a name="line.7147"></a>
+<span class="sourceLineNo">7148</span>        op == Operation.INCREMENT? ((Increment)mutation).getTimeRange(): null);<a name="line.7148"></a>
+<span class="sourceLineNo">7149</span>    // Iterate the input columns and update existing values if they were found, otherwise<a name="line.7149"></a>
+<span class="sourceLineNo">7150</span>    // add new column initialized to the delta amount<a name="line.7150"></a>
+<span class="sourceLineNo">7151</span>    int currentValuesIndex = 0;<a name="line.7151"></a>
+<span class="sourceLineNo">7152</span>    for (int i = 0; i &lt; deltas.size(); i++) {<a name="line.7152"></a>
+<span class="sourceLineNo">7153</span>      Cell delta = deltas.get(i);<a name="line.7153"></a>
+<span class="sourceLineNo">7154</span>      Cell currentValue = null;<a name="line.7154"></a>
+<span class="sourceLineNo">7155</span>      if (currentValuesIndex &lt; currentValues.size() &amp;&amp;<a name="line.7155"></a>
+<span class="sourceLineNo">7156</span>          CellUtil.matchingQualifier(currentValues.get(currentValuesIndex), delta)) {<a name="line.7156"></a>
+<span class="sourceLineNo">7157</span>        currentValue = currentValues.get(currentValuesIndex);<a name="line.7157"></a>
+<span class="sourceLineNo">7158</span>        if (i &lt; (deltas.size() - 1) &amp;&amp; !CellUtil.matchingQualifier(delta, deltas.get(i + 1))) {<a name="line.7158"></a>
+<span class="sourceLineNo">7159</span>          currentValuesIndex++;<a name="line.7159"></a>
+<span class="sourceLineNo">7160</span>        }<a name="line.7160"></a>
+<span class="sourceLineNo">7161</span>      }<a name="line.7161"></a>
+<span class="sourceLineNo">7162</span>      // Switch on whether this an increment or an append building the new Cell to apply.<a name="line.7162"></a>
+<span class="sourceLineNo">7163</span>      Cell newCell = null;<a name="line.7163"></a>
+<span class="sourceLineNo">7164</span>      MutationType mutationType = null;<a name="line.7164"></a>
+<span class="sourceLineNo">7165</span>      boolean apply = true;<a name="line.7165"></a>
+<span class="sourceLineNo">7166</span>      switch (op) {<a name="line.7166"></a>
+<span class="sourceLineNo">7167</span>        case INCREMENT:<a name="line.7167"></a>
+<span class="sourceLineNo">7168</span>          mutationType = MutationType.INCREMENT;<a name="line.7168"></a>
+<span class="sourceLineNo">7169</span>          // If delta amount to apply is 0, don't write WAL or MemStore.<a name="line.7169"></a>
+<span class="sourceLineNo">7170</span>          long deltaAmount = getLongValue(delta);<a name="line.7170"></a>
+<span class="sourceLineNo">7171</span>          apply = deltaAmount != 0;<a name="line.7171"></a>
+<span class="sourceLineNo">7172</span>          newCell = reckonIncrement(delta, deltaAmount, currentValue, columnFamily, now,<a name="line.7172"></a>
+<span class="sourceLineNo">7173</span>            (Increment)mutation);<a name="line.7173"></a>
+<span class="sourceLineNo">7174</span>          break;<a name="line.7174"></a>
+<span class="sourceLineNo">7175</span>        case APPEND:<a name="line.7175"></a>
+<span class="sourceLineNo">7176</span>          mutationType = MutationType.APPEND;<a name="line.7176"></a>
+<span class="sourceLineNo">7177</span>          // Always apply Append. TODO: Does empty delta value mean reset Cell? It seems to.<a name="line.7177"></a>
+<span class="sourceLineNo">7178</span>          newCell = reckonAppend(delta, currentValue, now, (Append)mutation);<a name="line.7178"></a>
+<span class="sourceLineNo">7179</span>          break;<a name="line.7179"></a>
+<span class="sourceLineNo">7180</span>        default: throw new UnsupportedOperationException(op.toString());<a name="line.7180"></a>
+<span class="sourceLineNo">7181</span>      }<a name="line.7181"></a>
+<span class="sourceLineNo">7182</span><a name="line.7182"></a>
+<span class="sourceLineNo">7183</span>      // Give coprocessors a chance to update the new cell<a name="line.7183"></a>
+<span class="sourceLineNo">7184</span>      if (coprocessorHost != null) {<a name="line.7184"></a>
+<span class="sourceLineNo">7185</span>        newCell =<a name="line.7185"></a>
+<span class="sourceLineNo">7186</span>            coprocessorHost.postMutationBeforeWAL(mutationType, mutation, currentValue, newCell);<a name="line.7186"></a>
+<span class="sourceLineNo">7187</span>      }<a name="line.7187"></a>
+<span class="sourceLineNo">7188</span>      // If apply, we need to update memstore/WAL with new value; add it toApply.<a name="line.7188"></a>
+<span class="sourceLineNo">7189</span>      if (apply) {<a name="line.7189"></a>
+<span class="sourceLineNo">7190</span>        toApply.add(newCell);<a name="line.7190"></a>
+<span class="sourceLineNo">7191</span>      }<a name="line.7191"></a>
+<span class="sourceLineNo">7192</span>      // Add to results to get returned to the Client. If null, cilent does not want results.<a name="line.7192"></a>
+<span class="sourceLineNo">7193</span>      if (results != null) {<a name="line.7193"></a>
+<span class="sourceLineNo">7194</span>        results.add(newCell);<a name="line.7194"></a>
+<span class="sourceLineNo">7195</span>      }<a name="line.7195"></a>
+<span class="sourceLineNo">7196</span>    }<a name="line.7196"></a>
+<span class="sourceLineNo">7197</span>    return toApply;<a name="line.7197"></a>
+<span class="sourceLineNo">7198</span>  }<a name="line.7198"></a>
+<span class="sourceLineNo">7199</span><a name="line.7199"></a>
+<span class="sourceLineNo">7200</span>  /**<a name="line.7200"></a>
+<span class="sourceLineNo">7201</span>   * Calculate new Increment Cell.<a name="line.7201"></a>
+<span class="sourceLineNo">7202</span>   * @return New Increment Cell with delta applied to currentValue if currentValue is not null;<a name="line.7202"></a>
+<span class="sourceLineNo">7203</span>   *  otherwise, a new Cell with the delta set as its value.<a name="line.7203"></a>
+<span class="sourceLineNo">7204</span>   */<a name="line.7204"></a>
+<span class="sourceLineNo">7205</span>  private Cell reckonIncrement(final Cell delta, final long deltaAmount, final Cell currentValue,<a name="line.7205"></a>
+<span class="sourceLineNo">7206</span>      byte [] columnFamily, final long now, Mutation mutation)<a name="line.7206"></a>
+<span class="sourceLineNo">7207</span>  throws IOException {<a name="line.7207"></a>
+<span class="sourceLineNo">7208</span>    // Forward any tags found on the delta.<a name="line.7208"></a>
+<span class="sourceLineNo">7209</span>    List&lt;Tag&gt; tags = TagUtil.carryForwardTags(delta);<a name="line.7209"></a>
+<span class="sourceLineNo">7210</span>    long newValue = deltaAmount;<a name="line.7210"></a>
+<span class="sourceLineNo">7211</span>    long ts = now;<a name="line.7211"></a>
+<span class="sourceLineNo">7212</span>    if (currentValue != null) {<a name="line.7212"></a>
+<span class="sourceLineNo">7213</span>      tags = TagUtil.carryForwardTags(tags, currentValue);<a name="line.7213"></a>
+<span class="sourceLineNo">7214</span>      ts = Math.max(now, currentValue.getTimestamp());<a name="line.7214"></a>
+<span class="sourceLineNo">7215</span>      newValue += getLongValue(currentValue);<a name="line.7215"></a>
+<span class="sourceLineNo">7216</span>    }<a name="line.7216"></a>
+<span class="sourceLineNo">7217</span>    // Now make up the new Cell. TODO: FIX. This is carnel knowledge of how KeyValues are made...<a name="line.7217"></a>
+<span class="sourceLineNo">7218</span>    // doesn't work well with offheaping or if we are doing a different Cell type.<a name="line.7218"></a>
+<span class="sourceLineNo">7219</span>    byte [] incrementAmountInBytes = Bytes.toBytes(newValue);<a name="line.7219"></a>
+<span class="sourceLineNo">7220</span>    tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7220"></a>
+<span class="sourceLineNo">7221</span>    byte [] row = mutation.getRow();<a name="line.7221"></a>
+<span class="sourceLineNo">7222</span>    return new KeyValue(row, 0, row.length,<a name="line.7222"></a>
+<span class="sourceLineNo">7223</span>      columnFamily, 0, columnFamily.length,<a name="line.7223"></a>
+<span class="sourceLineNo">7224</span>      delta.getQualifierArray(), delta.getQualifierOffset(), delta.getQualifierLength(),<a name="line.7224"></a>
+<span class="sourceLineNo">7225</span>      ts, KeyValue.Type.Put,<a name="line.7225"></a>
+<span class="sourceLineNo">7226</span>      incrementAmountInBytes, 0, incrementAmountInBytes.length,<a name="line.7226"></a>
+<span class="sourceLineNo">7227</span>      tags);<a name="line.7227"></a>
+<span class="sourceLineNo">7228</span>  }<a name="line.7228"></a>
+<span class="sourceLineNo">7229</span><a name="line.7229"></a>
+<span class="sourceLineNo">7230</span>  private Cell reckonAppend(final Cell delta, final Cell currentValue, final long now,<a name="line.7230"></a>
+<span class="sourceLineNo">7231</span>      Append mutation)<a name="line.7231"></a>
+<span class="sourceLineNo">7232</span>  throws IOException {<a name="line.7232"></a>
+<span class="sourceLineNo">7233</span>    // Forward any tags found on the delta.<a name="line.7233"></a>
+<span class="sourceLineNo">7234</span>    List&lt;Tag&gt; tags = TagUtil.carryForwardTags(delta);<a name="line.7234"></a>
+<span class="sourceLineNo">7235</span>    long ts = now;<a name="line.7235"></a>
+<span class="sourceLineNo">7236</span>    Cell newCell = null;<a name="line.7236"></a>
+<span class="sourceLineNo">7237</span>    byte [] row = mutation.getRow();<a name="line.7237"></a>
+<span class="sourceLineNo">7238</span>    if (currentValue != null) {<a name="line.7238"></a>
+<span class="sourceLineNo">7239</span>      tags = TagUtil.carryForwardTags(tags, currentValue);<a name="line.7239"></a>
+<span class="sourceLineNo">7240</span>      ts = Math.max(now, currentValue.getTimestamp());<a name="line.7240"></a>
+<span class="sourceLineNo">7241</span>      tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7241"></a>
+<span class="sourceLineNo">7242</span>      byte[] tagBytes = TagUtil.fromList(tags);<a name="line.7242"></a>
+<span class="sourceLineNo">7243</span>      // Allocate an empty cell and copy in all parts.<a name="line.7243"></a>
+<span class="sourceLineNo">7244</span>      // TODO: This is intimate knowledge of how a KeyValue is made. Undo!!! Prevents our doing<a name="line.7244"></a>
+<span class="sourceLineNo">7245</span>      // other Cell types. Copying on-heap too if an off-heap Cell.<a name="line.7245"></a>
+<span class="sourceLineNo">7246</span>      newCell = new KeyValue(row.length, delta.getFamilyLength(),<a name="line.7246"></a>
+<span class="sourceLineNo">7247</span>        delta.getQualifierLength(), ts, KeyValue.Type.Put,<a name="line.7247"></a>
+<span class="sourceLineNo">7248</span>        delta.getValueLength() + currentValue.getValueLength(),<a name="line.7248"></a>
+<span class="sourceLineNo">7249</span>        tagBytes == null? 0: tagBytes.length);<a name="line.7249"></a>
+<span class="sourceLineNo">7250</span>      // Copy in row, family, and qualifier<a name="line.7250"></a>
+<span class="sourceLineNo">7251</span>      System.arraycopy(row, 0, newCell.getRowArray(), newCell.getRowOffset(), row.length);<a name="line.7251"></a>
+<span class="sourceLineNo">7252</span>      System.arraycopy(delta.getFamilyArray(), delta.getFamilyOffset(),<a name="line.7252"></a>
+<span class="sourceLineNo">7253</span>          newCell.getFamilyArray(), newCell.getFamilyOffset(), delta.getFamilyLength());<a name="line.7253"></a>
+<span class="sourceLineNo">7254</span>      System.arraycopy(delta.getQualifierArray(), delta.getQualifierOffset(),<a name="line.7254"></a>
+<span class="sourceLineNo">7255</span>          newCell.getQualifierArray(), newCell.getQualifierOffset(), delta.getQualifierLength());<a name="line.7255"></a>
+<span class="sourceLineNo">7256</span>      // Copy in the value<a name="line.7256"></a>
+<span class="sourceLineNo">7257</span>      CellUtil.copyValueTo(currentValue, newCell.getValueArray(), newCell.getValueOffset());<a name="line.7257"></a>
+<span class="sourceLineNo">7258</span>      System.arraycopy(delta.getValueArray(), delta.getValueOffset(),<a name="line.7258"></a>
+<span class="sourceLineNo">7259</span>          newCell.getValueArray(), newCell.getValueOffset() + currentValue.getValueLength(),<a name="line.7259"></a>
+<span class="sourceLineNo">7260</span>          delta.getValueLength());<a name="line.7260"></a>
+<span class="sourceLineNo">7261</span>      // Copy in tag data<a name="line.7261"></a>
+<span class="sourceLineNo">7262</span>      if (tagBytes != null) {<a name="line.7262"></a>
+<span class="sourceLineNo">7263</span>        System.arraycopy(tagBytes, 0,<a name="line.7263"></a>
+<span class="sourceLineNo">7264</span>            newCell.getTagsArray(), newCell.getTagsOffset(), tagBytes.length);<a name="line.7264"></a>
+<span class="sourceLineNo">7265</span>      }<a name="line.7265"></a>
+<span class="sourceLineNo">7266</span>    } else {<a name="line.7266"></a>
+<span class="sourceLineNo">7267</span>      // Append's KeyValue.Type==Put and ts==HConstants.LATEST_TIMESTAMP<a name="line.7267"></a>
+<span class="sourceLineNo">7268</span>      CellUtil.updateLatestStamp(delta, now);<a name="line.7268"></a>
+<span class="sourceLineNo">7269</span>      newCell = delta;<a name="line.7269"></a>
+<span class="sourceLineNo">7270</span>      tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7270"></a>
+<span class="sourceLineNo">7271</span>      if (tags != null) {<a name="line.7271"></a>
+<span class="sourceLineNo">7272</span>        newCell = new TagRewriteCell(delta, TagUtil.fromList(tags));<a name="line.7272"></a>
+<span class="sourceLineNo">7273</span>      }<a name="line.7273"></a>
+<span class="sourceLineNo">7274</span>    }<a name="line.7274"></a>
+<span class="sourceLineNo">7275</span>    return newCell;<a name="line.7275"></a>
+<span class="sourceLineNo">7276</span>  }<a name="line.7276"></a>
+<span class="sourceLineNo">7277</span><a name="line.7277"></a>
+<span class="sourceLineNo">7278</span>  /**<a name="line.7278"></a>
+<span class="sourceLineNo">7279</span>   * @return Get the long out of the passed in Cell<a name="line.7279"></a>
+<span class="sourceLineNo">7280</span>   */<a name="line.7280"></a>
+<span class="sourceLineNo">7281</span>  private static long getLongValue(final Cell cell) throws DoNotRetryIOException {<a name="line.7281"></a>
+<span class="sourceLineNo">7282</span>    int len = cell.getValueLength();<a name="line.7282"></a>
+<span class="sourceLineNo">7283</span>    if (len != Bytes.SIZEOF_LONG) {<a name="line.7283"></a>
+<span class="sourceLineNo">7284</span>      // throw DoNotRetryIOException instead of IllegalArgumentException<a name="line.7284"></a>
+<span class="sourceLineNo">7285</span>      throw new DoNotRetryIOException("Field is not a long, it's " + len + " bytes wide");<a name="line.7285"></a>
+<span class="sourceLineNo">7286</span>    }<a name="line.7286"></a>
+<span class="sourceLineNo">7287</span>    return Bytes.toLong(cell.getValueArray(), cell.getValueOffset(), len);<a name="line.7287"></a>
+<span class="sourceLineNo">7288</span>  }<a name="line.7288"></a>
+<span class="sourceLineNo">7289</span><a name="line.7289"></a>
+<span class="sourceLineNo">7290</span>  /**<a name="line.7290"></a>
+<span class="sourceLineNo">7291</span>   * Do a specific Get on passed &lt;code&gt;columnFamily&lt;/code&gt; and column qualifiers.<a name="line.7291"></a>
+<span class="sourceLineNo">7292</span>   * @param mutation Mutation we are doing this Get for.<a name="line.7292"></a>
+<span class="sourceLineNo">7293</span>   * @param columnFamily Which column family on row (TODO: Go all Gets in one go)<a name="line.7293"></a>
+<span class="sourceLineNo">7294</span>   * @param coordinates Cells from &lt;code&gt;mutation&lt;/code&gt; used as coordinates applied to Get.<a name="line.7294"></a>
+<span class="sourceLineNo">7295</span>   * @return Return list of Cells found.<a name="line.7295"></a>
+<span class="sourceLineNo">7296</span>   */<a name="line.7296"></a>
+<span class="sourceLineNo">7297</span>  private List&lt;Cell&gt; get(final Mutation mutation, final Store store,<a name="line.7297"></a>
+<span class="sourceLineNo">7298</span>          final List&lt;Cell&gt; coordinates, final IsolationLevel isolation, final TimeRange tr)<a name="line.7298"></a>
+<span class="sourceLineNo">7299</span>  throws IOException {<a name="line.7299"></a>
+<span class="sourceLineNo">7300</span>    // Sort the cells so that they match the order that they appear in the Get results. Otherwise,<a name="line.7300"></a>
+<span class="sourceLineNo">7301</span>    // we won't be able to find the existing values if the cells are not specified in order by the<a name="line.7301"></a>
+<span class="sourceLineNo">7302</span>    // client since cells are in an array list.<a name="line.7302"></a>
+<span class="sourceLineNo">7303</span>    // TODO: I don't get why we are sorting. St.Ack 20150107<a name="line.7303"></a>
+<span class="sourceLineNo">7304</span>    sort(coordinates, store.getComparator());<a name="line.7304"></a>
+<span class="sourceLineNo">7305</span>    Get get = new Get(mutation.getRow());<a name="line.7305"></a>
+<span class="sourceLineNo">7306</span>    if (isolation != null) {<a name="line.7306"></a>
+<span class="sourceLineNo">7307</span>      get.setIsolationLevel(isolation);<a name="line.7307"></a>
+<span class="sourceLineNo">7308</span>    }<a name="line.7308"></a>
+<span class="sourceLineNo">7309</span>    for (Cell cell: coordinates) {<a name="line.7309"></a>
+<span class="sourceLineNo">7310</span>      get.addColumn(store.getFamily().getName(), CellUtil.cloneQualifier(cell));<a name="line.7310"></a>
+<span class="sourceLineNo">7311</span>    }<a name="line.7311"></a>
+<span class="sourceLineNo">7312</span>    // Increments carry time range. If an Increment instance, put it on the Get.<a name="line.7312"></a>
+<span class="sourceLineNo">7313</span>    if (tr != null) {<a name="line.7313"></a>
+<span class="sourceLineNo">7314</span>      get.setTimeRange(tr.getMin(), tr.getMax());<a name="line.7314"></a>
+<span class="sourceLineNo">7315</span>    }<a name="line.7315"></a>
+<span class="sourceLineNo">7316</span>    return get(get, false);<a name="line.7316"></a>
+<span class="sourceLineNo">7317</span>  }<a name="line.7317"></a>
+<span class="sourceLineNo">7318</span><a name="line.7318"></a>
+<span class="sourceLineNo">7319</span>  /**<a name="line.7319"></a>
+<span class="sourceLineNo">7320</span>   * @return Sorted list of &lt;code&gt;cells&lt;/code&gt; using &lt;code&gt;comparator&lt;/code&gt;<a name="line.7320"></a>
+<span class="sourceLineNo">7321</span>   */<a name="line.7321"></a>
+<span class="sourceLineNo">7322</span>  private static List&lt;Cell&gt; sort(List&lt;Cell&gt; cells, final Comparator&lt;Cell&gt; comparator) {<a name="line.7322"></a>
+<span class="sourceLineNo">7323</span>    Collections.sort(cells, comparator);<a name="line.7323"></a>
+<span class="sourceLineNo">7324</span>    return cells;<a name="line.7324"></a>
+<span class="sourceLineNo">7325</span>  }<a name="line.7325"></a>
+<span class="sourceLineNo">7326</span><a name="line.7326"></a>
 <span class="sourceLineNo">7327</span>  //<a name="line.7327"></a>
-<span class="sourceLineNo">7328</span><a name="line.7328"></a>
-<span class="sourceLineNo">7329</span>  void checkFamily(final byte [] family)<a name="line.7329"></a>
-<span class="sourceLineNo">7330</span>  throws NoSuchColumnFamilyException {<a name="line.7330"></a>
-<span class="sourceLineNo">7331</span>    if (!this.htableDescriptor.hasFamily(family)) {<a name="line.7331"></a>
-<span class="sourceLineNo">7332</span>      throw new NoSuchColumnFamilyException("Column family " +<a name="line.7332"></a>
-<span class="sourceLineNo">7333</span>          Bytes.toString(family) + " does not exist in region " + this<a name="line.7333"></a>
-<span class="sourceLineNo">7334</span>          + " in table " + this.htableDescriptor);<a name="line.7334"></a>
-<span class="sourceLineNo">7335</span>    }<a name="line.7335"></a>
-<span class="sourceLineNo">7336</span>  }<a name="line.7336"></a>
-<span class="sourceLineNo">7337</span><a name="line.7337"></a>
-<span class="sourceLineNo">7338</span>  public static final long FIXED_OVERHEAD = ClassSize.align(<a name="line.7338"></a>
-<span class="sourceLineNo">7339</span>      ClassSize.OBJECT +<a name="line.7339"></a>
-<span class="sourceLineNo">7340</span>      ClassSize.ARRAY +<a name="line.7340"></a>
-<span class="sourceLineNo">7341</span>      45 * ClassSize.REFERENCE + 2 * Bytes.SIZEOF_INT +<a name="line.7341"></a>
-<span class="sourceLineNo">7342</span>      (14 * Bytes.SIZEOF_LONG) +<a name="line.7342"></a>
-<span class="sourceLineNo">7343</span>      5 * Bytes.SIZEOF_BOOLEAN);<a name="line.7343"></a>
-<span class="sourceLineNo">7344</span><a name="line.7344"></a>
-<span class="sourceLineNo">7345</span>  // woefully out of date - currently missing:<a name="line.7345"></a>
-<span class="sourceLineNo">7346</span>  // 1 x HashMap - coprocessorServiceHandlers<a name="line.7346"></a>
-<span class="sourceLineNo">7347</span>  // 6 x Counter - numMutationsWithoutWAL, dataInMemoryWithoutWAL,<a name="line.7347"></a>
-<span class="sourceLineNo">7348</span>  //   checkAndMutateChecksPassed, checkAndMutateChecksFailed, readRequestsCount,<a name="line.7348"></a>
-<span class="sourceLineNo">7349</span>  //   writeRequestsCount<a name="line.7349"></a>
-<span class="sourceLineNo">7350</span>  // 1 x HRegion$WriteState - writestate<a name="line.7350"></a>
-<span class="sourceLineNo">7351</span>  // 1 x RegionCoprocessorHost - coprocessorHost<a name="line.7351"></a>
-<span class="sourceLineNo">7352</span>  // 1 x RegionSplitPolicy - splitPolicy<a name="line.7352"></a>
-<span class="sourceLineNo">7353</span>  // 1 x MetricsRegion - metricsRegion<a name="line.7353"></a>
-<span class="sourceLineNo">7354</span>  // 1 x MetricsRegionWrapperImpl - metricsRegionWrapper<a name="line.7354"></a>
-<span class="sourceLineNo">7355</span>  public static final long DEEP_OVERHEAD = FIXED_OVERHEAD +<a name="line.7355"></a>
-<span class="sourceLineNo">7356</span>      ClassSize.OBJECT + // closeLock<a name="line.7356"></a>
-<span class="sourceLineNo">7357</span>      (2 * ClassSize.ATOMIC_BOOLEAN) + // closed, closing<a name="line.7357"></a>
-<span class="sourceLineNo">7358</span>      (3 * ClassSize.ATOMIC_LONG) + // memStoreSize, numPutsWithoutWAL, dataInMemoryWithoutWAL<a name="line.7358"></a>
-<span class="sourceLineNo">7359</span>      (2 * ClassSize.CONCURRENT_HASHMAP) +  // lockedRows, scannerReadPoints<a name="line.7359"></a>
-<span class="sourceLineNo">7360</span>      WriteState.HEAP_SIZE + // writestate<a name="line.7360"></a>
-<span class="sourceLineNo">7361</span>      ClassSize.CONCURRENT_SKIPLISTMAP + ClassSize.CONCURRENT_SKIPLISTMAP_ENTRY + // stores<a name="line.7361"></a>
-<span class="sourceLineNo">7362</span>      (2 * ClassSize.REENTRANT_LOCK) + // lock, updatesLock<a name="line.7362"></a>
-<span class="sourceLineNo">7363</span>      MultiVersionConcurrencyControl.FIXED_SIZE // mvcc<a name="line.7363"></a>
-<span class="sourceLineNo">7364</span>      + ClassSize.TREEMAP // maxSeqIdInStores<a name="line.7364"></a>
-<span class="sourceLineNo">7365</span>      + 2 * ClassSize.ATOMIC_INTEGER // majorInProgress, minorInProgress<a name="line.7365"></a>
-<span class="sourceLineNo">7366</span>      ;<a name="line.7366"></a>
-<span class="sourceLineNo">7367</span><a name="line.7367"></a>
-<span class="sourceLineNo">7368</span>  @Override<a name="line.7368"></a>
-<span class="sourceLineNo">7369</span>  public long heapSize() {<a name="line.7369"></a>
-<span class="sourceLineNo">7370</span>    long heapSize = DEEP_OVERHEAD;<a name="line.7370"></a>
-<span class="sourceLineNo">7371</span>    for (Store store : this.stores.values()) {<a name="line.7371"></a>
-<span class="sourceLineNo">7372</span>      heapSize += store.heapSize();<a name="line.7372"></a>
-<span class="sourceLineNo">7373</span>    }<a name="line.7373"></a>
-<span class="sourceLineNo">7374</span>    // this does not take into account row locks, recent flushes, mvcc entries, and more<a name="line.7374"></a>
-<span class="sourceLineNo">7375</span>    return heapSize;<a name="line.7375"></a>
-<span class="sourceLineNo">7376</span>  }<a name="line.7376"></a>
-<span class="sourceLineNo">7377</span><a name="line.7377"></a>
-<span class="sourceLineNo">7378</span>  @Override<a name="line.7378"></a>
-<span class="sourceLineNo">7379</span>  public boolean registerService(Service instance) {<a name="line.7379"></a>
-<span class="sourceLineNo">7380</span>    /*<a name="line.7380"></a>
-<span class="sourceLineNo">7381</span>     * No stacking of instances is allowed for a single service name<a name="line.7381"></a>
-<span class="sourceLineNo">7382</span>     */<a name="line.7382"></a>
-<span class="sourceLineNo">7383</span>    Descriptors.ServiceDescriptor serviceDesc = instance.getDescriptorForType();<a name="line.7383"></a>
-<span class="sourceLineNo">7384</span>    if (coprocessorServiceHandlers.containsKey(serviceDesc.getFullName())) {<a name="line.7384"></a>
-<span class="sourceLineNo">7385</span>      LOG.error("Coprocessor service " + serviceDesc.getFullName() +<a name="line.7385"></a>
-<span class="sourceLineNo">7386</span>              " already registered, rejecting request from " + instance<a name="line.7386"></a>
-<span class="sourceLineNo">7387</span>      );<a name="line.7387"></a>
-<span class="sourceLineNo">7388</span>      return false;<a name="line.7388"></a>
-<span class="sourceLineNo">7389</span>    }<a name="line.7389"></a>
-<span class="sourceLineNo">7390</span><a name="line.7390"></a>
-<span class="sourceLineNo">7391</span>    coprocessorServiceHandlers.put(serviceDesc.getFullName(), instance);<a name="line.7391"></a>
-<span class="sourceLineNo">7392</span>    if (LOG.isDebugEnabled()) {<a name="line.7392"></a>
-<span class="sourceLineNo">7393</span>      LOG.debug("Registered coprocessor service: region=" +<a name="line.7393"></a>
-<span class="sourceLineNo">7394</span>          Bytes.toStringBinary(getRegionInfo().getRegionName()) +<a name="line.7394"></a>
-<span class="sourceLineNo">7395</span>          " service=" + serviceDesc.getFullName());<a name="line.7395"></a>
-<span class="sourceLineNo">7396</span>    }<a name="line.7396"></a>
-<span class="sourceLineNo">7397</span>    return true;<a name="line.7397"></a>
-<span class="sourceLineNo">7398</span>  }<a name="line.7398"></a>
-<span class="sourceLineNo">7399</span><a name="line.7399"></a>
-<span class="sourceLineNo">7400</span>  @Override<a name="line.7400"></a>
-<span class="sourceLineNo">7401</span>  public Message execService(RpcController controller, CoprocessorServiceCall call)<a name="line.7401"></a>
-<span class="sourceLineNo">7402</span>      throws IOException {<a name="line.7402"></a>
-<span class="sourceLineNo">7403</span>    String serviceName = call.getServiceName();<a name="line.7403"></a>
-<span class="sourceLineNo">7404</span>    String methodName = call.getMethodName();<a name="line.7404"></a>
-<span class="sourceLineNo">7405</span>    if (!coprocessorServiceHandlers.containsKey(serviceName)) {<a name="line.7405"></a>
-<span class="sourceLineNo">7406</span>      throw new UnknownProtocolException(null,<a name="line.7406"></a>
-<span class="sourceLineNo">7407</span>          "No registered coprocessor service found for name "+serviceName+<a name="line.7407"></a>
-<span class="sourceLineNo">7408</span>          " in region "+Bytes.toStringBinary(getRegionInfo().getRegionName()));<a name="line.7408"></a>
-<span class="sourceLineNo">7409</span>    }<a name="line.7409"></a>
-<span class="sourceLineNo">7410</span><a name="line.7410"></a>
-<span class="sourceLineNo">7411</span>    Service service = coprocessorServiceHandlers.get(serviceName);<a name="line.7411"></a>
-<span class="sourceLineNo">7412</span>    Descriptors.ServiceDescriptor serviceDesc = service.getDescriptorForType();<a name="line.7412"></a>
-<span class="sourceLineNo">7413</span>    Descriptors.MethodDescriptor methodDesc = serviceDesc.findMethodByName(methodName);<a name="line.7413"></a>
-<span class="sourceLineNo">7414</span>    if (methodDesc == null) {<a name="line.7414"></a>
-<span class="sourceLineNo">7415</span>      throw new UnknownProtocolException(service.getClass(),<a name="line.7415"></a>
-<span class="sourceLineNo">7416</span>          "Unknown method "+methodName+" called on service "+serviceName+<a name="line.7416"></a>
-<span class="sourceLineNo">7417</span>              " in region "+Bytes.toStringBinary(getRegionInfo().getRegionName()));<a name="line.7417"></a>
-<span class="sourceLineNo">7418</span>    }<a name="line.7418"></a>
-<span class="sourceLineNo">7419</span><a name="line.7419"></a>
-<span class="sourceLineNo">7420</span>    Message.Builder builder = service.getRequestPrototype(methodDesc).newBuilderForType();<a name="line.7420"></a>
-<span class="sourceLineNo">7421</span>    ProtobufUtil.mergeFrom(builder, call.getRequest());<a name="line.7421"></a>
-<span class="sourceLineNo">7422</span>    Message request = builder.build();<a name="line.7422"></a>
-<span class="sourceLineNo">7423</span><a name="line.7423"></a>
-<span class="sourceLineNo">7424</span>    if (coprocessorHost != null) {<a name="line.7424"></a>
-<span class="sourceLineNo">7425</span>      request = coprocessorHost.preEndpointInvocation(service, methodName, request);<a name="line.7425"></a>
-<span class="sourceLineNo">7426</span>    }<a name="line.7426"></a>
-<span class="sourceLineNo">7427</span><a name="line.7427"></a>
-<span class="sourceLineNo">7428</span>    final Message.Builder responseBuilder =<a name="line.7428"></a>
-<span class="sourceLineNo">7429</span>        service.getResponsePrototype(methodDesc).newBuilderForType();<a name="line.7429"></a>
-<span class="sourceLineNo">7430</span>    service.callMethod(methodDesc, controller, request, new RpcCallback&lt;Message&gt;() {<a name="line.7430"></a>
-<span class="sourceLineNo">7431</span>      @Override<a name="line.7431"></a>
-<span class="sourceLineNo">7432</span>      public void run(Message message) {<a name="line.7432"></a>
-<span class="sourceLineNo">7433</span>        if (message != null) {<a name="line.7433"></a>
-<span class="sourceLineNo">7434</span>          responseBuilder.mergeFrom(message);<a name="line.7434"></a>
-<span class="sourceLineNo">7435</span>        }<a name="line.7435"></a>
-<span class="sourceLineNo">7436</span>      }<a name="line.7436"></a>
-<span class="sourceLineNo">7437</span>    });<a name="line.7437"></a>
-<span class="sourceLineNo">7438</span><a name="line.7438"></a>
-<span class="sourceLineNo">7439</span>    if (coprocessorHost != null) {<a name="line.7439"></a>
-<span class="sourceLineNo">7440</span>      coprocessorHost.postEndpointInvocation(service, methodName, request, responseBuilder);<a name="line.7440"></a>
-<span class="sourceLineNo">7441</span>    }<a name="line.7441"></a>
-<span class="sourceLineNo">7442</span><a name="line.7442"></a>
-<span class="sourceLineNo">7443</span>    IOException exception = ResponseConverter.getControllerException(controller);<a name="line.7443"></a>
-<span class="sourceLineNo">7444</span>    if (exception != null) {<a name="line.7444"></a>
-<span class="sourceLineNo">7445</span>      throw exception;<a name="line.7445"></a>
-<span class="sourceLineNo">7446</span>    }<a name="line.7446"

<TRUNCATED>

[07/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/testdevapidocs/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html
index 6ce1a53..0468609 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html
@@ -99,7 +99,7 @@
 </dl>
 <hr>
 <br>
-<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.118">TestWALReplay</a>
+<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.119">TestWALReplay</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">Test replay of edits out of a WAL split.</div>
 </li>
@@ -261,65 +261,103 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#createBasic3FamilyHTD(org.apache.hadoop.hbase.TableName)">createBasic3FamilyHTD</a></strong>(org.apache.hadoop.hbase.TableName&nbsp;tableName)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>private org.apache.hadoop.hbase.regionserver.wal.FSWALEntry</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#createFSWALEntry(org.apache.hadoop.hbase.HTableDescriptor,%20org.apache.hadoop.hbase.HRegionInfo,%20long,%20byte[],%20byte[],%20org.apache.hadoop.hbase.util.EnvironmentEdge,%20org.apache.hadoop.hbase.regionserver.MultiVersionConcurrencyControl,%20int)">createFSWALEntry</a></strong>(org.apache.hadoop.hbase.HTableDescriptor&nbsp;htd,
+                                org.apache.hadoop.hbase.HRegionInfo&nbsp;hri,
+                                long&nbsp;sequence,
+                                byte[]&nbsp;rowName,
+                                byte[]&nbsp;family,
+                                org.apache.hadoop.hbase.util.EnvironmentEdge&nbsp;ee,
+                                org.apache.hadoop.hbase.regionserver.MultiVersionConcurrencyControl&nbsp;mvcc,
+                                int&nbsp;index)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.MockWAL.html" title="class in org.apache.hadoop.hbase.regionserver.wal">TestWALReplay.MockWAL</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#createMockWAL()">createMockWAL</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private org.apache.hadoop.hbase.wal.WAL</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#createWAL(org.apache.hadoop.conf.Configuration)">createWAL</a></strong>(org.apache.hadoop.conf.Configuration&nbsp;c)</code>&nbsp;</td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><code>private org.apache.hadoop.hbase.regionserver.wal.WALEdit</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#createWALEdit(byte[],%20byte[],%20org.apache.hadoop.hbase.util.EnvironmentEdge,%20int)">createWALEdit</a></strong>(byte[]&nbsp;rowName,
+                          byte[]&nbsp;family,
+                          org.apache.hadoop.hbase.util.EnvironmentEdge&nbsp;ee,
+                          int&nbsp;index)</code>&nbsp;</td>
+</tr>
 <tr class="rowColor">
+<td class="colFirst"><code>private org.apache.hadoop.hbase.wal.WALKey</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#createWALKey(org.apache.hadoop.hbase.TableName,%20org.apache.hadoop.hbase.HRegionInfo,%20org.apache.hadoop.hbase.regionserver.MultiVersionConcurrencyControl)">createWALKey</a></strong>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
+                        org.apache.hadoop.hbase.HRegionInfo&nbsp;hri,
+                        org.apache.hadoop.hbase.regionserver.MultiVersionConcurrencyControl&nbsp;mvcc)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#deleteDir(org.apache.hadoop.fs.Path)">deleteDir</a></strong>(org.apache.hadoop.fs.Path&nbsp;p)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private int</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#getScannedCount(org.apache.hadoop.hbase.regionserver.RegionScanner)">getScannedCount</a></strong>(org.apache.hadoop.hbase.regionserver.RegionScanner&nbsp;scanner)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#moveRegionAndWait(org.apache.hadoop.hbase.regionserver.Region,%20org.apache.hadoop.hbase.regionserver.HRegionServer)">moveRegionAndWait</a></strong>(org.apache.hadoop.hbase.regionserver.Region&nbsp;destRegion,
                                   org.apache.hadoop.hbase.regionserver.HRegionServer&nbsp;destServer)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private org.apache.hadoop.fs.Path</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#runWALSplit(org.apache.hadoop.conf.Configuration)">runWALSplit</a></strong>(org.apache.hadoop.conf.Configuration&nbsp;c)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#setUp()">setUp</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#setUpBeforeClass()">setUpBeforeClass</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#tearDown()">tearDown</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#tearDownAfterClass()">tearDownAfterClass</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#test2727()">test2727</a></strong>()</code>
 <div class="block">Tests for hbase-2727.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testCompactedBulkLoadedFiles()">testCompactedBulkLoadedFiles</a></strong>()</code>
 <div class="block">HRegion test case that is made of a major compacted HFile (created with three bulk loaded
  files) and an edit in the memstore.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testDatalossWhenInputError()">testDatalossWhenInputError</a></strong>()</code>
 <div class="block">testcase for https://issues.apache.org/jira/browse/HBASE-15252</div>
 </td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testNameConflictWhenSplit(boolean)">testNameConflictWhenSplit</a></strong>(boolean&nbsp;largeFirst)</code>
+<div class="block">testcase for https://issues.apache.org/jira/browse/HBASE-14949.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testNameConflictWhenSplit0()">testNameConflictWhenSplit0</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testNameConflictWhenSplit1()">testNameConflictWhenSplit1</a></strong>()</code>&nbsp;</td>
+</tr>
 <tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testRegionMadeOfBulkLoadedFilesOnly()">testRegionMadeOfBulkLoadedFilesOnly</a></strong>()</code>
@@ -361,6 +399,11 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testSequentialEditLogSeqNum()">testSequentialEditLogSeqNum</a></strong>()</code>&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#writerWALFile(org.apache.hadoop.fs.Path,%20java.util.List)">writerWALFile</a></strong>(org.apache.hadoop.fs.Path&nbsp;file,
+                          <a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.regionserver.wal.FSWALEntry&gt;&nbsp;entries)</code>&nbsp;</td>
+</tr>
 </table>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
@@ -389,7 +432,7 @@ extends <a href="http://docs.oracle.com/javase/7/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/regionserver/wal/TestWALReplay.html#line.119">LOG</a></pre>
+<pre>private static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.120">LOG</a></pre>
 </li>
 </ul>
 <a name="TEST_UTIL">
@@ -398,7 +441,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>TEST_UTIL</h4>
-<pre>static final&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/regionserver/wal/TestWALReplay.html#line.120">TEST_UTIL</a></pre>
+<pre>static final&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/regionserver/wal/TestWALReplay.html#line.121">TEST_UTIL</a></pre>
 </li>
 </ul>
 <a name="ee">
@@ -407,7 +450,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>ee</h4>
-<pre>private final&nbsp;org.apache.hadoop.hbase.util.EnvironmentEdge <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.121">ee</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.hbase.util.EnvironmentEdge <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.122">ee</a></pre>
 </li>
 </ul>
 <a name="hbaseRootDir">
@@ -416,7 +459,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>hbaseRootDir</h4>
-<pre>private&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.122">hbaseRootDir</a></pre>
+<pre>private&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.123">hbaseRootDir</a></pre>
 </li>
 </ul>
 <a name="logName">
@@ -425,7 +468,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>logName</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/regionserver/wal/TestWALReplay.html#line.123">logName</a></pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/regionserver/wal/TestWALReplay.html#line.124">logName</a></pre>
 </li>
 </ul>
 <a name="oldLogDir">
@@ -434,7 +477,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>oldLogDir</h4>
-<pre>private&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.124">oldLogDir</a></pre>
+<pre>private&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.125">oldLogDir</a></pre>
 </li>
 </ul>
 <a name="logDir">
@@ -443,7 +486,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>logDir</h4>
-<pre>private&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.125">logDir</a></pre>
+<pre>private&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.126">logDir</a></pre>
 </li>
 </ul>
 <a name="fs">
@@ -452,7 +495,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>fs</h4>
-<pre>private&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.126">fs</a></pre>
+<pre>private&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.127">fs</a></pre>
 </li>
 </ul>
 <a name="conf">
@@ -461,7 +504,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>conf</h4>
-<pre>private&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.127">conf</a></pre>
+<pre>private&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.128">conf</a></pre>
 </li>
 </ul>
 <a name="mode">
@@ -470,7 +513,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>mode</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.protobuf.generated.ZooKeeperProtos.SplitLogTask.RecoveryMode <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.128">mode</a></pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.protobuf.generated.ZooKeeperProtos.SplitLogTask.RecoveryMode <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.129">mode</a></pre>
 </li>
 </ul>
 <a name="wals">
@@ -479,7 +522,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>wals</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.wal.WALFactory <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.129">wals</a></pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.wal.WALFactory <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.130">wals</a></pre>
 </li>
 </ul>
 <a name="currentTest">
@@ -488,7 +531,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>currentTest</h4>
-<pre>public final&nbsp;org.junit.rules.TestName <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.132">currentTest</a></pre>
+<pre>public final&nbsp;org.junit.rules.TestName <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.133">currentTest</a></pre>
 </li>
 </ul>
 </li>
@@ -505,7 +548,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestWALReplay</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.118">TestWALReplay</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.119">TestWALReplay</a>()</pre>
 </li>
 </ul>
 </li>
@@ -522,7 +565,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setUpBeforeClass</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.136">setUpBeforeClass</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.137">setUpBeforeClass</a>()
                              throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
@@ -534,7 +577,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>tearDownAfterClass</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.149">tearDownAfterClass</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.150">tearDownAfterClass</a>()
                                throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
@@ -546,7 +589,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setUp</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.154">setUp</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.155">setUp</a>()
            throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
@@ -558,7 +601,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>tearDown</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.170">tearDown</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.171">tearDown</a>()
               throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
@@ -570,7 +613,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteDir</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.178">deleteDir</a>(org.apache.hadoop.fs.Path&nbsp;p)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.179">deleteDir</a>(org.apache.hadoop.fs.Path&nbsp;p)
                 throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -582,7 +625,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testReplayEditsAfterRegionMovedWithMultiCF</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.191">testReplayEditsAfterRegionMovedWithMultiCF</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.192">testReplayEditsAfterRegionMovedWithMultiCF</a>()
                                                 throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
@@ -594,7 +637,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>moveRegionAndWait</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.265">moveRegionAndWait</a>(org.apache.hadoop.hbase.regionserver.Region&nbsp;destRegion,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.266">moveRegionAndWait</a>(org.apache.hadoop.hbase.regionserver.Region&nbsp;destRegion,
                      org.apache.hadoop.hbase.regionserver.HRegionServer&nbsp;destServer)
                         throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>,
                                org.apache.hadoop.hbase.MasterNotRunningException,
@@ -613,7 +656,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>test2727</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.290">test2727</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.291">test2727</a>()
               throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Tests for hbase-2727.</div>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -626,7 +669,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testRegionMadeOfBulkLoadedFilesOnly</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.354">testRegionMadeOfBulkLoadedFilesOnly</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.355">testRegionMadeOfBulkLoadedFilesOnly</a>()
                                          throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                                 <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/SecurityException.html?is-external=true" title="class or interface in java.lang">SecurityException</a>,
                                                 <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</a>,
@@ -650,7 +693,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testCompactedBulkLoadedFiles</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.420">testCompactedBulkLoadedFiles</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.421">testCompactedBulkLoadedFiles</a>()
                                   throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                          <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/SecurityException.html?is-external=true" title="class or interface in java.lang">SecurityException</a>,
                                          <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</a>,
@@ -676,7 +719,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testReplayEditsWrittenViaHRegion</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.490">testReplayEditsWrittenViaHRegion</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.491">testReplayEditsWrittenViaHRegion</a>()
                                       throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                              <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/SecurityException.html?is-external=true" title="class or interface in java.lang">SecurityException</a>,
                                              <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</a>,
@@ -700,7 +743,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testReplayEditsAfterPartialFlush</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.599">testReplayEditsAfterPartialFlush</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.600">testReplayEditsAfterPartialFlush</a>()
                                       throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                              <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/SecurityException.html?is-external=true" title="class or interface in java.lang">SecurityException</a>,
                                              <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</a>,
@@ -732,7 +775,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testReplayEditsAfterAbortingFlush</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.685">testReplayEditsAfterAbortingFlush</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.686">testReplayEditsAfterAbortingFlush</a>()
                                        throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Test that we could recover the data correctly after aborting flush. In the
  test, first we abort flush after writing some data, then writing more data
@@ -747,7 +790,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getScannedCount</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.764">getScannedCount</a>(org.apache.hadoop.hbase.regionserver.RegionScanner&nbsp;scanner)
+<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.765">getScannedCount</a>(org.apache.hadoop.hbase.regionserver.RegionScanner&nbsp;scanner)
                      throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -759,7 +802,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testReplayEditsWrittenIntoWAL</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.784">testReplayEditsWrittenIntoWAL</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.785">testReplayEditsWrittenIntoWAL</a>()
                                    throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Create an HRegion with the result of a WAL split and test we only see the
  good edits</div>
@@ -773,7 +816,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testSequentialEditLogSeqNum</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.883">testSequentialEditLogSeqNum</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.884">testSequentialEditLogSeqNum</a>()
                                  throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -785,7 +828,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testDatalossWhenInputError</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.944">testDatalossWhenInputError</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.945">testDatalossWhenInputError</a>()
                                 throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                        <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/InstantiationException.html?is-external=true" title="class or interface in java.lang">InstantiationException</a>,
                                        <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/IllegalAccessException.html?is-external=true" title="class or interface in java.lang">IllegalAccessException</a></pre>
@@ -796,13 +839,50 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/IllegalAccessException.html?is-external=true" title="class or interface in java.lang">IllegalAccessException</a></code></dd></dl>
 </li>
 </ul>
+<a name="testNameConflictWhenSplit(boolean)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>testNameConflictWhenSplit</h4>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.1041">testNameConflictWhenSplit</a>(boolean&nbsp;largeFirst)
+                                throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<div class="block">testcase for https://issues.apache.org/jira/browse/HBASE-14949.</div>
+<dl><dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/7/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="testNameConflictWhenSplit0()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>testNameConflictWhenSplit0</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.1079">testNameConflictWhenSplit0</a>()
+                                throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<dl><dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/7/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="testNameConflictWhenSplit1()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>testNameConflictWhenSplit1</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.1084">testNameConflictWhenSplit1</a>()
+                                throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<dl><dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/7/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="createBasic1FamilyHTD(org.apache.hadoop.hbase.TableName)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>createBasic1FamilyHTD</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.HTableDescriptor&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.1054">createBasic1FamilyHTD</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName)</pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.HTableDescriptor&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.1105">createBasic1FamilyHTD</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName)</pre>
 </li>
 </ul>
 <a name="createMockWAL()">
@@ -811,19 +891,61 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>createMockWAL</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.MockWAL.html" title="class in org.apache.hadoop.hbase.regionserver.wal">TestWALReplay.MockWAL</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.1061">createMockWAL</a>()
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.MockWAL.html" title="class in org.apache.hadoop.hbase.regionserver.wal">TestWALReplay.MockWAL</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.1112">createMockWAL</a>()
                                      throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/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="createWALKey(org.apache.hadoop.hbase.TableName, org.apache.hadoop.hbase.HRegionInfo, org.apache.hadoop.hbase.regionserver.MultiVersionConcurrencyControl)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>createWALKey</h4>
+<pre>private&nbsp;org.apache.hadoop.hbase.wal.WALKey&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.1156">createWALKey</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
+                                              org.apache.hadoop.hbase.HRegionInfo&nbsp;hri,
+                                              org.apache.hadoop.hbase.regionserver.MultiVersionConcurrencyControl&nbsp;mvcc)</pre>
+</li>
+</ul>
+<a name="createWALEdit(byte[], byte[], org.apache.hadoop.hbase.util.EnvironmentEdge, int)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>createWALEdit</h4>
+<pre>private&nbsp;org.apache.hadoop.hbase.regionserver.wal.WALEdit&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.1161">createWALEdit</a>(byte[]&nbsp;rowName,
+                                                             byte[]&nbsp;family,
+                                                             org.apache.hadoop.hbase.util.EnvironmentEdge&nbsp;ee,
+                                                             int&nbsp;index)</pre>
+</li>
+</ul>
+<a name="createFSWALEntry(org.apache.hadoop.hbase.HTableDescriptor, org.apache.hadoop.hbase.HRegionInfo, long, byte[], byte[], org.apache.hadoop.hbase.util.EnvironmentEdge, org.apache.hadoop.hbase.regionserver.MultiVersionConcurrencyControl, int)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>createFSWALEntry</h4>
+<pre>private&nbsp;org.apache.hadoop.hbase.regionserver.wal.FSWALEntry&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.1170">createFSWALEntry</a>(org.apache.hadoop.hbase.HTableDescriptor&nbsp;htd,
+                                                                   org.apache.hadoop.hbase.HRegionInfo&nbsp;hri,
+                                                                   long&nbsp;sequence,
+                                                                   byte[]&nbsp;rowName,
+                                                                   byte[]&nbsp;family,
+                                                                   org.apache.hadoop.hbase.util.EnvironmentEdge&nbsp;ee,
+                                                                   org.apache.hadoop.hbase.regionserver.MultiVersionConcurrencyControl&nbsp;mvcc,
+                                                                   int&nbsp;index)
+                                                                      throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<dl><dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/7/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="addWALEdits(org.apache.hadoop.hbase.TableName, org.apache.hadoop.hbase.HRegionInfo, byte[], byte[], int, org.apache.hadoop.hbase.util.EnvironmentEdge, org.apache.hadoop.hbase.wal.WAL, org.apache.hadoop.hbase.HTableDescriptor, org.apache.hadoop.hbase.regionserver.MultiVersionConcurrencyControl)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>addWALEdits</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.1105">addWALEdits</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.1180">addWALEdits</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
                org.apache.hadoop.hbase.HRegionInfo&nbsp;hri,
                byte[]&nbsp;rowName,
                byte[]&nbsp;family,
@@ -843,7 +965,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>addRegionEdits</h4>
-<pre>static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.client.Put&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.1122">addRegionEdits</a>(byte[]&nbsp;rowName,
+<pre>static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.client.Put&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.1190">addRegionEdits</a>(byte[]&nbsp;rowName,
                                                       byte[]&nbsp;family,
                                                       int&nbsp;count,
                                                       org.apache.hadoop.hbase.util.EnvironmentEdge&nbsp;ee,
@@ -860,7 +982,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>createBasic3FamilyHRegionInfo</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.HRegionInfo&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.1142">createBasic3FamilyHRegionInfo</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName)</pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.HRegionInfo&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.1208">createBasic3FamilyHRegionInfo</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName)</pre>
 </li>
 </ul>
 <a name="runWALSplit(org.apache.hadoop.conf.Configuration)">
@@ -869,7 +991,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>runWALSplit</h4>
-<pre>private&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.1152">runWALSplit</a>(org.apache.hadoop.conf.Configuration&nbsp;c)
+<pre>private&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.1218">runWALSplit</a>(org.apache.hadoop.conf.Configuration&nbsp;c)
                                        throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -881,7 +1003,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>createWAL</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.wal.WAL&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.1168">createWAL</a>(org.apache.hadoop.conf.Configuration&nbsp;c)
+<pre>private&nbsp;org.apache.hadoop.hbase.wal.WAL&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.1234">createWAL</a>(org.apache.hadoop.conf.Configuration&nbsp;c)
                                            throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -890,10 +1012,23 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <a name="createBasic3FamilyHTD(org.apache.hadoop.hbase.TableName)">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>createBasic3FamilyHTD</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.HTableDescriptor&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.1176">createBasic3FamilyHTD</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName)</pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.HTableDescriptor&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.1242">createBasic3FamilyHTD</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName)</pre>
+</li>
+</ul>
+<a name="writerWALFile(org.apache.hadoop.fs.Path, java.util.List)">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>writerWALFile</h4>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#line.1253">writerWALFile</a>(org.apache.hadoop.fs.Path&nbsp;file,
+                 <a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.regionserver.wal.FSWALEntry&gt;&nbsp;entries)
+                    throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<dl><dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/testdevapidocs/org/apache/hadoop/hbase/regionserver/wal/TestWALReplayCompressed.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/wal/TestWALReplayCompressed.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/wal/TestWALReplayCompressed.html
index 964bf24..77869fd 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/wal/TestWALReplayCompressed.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/wal/TestWALReplayCompressed.html
@@ -178,7 +178,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Test
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html" title="class in org.apache.hadoop.hbase.regionserver.wal">TestWALReplay</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#addRegionEdits(byte[],%20byte[],%20int,%20org.apache.hadoop.hbase.util.EnvironmentEdge,%20org.apache.hadoop.hbase.regionserver.Region,%20java.lang.String)">addRegionEdits</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#setUp()">setUp</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#tearDown()">tearDown</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#tearDownAfterClass()">tearDownAfterClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#test2727()">test2727</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testCompactedBulkLoadedFiles()">testCompactedBulkLoadedFiles</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testDatalossWhenInputE
 rror()">testDatalossWhenInputError</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testRegionMadeOfBulkLoadedFilesOnly()">testRegionMadeOfBulkLoadedFilesOnly</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testReplayEditsAfterAbortingFlush()">testReplayEditsAfterAbortingFlush</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testReplayEditsAfterPartialFlush()">testReplayEditsAfterPartialFlush</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testReplayEditsAfterRegionMovedWithMultiCF()">testReplayEditsAfterRegionMovedWithMultiCF</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testReplayEditsWrittenIntoWAL()">testReplayEditsWrittenIntoWAL</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testReplayEditsWrittenViaHRegion()">testRep
 layEditsWrittenViaHRegion</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testSequentialEditLogSeqNum()">testSequentialEditLogSeqNum</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#addRegionEdits(byte[],%20byte[],%20int,%20org.apache.hadoop.hbase.util.EnvironmentEdge,%20org.apache.hadoop.hbase.regionserver.Region,%20java.lang.String)">addRegionEdits</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#setUp()">setUp</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#tearDown()">tearDown</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#tearDownAfterClass()">tearDownAfterClass</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#test2727()">test2727</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testCompactedBulkLoadedFiles()">testCompactedBulkLoadedFiles</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testDatalossWhenInputE
 rror()">testDatalossWhenInputError</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testNameConflictWhenSplit0()">testNameConflictWhenSplit0</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testNameConflictWhenSplit1()">testNameConflictWhenSplit1</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testRegionMadeOfBulkLoadedFilesOnly()">testRegionMadeOfBulkLoadedFilesOnly</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testReplayEditsAfterAbortingFlush()">testReplayEditsAfterAbortingFlush</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testReplayEditsAfterPartialFlush()">testReplayEditsAfterPartialFlush</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testReplayEditsAfterRegionMovedWithMultiCF()">testReplayEditsAfterRegionMovedWith
 MultiCF</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testReplayEditsWrittenIntoWAL()">testReplayEditsWrittenIntoWAL</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testReplayEditsWrittenViaHRegion()">testReplayEditsWrittenViaHRegion</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html#testSequentialEditLogSeqNum()">testSequentialEditLogSeqNum</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/f32f549a/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
index a28606a..52b2b91 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
@@ -234,9 +234,9 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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/7/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.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestWithCellVisibilityLoadAndVerify.Counters.html" title="enum in org.apache.hadoop.hbase.test"><span class="strong">IntegrationTestWithCellVisibilityLoadAndVerify.Counters</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.Verify.Counts.html" title="enum in org.apache.hadoop.hbase.test"><span class="strong">IntegrationTestBigLinkedList.Verify.Counts</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestLoadAndVerify.Counters.html" title="enum in org.apache.hadoop.hbase.test"><span class="strong">IntegrationTestLoadAndVerify.Counters</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestWithCellVisibilityLoadAndVerify.Counters.html" title="enum in org.apache.hadoop.hbase.test"><span class="strong">IntegrationTestWithCellVisibilityLoadAndVerify.Counters</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/testdevapidocs/org/apache/hadoop/hbase/util/TestOrderedBytes.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/util/TestOrderedBytes.html b/testdevapidocs/org/apache/hadoop/hbase/util/TestOrderedBytes.html
index 4177f07..3fe32f2 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/util/TestOrderedBytes.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/util/TestOrderedBytes.html
@@ -201,87 +201,93 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestOrderedBytes.html#testEncodedValueCheck()">testEncodedValueCheck</a></strong>()</code>
+<div class="block">Test encoded value check</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestOrderedBytes.html#testFloat32()">testFloat32</a></strong>()</code>
 <div class="block">Test float32 encoding.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestOrderedBytes.html#testFloat64()">testFloat64</a></strong>()</code>
 <div class="block">Test float64 encoding.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestOrderedBytes.html#testInt16()">testInt16</a></strong>()</code>
 <div class="block">Test int16 encoding.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestOrderedBytes.html#testInt32()">testInt32</a></strong>()</code>
 <div class="block">Test int32 encoding.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestOrderedBytes.html#testInt64()">testInt64</a></strong>()</code>
 <div class="block">Test int64 encoding.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestOrderedBytes.html#testInt8()">testInt8</a></strong>()</code>
 <div class="block">Test int8 encoding.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestOrderedBytes.html#testNumericInt()">testNumericInt</a></strong>()</code>
 <div class="block">Test integer encoding.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestOrderedBytes.html#testNumericIntRealCompatibility()">testNumericIntRealCompatibility</a></strong>()</code>
 <div class="block">Verify Real and Int encodings are compatible.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestOrderedBytes.html#testNumericOther()">testNumericOther</a></strong>()</code>
 <div class="block">Fill gaps in Numeric encoding testing.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestOrderedBytes.html#testNumericReal()">testNumericReal</a></strong>()</code>
 <div class="block">Test real encoding.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestOrderedBytes.html#testSkip()">testSkip</a></strong>()</code>
 <div class="block">Test generic skip logic</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestOrderedBytes.html#testString()">testString</a></strong>()</code>
 <div class="block">Test string encoding.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestOrderedBytes.html#testStringNoNullChars()">testStringNoNullChars</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestOrderedBytes.html#testVaruint64Boundaries()">testVaruint64Boundaries</a></strong>()</code>
 <div class="block">Tests the variable uint64 encoding.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/TestOrderedBytes.html#testVerifyTestIntegrity()">testVerifyTestIntegrity</a></strong>()</code>
 <div class="block">Expected lengths of equivalent values should match</div>
@@ -598,13 +604,23 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <a name="testSkip()">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>testSkip</h4>
 <pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestOrderedBytes.html#line.1063">testSkip</a>()</pre>
 <div class="block">Test generic skip logic</div>
 </li>
 </ul>
+<a name="testEncodedValueCheck()">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>testEncodedValueCheck</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestOrderedBytes.html#line.1194">testEncodedValueCheck</a>()</pre>
+<div class="block">Test encoded value check</div>
+</li>
+</ul>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/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 ba18d57..8dd84e9 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
@@ -120,8 +120,8 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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/7/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="strong">FaultyFSLog.FailureType</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="strong">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="strong">FaultyFSLog.FailureType</span></a></li>
 </ul>
 </li>
 </ul>


[40/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html b/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html
index 36f415a..a0bb02a 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html
@@ -104,7 +104,7 @@
 </dl>
 <hr>
 <br>
-<pre> class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.1636">WALSplitter.LogReplayOutputSink</a>
+<pre> class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.1674">WALSplitter.LogReplayOutputSink</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.OutputSink</a></pre>
 <div class="block">Class that manages to replay edits from WAL files directly to assigned fail over region servers</div>
 </li>
@@ -333,7 +333,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>BUFFER_THRESHOLD</h4>
-<pre>private static final&nbsp;double <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1637">BUFFER_THRESHOLD</a></pre>
+<pre>private static final&nbsp;double <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1675">BUFFER_THRESHOLD</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.wal.WALSplitter.LogReplayOutputSink.BUFFER_THRESHOLD">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -343,7 +343,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>KEY_DELIMITER</h4>
-<pre>private static final&nbsp;<a href="http://docs.oracle.com/javase/7/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/wal/WALSplitter.LogReplayOutputSink.html#line.1638">KEY_DELIMITER</a></pre>
+<pre>private static final&nbsp;<a href="http://docs.oracle.com/javase/7/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/wal/WALSplitter.LogReplayOutputSink.html#line.1676">KEY_DELIMITER</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.wal.WALSplitter.LogReplayOutputSink.KEY_DELIMITER">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -353,7 +353,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>waitRegionOnlineTimeOut</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1640">waitRegionOnlineTimeOut</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1678">waitRegionOnlineTimeOut</a></pre>
 </li>
 </ul>
 <a name="recoveredRegions">
@@ -362,7 +362,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>recoveredRegions</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1641">recoveredRegions</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1679">recoveredRegions</a></pre>
 </li>
 </ul>
 <a name="writers">
@@ -371,7 +371,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>writers</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.RegionServerWriter.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.RegionServerWriter</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1642">writers</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.RegionServerWriter.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.RegionServerWriter</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1680">writers</a></pre>
 </li>
 </ul>
 <a name="onlineRegions">
@@ -380,7 +380,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>onlineRegions</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1645">onlineRegions</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1683">onlineRegions</a></pre>
 </li>
 </ul>
 <a name="tableNameToHConnectionMap">
@@ -389,7 +389,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>tableNameToHConnectionMap</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.html" title="interface in org.apache.hadoop.hbase.client">HConnection</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1648">tableNameToHConnectionMap</a></pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.html" title="interface in org.apache.hadoop.hbase.client">HConnection</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1686">tableNameToHConnectionMap</a></pre>
 </li>
 </ul>
 <a name="serverToBufferQueueMap">
@@ -398,7 +398,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>serverToBufferQueueMap</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/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/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>,<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&gt;&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1654">serverToBufferQueueMap</a></pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/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/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>,<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&gt;&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1692">serverToBufferQueueMap</a></pre>
 <div class="block">Map key -> value layout
  &lt;servername&gt;:&lt;table name&gt; -&gt; Queue&lt;Row&gt;</div>
 </li>
@@ -409,7 +409,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>thrown</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1656">thrown</a></pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1694">thrown</a></pre>
 </li>
 </ul>
 <a name="logRecoveredEditsOutputSink">
@@ -418,7 +418,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>logRecoveredEditsOutputSink</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.LogRecoveredEditsOutputSink</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1662">logRecoveredEditsOutputSink</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.LogRecoveredEditsOutputSink</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1700">logRecoveredEditsOutputSink</a></pre>
 </li>
 </ul>
 <a name="hasEditsInDisablingOrDisabledTables">
@@ -427,7 +427,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>hasEditsInDisablingOrDisabledTables</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1663">hasEditsInDisablingOrDisabledTables</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1701">hasEditsInDisablingOrDisabledTables</a></pre>
 </li>
 </ul>
 </li>
@@ -444,7 +444,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>WALSplitter.LogReplayOutputSink</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1665">WALSplitter.LogReplayOutputSink</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.PipelineController.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.PipelineController</a>&nbsp;controller,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1703">WALSplitter.LogReplayOutputSink</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.PipelineController.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.PipelineController</a>&nbsp;controller,
                                <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.EntryBuffers.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.EntryBuffers</a>&nbsp;entryBuffers,
                                int&nbsp;numWriters)</pre>
 </li>
@@ -463,7 +463,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>append</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1677">append</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.RegionEntryBuffer</a>&nbsp;buffer)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1715">append</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.RegionEntryBuffer</a>&nbsp;buffer)
             throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
@@ -479,7 +479,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>addToRecoveredRegions</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1725">addToRecoveredRegions</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;encodedRegionName)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1763">addToRecoveredRegions</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;encodedRegionName)</pre>
 </li>
 </ul>
 <a name="groupEditsByServer(java.util.List)">
@@ -488,7 +488,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>groupEditsByServer</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1735">groupEditsByServer</a>(<a href="http://docs.oracle.com/javase/7/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/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1773">groupEditsByServer</a>(<a href="http://docs.oracle.com/javase/7/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/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries)
                          throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Helper function to group WALEntries to individual region servers</div>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -501,7 +501,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>locateRegionAndRefreshLastFlushedSequenceId</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1858">locateRegionAndRefreshLastFlushedSequenceId</a>(<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.html" title="interface in org.apache.hadoop.hbase.client">HConnection</a>&nbsp;hconn,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1896">locateRegionAndRefreshLastFlushedSequenceId</a>(<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.html" title="interface in org.apache.hadoop.hbase.client">HConnection</a>&nbsp;hconn,
                                                           <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
                                                           byte[]&nbsp;row,
                                                           <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;originalEncodedRegionName)
@@ -518,7 +518,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>processWorkItems</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1915">processWorkItems</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;key,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1953">processWorkItems</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;key,
                     <a href="http://docs.oracle.com/javase/7/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/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>,<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&gt;&nbsp;actions)
                        throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -531,7 +531,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>waitUntilRegionOnline</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1943">waitUntilRegionOnline</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&nbsp;loc,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1981">waitUntilRegionOnline</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&nbsp;loc,
                                     byte[]&nbsp;row,
                                     long&nbsp;timeout,
                                     <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicBoolean.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicBoolean</a>&nbsp;isRecovering)
@@ -550,7 +550,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>flush</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.1994">flush</a>()
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.2032">flush</a>()
               throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#flush()">WALSplitter.OutputSink</a></code></strong></div>
 <div class="block">WriterThread call this function to help flush internal remaining edits in buffer before close</div>
@@ -568,7 +568,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>addWriterError</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.2024">addWriterError</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;t)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.2062">addWriterError</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;t)</pre>
 </li>
 </ul>
 <a name="finishWritingAndClose()">
@@ -577,7 +577,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>finishWritingAndClose</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.2029">finishWritingAndClose</a>()
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.2067">finishWritingAndClose</a>()
                                                       throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
@@ -592,7 +592,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>getNumOpenWriters</h4>
-<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.2050">getNumOpenWriters</a>()</pre>
+<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.2088">getNumOpenWriters</a>()</pre>
 <dl>
 <dt><strong>Overrides:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#getNumOpenWriters()">getNumOpenWriters</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.OutputSink</a></code></dd>
@@ -605,7 +605,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>closeRegionServerWriters</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.2054">closeRegionServerWriters</a>()
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.2092">closeRegionServerWriters</a>()
                                             throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -617,7 +617,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>getOutputCounts</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/7/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/wal/WALSplitter.LogReplayOutputSink.html#line.2105">getOutputCounts</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/7/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/wal/WALSplitter.LogReplayOutputSink.html#line.2143">getOutputCounts</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#getOutputCounts()">getOutputCounts</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.OutputSink</a></code></dd>
@@ -630,7 +630,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>getNumberOfRecoveredRegions</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.2116">getNumberOfRecoveredRegions</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.2154">getNumberOfRecoveredRegions</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#getNumberOfRecoveredRegions()">getNumberOfRecoveredRegions</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.OutputSink</a></code></dd>
@@ -643,7 +643,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>isTableDisabledOrDisabling</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.2120">isTableDisabledOrDisabling</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.2158">isTableDisabledOrDisabling</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 </li>
 </ul>
 <a name="getRegionServerWriter(java.lang.String)">
@@ -652,7 +652,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionServerWriter</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.RegionServerWriter.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.RegionServerWriter</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.2145">getRegionServerWriter</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;loc)
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.RegionServerWriter.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.RegionServerWriter</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.2183">getRegionServerWriter</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;loc)
                                                       throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Get a writer and path for a log starting at the given entry. This function is threadsafe so
  long as multiple threads are always acting on different regions.</div>
@@ -667,7 +667,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockList">
 <li class="blockList">
 <h4>getConnectionByTableName</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.html" title="interface in org.apache.hadoop.hbase.client">HConnection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.2167">getConnectionByTableName</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HConnection.html" title="interface in org.apache.hadoop.hbase.client">HConnection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.2205">getConnectionByTableName</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
                                       throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -679,7 +679,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.OutputSi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getTableFromLocationStr</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.2180">getTableFromLocationStr</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;loc)</pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogReplayOutputSink.html#line.2218">getTableFromLocationStr</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;loc)</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.MutationReplay.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.MutationReplay.html b/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.MutationReplay.html
index fa47792..e5ffc74 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.MutationReplay.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.MutationReplay.html
@@ -99,7 +99,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.2217">WALSplitter.MutationReplay</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.2255">WALSplitter.MutationReplay</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">A struct used by getMutationsFromWALEntry</div>
 </li>
@@ -192,7 +192,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>type</h4>
-<pre>public final&nbsp;org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.MutationType <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.MutationReplay.html#line.2229">type</a></pre>
+<pre>public final&nbsp;org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.MutationType <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.MutationReplay.html#line.2267">type</a></pre>
 </li>
 </ul>
 <a name="mutation">
@@ -201,7 +201,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>mutation</h4>
-<pre>public final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.MutationReplay.html#line.2230">mutation</a></pre>
+<pre>public final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.MutationReplay.html#line.2268">mutation</a></pre>
 </li>
 </ul>
 <a name="nonceGroup">
@@ -210,7 +210,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>nonceGroup</h4>
-<pre>public final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.MutationReplay.html#line.2231">nonceGroup</a></pre>
+<pre>public final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.MutationReplay.html#line.2269">nonceGroup</a></pre>
 </li>
 </ul>
 <a name="nonce">
@@ -219,7 +219,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>nonce</h4>
-<pre>public final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.MutationReplay.html#line.2232">nonce</a></pre>
+<pre>public final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.MutationReplay.html#line.2270">nonce</a></pre>
 </li>
 </ul>
 </li>
@@ -236,7 +236,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>WALSplitter.MutationReplay</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.MutationReplay.html#line.2218">WALSplitter.MutationReplay</a>(org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.MutationType&nbsp;type,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.MutationReplay.html#line.2256">WALSplitter.MutationReplay</a>(org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.MutationType&nbsp;type,
                           <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;mutation,
                           long&nbsp;nonceGroup,
                           long&nbsp;nonce)</pre>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html b/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html
index 2a433ec..639a047 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html
@@ -103,7 +103,7 @@
 </dl>
 <hr>
 <br>
-<pre>public abstract static class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.1120">WALSplitter.OutputSink</a>
+<pre>public abstract static class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.1129">WALSplitter.OutputSink</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">The following class is an abstraction class to provide a common interface to support both
  existing recovered edits file sink and region server WAL edits replay sink</div>
@@ -291,7 +291,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>controller</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.PipelineController.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.PipelineController</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#line.1122">controller</a></pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.PipelineController.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.PipelineController</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#line.1131">controller</a></pre>
 </li>
 </ul>
 <a name="entryBuffers">
@@ -300,7 +300,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>entryBuffers</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.EntryBuffers.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.EntryBuffers</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#line.1123">entryBuffers</a></pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.EntryBuffers.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.EntryBuffers</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#line.1132">entryBuffers</a></pre>
 </li>
 </ul>
 <a name="writers">
@@ -309,7 +309,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>writers</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.SinkWriter</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#line.1125">writers</a></pre>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.SinkWriter</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#line.1134">writers</a></pre>
 </li>
 </ul>
 <a name="regionMaximumEditLogSeqNum">
@@ -318,7 +318,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>regionMaximumEditLogSeqNum</h4>
-<pre>protected final&nbsp;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#line.1128">regionMaximumEditLogSeqNum</a></pre>
+<pre>protected final&nbsp;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#line.1137">regionMaximumEditLogSeqNum</a></pre>
 </li>
 </ul>
 <a name="writerThreads">
@@ -327,7 +327,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>writerThreads</h4>
-<pre>protected final&nbsp;<a href="http://docs.oracle.com/javase/7/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/wal/WALSplitter.WriterThread.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.WriterThread</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#line.1131">writerThreads</a></pre>
+<pre>protected final&nbsp;<a href="http://docs.oracle.com/javase/7/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/wal/WALSplitter.WriterThread.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.WriterThread</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#line.1140">writerThreads</a></pre>
 </li>
 </ul>
 <a name="blacklistedRegions">
@@ -336,7 +336,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>blacklistedRegions</h4>
-<pre>protected final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;byte[]&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#line.1134">blacklistedRegions</a></pre>
+<pre>protected final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;byte[]&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#line.1143">blacklistedRegions</a></pre>
 </li>
 </ul>
 <a name="closeAndCleanCompleted">
@@ -345,7 +345,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>closeAndCleanCompleted</h4>
-<pre>protected&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#line.1137">closeAndCleanCompleted</a></pre>
+<pre>protected&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#line.1146">closeAndCleanCompleted</a></pre>
 </li>
 </ul>
 <a name="writersClosed">
@@ -354,7 +354,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>writersClosed</h4>
-<pre>protected&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#line.1139">writersClosed</a></pre>
+<pre>protected&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#line.1148">writersClosed</a></pre>
 </li>
 </ul>
 <a name="numThreads">
@@ -363,7 +363,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>numThreads</h4>
-<pre>protected final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#line.1141">numThreads</a></pre>
+<pre>protected final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#line.1150">numThreads</a></pre>
 </li>
 </ul>
 <a name="reporter">
@@ -372,7 +372,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>reporter</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/CancelableProgressable.html" title="interface in org.apache.hadoop.hbase.util">CancelableProgressable</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#line.1143">reporter</a></pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/CancelableProgressable.html" title="interface in org.apache.hadoop.hbase.util">CancelableProgressable</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#line.1152">reporter</a></pre>
 </li>
 </ul>
 <a name="skippedEdits">
@@ -381,7 +381,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>skippedEdits</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#line.1145">skippedEdits</a></pre>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#line.1154">skippedEdits</a></pre>
 </li>
 </ul>
 <a name="splits">
@@ -390,7 +390,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>splits</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#line.1147">splits</a></pre>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#line.1156">splits</a></pre>
 </li>
 </ul>
 </li>
@@ -407,7 +407,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>WALSplitter.OutputSink</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#line.1149">WALSplitter.OutputSink</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.PipelineController.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.PipelineController</a>&nbsp;controller,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#line.1158">WALSplitter.OutputSink</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.PipelineController.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.PipelineController</a>&nbsp;controller,
                       <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.EntryBuffers.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.EntryBuffers</a>&nbsp;entryBuffers,
                       int&nbsp;numWriters)</pre>
 </li>
@@ -426,7 +426,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setReporter</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#line.1155">setReporter</a>(<a href="../../../../../org/apache/hadoop/hbase/util/CancelableProgressable.html" title="interface in org.apache.hadoop.hbase.util">CancelableProgressable</a>&nbsp;reporter)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#line.1164">setReporter</a>(<a href="../../../../../org/apache/hadoop/hbase/util/CancelableProgressable.html" title="interface in org.apache.hadoop.hbase.util">CancelableProgressable</a>&nbsp;reporter)</pre>
 </li>
 </ul>
 <a name="startWriterThreads()">
@@ -435,7 +435,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>startWriterThreads</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#line.1162">startWriterThreads</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#line.1171">startWriterThreads</a>()</pre>
 <div class="block">Start the threads that will pump data from the entryBuffers to the output files.</div>
 </li>
 </ul>
@@ -445,7 +445,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>updateRegionMaximumEditLogSeqNum</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#line.1174">updateRegionMaximumEditLogSeqNum</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;entry)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#line.1183">updateRegionMaximumEditLogSeqNum</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;entry)</pre>
 <div class="block">Update region's maximum edit log SeqNum.</div>
 </li>
 </ul>
@@ -455,7 +455,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionMaximumEditLogSeqNum</h4>
-<pre><a href="http://docs.oracle.com/javase/7/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/wal/WALSplitter.OutputSink.html#line.1185">getRegionMaximumEditLogSeqNum</a>(byte[]&nbsp;region)</pre>
+<pre><a href="http://docs.oracle.com/javase/7/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/wal/WALSplitter.OutputSink.html#line.1194">getRegionMaximumEditLogSeqNum</a>(byte[]&nbsp;region)</pre>
 </li>
 </ul>
 <a name="getNumOpenWriters()">
@@ -464,7 +464,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getNumOpenWriters</h4>
-<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#line.1192">getNumOpenWriters</a>()</pre>
+<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#line.1201">getNumOpenWriters</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>the number of currently opened writers</dd></dl>
 </li>
 </ul>
@@ -474,7 +474,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getSkippedEdits</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#line.1196">getSkippedEdits</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#line.1205">getSkippedEdits</a>()</pre>
 </li>
 </ul>
 <a name="finishWriting(boolean)">
@@ -483,7 +483,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>finishWriting</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#line.1205">finishWriting</a>(boolean&nbsp;interrupt)
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#line.1214">finishWriting</a>(boolean&nbsp;interrupt)
                          throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Wait for writer threads to dump all info to the sink</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>true when there is no error</dd>
@@ -497,7 +497,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>finishWritingAndClose</h4>
-<pre>public abstract&nbsp;<a href="http://docs.oracle.com/javase/7/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;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#line.1234">finishWritingAndClose</a>()
+<pre>public abstract&nbsp;<a href="http://docs.oracle.com/javase/7/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;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#line.1243">finishWritingAndClose</a>()
                                                                throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -509,7 +509,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getOutputCounts</h4>
-<pre>public abstract&nbsp;<a href="http://docs.oracle.com/javase/7/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/7/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/wal/WALSplitter.OutputSink.html#line.1239">getOutputCounts</a>()</pre>
+<pre>public abstract&nbsp;<a href="http://docs.oracle.com/javase/7/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/7/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/wal/WALSplitter.OutputSink.html#line.1248">getOutputCounts</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>a map from encoded region ID to the number of edits written out for that region.</dd></dl>
 </li>
 </ul>
@@ -519,7 +519,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getNumberOfRecoveredRegions</h4>
-<pre>public abstract&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#line.1244">getNumberOfRecoveredRegions</a>()</pre>
+<pre>public abstract&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#line.1253">getNumberOfRecoveredRegions</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>number of regions we've recovered</dd></dl>
 </li>
 </ul>
@@ -529,7 +529,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>append</h4>
-<pre>public abstract&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#line.1250">append</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.RegionEntryBuffer</a>&nbsp;buffer)
+<pre>public abstract&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#line.1259">append</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.RegionEntryBuffer</a>&nbsp;buffer)
                      throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>buffer</code> - A WAL Edit Entry</dd>
 <dt><span class="strong">Throws:</span></dt>
@@ -542,7 +542,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>flush</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#line.1256">flush</a>()
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.OutputSink.html#line.1265">flush</a>()
               throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">WriterThread call this function to help flush internal remaining edits in buffer before close</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>true when underlying sink has something to flush</dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.PipelineController.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.PipelineController.html b/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.PipelineController.html
index fa03f8c..e02dc42 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.PipelineController.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.PipelineController.html
@@ -99,7 +99,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.856">WALSplitter.PipelineController</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.865">WALSplitter.PipelineController</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">Contains some methods to control WAL-entries producer / consumer interactions</div>
 </li>
@@ -198,7 +198,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>thrown</h4>
-<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicReference.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicReference</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.PipelineController.html#line.859">thrown</a></pre>
+<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicReference.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicReference</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.PipelineController.html#line.868">thrown</a></pre>
 </li>
 </ul>
 <a name="dataAvailable">
@@ -207,7 +207,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>dataAvailable</h4>
-<pre>public final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.PipelineController.html#line.863">dataAvailable</a></pre>
+<pre>public final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.PipelineController.html#line.872">dataAvailable</a></pre>
 </li>
 </ul>
 </li>
@@ -224,7 +224,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>WALSplitter.PipelineController</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.PipelineController.html#line.856">WALSplitter.PipelineController</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.PipelineController.html#line.865">WALSplitter.PipelineController</a>()</pre>
 </li>
 </ul>
 </li>
@@ -241,7 +241,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>writerThreadError</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.PipelineController.html#line.865">writerThreadError</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;t)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.PipelineController.html#line.874">writerThreadError</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;t)</pre>
 </li>
 </ul>
 <a name="checkForErrors()">
@@ -250,7 +250,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>checkForErrors</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.PipelineController.html#line.872">checkForErrors</a>()
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.PipelineController.html#line.881">checkForErrors</a>()
               throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Check for errors in the writer threads. If any is found, rethrow it.</div>
 <dl><dt><span class="strong">Throws:</span></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html b/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html
index 6204f8a..d60f547 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html
@@ -103,7 +103,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.1005">WALSplitter.RegionEntryBuffer</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.1014">WALSplitter.RegionEntryBuffer</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a></pre>
 <div class="block">A buffer of some number of edits for a given region.
@@ -229,7 +229,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>heapInBuffer</h4>
-<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html#line.1006">heapInBuffer</a></pre>
+<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html#line.1015">heapInBuffer</a></pre>
 </li>
 </ul>
 <a name="entryBuffer">
@@ -238,7 +238,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>entryBuffer</h4>
-<pre><a href="http://docs.oracle.com/javase/7/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/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html#line.1007">entryBuffer</a></pre>
+<pre><a href="http://docs.oracle.com/javase/7/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/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html#line.1016">entryBuffer</a></pre>
 </li>
 </ul>
 <a name="tableName">
@@ -247,7 +247,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>tableName</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html#line.1008">tableName</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html#line.1017">tableName</a></pre>
 </li>
 </ul>
 <a name="encodedRegionName">
@@ -256,7 +256,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" tit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>encodedRegionName</h4>
-<pre>byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html#line.1009">encodedRegionName</a></pre>
+<pre>byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html#line.1018">encodedRegionName</a></pre>
 </li>
 </ul>
 </li>
@@ -273,7 +273,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" tit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>WALSplitter.RegionEntryBuffer</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html#line.1011">WALSplitter.RegionEntryBuffer</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html#line.1020">WALSplitter.RegionEntryBuffer</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                              byte[]&nbsp;region)</pre>
 </li>
 </ul>
@@ -291,7 +291,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>appendEntry</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html#line.1017">appendEntry</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;entry)</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html#line.1026">appendEntry</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;entry)</pre>
 </li>
 </ul>
 <a name="internify(org.apache.hadoop.hbase.wal.WAL.Entry)">
@@ -300,7 +300,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>internify</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html#line.1027">internify</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;entry)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html#line.1036">internify</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;entry)</pre>
 </li>
 </ul>
 <a name="heapSize()">
@@ -309,7 +309,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>heapSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html#line.1034">heapSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html#line.1043">heapSize</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html#heapSize()">heapSize</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a></code></dd>
@@ -323,7 +323,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>getEncodedRegionName</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html#line.1038">getEncodedRegionName</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html#line.1047">getEncodedRegionName</a>()</pre>
 </li>
 </ul>
 <a name="getEntryBuffer()">
@@ -332,7 +332,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>getEntryBuffer</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html#line.1042">getEntryBuffer</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html#line.1051">getEntryBuffer</a>()</pre>
 </li>
 </ul>
 <a name="getTableName()">
@@ -341,7 +341,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" tit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getTableName</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html#line.1046">getTableName</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionEntryBuffer.html#line.1055">getTableName</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.RegionServerWriter.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.RegionServerWriter.html b/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.RegionServerWriter.html
index 7e5433f..60c1760 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.RegionServerWriter.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.RegionServerWriter.html
@@ -104,7 +104,7 @@
 </dl>
 <hr>
 <br>
-<pre>private static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.2196">WALSplitter.RegionServerWriter</a>
+<pre>private static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.2234">WALSplitter.RegionServerWriter</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.SinkWriter</a></pre>
 <div class="block">Private data structure that wraps a receiving RS and collecting statistics about the data
  written to this newly assigned RS.</div>
@@ -210,7 +210,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.SinkWrit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>sink</h4>
-<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/WALEditsReplaySink.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALEditsReplaySink</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionServerWriter.html#line.2197">sink</a></pre>
+<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/WALEditsReplaySink.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALEditsReplaySink</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionServerWriter.html#line.2235">sink</a></pre>
 </li>
 </ul>
 </li>
@@ -227,7 +227,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.SinkWrit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>WALSplitter.RegionServerWriter</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionServerWriter.html#line.2199">WALSplitter.RegionServerWriter</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionServerWriter.html#line.2237">WALSplitter.RegionServerWriter</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                               <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                               <a href="../../../../../org/apache/hadoop/hbase/client/HConnection.html" title="interface in org.apache.hadoop.hbase.client">HConnection</a>&nbsp;conn)
                          throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -249,7 +249,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitter.SinkWrit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>close</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionServerWriter.html#line.2204">close</a>()
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.RegionServerWriter.html#line.2242">close</a>()
      throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html b/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html
index 3ad03fa..76e4c8d 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html
@@ -103,7 +103,7 @@
 </dl>
 <hr>
 <br>
-<pre>public abstract static class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.1598">WALSplitter.SinkWriter</a>
+<pre>public abstract static class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.html#line.1634">WALSplitter.SinkWriter</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">Class wraps the actual writer which writes data out and related statistics</div>
 </li>
@@ -208,7 +208,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>editsWritten</h4>
-<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html#line.1600">editsWritten</a></pre>
+<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html#line.1636">editsWritten</a></pre>
 </li>
 </ul>
 <a name="editsSkipped">
@@ -217,7 +217,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>editsSkipped</h4>
-<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html#line.1602">editsSkipped</a></pre>
+<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html#line.1638">editsSkipped</a></pre>
 </li>
 </ul>
 <a name="nanosSpent">
@@ -226,7 +226,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>nanosSpent</h4>
-<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html#line.1604">nanosSpent</a></pre>
+<pre>long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html#line.1640">nanosSpent</a></pre>
 </li>
 </ul>
 </li>
@@ -243,7 +243,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>WALSplitter.SinkWriter</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html#line.1598">WALSplitter.SinkWriter</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html#line.1634">WALSplitter.SinkWriter</a>()</pre>
 </li>
 </ul>
 </li>
@@ -260,7 +260,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>incrementEdits</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html#line.1606">incrementEdits</a>(int&nbsp;edits)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html#line.1642">incrementEdits</a>(int&nbsp;edits)</pre>
 </li>
 </ul>
 <a name="incrementSkippedEdits(int)">
@@ -269,7 +269,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>incrementSkippedEdits</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html#line.1610">incrementSkippedEdits</a>(int&nbsp;skipped)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html#line.1646">incrementSkippedEdits</a>(int&nbsp;skipped)</pre>
 </li>
 </ul>
 <a name="incrementNanoTime(long)">
@@ -278,7 +278,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>incrementNanoTime</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html#line.1614">incrementNanoTime</a>(long&nbsp;nanos)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WALSplitter.SinkWriter.html#line.1650">incrementNanoTime</a>(long&nbsp;nanos)</pre>
 </li>
 </ul>
 </li>


[03/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html
index aa5da14..b06a764 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.html
@@ -41,1157 +41,1234 @@
 <span class="sourceLineNo">033</span>import java.lang.reflect.Field;<a name="line.33"></a>
 <span class="sourceLineNo">034</span>import java.security.PrivilegedExceptionAction;<a name="line.34"></a>
 <span class="sourceLineNo">035</span>import java.util.ArrayList;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.Collection;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.HashSet;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import java.util.List;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import java.util.Set;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.41"></a>
-<span class="sourceLineNo">042</span><a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.commons.logging.Log;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.commons.logging.LogFactory;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.conf.Configuration;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.fs.FSDataInputStream;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.fs.FileStatus;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.fs.FileSystem;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.fs.Path;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.fs.PathFilter;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.Cell;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.HConstants;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.MiniHBaseCluster;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.ServerName;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.TableName;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.client.Get;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.client.Put;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.client.Result;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.client.Table;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.master.HMaster;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.monitoring.MonitoredTask;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.protobuf.generated.ZooKeeperProtos.SplitLogTask.RecoveryMode;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.regionserver.DefaultStoreEngine;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.regionserver.DefaultStoreFlusher;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.regionserver.FlushRequestListener;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.regionserver.FlushRequester;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.regionserver.MemStoreSnapshot;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.regionserver.MultiVersionConcurrencyControl;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.regionserver.Region;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.regionserver.RegionScanner;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.regionserver.RegionServerServices;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.regionserver.Store;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.regionserver.throttle.ThroughputController;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.security.User;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.testclassification.RegionServerTests;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.util.EnvironmentEdge;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.util.HFileTestUtil;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.wal.DefaultWALProvider;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.wal.WALKey;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hdfs.DFSInputStream;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.junit.After;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.junit.AfterClass;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.junit.Before;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.junit.BeforeClass;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.junit.Rule;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.junit.Test;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.junit.experimental.categories.Category;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.junit.rules.TestName;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.mockito.Mockito;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.mockito.invocation.InvocationOnMock;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.mockito.stubbing.Answer;<a name="line.112"></a>
-<span class="sourceLineNo">113</span><a name="line.113"></a>
-<span class="sourceLineNo">114</span>/**<a name="line.114"></a>
-<span class="sourceLineNo">115</span> * Test replay of edits out of a WAL split.<a name="line.115"></a>
-<span class="sourceLineNo">116</span> */<a name="line.116"></a>
-<span class="sourceLineNo">117</span>@Category({RegionServerTests.class, MediumTests.class})<a name="line.117"></a>
-<span class="sourceLineNo">118</span>public class TestWALReplay {<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  private static final Log LOG = LogFactory.getLog(TestWALReplay.class);<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  static final HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.120"></a>
-<span class="sourceLineNo">121</span>  private final EnvironmentEdge ee = EnvironmentEdgeManager.getDelegate();<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  private Path hbaseRootDir = null;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>  private String logName;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  private Path oldLogDir;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  private Path logDir;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>  private FileSystem fs;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>  private Configuration conf;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  private RecoveryMode mode;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>  private WALFactory wals;<a name="line.129"></a>
-<span class="sourceLineNo">130</span><a name="line.130"></a>
-<span class="sourceLineNo">131</span>  @Rule<a name="line.131"></a>
-<span class="sourceLineNo">132</span>  public final TestName currentTest = new TestName();<a name="line.132"></a>
-<span class="sourceLineNo">133</span><a name="line.133"></a>
+<span class="sourceLineNo">036</span>import java.util.Arrays;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import java.util.Collection;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import java.util.HashSet;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import java.util.List;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import java.util.Set;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.42"></a>
+<span class="sourceLineNo">043</span><a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.commons.logging.Log;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.commons.logging.LogFactory;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.conf.Configuration;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.fs.FSDataInputStream;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.fs.FileStatus;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.fs.FileSystem;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.fs.Path;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.fs.PathFilter;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.Cell;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.HConstants;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.MiniHBaseCluster;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.ServerName;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.TableName;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.client.Get;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.client.Put;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.client.Result;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.client.Table;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.master.HMaster;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.monitoring.MonitoredTask;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.protobuf.generated.ZooKeeperProtos.SplitLogTask.RecoveryMode;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.regionserver.DefaultStoreEngine;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.regionserver.DefaultStoreFlusher;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.regionserver.FlushRequestListener;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.regionserver.FlushRequester;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.regionserver.MemStoreSnapshot;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.regionserver.MultiVersionConcurrencyControl;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.regionserver.Region;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.regionserver.RegionScanner;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.regionserver.RegionServerServices;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.regionserver.Store;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.regionserver.throttle.ThroughputController;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.security.User;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.testclassification.RegionServerTests;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.util.EnvironmentEdge;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.util.HFileTestUtil;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.wal.DefaultWALProvider;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.wal.WALKey;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hdfs.DFSInputStream;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.junit.After;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.junit.AfterClass;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.junit.Before;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.junit.BeforeClass;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.junit.Rule;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.junit.Test;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.junit.experimental.categories.Category;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.junit.rules.TestName;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.mockito.Mockito;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.mockito.invocation.InvocationOnMock;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.mockito.stubbing.Answer;<a name="line.113"></a>
+<span class="sourceLineNo">114</span><a name="line.114"></a>
+<span class="sourceLineNo">115</span>/**<a name="line.115"></a>
+<span class="sourceLineNo">116</span> * Test replay of edits out of a WAL split.<a name="line.116"></a>
+<span class="sourceLineNo">117</span> */<a name="line.117"></a>
+<span class="sourceLineNo">118</span>@Category({RegionServerTests.class, MediumTests.class})<a name="line.118"></a>
+<span class="sourceLineNo">119</span>public class TestWALReplay {<a name="line.119"></a>
+<span class="sourceLineNo">120</span>  private static final Log LOG = LogFactory.getLog(TestWALReplay.class);<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  static final HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.121"></a>
+<span class="sourceLineNo">122</span>  private final EnvironmentEdge ee = EnvironmentEdgeManager.getDelegate();<a name="line.122"></a>
+<span class="sourceLineNo">123</span>  private Path hbaseRootDir = null;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  private String logName;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>  private Path oldLogDir;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  private Path logDir;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>  private FileSystem fs;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>  private Configuration conf;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>  private RecoveryMode mode;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>  private WALFactory wals;<a name="line.130"></a>
+<span class="sourceLineNo">131</span><a name="line.131"></a>
+<span class="sourceLineNo">132</span>  @Rule<a name="line.132"></a>
+<span class="sourceLineNo">133</span>  public final TestName currentTest = new TestName();<a name="line.133"></a>
 <span class="sourceLineNo">134</span><a name="line.134"></a>
-<span class="sourceLineNo">135</span>  @BeforeClass<a name="line.135"></a>
-<span class="sourceLineNo">136</span>  public static void setUpBeforeClass() throws Exception {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    conf.setBoolean("dfs.support.append", true);<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    // The below config supported by 0.20-append and CDH3b2<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    conf.setInt("dfs.client.block.recovery.retries", 2);<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    TEST_UTIL.startMiniCluster(3);<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    Path hbaseRootDir =<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      TEST_UTIL.getDFSCluster().getFileSystem().makeQualified(new Path("/hbase"));<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    LOG.info("hbase.rootdir=" + hbaseRootDir);<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    FSUtils.setRootDir(conf, hbaseRootDir);<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>  @AfterClass<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  public static void tearDownAfterClass() throws Exception {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    TEST_UTIL.shutdownMiniCluster();<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  }<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>  @Before<a name="line.153"></a>
-<span class="sourceLineNo">154</span>  public void setUp() throws Exception {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    this.conf = HBaseConfiguration.create(TEST_UTIL.getConfiguration());<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    this.fs = TEST_UTIL.getDFSCluster().getFileSystem();<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    this.hbaseRootDir = FSUtils.getRootDir(this.conf);<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    this.oldLogDir = new Path(this.hbaseRootDir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    this.logName = DefaultWALProvider.getWALDirectoryName(currentTest.getMethodName() + "-manual");<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    this.logDir = new Path(this.hbaseRootDir, logName);<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    if (TEST_UTIL.getDFSCluster().getFileSystem().exists(this.hbaseRootDir)) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      TEST_UTIL.getDFSCluster().getFileSystem().delete(this.hbaseRootDir, true);<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    }<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    this.mode = (conf.getBoolean(HConstants.DISTRIBUTED_LOG_REPLAY_KEY, false) ?<a name="line.164"></a>
-<span class="sourceLineNo">165</span>        RecoveryMode.LOG_REPLAY : RecoveryMode.LOG_SPLITTING);<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    this.wals = new WALFactory(conf, null, currentTest.getMethodName());<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>  @After<a name="line.169"></a>
-<span class="sourceLineNo">170</span>  public void tearDown() throws Exception {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    this.wals.close();<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    TEST_UTIL.getDFSCluster().getFileSystem().delete(this.hbaseRootDir, true);<a name="line.172"></a>
-<span class="sourceLineNo">173</span>  }<a name="line.173"></a>
-<span class="sourceLineNo">174</span><a name="line.174"></a>
-<span class="sourceLineNo">175</span>  /*<a name="line.175"></a>
-<span class="sourceLineNo">176</span>   * @param p Directory to cleanup<a name="line.176"></a>
-<span class="sourceLineNo">177</span>   */<a name="line.177"></a>
-<span class="sourceLineNo">178</span>  private void deleteDir(final Path p) throws IOException {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    if (this.fs.exists(p)) {<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      if (!this.fs.delete(p, true)) {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>        throw new IOException("Failed remove of " + p);<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      }<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>   *<a name="line.187"></a>
-<span class="sourceLineNo">188</span>   * @throws Exception<a name="line.188"></a>
-<span class="sourceLineNo">189</span>   */<a name="line.189"></a>
-<span class="sourceLineNo">190</span>  @Test<a name="line.190"></a>
-<span class="sourceLineNo">191</span>  public void testReplayEditsAfterRegionMovedWithMultiCF() throws Exception {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    final TableName tableName =<a name="line.192"></a>
-<span class="sourceLineNo">193</span>        TableName.valueOf("testReplayEditsAfterRegionMovedWithMultiCF");<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    byte[] family1 = Bytes.toBytes("cf1");<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    byte[] family2 = Bytes.toBytes("cf2");<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    byte[] qualifier = Bytes.toBytes("q");<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    byte[] value = Bytes.toBytes("testV");<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    byte[][] familys = { family1, family2 };<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    TEST_UTIL.createTable(tableName, familys);<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    Table htable = TEST_UTIL.getConnection().getTable(tableName);<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    Put put = new Put(Bytes.toBytes("r1"));<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    put.addColumn(family1, qualifier, value);<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    htable.put(put);<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    ResultScanner resultScanner = htable.getScanner(new Scan());<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    int count = 0;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    while (resultScanner.next() != null) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      count++;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    }<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    resultScanner.close();<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    assertEquals(1, count);<a name="line.210"></a>
-<span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span>    MiniHBaseCluster hbaseCluster = TEST_UTIL.getMiniHBaseCluster();<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    List&lt;HRegion&gt; regions = hbaseCluster.getRegions(tableName);<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    assertEquals(1, regions.size());<a name="line.214"></a>
-<span class="sourceLineNo">215</span><a name="line.215"></a>
-<span class="sourceLineNo">216</span>    // move region to another regionserver<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    Region destRegion = regions.get(0);<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    int originServerNum = hbaseCluster<a name="line.218"></a>
-<span class="sourceLineNo">219</span>        .getServerWith(destRegion.getRegionInfo().getRegionName());<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    assertTrue("Please start more than 1 regionserver", hbaseCluster<a name="line.220"></a>
-<span class="sourceLineNo">221</span>        .getRegionServerThreads().size() &gt; 1);<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    int destServerNum = 0;<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    while (destServerNum == originServerNum) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      destServerNum++;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    }<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    HRegionServer originServer = hbaseCluster.getRegionServer(originServerNum);<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    HRegionServer destServer = hbaseCluster.getRegionServer(destServerNum);<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    // move region to destination regionserver<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    moveRegionAndWait(destRegion, destServer);<a name="line.229"></a>
-<span class="sourceLineNo">230</span><a name="line.230"></a>
-<span class="sourceLineNo">231</span>    // delete the row<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    Delete del = new Delete(Bytes.toBytes("r1"));<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    htable.delete(del);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    resultScanner = htable.getScanner(new Scan());<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    count = 0;<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    while (resultScanner.next() != null) {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      count++;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    }<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    resultScanner.close();<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    assertEquals(0, count);<a name="line.240"></a>
-<span class="sourceLineNo">241</span><a name="line.241"></a>
-<span class="sourceLineNo">242</span>    // flush region and make major compaction<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    Region region =  destServer.getOnlineRegion(destRegion.getRegionInfo().getRegionName());<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    region.flush(true);<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    // wait to complete major compaction<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    for (Store store : region.getStores()) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      store.triggerMajorCompaction();<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    }<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    region.compact(true);<a name="line.249"></a>
-<span class="sourceLineNo">250</span><a name="line.250"></a>
-<span class="sourceLineNo">251</span>    // move region to origin regionserver<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    moveRegionAndWait(destRegion, originServer);<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    // abort the origin regionserver<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    originServer.abort("testing");<a name="line.254"></a>
-<span class="sourceLineNo">255</span><a name="line.255"></a>
-<span class="sourceLineNo">256</span>    // see what we get<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    Result result = htable.get(new Get(Bytes.toBytes("r1")));<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    if (result != null) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      assertTrue("Row is deleted, but we get" + result.toString(),<a name="line.259"></a>
-<span class="sourceLineNo">260</span>          (result == null) || result.isEmpty());<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    }<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    resultScanner.close();<a name="line.262"></a>
-<span class="sourceLineNo">263</span>  }<a name="line.263"></a>
-<span class="sourceLineNo">264</span><a name="line.264"></a>
-<span class="sourceLineNo">265</span>  private void moveRegionAndWait(Region destRegion, HRegionServer destServer)<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      throws InterruptedException, MasterNotRunningException,<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      ZooKeeperConnectionException, IOException {<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    HMaster master = TEST_UTIL.getMiniHBaseCluster().getMaster();<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    TEST_UTIL.getHBaseAdmin().move(<a name="line.269"></a>
-<span class="sourceLineNo">270</span>        destRegion.getRegionInfo().getEncodedNameAsBytes(),<a name="line.270"></a>
-<span class="sourceLineNo">271</span>        Bytes.toBytes(destServer.getServerName().getServerName()));<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    while (true) {<a name="line.272"></a>
-<span class="sourceLineNo">273</span>      ServerName serverName = master.getAssignmentManager()<a name="line.273"></a>
-<span class="sourceLineNo">274</span>        .getRegionStates().getRegionServerOfRegion(destRegion.getRegionInfo());<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      if (serverName != null &amp;&amp; serverName.equals(destServer.getServerName())) {<a name="line.275"></a>
-<span class="sourceLineNo">276</span>        TEST_UTIL.assertRegionOnServer(<a name="line.276"></a>
-<span class="sourceLineNo">277</span>          destRegion.getRegionInfo(), serverName, 200);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>        break;<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      }<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      Thread.sleep(10);<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><a name="line.283"></a>
-<span class="sourceLineNo">284</span>  /**<a name="line.284"></a>
-<span class="sourceLineNo">285</span>   * Tests for hbase-2727.<a name="line.285"></a>
-<span class="sourceLineNo">286</span>   * @throws Exception<a name="line.286"></a>
-<span class="sourceLineNo">287</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-2727"&gt;HBASE-2727&lt;/a&gt;<a name="line.287"></a>
-<span class="sourceLineNo">288</span>   */<a name="line.288"></a>
-<span class="sourceLineNo">289</span>  @Test<a name="line.289"></a>
-<span class="sourceLineNo">290</span>  public void test2727() throws Exception {<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    // Test being able to have &gt; 1 set of edits in the recovered.edits directory.<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    // Ensure edits are replayed properly.<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    final TableName tableName =<a name="line.293"></a>
-<span class="sourceLineNo">294</span>        TableName.valueOf("test2727");<a name="line.294"></a>
-<span class="sourceLineNo">295</span><a name="line.295"></a>
-<span class="sourceLineNo">296</span>    MultiVersionConcurrencyControl mvcc = new MultiVersionConcurrencyControl();<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    HRegionInfo hri = createBasic3FamilyHRegionInfo(tableName);<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    Path basedir = FSUtils.getTableDir(hbaseRootDir, tableName);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    deleteDir(basedir);<a name="line.299"></a>
-<span class="sourceLineNo">300</span><a name="line.300"></a>
-<span class="sourceLineNo">301</span>    HTableDescriptor htd = createBasic3FamilyHTD(tableName);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    Region region2 = HBaseTestingUtility.createRegionAndWAL(hri, hbaseRootDir, this.conf, htd);<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    HBaseTestingUtility.closeRegionAndWAL(region2);<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    final byte [] rowName = tableName.getName();<a name="line.304"></a>
-<span class="sourceLineNo">305</span><a name="line.305"></a>
-<span class="sourceLineNo">306</span>    WAL wal1 = createWAL(this.conf);<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    // Add 1k to each family.<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    final int countPerFamily = 1000;<a name="line.308"></a>
-<span class="sourceLineNo">309</span><a name="line.309"></a>
-<span class="sourceLineNo">310</span>    for (HColumnDescriptor hcd: htd.getFamilies()) {<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      addWALEdits(tableName, hri, rowName, hcd.getName(), countPerFamily, ee,<a name="line.311"></a>
-<span class="sourceLineNo">312</span>          wal1, htd, mvcc);<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    }<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    wal1.shutdown();<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    runWALSplit(this.conf);<a name="line.315"></a>
-<span class="sourceLineNo">316</span><a name="line.316"></a>
-<span class="sourceLineNo">317</span>    WAL wal2 = createWAL(this.conf);<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    // Add 1k to each family.<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    for (HColumnDescriptor hcd: htd.getFamilies()) {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      addWALEdits(tableName, hri, rowName, hcd.getName(), countPerFamily,<a name="line.320"></a>
-<span class="sourceLineNo">321</span>          ee, wal2, htd, mvcc);<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    }<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    wal2.shutdown();<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    runWALSplit(this.conf);<a name="line.324"></a>
-<span class="sourceLineNo">325</span><a name="line.325"></a>
-<span class="sourceLineNo">326</span>    WAL wal3 = createWAL(this.conf);<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    try {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      HRegion region = HRegion.openHRegion(this.conf, this.fs, hbaseRootDir, hri, htd, wal3);<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      long seqid = region.getOpenSeqNum();<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      // The regions opens with sequenceId as 1. With 6k edits, its sequence number reaches 6k + 1.<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      // When opened, this region would apply 6k edits, and increment the sequenceId by 1<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      assertTrue(seqid &gt; mvcc.getWritePoint());<a name="line.332"></a>
-<span class="sourceLineNo">333</span>      assertEquals(seqid - 1, mvcc.getWritePoint());<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      LOG.debug("region.getOpenSeqNum(): " + region.getOpenSeqNum() + ", wal3.id: "<a name="line.334"></a>
-<span class="sourceLineNo">335</span>          + mvcc.getReadPoint());<a name="line.335"></a>
-<span class="sourceLineNo">336</span><a name="line.336"></a>
-<span class="sourceLineNo">337</span>      // TODO: Scan all.<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      region.close();<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    } finally {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      wal3.close();<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    }<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>  /**<a name="line.344"></a>
-<span class="sourceLineNo">345</span>   * Test case of HRegion that is only made out of bulk loaded files.  Assert<a name="line.345"></a>
-<span class="sourceLineNo">346</span>   * that we don't 'crash'.<a name="line.346"></a>
-<span class="sourceLineNo">347</span>   * @throws IOException<a name="line.347"></a>
-<span class="sourceLineNo">348</span>   * @throws IllegalAccessException<a name="line.348"></a>
-<span class="sourceLineNo">349</span>   * @throws NoSuchFieldException<a name="line.349"></a>
-<span class="sourceLineNo">350</span>   * @throws IllegalArgumentException<a name="line.350"></a>
-<span class="sourceLineNo">351</span>   * @throws SecurityException<a name="line.351"></a>
-<span class="sourceLineNo">352</span>   */<a name="line.352"></a>
-<span class="sourceLineNo">353</span>  @Test<a name="line.353"></a>
-<span class="sourceLineNo">354</span>  public void testRegionMadeOfBulkLoadedFilesOnly()<a name="line.354"></a>
-<span class="sourceLineNo">355</span>  throws IOException, SecurityException, IllegalArgumentException,<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      NoSuchFieldException, IllegalAccessException, InterruptedException {<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    final TableName tableName =<a name="line.357"></a>
-<span class="sourceLineNo">358</span>        TableName.valueOf("testRegionMadeOfBulkLoadedFilesOnly");<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    final HRegionInfo hri = createBasic3FamilyHRegionInfo(tableName);<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    final Path basedir = new Path(this.hbaseRootDir, tableName.getNameAsString());<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    deleteDir(basedir);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    final HTableDescriptor htd = createBasic3FamilyHTD(tableName);<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    Region region2 = HBaseTestingUtility.createRegionAndWAL(hri, hbaseRootDir, this.conf, htd);<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    HBaseTestingUtility.closeRegionAndWAL(region2);<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    WAL wal = createWAL(this.conf);<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    Region region = HRegion.openHRegion(hri, htd, wal, this.conf);<a name="line.366"></a>
-<span class="sourceLineNo">367</span><a name="line.367"></a>
-<span class="sourceLineNo">368</span>    byte [] family = htd.getFamilies().iterator().next().getName();<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    Path f =  new Path(basedir, "hfile");<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    HFileTestUtil.createHFile(this.conf, fs, f, family, family, Bytes.toBytes(""),<a name="line.370"></a>
-<span class="sourceLineNo">371</span>        Bytes.toBytes("z"), 10);<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    List &lt;Pair&lt;byte[],String&gt;&gt;  hfs= new ArrayList&lt;Pair&lt;byte[],String&gt;&gt;(1);<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    hfs.add(Pair.newPair(family, f.toString()));<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    region.bulkLoadHFiles(hfs, true, null);<a name="line.374"></a>
-<span class="sourceLineNo">375</span><a name="line.375"></a>
-<span class="sourceLineNo">376</span>    // Add an edit so something in the WAL<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    byte [] row = tableName.getName();<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    region.put((new Put(row)).addColumn(family, family, family));<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    wal.sync();<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    final int rowsInsertedCount = 11;<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span>    assertEquals(rowsInsertedCount, getScannedCount(region.getScanner(new Scan())));<a name="line.382"></a>
-<span class="sourceLineNo">383</span><a name="line.383"></a>
-<span class="sourceLineNo">384</span>    // Now 'crash' the region by stealing its wal<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    final Configuration newConf = HBaseConfiguration.create(this.conf);<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    User user = HBaseTestingUtility.getDifferentUser(newConf,<a name="line.386"></a>
-<span class="sourceLineNo">387</span>        tableName.getNameAsString());<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    user.runAs(new PrivilegedExceptionAction() {<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      @Override<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      public Object run() throws Exception {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        runWALSplit(newConf);<a name="line.391"></a>
-<span class="sourceLineNo">392</span>        WAL wal2 = createWAL(newConf);<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span>        HRegion region2 = HRegion.openHRegion(newConf, FileSystem.get(newConf),<a name="line.394"></a>
-<span class="sourceLineNo">395</span>          hbaseRootDir, hri, htd, wal2);<a name="line.395"></a>
-<span class="sourceLineNo">396</span>        long seqid2 = region2.getOpenSeqNum();<a name="line.396"></a>
-<span class="sourceLineNo">397</span>        assertTrue(seqid2 &gt; -1);<a name="line.397"></a>
-<span class="sourceLineNo">398</span>        assertEquals(rowsInsertedCount, getScannedCount(region2.getScanner(new Scan())));<a name="line.398"></a>
-<span class="sourceLineNo">399</span><a name="line.399"></a>
-<span class="sourceLineNo">400</span>        // I can't close wal1.  Its been appropriated when we split.<a name="line.400"></a>
-<span class="sourceLineNo">401</span>        region2.close();<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        wal2.close();<a name="line.402"></a>
-<span class="sourceLineNo">403</span>        return null;<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      }<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>  /**<a name="line.408"></a>
-<span class="sourceLineNo">409</span>   * HRegion test case that is made of a major compacted HFile (created with three bulk loaded<a name="line.409"></a>
-<span class="sourceLineNo">410</span>   * files) and an edit in the memstore.<a name="line.410"></a>
-<span class="sourceLineNo">411</span>   * This is for HBASE-10958 "[dataloss] Bulk loading with seqids can prevent some log entries<a name="line.411"></a>
-<span class="sourceLineNo">412</span>   * from being replayed"<a name="line.412"></a>
-<span class="sourceLineNo">413</span>   * @throws IOException<a name="line.413"></a>
-<span class="sourceLineNo">414</span>   * @throws IllegalAccessException<a name="line.414"></a>
-<span class="sourceLineNo">415</span>   * @throws NoSuchFieldException<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   * @throws IllegalArgumentException<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * @throws SecurityException<a name="line.417"></a>
-<span class="sourceLineNo">418</span>   */<a name="line.418"></a>
-<span class="sourceLineNo">419</span>  @Test<a name="line.419"></a>
-<span class="sourceLineNo">420</span>  public void testCompactedBulkLoadedFiles()<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      throws IOException, SecurityException, IllegalArgumentException,<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      NoSuchFieldException, IllegalAccessException, InterruptedException {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    final TableName tableName =<a name="line.423"></a>
-<span class="sourceLineNo">424</span>        TableName.valueOf("testCompactedBulkLoadedFiles");<a name="line.424"></a>
-<span class="sourceLineNo">425</span>    final HRegionInfo hri = createBasic3FamilyHRegionInfo(tableName);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    final Path basedir = new Path(this.hbaseRootDir, tableName.getNameAsString());<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    deleteDir(basedir);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    final HTableDescriptor htd = createBasic3FamilyHTD(tableName);<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    HRegion region2 = HBaseTestingUtility.createRegionAndWAL(hri, hbaseRootDir, this.conf, htd);<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    HBaseTestingUtility.closeRegionAndWAL(region2);<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    WAL wal = createWAL(this.conf);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    HRegion region = HRegion.openHRegion(hri, htd, wal, this.conf);<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>    // Add an edit so something in the WAL<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    byte [] row = tableName.getName();<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    byte [] family = htd.getFamilies().iterator().next().getName();<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    region.put((new Put(row)).addColumn(family, family, family));<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    wal.sync();<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>    List &lt;Pair&lt;byte[],String&gt;&gt;  hfs= new ArrayList&lt;Pair&lt;byte[],String&gt;&gt;(1);<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    for (int i = 0; i &lt; 3; i++) {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>      Path f = new Path(basedir, "hfile"+i);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      HFileTestUtil.createHFile(this.conf, fs, f, family, family, Bytes.toBytes(i + "00"),<a name="line.443"></a>
-<span class="sourceLineNo">444</span>          Bytes.toBytes(i + "50"), 10);<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      hfs.add(Pair.newPair(family, f.toString()));<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    }<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    region.bulkLoadHFiles(hfs, true, null);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    final int rowsInsertedCount = 31;<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    assertEquals(rowsInsertedCount, getScannedCount(region.getScanner(new Scan())));<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>    // major compact to turn all the bulk loaded files into one normal file<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    region.compact(true);<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    assertEquals(rowsInsertedCount, getScannedCount(region.getScanner(new Scan())));<a name="line.453"></a>
-<span class="sourceLineNo">454</span><a name="line.454"></a>
-<span class="sourceLineNo">455</span>    // Now 'crash' the region by stealing its wal<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    final Configuration newConf = HBaseConfiguration.create(this.conf);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    User user = HBaseTestingUtility.getDifferentUser(newConf,<a name="line.457"></a>
-<span class="sourceLineNo">458</span>        tableName.getNameAsString());<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    user.runAs(new PrivilegedExceptionAction() {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      @Override<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      public Object run() throws Exception {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        runWALSplit(newConf);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>        WAL wal2 = createWAL(newConf);<a name="line.463"></a>
-<span class="sourceLineNo">464</span><a name="line.464"></a>
-<span class="sourceLineNo">465</span>        HRegion region2 = HRegion.openHRegion(newConf, FileSystem.get(newConf),<a name="line.465"></a>
-<span class="sourceLineNo">466</span>            hbaseRootDir, hri, htd, wal2);<a name="line.466"></a>
-<span class="sourceLineNo">467</span>        long seqid2 = region2.getOpenSeqNum();<a name="line.467"></a>
-<span class="sourceLineNo">468</span>        assertTrue(seqid2 &gt; -1);<a name="line.468"></a>
-<span class="sourceLineNo">469</span>        assertEquals(rowsInsertedCount, getScannedCount(region2.getScanner(new Scan())));<a name="line.469"></a>
-<span class="sourceLineNo">470</span><a name="line.470"></a>
-<span class="sourceLineNo">471</span>        // I can't close wal1.  Its been appropriated when we split.<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        region2.close();<a name="line.472"></a>
-<span class="sourceLineNo">473</span>        wal2.close();<a name="line.473"></a>
-<span class="sourceLineNo">474</span>        return null;<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>  }<a name="line.477"></a>
-<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">135</span><a name="line.135"></a>
+<span class="sourceLineNo">136</span>  @BeforeClass<a name="line.136"></a>
+<span class="sourceLineNo">137</span>  public static void setUpBeforeClass() throws Exception {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    conf.setBoolean("dfs.support.append", true);<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    // The below config supported by 0.20-append and CDH3b2<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    conf.setInt("dfs.client.block.recovery.retries", 2);<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    TEST_UTIL.startMiniCluster(3);<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    Path hbaseRootDir =<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      TEST_UTIL.getDFSCluster().getFileSystem().makeQualified(new Path("/hbase"));<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    LOG.info("hbase.rootdir=" + hbaseRootDir);<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    FSUtils.setRootDir(conf, hbaseRootDir);<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>  @AfterClass<a name="line.149"></a>
+<span class="sourceLineNo">150</span>  public static void tearDownAfterClass() throws Exception {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    TEST_UTIL.shutdownMiniCluster();<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>  @Before<a name="line.154"></a>
+<span class="sourceLineNo">155</span>  public void setUp() throws Exception {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    this.conf = HBaseConfiguration.create(TEST_UTIL.getConfiguration());<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    this.fs = TEST_UTIL.getDFSCluster().getFileSystem();<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    this.hbaseRootDir = FSUtils.getRootDir(this.conf);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    this.oldLogDir = new Path(this.hbaseRootDir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    this.logName = DefaultWALProvider.getWALDirectoryName(currentTest.getMethodName() + "-manual");<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    this.logDir = new Path(this.hbaseRootDir, logName);<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    if (TEST_UTIL.getDFSCluster().getFileSystem().exists(this.hbaseRootDir)) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      TEST_UTIL.getDFSCluster().getFileSystem().delete(this.hbaseRootDir, true);<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    }<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    this.mode = (conf.getBoolean(HConstants.DISTRIBUTED_LOG_REPLAY_KEY, false) ?<a name="line.165"></a>
+<span class="sourceLineNo">166</span>        RecoveryMode.LOG_REPLAY : RecoveryMode.LOG_SPLITTING);<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    this.wals = new WALFactory(conf, null, currentTest.getMethodName());<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  }<a name="line.168"></a>
+<span class="sourceLineNo">169</span><a name="line.169"></a>
+<span class="sourceLineNo">170</span>  @After<a name="line.170"></a>
+<span class="sourceLineNo">171</span>  public void tearDown() throws Exception {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    this.wals.close();<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    TEST_UTIL.getDFSCluster().getFileSystem().delete(this.hbaseRootDir, true);<a name="line.173"></a>
+<span class="sourceLineNo">174</span>  }<a name="line.174"></a>
+<span class="sourceLineNo">175</span><a name="line.175"></a>
+<span class="sourceLineNo">176</span>  /*<a name="line.176"></a>
+<span class="sourceLineNo">177</span>   * @param p Directory to cleanup<a name="line.177"></a>
+<span class="sourceLineNo">178</span>   */<a name="line.178"></a>
+<span class="sourceLineNo">179</span>  private void deleteDir(final Path p) throws IOException {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    if (this.fs.exists(p)) {<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      if (!this.fs.delete(p, true)) {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>        throw new IOException("Failed remove of " + p);<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>  /**<a name="line.187"></a>
+<span class="sourceLineNo">188</span>   *<a name="line.188"></a>
+<span class="sourceLineNo">189</span>   * @throws Exception<a name="line.189"></a>
+<span class="sourceLineNo">190</span>   */<a name="line.190"></a>
+<span class="sourceLineNo">191</span>  @Test<a name="line.191"></a>
+<span class="sourceLineNo">192</span>  public void testReplayEditsAfterRegionMovedWithMultiCF() throws Exception {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    final TableName tableName =<a name="line.193"></a>
+<span class="sourceLineNo">194</span>        TableName.valueOf("testReplayEditsAfterRegionMovedWithMultiCF");<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    byte[] family1 = Bytes.toBytes("cf1");<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    byte[] family2 = Bytes.toBytes("cf2");<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    byte[] qualifier = Bytes.toBytes("q");<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    byte[] value = Bytes.toBytes("testV");<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    byte[][] familys = { family1, family2 };<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    TEST_UTIL.createTable(tableName, familys);<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    Table htable = TEST_UTIL.getConnection().getTable(tableName);<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    Put put = new Put(Bytes.toBytes("r1"));<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    put.addColumn(family1, qualifier, value);<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    htable.put(put);<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    ResultScanner resultScanner = htable.getScanner(new Scan());<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    int count = 0;<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    while (resultScanner.next() != null) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      count++;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    }<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    resultScanner.close();<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    assertEquals(1, count);<a name="line.211"></a>
+<span class="sourceLineNo">212</span><a name="line.212"></a>
+<span class="sourceLineNo">213</span>    MiniHBaseCluster hbaseCluster = TEST_UTIL.getMiniHBaseCluster();<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    List&lt;HRegion&gt; regions = hbaseCluster.getRegions(tableName);<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    assertEquals(1, regions.size());<a name="line.215"></a>
+<span class="sourceLineNo">216</span><a name="line.216"></a>
+<span class="sourceLineNo">217</span>    // move region to another regionserver<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    Region destRegion = regions.get(0);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    int originServerNum = hbaseCluster<a name="line.219"></a>
+<span class="sourceLineNo">220</span>        .getServerWith(destRegion.getRegionInfo().getRegionName());<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    assertTrue("Please start more than 1 regionserver", hbaseCluster<a name="line.221"></a>
+<span class="sourceLineNo">222</span>        .getRegionServerThreads().size() &gt; 1);<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    int destServerNum = 0;<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    while (destServerNum == originServerNum) {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>      destServerNum++;<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    }<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    HRegionServer originServer = hbaseCluster.getRegionServer(originServerNum);<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    HRegionServer destServer = hbaseCluster.getRegionServer(destServerNum);<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    // move region to destination regionserver<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    moveRegionAndWait(destRegion, destServer);<a name="line.230"></a>
+<span class="sourceLineNo">231</span><a name="line.231"></a>
+<span class="sourceLineNo">232</span>    // delete the row<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    Delete del = new Delete(Bytes.toBytes("r1"));<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    htable.delete(del);<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    resultScanner = htable.getScanner(new Scan());<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    count = 0;<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    while (resultScanner.next() != null) {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      count++;<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    }<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    resultScanner.close();<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    assertEquals(0, count);<a name="line.241"></a>
+<span class="sourceLineNo">242</span><a name="line.242"></a>
+<span class="sourceLineNo">243</span>    // flush region and make major compaction<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    Region region =  destServer.getOnlineRegion(destRegion.getRegionInfo().getRegionName());<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    region.flush(true);<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    // wait to complete major compaction<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    for (Store store : region.getStores()) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      store.triggerMajorCompaction();<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    }<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    region.compact(true);<a name="line.250"></a>
+<span class="sourceLineNo">251</span><a name="line.251"></a>
+<span class="sourceLineNo">252</span>    // move region to origin regionserver<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    moveRegionAndWait(destRegion, originServer);<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    // abort the origin regionserver<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    originServer.abort("testing");<a name="line.255"></a>
+<span class="sourceLineNo">256</span><a name="line.256"></a>
+<span class="sourceLineNo">257</span>    // see what we get<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    Result result = htable.get(new Get(Bytes.toBytes("r1")));<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    if (result != null) {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      assertTrue("Row is deleted, but we get" + result.toString(),<a name="line.260"></a>
+<span class="sourceLineNo">261</span>          (result == null) || result.isEmpty());<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    }<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    resultScanner.close();<a name="line.263"></a>
+<span class="sourceLineNo">264</span>  }<a name="line.264"></a>
+<span class="sourceLineNo">265</span><a name="line.265"></a>
+<span class="sourceLineNo">266</span>  private void moveRegionAndWait(Region destRegion, HRegionServer destServer)<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      throws InterruptedException, MasterNotRunningException,<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      ZooKeeperConnectionException, IOException {<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    HMaster master = TEST_UTIL.getMiniHBaseCluster().getMaster();<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    TEST_UTIL.getHBaseAdmin().move(<a name="line.270"></a>
+<span class="sourceLineNo">271</span>        destRegion.getRegionInfo().getEncodedNameAsBytes(),<a name="line.271"></a>
+<span class="sourceLineNo">272</span>        Bytes.toBytes(destServer.getServerName().getServerName()));<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    while (true) {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      ServerName serverName = master.getAssignmentManager()<a name="line.274"></a>
+<span class="sourceLineNo">275</span>        .getRegionStates().getRegionServerOfRegion(destRegion.getRegionInfo());<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      if (serverName != null &amp;&amp; serverName.equals(destServer.getServerName())) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>        TEST_UTIL.assertRegionOnServer(<a name="line.277"></a>
+<span class="sourceLineNo">278</span>          destRegion.getRegionInfo(), serverName, 200);<a name="line.278"></a>
+<span class="sourceLineNo">279</span>        break;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      }<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      Thread.sleep(10);<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    }<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  }<a name="line.283"></a>
+<span class="sourceLineNo">284</span><a name="line.284"></a>
+<span class="sourceLineNo">285</span>  /**<a name="line.285"></a>
+<span class="sourceLineNo">286</span>   * Tests for hbase-2727.<a name="line.286"></a>
+<span class="sourceLineNo">287</span>   * @throws Exception<a name="line.287"></a>
+<span class="sourceLineNo">288</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-2727"&gt;HBASE-2727&lt;/a&gt;<a name="line.288"></a>
+<span class="sourceLineNo">289</span>   */<a name="line.289"></a>
+<span class="sourceLineNo">290</span>  @Test<a name="line.290"></a>
+<span class="sourceLineNo">291</span>  public void test2727() throws Exception {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    // Test being able to have &gt; 1 set of edits in the recovered.edits directory.<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    // Ensure edits are replayed properly.<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    final TableName tableName =<a name="line.294"></a>
+<span class="sourceLineNo">295</span>        TableName.valueOf("test2727");<a name="line.295"></a>
+<span class="sourceLineNo">296</span><a name="line.296"></a>
+<span class="sourceLineNo">297</span>    MultiVersionConcurrencyControl mvcc = new MultiVersionConcurrencyControl();<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    HRegionInfo hri = createBasic3FamilyHRegionInfo(tableName);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    Path basedir = FSUtils.getTableDir(hbaseRootDir, tableName);<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    deleteDir(basedir);<a name="line.300"></a>
+<span class="sourceLineNo">301</span><a name="line.301"></a>
+<span class="sourceLineNo">302</span>    HTableDescriptor htd = createBasic3FamilyHTD(tableName);<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    Region region2 = HBaseTestingUtility.createRegionAndWAL(hri, hbaseRootDir, this.conf, htd);<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    HBaseTestingUtility.closeRegionAndWAL(region2);<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    final byte [] rowName = tableName.getName();<a name="line.305"></a>
+<span class="sourceLineNo">306</span><a name="line.306"></a>
+<span class="sourceLineNo">307</span>    WAL wal1 = createWAL(this.conf);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    // Add 1k to each family.<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    final int countPerFamily = 1000;<a name="line.309"></a>
+<span class="sourceLineNo">310</span><a name="line.310"></a>
+<span class="sourceLineNo">311</span>    for (HColumnDescriptor hcd: htd.getFamilies()) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      addWALEdits(tableName, hri, rowName, hcd.getName(), countPerFamily, ee,<a name="line.312"></a>
+<span class="sourceLineNo">313</span>          wal1, htd, mvcc);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    wal1.shutdown();<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    runWALSplit(this.conf);<a name="line.316"></a>
+<span class="sourceLineNo">317</span><a name="line.317"></a>
+<span class="sourceLineNo">318</span>    WAL wal2 = createWAL(this.conf);<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    // Add 1k to each family.<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    for (HColumnDescriptor hcd: htd.getFamilies()) {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      addWALEdits(tableName, hri, rowName, hcd.getName(), countPerFamily,<a name="line.321"></a>
+<span class="sourceLineNo">322</span>          ee, wal2, htd, mvcc);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    }<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    wal2.shutdown();<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    runWALSplit(this.conf);<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>    WAL wal3 = createWAL(this.conf);<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    try {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      HRegion region = HRegion.openHRegion(this.conf, this.fs, hbaseRootDir, hri, htd, wal3);<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      long seqid = region.getOpenSeqNum();<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      // The regions opens with sequenceId as 1. With 6k edits, its sequence number reaches 6k + 1.<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      // When opened, this region would apply 6k edits, and increment the sequenceId by 1<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      assertTrue(seqid &gt; mvcc.getWritePoint());<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      assertEquals(seqid - 1, mvcc.getWritePoint());<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      LOG.debug("region.getOpenSeqNum(): " + region.getOpenSeqNum() + ", wal3.id: "<a name="line.335"></a>
+<span class="sourceLineNo">336</span>          + mvcc.getReadPoint());<a name="line.336"></a>
+<span class="sourceLineNo">337</span><a name="line.337"></a>
+<span class="sourceLineNo">338</span>      // TODO: Scan all.<a name="line.338"></a>
+<span class="sourceLineNo">339</span>      region.close();<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    } finally {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      wal3.close();<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><a name="line.344"></a>
+<span class="sourceLineNo">345</span>  /**<a name="line.345"></a>
+<span class="sourceLineNo">346</span>   * Test case of HRegion that is only made out of bulk loaded files.  Assert<a name="line.346"></a>
+<span class="sourceLineNo">347</span>   * that we don't 'crash'.<a name="line.347"></a>
+<span class="sourceLineNo">348</span>   * @throws IOException<a name="line.348"></a>
+<span class="sourceLineNo">349</span>   * @throws IllegalAccessException<a name="line.349"></a>
+<span class="sourceLineNo">350</span>   * @throws NoSuchFieldException<a name="line.350"></a>
+<span class="sourceLineNo">351</span>   * @throws IllegalArgumentException<a name="line.351"></a>
+<span class="sourceLineNo">352</span>   * @throws SecurityException<a name="line.352"></a>
+<span class="sourceLineNo">353</span>   */<a name="line.353"></a>
+<span class="sourceLineNo">354</span>  @Test<a name="line.354"></a>
+<span class="sourceLineNo">355</span>  public void testRegionMadeOfBulkLoadedFilesOnly()<a name="line.355"></a>
+<span class="sourceLineNo">356</span>  throws IOException, SecurityException, IllegalArgumentException,<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      NoSuchFieldException, IllegalAccessException, InterruptedException {<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    final TableName tableName =<a name="line.358"></a>
+<span class="sourceLineNo">359</span>        TableName.valueOf("testRegionMadeOfBulkLoadedFilesOnly");<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    final HRegionInfo hri = createBasic3FamilyHRegionInfo(tableName);<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    final Path basedir = new Path(this.hbaseRootDir, tableName.getNameAsString());<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    deleteDir(basedir);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    final HTableDescriptor htd = createBasic3FamilyHTD(tableName);<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    Region region2 = HBaseTestingUtility.createRegionAndWAL(hri, hbaseRootDir, this.conf, htd);<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    HBaseTestingUtility.closeRegionAndWAL(region2);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    WAL wal = createWAL(this.conf);<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    Region region = HRegion.openHRegion(hri, htd, wal, this.conf);<a name="line.367"></a>
+<span class="sourceLineNo">368</span><a name="line.368"></a>
+<span class="sourceLineNo">369</span>    byte [] family = htd.getFamilies().iterator().next().getName();<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    Path f =  new Path(basedir, "hfile");<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    HFileTestUtil.createHFile(this.conf, fs, f, family, family, Bytes.toBytes(""),<a name="line.371"></a>
+<span class="sourceLineNo">372</span>        Bytes.toBytes("z"), 10);<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    List &lt;Pair&lt;byte[],String&gt;&gt;  hfs= new ArrayList&lt;Pair&lt;byte[],String&gt;&gt;(1);<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    hfs.add(Pair.newPair(family, f.toString()));<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    region.bulkLoadHFiles(hfs, true, null);<a name="line.375"></a>
+<span class="sourceLineNo">376</span><a name="line.376"></a>
+<span class="sourceLineNo">377</span>    // Add an edit so something in the WAL<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    byte [] row = tableName.getName();<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    region.put((new Put(row)).addColumn(family, family, family));<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    wal.sync();<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    final int rowsInsertedCount = 11;<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span>    assertEquals(rowsInsertedCount, getScannedCount(region.getScanner(new Scan())));<a name="line.383"></a>
+<span class="sourceLineNo">384</span><a name="line.384"></a>
+<span class="sourceLineNo">385</span>    // Now 'crash' the region by stealing its wal<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    final Configuration newConf = HBaseConfiguration.create(this.conf);<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    User user = HBaseTestingUtility.getDifferentUser(newConf,<a name="line.387"></a>
+<span class="sourceLineNo">388</span>        tableName.getNameAsString());<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    user.runAs(new PrivilegedExceptionAction() {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>      @Override<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      public Object run() throws Exception {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>        runWALSplit(newConf);<a name="line.392"></a>
+<span class="sourceLineNo">393</span>        WAL wal2 = createWAL(newConf);<a name="line.393"></a>
+<span class="sourceLineNo">394</span><a name="line.394"></a>
+<span class="sourceLineNo">395</span>        HRegion region2 = HRegion.openHRegion(newConf, FileSystem.get(newConf),<a name="line.395"></a>
+<span class="sourceLineNo">396</span>          hbaseRootDir, hri, htd, wal2);<a name="line.396"></a>
+<span class="sourceLineNo">397</span>        long seqid2 = region2.getOpenSeqNum();<a name="line.397"></a>
+<span class="sourceLineNo">398</span>        assertTrue(seqid2 &gt; -1);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>        assertEquals(rowsInsertedCount, getScannedCount(region2.getScanner(new Scan())));<a name="line.399"></a>
+<span class="sourceLineNo">400</span><a name="line.400"></a>
+<span class="sourceLineNo">401</span>        // I can't close wal1.  Its been appropriated when we split.<a name="line.401"></a>
+<span class="sourceLineNo">402</span>        region2.close();<a name="line.402"></a>
+<span class="sourceLineNo">403</span>        wal2.close();<a name="line.403"></a>
+<span class="sourceLineNo">404</span>        return null;<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><a name="line.408"></a>
+<span class="sourceLineNo">409</span>  /**<a name="line.409"></a>
+<span class="sourceLineNo">410</span>   * HRegion test case that is made of a major compacted HFile (created with three bulk loaded<a name="line.410"></a>
+<span class="sourceLineNo">411</span>   * files) and an edit in the memstore.<a name="line.411"></a>
+<span class="sourceLineNo">412</span>   * This is for HBASE-10958 "[dataloss] Bulk loading with seqids can prevent some log entries<a name="line.412"></a>
+<span class="sourceLineNo">413</span>   * from being replayed"<a name="line.413"></a>
+<span class="sourceLineNo">414</span>   * @throws IOException<a name="line.414"></a>
+<span class="sourceLineNo">415</span>   * @throws IllegalAccessException<a name="line.415"></a>
+<span class="sourceLineNo">416</span>   * @throws NoSuchFieldException<a name="line.416"></a>
+<span class="sourceLineNo">417</span>   * @throws IllegalArgumentException<a name="line.417"></a>
+<span class="sourceLineNo">418</span>   * @throws SecurityException<a name="line.418"></a>
+<span class="sourceLineNo">419</span>   */<a name="line.419"></a>
+<span class="sourceLineNo">420</span>  @Test<a name="line.420"></a>
+<span class="sourceLineNo">421</span>  public void testCompactedBulkLoadedFiles()<a name="line.421"></a>
+<span class="sourceLineNo">422</span>      throws IOException, SecurityException, IllegalArgumentException,<a name="line.422"></a>
+<span class="sourceLineNo">423</span>      NoSuchFieldException, IllegalAccessException, InterruptedException {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>    final TableName tableName =<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        TableName.valueOf("testCompactedBulkLoadedFiles");<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    final HRegionInfo hri = createBasic3FamilyHRegionInfo(tableName);<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    final Path basedir = new Path(this.hbaseRootDir, tableName.getNameAsString());<a name="line.427"></a>
+<span class="sourceLineNo">428</span>    deleteDir(basedir);<a name="line.428"></a>
+<span class="sourceLineNo">429</span>    final HTableDescriptor htd = createBasic3FamilyHTD(tableName);<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    HRegion region2 = HBaseTestingUtility.createRegionAndWAL(hri, hbaseRootDir, this.conf, htd);<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    HBaseTestingUtility.closeRegionAndWAL(region2);<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    WAL wal = createWAL(this.conf);<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    HRegion region = HRegion.openHRegion(hri, htd, wal, this.conf);<a name="line.433"></a>
+<span class="sourceLineNo">434</span><a name="line.434"></a>
+<span class="sourceLineNo">435</span>    // Add an edit so something in the WAL<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    byte [] row = tableName.getName();<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    byte [] family = htd.getFamilies().iterator().next().getName();<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    region.put((new Put(row)).addColumn(family, family, family));<a name="line.438"></a>
+<span class="sourceLineNo">439</span>    wal.sync();<a name="line.439"></a>
+<span class="sourceLineNo">440</span><a name="line.440"></a>
+<span class="sourceLineNo">441</span>    List &lt;Pair&lt;byte[],String&gt;&gt;  hfs= new ArrayList&lt;Pair&lt;byte[],String&gt;&gt;(1);<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    for (int i = 0; i &lt; 3; i++) {<a name="line.442"></a>
+<span class="sourceLineNo">443</span>      Path f = new Path(basedir, "hfile"+i);<a name="line.443"></a>
+<span class="sourceLineNo">444</span>      HFileTestUtil.createHFile(this.conf, fs, f, family, family, Bytes.toBytes(i + "00"),<a name="line.444"></a>
+<span class="sourceLineNo">445</span>          Bytes.toBytes(i + "50"), 10);<a name="line.445"></a>
+<span class="sourceLineNo">446</span>      hfs.add(Pair.newPair(family, f.toString()));<a name="line.446"></a>
+<span class="sourceLineNo">447</span>    }<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    region.bulkLoadHFiles(hfs, true, null);<a name="line.448"></a>
+<span class="sourceLineNo">449</span>    final int rowsInsertedCount = 31;<a name="line.449"></a>
+<span class="sourceLineNo">450</span>    assertEquals(rowsInsertedCount, getScannedCount(region.getScanner(new Scan())));<a name="line.450"></a>
+<span class="sourceLineNo">451</span><a name="line.451"></a>
+<span class="sourceLineNo">452</span>    // major compact to turn all the bulk loaded files into one normal file<a name="line.452"></a>
+<span class="sourceLineNo">453</span>    region.compact(true);<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    assertEquals(rowsInsertedCount, getScannedCount(region.getScanner(new Scan())));<a name="line.454"></a>
+<span class="sourceLineNo">455</span><a name="line.455"></a>
+<span class="sourceLineNo">456</span>    // Now 'crash' the region by stealing its wal<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    final Configuration newConf = HBaseConfiguration.create(this.conf);<a name="line.457"></a>
+<span class="sourceLineNo">458</span>    User user = HBaseTestingUtility.getDifferentUser(newConf,<a name="line.458"></a>
+<span class="sourceLineNo">459</span>        tableName.getNameAsString());<a name="line.459"></a>
+<span class="sourceLineNo">460</span>    user.runAs(new PrivilegedExceptionAction() {<a name="line.460"></a>
+<span class="sourceLineNo">461</span>      @Override<a name="line.461"></a>
+<span class="sourceLineNo">462</span>      public Object run() throws Exception {<a name="line.462"></a>
+<span class="sourceLineNo">463</span>        runWALSplit(newConf);<a name="line.463"></a>
+<span class="sourceLineNo">464</span>        WAL wal2 = createWAL(newConf);<a name="line.464"></a>
+<span class="sourceLineNo">465</span><a name="line.465"></a>
+<span class="sourceLineNo">466</span>        HRegion region2 = HRegion.openHRegion(newConf, FileSystem.get(newConf),<a name="line.466"></a>
+<span class="sourceLineNo">467</span>            hbaseRootDir, hri, htd, wal2);<a name="line.467"></a>
+<span class="sourceLineNo">468</span>        long seqid2 = region2.getOpenSeqNum();<a name="line.468"></a>
+<span class="sourceLineNo">469</span>        assertTrue(seqid2 &gt; -1);<a name="line.469"></a>
+<span class="sourceLineNo">470</span>        assertEquals(rowsInsertedCount, getScannedCount(region2.getScanner(new Scan())));<a name="line.470"></a>
+<span class="sourceLineNo">471</span><a name="line.471"></a>
+<span class="sourceLineNo">472</span>        // I can't close wal1.  Its been appro

<TRUNCATED>

[20/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html
index 0597160..b444f46 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html
@@ -184,2145 +184,2183 @@
 <span class="sourceLineNo">176</span>  // Min batch size when replay WAL edits<a name="line.176"></a>
 <span class="sourceLineNo">177</span>  private final int minBatchSize;<a name="line.177"></a>
 <span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span>  WALSplitter(final WALFactory factory, Configuration conf, Path rootDir,<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      FileSystem fs, LastSequenceId idChecker,<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      CoordinatedStateManager csm, RecoveryMode mode) {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    this.conf = HBaseConfiguration.create(conf);<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    String codecClassName = conf<a name="line.183"></a>
-<span class="sourceLineNo">184</span>        .get(WALCellCodec.WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    this.conf.set(HConstants.RPC_CODEC_CONF_KEY, codecClassName);<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    this.rootDir = rootDir;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    this.fs = fs;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    this.sequenceIdChecker = idChecker;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    this.csm = (BaseCoordinatedStateManager)csm;<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    this.walFactory = factory;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    this.controller = new PipelineController();<a name="line.191"></a>
-<span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span>    entryBuffers = new EntryBuffers(controller,<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        this.conf.getInt("hbase.regionserver.hlog.splitlog.buffersize",<a name="line.194"></a>
-<span class="sourceLineNo">195</span>            128*1024*1024));<a name="line.195"></a>
+<span class="sourceLineNo">179</span>  // the file being split currently<a name="line.179"></a>
+<span class="sourceLineNo">180</span>  private FileStatus fileBeingSplit;<a name="line.180"></a>
+<span class="sourceLineNo">181</span><a name="line.181"></a>
+<span class="sourceLineNo">182</span>  @VisibleForTesting<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  WALSplitter(final WALFactory factory, Configuration conf, Path rootDir,<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      FileSystem fs, LastSequenceId idChecker,<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      CoordinatedStateManager csm, RecoveryMode mode) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    this.conf = HBaseConfiguration.create(conf);<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    String codecClassName = conf<a name="line.187"></a>
+<span class="sourceLineNo">188</span>        .get(WALCellCodec.WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    this.conf.set(HConstants.RPC_CODEC_CONF_KEY, codecClassName);<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    this.rootDir = rootDir;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    this.fs = fs;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    this.sequenceIdChecker = idChecker;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    this.csm = (BaseCoordinatedStateManager)csm;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    this.walFactory = factory;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    this.controller = new PipelineController();<a name="line.195"></a>
 <span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span>    // a larger minBatchSize may slow down recovery because replay writer has to wait for<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    // enough edits before replaying them<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    this.minBatchSize = this.conf.getInt("hbase.regionserver.wal.logreplay.batch.size", 64);<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    this.distributedLogReplay = (RecoveryMode.LOG_REPLAY == mode);<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>    this.numWriterThreads = this.conf.getInt("hbase.regionserver.hlog.splitlog.writer.threads", 3);<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    if (csm != null &amp;&amp; this.distributedLogReplay) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      outputSink = new LogReplayOutputSink(controller, entryBuffers, numWriterThreads);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    } else {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      if (this.distributedLogReplay) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        LOG.info("ZooKeeperWatcher is passed in as NULL so disable distrubitedLogRepaly.");<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      }<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      this.distributedLogReplay = false;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      outputSink = new LogRecoveredEditsOutputSink(controller, entryBuffers, numWriterThreads);<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>  }<a name="line.213"></a>
-<span class="sourceLineNo">214</span><a name="line.214"></a>
-<span class="sourceLineNo">215</span>  /**<a name="line.215"></a>
-<span class="sourceLineNo">216</span>   * Splits a WAL file into region's recovered-edits directory.<a name="line.216"></a>
-<span class="sourceLineNo">217</span>   * This is the main entry point for distributed log splitting from SplitLogWorker.<a name="line.217"></a>
-<span class="sourceLineNo">218</span>   * &lt;p&gt;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>   * If the log file has N regions then N recovered.edits files will be produced.<a name="line.219"></a>
-<span class="sourceLineNo">220</span>   * &lt;p&gt;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   * @param rootDir<a name="line.221"></a>
-<span class="sourceLineNo">222</span>   * @param logfile<a name="line.222"></a>
-<span class="sourceLineNo">223</span>   * @param fs<a name="line.223"></a>
-<span class="sourceLineNo">224</span>   * @param conf<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   * @param reporter<a name="line.225"></a>
-<span class="sourceLineNo">226</span>   * @param idChecker<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   * @param cp coordination state manager<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   * @return false if it is interrupted by the progress-able.<a name="line.228"></a>
-<span class="sourceLineNo">229</span>   * @throws IOException<a name="line.229"></a>
-<span class="sourceLineNo">230</span>   */<a name="line.230"></a>
-<span class="sourceLineNo">231</span>  public static boolean splitLogFile(Path rootDir, FileStatus logfile, FileSystem fs,<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      Configuration conf, CancelableProgressable reporter, LastSequenceId idChecker,<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      CoordinatedStateManager cp, RecoveryMode mode, final WALFactory factory) throws IOException {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, idChecker, cp, mode);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    return s.splitLogFile(logfile, reporter);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  }<a name="line.236"></a>
-<span class="sourceLineNo">237</span><a name="line.237"></a>
-<span class="sourceLineNo">238</span>  // A wrapper to split one log folder using the method used by distributed<a name="line.238"></a>
-<span class="sourceLineNo">239</span>  // log splitting. Used by tools and unit tests. It should be package private.<a name="line.239"></a>
-<span class="sourceLineNo">240</span>  // It is public only because TestWALObserver is in a different package,<a name="line.240"></a>
-<span class="sourceLineNo">241</span>  // which uses this method to do log splitting.<a name="line.241"></a>
-<span class="sourceLineNo">242</span>  @VisibleForTesting<a name="line.242"></a>
-<span class="sourceLineNo">243</span>  public static List&lt;Path&gt; split(Path rootDir, Path logDir, Path oldLogDir,<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      FileSystem fs, Configuration conf, final WALFactory factory) throws IOException {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    final FileStatus[] logfiles = SplitLogManager.getFileList(conf,<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        Collections.singletonList(logDir), null);<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    List&lt;Path&gt; splits = new ArrayList&lt;Path&gt;();<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    if (logfiles != null &amp;&amp; logfiles.length &gt; 0) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      for (FileStatus logfile: logfiles) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, null, null,<a name="line.250"></a>
-<span class="sourceLineNo">251</span>            RecoveryMode.LOG_SPLITTING);<a name="line.251"></a>
-<span class="sourceLineNo">252</span>        if (s.splitLogFile(logfile, null)) {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>          finishSplitLogFile(rootDir, oldLogDir, logfile.getPath(), conf);<a name="line.253"></a>
-<span class="sourceLineNo">254</span>          if (s.outputSink.splits != null) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>            splits.addAll(s.outputSink.splits);<a name="line.255"></a>
-<span class="sourceLineNo">256</span>          }<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        }<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      }<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    }<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    if (!fs.delete(logDir, true)) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      throw new IOException("Unable to delete src dir: " + logDir);<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    return splits;<a name="line.263"></a>
-<span class="sourceLineNo">264</span>  }<a name="line.264"></a>
-<span class="sourceLineNo">265</span><a name="line.265"></a>
-<span class="sourceLineNo">266</span>  /**<a name="line.266"></a>
-<span class="sourceLineNo">267</span>   * log splitting implementation, splits one log file.<a name="line.267"></a>
-<span class="sourceLineNo">268</span>   * @param logfile should be an actual log file.<a name="line.268"></a>
-<span class="sourceLineNo">269</span>   */<a name="line.269"></a>
-<span class="sourceLineNo">270</span>  boolean splitLogFile(FileStatus logfile, CancelableProgressable reporter) throws IOException {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    Preconditions.checkState(status == null);<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    Preconditions.checkArgument(logfile.isFile(),<a name="line.272"></a>
-<span class="sourceLineNo">273</span>        "passed in file status is for something other than a regular file.");<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    boolean isCorrupted = false;<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    boolean skipErrors = conf.getBoolean("hbase.hlog.split.skip.errors",<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      SPLIT_SKIP_ERRORS_DEFAULT);<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    int interval = conf.getInt("hbase.splitlog.report.interval.loglines", 1024);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    Path logPath = logfile.getPath();<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    boolean outputSinkStarted = false;<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    boolean progress_failed = false;<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    int editsCount = 0;<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    int editsSkipped = 0;<a name="line.282"></a>
-<span class="sourceLineNo">283</span><a name="line.283"></a>
-<span class="sourceLineNo">284</span>    status =<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        TaskMonitor.get().createStatus(<a name="line.285"></a>
-<span class="sourceLineNo">286</span>          "Splitting log file " + logfile.getPath() + "into a temporary staging area.");<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    Reader in = null;<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    try {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      long logLength = logfile.getLen();<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      LOG.info("Splitting wal: " + logPath + ", length=" + logLength);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      LOG.info("DistributedLogReplay = " + this.distributedLogReplay);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      status.setStatus("Opening log file");<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>        progress_failed = true;<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        return false;<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      }<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      try {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        in = getReader(logfile, skipErrors, reporter);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      } catch (CorruptedLogFileException e) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>        LOG.warn("Could not get reader, corrupted log file " + logPath, e);<a name="line.300"></a>
-<span class="sourceLineNo">301</span>        ZKSplitLog.markCorrupted(rootDir, logfile.getPath().getName(), fs);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>        isCorrupted = true;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      }<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      if (in == null) {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>        LOG.warn("Nothing to split in log file " + logPath);<a name="line.305"></a>
-<span class="sourceLineNo">306</span>        return true;<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      }<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      int numOpenedFilesBeforeReporting = conf.getInt("hbase.splitlog.report.openedfiles", 3);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      int numOpenedFilesLastCheck = 0;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      outputSink.setReporter(reporter);<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      outputSink.startWriterThreads();<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      outputSinkStarted = true;<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      Entry entry;<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      Long lastFlushedSequenceId = -1L;<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      ServerName serverName = DefaultWALProvider.getServerNameFromWALDirectoryName(logPath);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      failedServerName = (serverName == null) ? "" : serverName.getServerName();<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      while ((entry = getNextLogLine(in, logPath, skipErrors)) != null) {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>        byte[] region = entry.getKey().getEncodedRegionName();<a name="line.318"></a>
-<span class="sourceLineNo">319</span>        String encodedRegionNameAsStr = Bytes.toString(region);<a name="line.319"></a>
-<span class="sourceLineNo">320</span>        lastFlushedSequenceId = lastFlushedSequenceIds.get(encodedRegionNameAsStr);<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        if (lastFlushedSequenceId == null) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>          if (this.distributedLogReplay) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>            RegionStoreSequenceIds ids =<a name="line.323"></a>
-<span class="sourceLineNo">324</span>                csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.324"></a>
-<span class="sourceLineNo">325</span>                  encodedRegionNameAsStr);<a name="line.325"></a>
-<span class="sourceLineNo">326</span>            if (ids != null) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>              lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.327"></a>
-<span class="sourceLineNo">328</span>              if (LOG.isDebugEnabled()) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>                LOG.debug("DLR Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.329"></a>
-<span class="sourceLineNo">330</span>                  TextFormat.shortDebugString(ids));<a name="line.330"></a>
-<span class="sourceLineNo">331</span>              }<a name="line.331"></a>
-<span class="sourceLineNo">332</span>            }<a name="line.332"></a>
-<span class="sourceLineNo">333</span>          } else if (sequenceIdChecker != null) {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>            RegionStoreSequenceIds ids = sequenceIdChecker.getLastSequenceId(region);<a name="line.334"></a>
-<span class="sourceLineNo">335</span>            Map&lt;byte[], Long&gt; maxSeqIdInStores = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.335"></a>
-<span class="sourceLineNo">336</span>            for (StoreSequenceId storeSeqId : ids.getStoreSequenceIdList()) {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>              maxSeqIdInStores.put(storeSeqId.getFamilyName().toByteArray(),<a name="line.337"></a>
-<span class="sourceLineNo">338</span>                storeSeqId.getSequenceId());<a name="line.338"></a>
-<span class="sourceLineNo">339</span>            }<a name="line.339"></a>
-<span class="sourceLineNo">340</span>            regionMaxSeqIdInStores.put(encodedRegionNameAsStr, maxSeqIdInStores);<a name="line.340"></a>
-<span class="sourceLineNo">341</span>            lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.341"></a>
-<span class="sourceLineNo">342</span>            if (LOG.isDebugEnabled()) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>              LOG.debug("DLS Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.343"></a>
-<span class="sourceLineNo">344</span>                  TextFormat.shortDebugString(ids));<a name="line.344"></a>
+<span class="sourceLineNo">197</span>    entryBuffers = new EntryBuffers(controller,<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        this.conf.getInt("hbase.regionserver.hlog.splitlog.buffersize",<a name="line.198"></a>
+<span class="sourceLineNo">199</span>            128*1024*1024));<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>    // a larger minBatchSize may slow down recovery because replay writer has to wait for<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    // enough edits before replaying them<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    this.minBatchSize = this.conf.getInt("hbase.regionserver.wal.logreplay.batch.size", 64);<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    this.distributedLogReplay = (RecoveryMode.LOG_REPLAY == mode);<a name="line.204"></a>
+<span class="sourceLineNo">205</span><a name="line.205"></a>
+<span class="sourceLineNo">206</span>    this.numWriterThreads = this.conf.getInt("hbase.regionserver.hlog.splitlog.writer.threads", 3);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    if (csm != null &amp;&amp; this.distributedLogReplay) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      outputSink = new LogReplayOutputSink(controller, entryBuffers, numWriterThreads);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    } else {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      if (this.distributedLogReplay) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>        LOG.info("ZooKeeperWatcher is passed in as NULL so disable distrubitedLogRepaly.");<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      }<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      this.distributedLogReplay = false;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      outputSink = new LogRecoveredEditsOutputSink(controller, entryBuffers, numWriterThreads);<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    }<a name="line.215"></a>
+<span class="sourceLineNo">216</span><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>
+<span class="sourceLineNo">220</span>   * Splits a WAL file into region's recovered-edits directory.<a name="line.220"></a>
+<span class="sourceLineNo">221</span>   * This is the main entry point for distributed log splitting from SplitLogWorker.<a name="line.221"></a>
+<span class="sourceLineNo">222</span>   * &lt;p&gt;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>   * If the log file has N regions then N recovered.edits files will be produced.<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   * &lt;p&gt;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   * @param rootDir<a name="line.225"></a>
+<span class="sourceLineNo">226</span>   * @param logfile<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   * @param fs<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   * @param conf<a name="line.228"></a>
+<span class="sourceLineNo">229</span>   * @param reporter<a name="line.229"></a>
+<span class="sourceLineNo">230</span>   * @param idChecker<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   * @param cp coordination state manager<a name="line.231"></a>
+<span class="sourceLineNo">232</span>   * @return false if it is interrupted by the progress-able.<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   * @throws IOException<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   */<a name="line.234"></a>
+<span class="sourceLineNo">235</span>  public static boolean splitLogFile(Path rootDir, FileStatus logfile, FileSystem fs,<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      Configuration conf, CancelableProgressable reporter, LastSequenceId idChecker,<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      CoordinatedStateManager cp, RecoveryMode mode, final WALFactory factory) throws IOException {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, idChecker, cp, mode);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    return s.splitLogFile(logfile, reporter);<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>  // A wrapper to split one log folder using the method used by distributed<a name="line.242"></a>
+<span class="sourceLineNo">243</span>  // log splitting. Used by tools and unit tests. It should be package private.<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  // It is public only because TestWALObserver is in a different package,<a name="line.244"></a>
+<span class="sourceLineNo">245</span>  // which uses this method to do log splitting.<a name="line.245"></a>
+<span class="sourceLineNo">246</span>  @VisibleForTesting<a name="line.246"></a>
+<span class="sourceLineNo">247</span>  public static List&lt;Path&gt; split(Path rootDir, Path logDir, Path oldLogDir,<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      FileSystem fs, Configuration conf, final WALFactory factory) throws IOException {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    final FileStatus[] logfiles = SplitLogManager.getFileList(conf,<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        Collections.singletonList(logDir), null);<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    List&lt;Path&gt; splits = new ArrayList&lt;Path&gt;();<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    if (logfiles != null &amp;&amp; logfiles.length &gt; 0) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      for (FileStatus logfile: logfiles) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>        WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, null, null,<a name="line.254"></a>
+<span class="sourceLineNo">255</span>            RecoveryMode.LOG_SPLITTING);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>        if (s.splitLogFile(logfile, null)) {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>          finishSplitLogFile(rootDir, oldLogDir, logfile.getPath(), conf);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>          if (s.outputSink.splits != null) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>            splits.addAll(s.outputSink.splits);<a name="line.259"></a>
+<span class="sourceLineNo">260</span>          }<a name="line.260"></a>
+<span class="sourceLineNo">261</span>        }<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      }<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    }<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    if (!fs.delete(logDir, true)) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      throw new IOException("Unable to delete src dir: " + logDir);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    }<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    return splits;<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  }<a name="line.268"></a>
+<span class="sourceLineNo">269</span><a name="line.269"></a>
+<span class="sourceLineNo">270</span>  /**<a name="line.270"></a>
+<span class="sourceLineNo">271</span>   * log splitting implementation, splits one log file.<a name="line.271"></a>
+<span class="sourceLineNo">272</span>   * @param logfile should be an actual log file.<a name="line.272"></a>
+<span class="sourceLineNo">273</span>   */<a name="line.273"></a>
+<span class="sourceLineNo">274</span>  @VisibleForTesting<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  boolean splitLogFile(FileStatus logfile, CancelableProgressable reporter) throws IOException {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    Preconditions.checkState(status == null);<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    Preconditions.checkArgument(logfile.isFile(),<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        "passed in file status is for something other than a regular file.");<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    boolean isCorrupted = false;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    boolean skipErrors = conf.getBoolean("hbase.hlog.split.skip.errors",<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      SPLIT_SKIP_ERRORS_DEFAULT);<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    int interval = conf.getInt("hbase.splitlog.report.interval.loglines", 1024);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    Path logPath = logfile.getPath();<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    boolean outputSinkStarted = false;<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    boolean progress_failed = false;<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    int editsCount = 0;<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    int editsSkipped = 0;<a name="line.287"></a>
+<span class="sourceLineNo">288</span><a name="line.288"></a>
+<span class="sourceLineNo">289</span>    status =<a name="line.289"></a>
+<span class="sourceLineNo">290</span>        TaskMonitor.get().createStatus(<a name="line.290"></a>
+<span class="sourceLineNo">291</span>          "Splitting log file " + logfile.getPath() + "into a temporary staging area.");<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    Reader in = null;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    this.fileBeingSplit = logfile;<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    try {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      long logLength = logfile.getLen();<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      LOG.info("Splitting wal: " + logPath + ", length=" + logLength);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      LOG.info("DistributedLogReplay = " + this.distributedLogReplay);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      status.setStatus("Opening log file");<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>        progress_failed = true;<a name="line.300"></a>
+<span class="sourceLineNo">301</span>        return false;<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      }<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      try {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>        in = getReader(logfile, skipErrors, reporter);<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      } catch (CorruptedLogFileException e) {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>        LOG.warn("Could not get reader, corrupted log file " + logPath, e);<a name="line.306"></a>
+<span class="sourceLineNo">307</span>        ZKSplitLog.markCorrupted(rootDir, logfile.getPath().getName(), fs);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>        isCorrupted = true;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      }<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      if (in == null) {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        LOG.warn("Nothing to split in log file " + logPath);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        return true;<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      }<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      int numOpenedFilesBeforeReporting = conf.getInt("hbase.splitlog.report.openedfiles", 3);<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      int numOpenedFilesLastCheck = 0;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      outputSink.setReporter(reporter);<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      outputSink.startWriterThreads();<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      outputSinkStarted = true;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      Entry entry;<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      Long lastFlushedSequenceId = -1L;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      ServerName serverName = DefaultWALProvider.getServerNameFromWALDirectoryName(logPath);<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      failedServerName = (serverName == null) ? "" : serverName.getServerName();<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      while ((entry = getNextLogLine(in, logPath, skipErrors)) != null) {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>        byte[] region = entry.getKey().getEncodedRegionName();<a name="line.324"></a>
+<span class="sourceLineNo">325</span>        String encodedRegionNameAsStr = Bytes.toString(region);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>        lastFlushedSequenceId = lastFlushedSequenceIds.get(encodedRegionNameAsStr);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>        if (lastFlushedSequenceId == null) {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>          if (this.distributedLogReplay) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>            RegionStoreSequenceIds ids =<a name="line.329"></a>
+<span class="sourceLineNo">330</span>                csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.330"></a>
+<span class="sourceLineNo">331</span>                  encodedRegionNameAsStr);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>            if (ids != null) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span>              lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.333"></a>
+<span class="sourceLineNo">334</span>              if (LOG.isDebugEnabled()) {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>                LOG.debug("DLR Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.335"></a>
+<span class="sourceLineNo">336</span>                  TextFormat.shortDebugString(ids));<a name="line.336"></a>
+<span class="sourceLineNo">337</span>              }<a name="line.337"></a>
+<span class="sourceLineNo">338</span>            }<a name="line.338"></a>
+<span class="sourceLineNo">339</span>          } else if (sequenceIdChecker != null) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>            RegionStoreSequenceIds ids = sequenceIdChecker.getLastSequenceId(region);<a name="line.340"></a>
+<span class="sourceLineNo">341</span>            Map&lt;byte[], Long&gt; maxSeqIdInStores = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.341"></a>
+<span class="sourceLineNo">342</span>            for (StoreSequenceId storeSeqId : ids.getStoreSequenceIdList()) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>              maxSeqIdInStores.put(storeSeqId.getFamilyName().toByteArray(),<a name="line.343"></a>
+<span class="sourceLineNo">344</span>                storeSeqId.getSequenceId());<a name="line.344"></a>
 <span class="sourceLineNo">345</span>            }<a name="line.345"></a>
-<span class="sourceLineNo">346</span>          }<a name="line.346"></a>
-<span class="sourceLineNo">347</span>          if (lastFlushedSequenceId == null) {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>            lastFlushedSequenceId = -1L;<a name="line.348"></a>
-<span class="sourceLineNo">349</span>          }<a name="line.349"></a>
-<span class="sourceLineNo">350</span>          lastFlushedSequenceIds.put(encodedRegionNameAsStr, lastFlushedSequenceId);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        }<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        if (lastFlushedSequenceId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>          editsSkipped++;<a name="line.353"></a>
-<span class="sourceLineNo">354</span>          continue;<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        }<a name="line.355"></a>
-<span class="sourceLineNo">356</span>        entryBuffers.appendEntry(entry);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        editsCount++;<a name="line.357"></a>
-<span class="sourceLineNo">358</span>        int moreWritersFromLastCheck = this.getNumOpenWriters() - numOpenedFilesLastCheck;<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        // If sufficient edits have passed, check if we should report progress.<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        if (editsCount % interval == 0<a name="line.360"></a>
-<span class="sourceLineNo">361</span>            || moreWritersFromLastCheck &gt; numOpenedFilesBeforeReporting) {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>          numOpenedFilesLastCheck = this.getNumOpenWriters();<a name="line.362"></a>
-<span class="sourceLineNo">363</span>          String countsStr = (editsCount - (editsSkipped + outputSink.getSkippedEdits()))<a name="line.363"></a>
-<span class="sourceLineNo">364</span>              + " edits, skipped " + editsSkipped + " edits.";<a name="line.364"></a>
-<span class="sourceLineNo">365</span>          status.setStatus("Split " + countsStr);<a name="line.365"></a>
-<span class="sourceLineNo">366</span>          if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>            progress_failed = true;<a name="line.367"></a>
-<span class="sourceLineNo">368</span>            return false;<a name="line.368"></a>
-<span class="sourceLineNo">369</span>          }<a name="line.369"></a>
-<span class="sourceLineNo">370</span>        }<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      }<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    } catch (InterruptedException ie) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      IOException iie = new InterruptedIOException();<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      iie.initCause(ie);<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      throw iie;<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    } catch (CorruptedLogFileException e) {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      LOG.warn("Could not parse, corrupted log file " + logPath, e);<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      csm.getSplitLogWorkerCoordination().markCorrupted(rootDir,<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        logfile.getPath().getName(), fs);<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      isCorrupted = true;<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    } catch (IOException e) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      throw e;<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    } finally {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      LOG.debug("Finishing writing output logs and closing down.");<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      try {<a name="line.386"></a>
-<span class="sourceLineNo">387</span>        if (null != in) {<a name="line.387"></a>
-<span class="sourceLineNo">388</span>          in.close();<a name="line.388"></a>
-<span class="sourceLineNo">389</span>        }<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      } catch (IOException exception) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        LOG.warn("Could not close wal reader: " + exception.getMessage());<a name="line.391"></a>
-<span class="sourceLineNo">392</span>        LOG.debug("exception details", exception);<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      }<a name="line.393"></a>
-<span class="sourceLineNo">394</span>      try {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        if (outputSinkStarted) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>          // Set progress_failed to true as the immediate following statement will reset its value<a name="line.396"></a>
-<span class="sourceLineNo">397</span>          // when finishWritingAndClose() throws exception, progress_failed has the right value<a name="line.397"></a>
-<span class="sourceLineNo">398</span>          progress_failed = true;<a name="line.398"></a>
-<span class="sourceLineNo">399</span>          progress_failed = outputSink.finishWritingAndClose() == null;<a name="line.399"></a>
-<span class="sourceLineNo">400</span>        }<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      } finally {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        String msg =<a name="line.402"></a>
-<span class="sourceLineNo">403</span>            "Processed " + editsCount + " edits across " + outputSink.getNumberOfRecoveredRegions()<a name="line.403"></a>
-<span class="sourceLineNo">404</span>                + " regions; edits skipped=" + editsSkipped + "; log file=" + logPath +<a name="line.404"></a>
-<span class="sourceLineNo">405</span>                ", length=" + logfile.getLen() + // See if length got updated post lease recovery<a name="line.405"></a>
-<span class="sourceLineNo">406</span>                ", corrupted=" + isCorrupted + ", progress failed=" + progress_failed;<a name="line.406"></a>
-<span class="sourceLineNo">407</span>        LOG.info(msg);<a name="line.407"></a>
-<span class="sourceLineNo">408</span>        status.markComplete(msg);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      }<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    }<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    return !progress_failed;<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>   * Completes the work done by splitLogFile by archiving logs<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   * &lt;p&gt;<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * It is invoked by SplitLogManager once it knows that one of the<a name="line.417"></a>
-<span class="sourceLineNo">418</span>   * SplitLogWorkers have completed the splitLogFile() part. If the master<a name="line.418"></a>
-<span class="sourceLineNo">419</span>   * crashes then this function might get called multiple times.<a name="line.419"></a>
-<span class="sourceLineNo">420</span>   * &lt;p&gt;<a name="line.420"></a>
-<span class="sourceLineNo">421</span>   * @param logfile<a name="line.421"></a>
-<span class="sourceLineNo">422</span>   * @param conf<a name="line.422"></a>
-<span class="sourceLineNo">423</span>   * @throws IOException<a name="line.423"></a>
-<span class="sourceLineNo">424</span>   */<a name="line.424"></a>
-<span class="sourceLineNo">425</span>  public static void finishSplitLogFile(String logfile,<a name="line.425"></a>
-<span class="sourceLineNo">426</span>      Configuration conf)  throws IOException {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    Path rootdir = FSUtils.getRootDir(conf);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    Path oldLogDir = new Path(rootdir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    Path logPath;<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    if (FSUtils.isStartingWithPath(rootdir, logfile)) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      logPath = new Path(logfile);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    } else {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      logPath = new Path(rootdir, logfile);<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    }<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    finishSplitLogFile(rootdir, oldLogDir, logPath, conf);<a name="line.435"></a>
-<span class="sourceLineNo">436</span>  }<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>  static void finishSplitLogFile(Path rootdir, Path oldLogDir,<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      Path logPath, Configuration conf) throws IOException {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    List&lt;Path&gt; processedLogs = new ArrayList&lt;Path&gt;();<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    List&lt;Path&gt; corruptedLogs = new ArrayList&lt;Path&gt;();<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    FileSystem fs;<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    fs = rootdir.getFileSystem(conf);<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    if (ZKSplitLog.isCorrupted(rootdir, logPath.getName(), fs)) {<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      corruptedLogs.add(logPath);<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    } else {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      processedLogs.add(logPath);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    }<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    archiveLogs(corruptedLogs, processedLogs, oldLogDir, fs, conf);<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    Path stagingDir = ZKSplitLog.getSplitLogDir(rootdir, logPath.getName());<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    fs.delete(stagingDir, true);<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  }<a name="line.452"></a>
-<span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span>  /**<a name="line.454"></a>
-<span class="sourceLineNo">455</span>   * Moves processed logs to a oldLogDir after successful processing Moves<a name="line.455"></a>
-<span class="sourceLineNo">456</span>   * corrupted logs (any log that couldn't be successfully parsed to corruptDir<a name="line.456"></a>
-<span class="sourceLineNo">457</span>   * (.corrupt) for later investigation<a name="line.457"></a>
-<span class="sourceLineNo">458</span>   *<a name="line.458"></a>
-<span class="sourceLineNo">459</span>   * @param corruptedLogs<a name="line.459"></a>
-<span class="sourceLineNo">460</span>   * @param processedLogs<a name="line.460"></a>
-<span class="sourceLineNo">461</span>   * @param oldLogDir<a name="line.461"></a>
-<span class="sourceLineNo">462</span>   * @param fs<a name="line.462"></a>
-<span class="sourceLineNo">463</span>   * @param conf<a name="line.463"></a>
-<span class="sourceLineNo">464</span>   * @throws IOException<a name="line.464"></a>
-<span class="sourceLineNo">465</span>   */<a name="line.465"></a>
-<span class="sourceLineNo">466</span>  private static void archiveLogs(<a name="line.466"></a>
-<span class="sourceLineNo">467</span>      final List&lt;Path&gt; corruptedLogs,<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      final List&lt;Path&gt; processedLogs, final Path oldLogDir,<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      final FileSystem fs, final Configuration conf) throws IOException {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    final Path corruptDir = new Path(FSUtils.getRootDir(conf), conf.get(<a name="line.470"></a>
-<span class="sourceLineNo">471</span>        "hbase.regionserver.hlog.splitlog.corrupt.dir",  HConstants.CORRUPT_DIR_NAME));<a name="line.471"></a>
-<span class="sourceLineNo">472</span><a name="line.472"></a>
-<span class="sourceLineNo">473</span>    if (!fs.mkdirs(corruptDir)) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      LOG.info("Unable to mkdir " + corruptDir);<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    }<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    fs.mkdirs(oldLogDir);<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>    // this method can get restarted or called multiple times for archiving<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    // the same log files.<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    for (Path corrupted : corruptedLogs) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      Path p = new Path(corruptDir, corrupted.getName());<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      if (fs.exists(corrupted)) {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        if (!fs.rename(corrupted, p)) {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>          LOG.warn("Unable to move corrupted log " + corrupted + " to " + p);<a name="line.484"></a>
-<span class="sourceLineNo">485</span>        } else {<a name="line.485"></a>
-<span class="sourceLineNo">486</span>          LOG.warn("Moved corrupted log " + corrupted + " to " + p);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>        }<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      }<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    }<a name="line.489"></a>
-<span class="sourceLineNo">490</span><a name="line.490"></a>
-<span class="sourceLineNo">491</span>    for (Path p : processedLogs) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      Path newPath = FSHLog.getWALArchivePath(oldLogDir, p);<a name="line.492"></a>
-<span class="sourceLineNo">493</span>      if (fs.exists(p)) {<a name="line.493"></a>
-<span class="sourceLineNo">494</span>        if (!FSUtils.renameAndSetModifyTime(fs, p, newPath)) {<a name="line.494"></a>
-<span class="sourceLineNo">495</span>          LOG.warn("Unable to move  " + p + " to " + newPath);<a name="line.495"></a>
-<span class="sourceLineNo">496</span>        } else {<a name="line.496"></a>
-<span class="sourceLineNo">497</span>          LOG.info("Archived processed log " + p + " to " + newPath);<a name="line.497"></a>
-<span class="sourceLineNo">498</span>        }<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      }<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><a name="line.502"></a>
-<span class="sourceLineNo">503</span>  /**<a name="line.503"></a>
-<span class="sourceLineNo">504</span>   * Path to a file under RECOVERED_EDITS_DIR directory of the region found in<a name="line.504"></a>
-<span class="sourceLineNo">505</span>   * &lt;code&gt;logEntry&lt;/code&gt; named for the sequenceid in the passed<a name="line.505"></a>
-<span class="sourceLineNo">506</span>   * &lt;code&gt;logEntry&lt;/code&gt;: e.g. /hbase/some_table/2323432434/recovered.edits/2332.<a name="line.506"></a>
-<span class="sourceLineNo">507</span>   * This method also ensures existence of RECOVERED_EDITS_DIR under the region<a name="line.507"></a>
-<span class="sourceLineNo">508</span>   * creating it if necessary.<a name="line.508"></a>
-<span class="sourceLineNo">509</span>   * @param fs<a name="line.509"></a>
-<span class="sourceLineNo">510</span>   * @param logEntry<a name="line.510"></a>
-<span class="sourceLineNo">511</span>   * @param rootDir HBase root dir.<a name="line.511"></a>
-<span class="sourceLineNo">512</span>   * @return Path to file into which to dump split log edits.<a name="line.512"></a>
-<span class="sourceLineNo">513</span>   * @throws IOException<a name="line.513"></a>
-<span class="sourceLineNo">514</span>   */<a name="line.514"></a>
-<span class="sourceLineNo">515</span>  @SuppressWarnings("deprecation")<a name="line.515"></a>
-<span class="sourceLineNo">516</span>  static Path getRegionSplitEditsPath(final FileSystem fs,<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      final Entry logEntry, final Path rootDir, boolean isCreate)<a name="line.517"></a>
-<span class="sourceLineNo">518</span>  throws IOException {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    Path tableDir = FSUtils.getTableDir(rootDir, logEntry.getKey().getTablename());<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    String encodedRegionName = Bytes.toString(logEntry.getKey().getEncodedRegionName());<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    Path regiondir = HRegion.getRegionDir(tableDir, encodedRegionName);<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    Path dir = getRegionDirRecoveredEditsDir(regiondir);<a name="line.522"></a>
-<span class="sourceLineNo">523</span><a name="line.523"></a>
-<span class="sourceLineNo">524</span>    if (!fs.exists(regiondir)) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      LOG.info("This region's directory doesn't exist: "<a name="line.525"></a>
-<span class="sourceLineNo">526</span>          + regiondir.toString() + ". It is very likely that it was" +<a name="line.526"></a>
-<span class="sourceLineNo">527</span>          " already split so it's safe to discard those edits.");<a name="line.527"></a>
-<span class="sourceLineNo">528</span>      return null;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    }<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    if (fs.exists(dir) &amp;&amp; fs.isFile(dir)) {<a name="line.530"></a>
-<span class="sourceLineNo">531</span>      Path tmp = new Path("/tmp");<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      if (!fs.exists(tmp)) {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>        fs.mkdirs(tmp);<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      }<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      tmp = new Path(tmp,<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        HConstants.RECOVERED_EDITS_DIR + "_" + encodedRegionName);<a name="line.536"></a>
-<span class="sourceLineNo">537</span>      LOG.warn("Found existing old file: " + dir + ". It could be some "<a name="line.537"></a>
-<span class="sourceLineNo">538</span>        + "leftover of an old installation. It should be a folder instead. "<a name="line.538"></a>
-<span class="sourceLineNo">539</span>        + "So moving it to " + tmp);<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      if (!fs.rename(dir, tmp)) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        LOG.warn("Failed to sideline old file " + dir);<a name="line.541"></a>
-<span class="sourceLineNo">542</span>      }<a name="line.542"></a>
-<span class="sourceLineNo">543</span>    }<a name="line.543"></a>
-<span class="sourceLineNo">544</span><a name="line.544"></a>
-<span class="sourceLineNo">545</span>    if (isCreate &amp;&amp; !fs.exists(dir)) {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>      if (!fs.mkdirs(dir)) LOG.warn("mkdir failed on " + dir);<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    }<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    // Append file name ends with RECOVERED_LOG_TMPFILE_SUFFIX to ensure<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    // region's replayRecoveredEdits will not delete it<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    String fileName = formatRecoveredEditsFileName(logEntry.getKey().getLogSeqNum());<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    fileName = getTmpRecoveredEditsFileName(fileName);<a name="line.551"></a>
-<span class="sourceLineNo">552</span>    return new Path(dir, fileName);<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>  static String getTmpRecoveredEditsFileName(String fileName) {<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    return fileName + RECOVERED_LOG_TMPFILE_SUFFIX;<a name="line.556"></a>
-<span class="sourceLineNo">557</span>  }<a name="line.557"></a>
-<span class="sourceLineNo">558</span><a name="line.558"></a>
-<span class="sourceLineNo">559</span>  /**<a name="line.559"></a>
-<span class="sourceLineNo">560</span>   * Get the completed recovered edits file path, renaming it to be by last edit<a name="line.560"></a>
-<span class="sourceLineNo">561</span>   * in the file from its first edit. Then we could use the name to skip<a name="line.561"></a>
-<span class="sourceLineNo">562</span>   * recovered edits when doing {@link HRegion#replayRecoveredEditsIfAny}.<a name="line.562"></a>
-<span class="sourceLineNo">563</span>   * @param srcPath<a name="line.563"></a>
-<span class="sourceLineNo">564</span>   * @param maximumEditLogSeqNum<a name="line.564"></a>
-<span class="sourceLineNo">565</span>   * @return dstPath take file's last edit log seq num as the name<a name="line.565"></a>
-<span class="sourceLineNo">566</span>   */<a name="line.566"></a>
-<span class="sourceLineNo">567</span>  static Path getCompletedRecoveredEditsFilePath(Path srcPath,<a name="line.567"></a>
-<span class="sourceLineNo">568</span>      Long maximumEditLogSeqNum) {<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    String fileName = formatRecoveredEditsFileName(maximumEditLogSeqNum);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    return new Path(srcPath.getParent(), fileName);<a name="line.570"></a>
-<span class="sourceLineNo">571</span>  }<a name="line.571"></a>
-<span class="sourceLineNo">572</span><a name="line.572"></a>
-<span class="sourceLineNo">573</span>  static String formatRecoveredEditsFileName(final long seqid) {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    return String.format("%019d", seqid);<a name="line.574"></a>
-<span class="sourceLineNo">575</span>  }<a name="line.575"></a>
-<span class="sourceLineNo">576</span><a name="line.576"></a>
-<span class="sourceLineNo">577</span>  private static final Pattern EDITFILES_NAME_PATTERN = Pattern.compile("-?[0-9]+");<a name="line.577"></a>
-<span class="sourceLineNo">578</span>  private static final String RECOVERED_LOG_TMPFILE_SUFFIX = ".temp";<a name="line.578"></a>
-<span class="sourceLineNo">579</span><a name="line.579"></a>
-<span class="sourceLineNo">580</span>  /**<a name="line.580"></a>
-<span class="sourceLineNo">581</span>   * @param regiondir<a name="line.581"></a>
-<span class="sourceLineNo">582</span>   *          This regions directory in the filesystem.<a name="line.582"></a>
-<span class="sourceLineNo">583</span>   * @return The directory that holds recovered edits files for the region<a name="line.583"></a>
-<span class="sourceLineNo">584</span>   *         &lt;code&gt;regiondir&lt;/code&gt;<a name="line.584"></a>
-<span class="sourceLineNo">585</span>   */<a name="line.585"></a>
-<span class="sourceLineNo">586</span>  public static Path getRegionDirRecoveredEditsDir(final Path regiondir) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    return new Path(regiondir, HConstants.RECOVERED_EDITS_DIR);<a name="line.587"></a>
-<span class="sourceLineNo">588</span>  }<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span>  /**<a name="line.590"></a>
-<span class="sourceLineNo">591</span>   * Returns sorted set of edit files made by splitter, excluding files<a name="line.591"></a>
-<span class="sourceLineNo">592</span>   * with '.temp' suffix.<a name="line.592"></a>
-<span class="sourceLineNo">593</span>   *<a name="line.593"></a>
-<span class="sourceLineNo">594</span>   * @param fs<a name="line.594"></a>
-<span class="sourceLineNo">595</span>   * @param regiondir<a name="line.595"></a>
-<span class="sourceLineNo">596</span>   * @return Files in passed &lt;code&gt;regiondir&lt;/code&gt; as a sorted set.<a name="line.596"></a>
-<span class="sourceLineNo">597</span>   * @throws IOException<a name="line.597"></a>
-<span class="sourceLineNo">598</span>   */<a name="line.598"></a>
-<span class="sourceLineNo">599</span>  public static NavigableSet&lt;Path&gt; getSplitEditFilesSorted(final FileSystem fs,<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      final Path regiondir) throws IOException {<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    NavigableSet&lt;Path&gt; filesSorted = new TreeSet&lt;Path&gt;();<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    Path editsdir = getRegionDirRecoveredEditsDir(regiondir);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    if (!fs.exists(editsdir))<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      return filesSorted;<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    FileStatus[] files = FSUtils.listStatus(fs, editsdir, new PathFilter() {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      @Override<a name="line.606"></a>
-<span class="sourceLineNo">607</span>      public boolean accept(Path p) {<a name="line.607"></a>
-<span class="sourceLineNo">608</span>        boolean result = false;<a name="line.608"></a>
-<span class="sourceLineNo">609</span>        try {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>          // Return files and only files that match the editfile names pattern.<a name="line.610"></a>
-<span class="sourceLineNo">611</span>          // There can be other files in this directory other than edit files.<a name="line.611"></a>
-<span class="sourceLineNo">612</span>          // In particular, on error, we'll move aside the bad edit file giving<a name="line.612"></a>
-<span class="sourceLineNo">613</span>          // it a timestamp suffix. See moveAsideBadEditsFile.<a name="line.613"></a>
-<span class="sourceLineNo">614</span>          Matcher m = EDITFILES_NAME_PATTERN.matcher(p.getName());<a name="line.614"></a>
-<span class="sourceLineNo">615</span>          result = fs.isFile(p) &amp;&amp; m.matches();<a name="line.615"></a>
-<span class="sourceLineNo">616</span>          // Skip the file whose name ends with RECOVERED_LOG_TMPFILE_SUFFIX,<a name="line.616"></a>
-<span class="sourceLineNo">617</span>          // because it means splitwal thread is writting this file.<a name="line.617"></a>
-<span class="sourceLineNo">618</span>          if (p.getName().endsWith(RECOVERED_LOG_TMPFILE_SUFFIX)) {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>            result = false;<a name="line.619"></a>
-<span class="sourceLineNo">620</span>          }<a name="line.620"></a>
-<span class="sourceLineNo">621</span>          // Skip SeqId Files<a name="line.621"></a>
-<span class="sourceLineNo">622</span>          if (isSequenceIdFile(p)) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span>            result = false;<a name="line.623"></a>
-<span class="sourceLineNo">624</span>          }<a name="line.624"></a>
-<span class="sourceLineNo">625</span>        } catch (IOException e) {<a name="line.625"></a>
-<span class="sourceLineNo">626</span>          LOG.warn("Failed isFile check on " + p);<a name="line.626"></a>
-<span class="sourceLineNo">627</span>        }<a name="line.627"></a>
-<span class="sourceLineNo">628</span>        return result;<a name="line.628"></a>
-<span class="sourceLineNo">629</span>      }<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    });<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    if (files == null) {<a name="line.631"></a>
-<span class="sourceLineNo">632</span>      return filesSorted;<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    }<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    for (FileStatus status : files) {<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      filesSorted.add(status.getPath());<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    }<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    return filesSorted;<a name="line.637"></a>
-<span class="sourceLineNo">638</span>  }<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>   * Move aside a bad edits file.<a name="line.641"></a>
-<span class="sourceLineNo">642</span>   *<a name="line.642"></a>
-<span class="sourceLineNo">643</span>   * @param fs<a name="line.643"></a>
-<span class="sourceLineNo">644</span>   * @param edits<a name="line.644"></a>
-<span class="sourceLineNo">645</span>   *          Edits file to move aside.<a name="line.645"></a>
-<span class="sourceLineNo">646</span>   * @return The name of the moved aside file.<a name="line.646"></a>
-<span class="sourceLineNo">647</span>   * @throws IOException<a name="line.647"></a>
-<span class="sourceLineNo">648</span>   */<a name="line.648"></a>
-<span class="sourceLineNo">649</span>  public static Path moveAsideBadEditsFile(final FileSystem fs, final Path edits)<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      throws IOException {<a name="line.650"></a>
-<span class="sourceLineNo">651</span>    Path moveAsideName = new Path(edits.getParent(), edits.getName() + "."<a name="line.651"></a>
-<span class="sourceLineNo">652</span>        + System.currentTimeMillis());<a name="line.652"></a>
-<span class="sourceLineNo">653</span>    if (!fs.rename(edits, moveAsideName)) {<a name="line.653"></a>
-<span class="sourceLineNo">654</span>      LOG.warn("Rename failed from " + edits + " to " + moveAsideName);<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    }<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    return moveAsideName;<a name="line.656"></a>
-<span class="sourceLineNo">657</span>  }<a name="line.657"></a>
-<span class="sourceLineNo">658</span><a name="line.658"></a>
-<span class="sourceLineNo">659</span>  private static final String SEQUENCE_ID_FILE_SUFFIX = ".seqid";<a name="line.659"></a>
-<span class="sourceLineNo">660</span>  private static final String OLD_SEQUENCE_ID_FILE_SUFFIX = "_seqid";<a name="line.660"></a>
-<span class="sourceLineNo">661</span>  private static final int SEQUENCE_ID_FILE_SUFFIX_LENGTH = SEQUENCE_ID_FILE_SUFFIX.length();<a name="line.661"></a>
-<span class="sourceLineNo">662</span><a name="line.662"></a>
-<span class="sourceLineNo">663</span>  /**<a name="line.663"></a>
-<span class="sourceLineNo">664</span>   * Is the given file a region open sequence id file.<a name="line.664"></a>
-<span class="sourceLineNo">665</span>   */<a name="line.665"></a>
-<span class="sourceLineNo">666</span>  @VisibleForTesting<a name="line.666"></a>
-<span class="sourceLineNo">667</span>  public static boolean isSequenceIdFile(final Path file) {<a name="line.667"></a>
-<span class="sourceLineNo">668</span>    return file.getName().endsWith(SEQUENCE_ID_FILE_SUFFIX)<a name="line.668"></a>
-<span class="sourceLineNo">669</span>        || file.getName().endsWith(OLD_SEQUENCE_ID_FILE_SUFFIX);<a name="line.669"></a>
-<span class="sourceLineNo">670</span>  }<a name="line.670"></a>
+<span class="sourceLineNo">346</span>            regionMaxSeqIdInStores.put(encodedRegionNameAsStr, maxSeqIdInStores);<a name="line.346"></a>
+<span class="sourceLineNo">347</span>            lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.347"></a>
+<span class="sourceLineNo">348</span>            if (LOG.isDebugEnabled()) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>              LOG.debug("DLS Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.349"></a>
+<span class="sourceLineNo">350</span>                  TextFormat.shortDebugString(ids));<a name="line.350"></a>
+<span class="sourceLineNo">351</span>            }<a name="line.351"></a>
+<span class="sourceLineNo">352</span>          }<a name="line.352"></a>
+<span class="sourceLineNo">353</span>          if (lastFlushedSequenceId == null) {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>            lastFlushedSequenceId = -1L;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>          }<a name="line.355"></a>
+<span class="sourceLineNo">356</span>          lastFlushedSequenceIds.put(encodedRegionNameAsStr, lastFlushedSequenceId);<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        }<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        if (lastFlushedSequenceId &gt;= entry.getKey().getSequenceId()) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>          editsSkipped++;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>          continue;<a name="line.360"></a>
+<span class="sourceLineNo">361</span>        }<a name="line.361"></a>
+<span class="sourceLineNo">362</span>        entryBuffers.appendEntry(entry);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        editsCount++;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>        int moreWritersFromLastCheck = this.getNumOpenWriters() - numOpenedFilesLastCheck;<a name="line.364"></a>
+<span class="sourceLineNo">365</span>        // If sufficient edits have passed, check if we should report progress.<a name="line.365"></a>
+<span class="sourceLineNo">366</span>        if (editsCount % interval == 0<a name="line.366"></a>
+<span class="sourceLineNo">367</span>            || moreWritersFromLastCheck &gt; numOpenedFilesBeforeReporting) {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>          numOpenedFilesLastCheck = this.getNumOpenWriters();<a name="line.368"></a>
+<span class="sourceLineNo">369</span>          String countsStr = (editsCount - (editsSkipped + outputSink.getSkippedEdits()))<a name="line.369"></a>
+<span class="sourceLineNo">370</span>              + " edits, skipped " + editsSkipped + " edits.";<a name="line.370"></a>
+<span class="sourceLineNo">371</span>          status.setStatus("Split " + countsStr);<a name="line.371"></a>
+<span class="sourceLineNo">372</span>          if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>            progress_failed = true;<a name="line.373"></a>
+<span class="sourceLineNo">374</span>            return false;<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>      }<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    } catch (InterruptedException ie) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      IOException iie = new InterruptedIOException();<a name="line.379"></a>
+<span class="sourceLineNo">380</span>      iie.initCause(ie);<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      throw iie;<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    } catch (CorruptedLogFileException e) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      LOG.warn("Could not parse, corrupted log file " + logPath, e);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      csm.getSplitLogWorkerCoordination().markCorrupted(rootDir,<a name="line.384"></a>
+<span class="sourceLineNo">385</span>        logfile.getPath().getName(), fs);<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      isCorrupted = true;<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    } catch (IOException e) {<a name="line.387"></a>
+<span class="sourceLineNo">388</span>      e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      throw e;<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    } finally {<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      LOG.debug("Finishing writing output logs and closing down.");<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      try {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>        if (null != in) {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>          in.close();<a name="line.394"></a>
+<span class="sourceLineNo">395</span>        }<a name="line.395"></a>
+<span class="sourceLineNo">396</span>      } catch (IOException exception) {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>        LOG.warn("Could not close wal reader: " + exception.getMessage());<a name="line.397"></a>
+<span class="sourceLineNo">398</span>        LOG.debug("exception details", exception);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      }<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      try {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>        if (outputSinkStarted) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>          // Set progress_failed to true as the immediate following statement will reset its value<a name="line.402"></a>
+<span class="sourceLineNo">403</span>          // when finishWritingAndClose() throws exception, progress_failed has the right value<a name="line.403"></a>
+<span class="sourceLineNo">404</span>          progress_failed = true;<a name="line.404"></a>
+<span class="sourceLineNo">405</span>          progress_failed = outputSink.finishWritingAndClose() == null;<a name="line.405"></a>
+<span class="sourceLineNo">406</span>        }<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      } finally {<a name="line.407"></a>
+<span class="sourceLineNo">408</span>        String msg =<a name="line.408"></a>
+<span class="sourceLineNo">409</span>            "Processed " + editsCount + " edits across " + outputSink.getNumberOfRecoveredRegions()<a name="line.409"></a>
+<span class="sourceLineNo">410</span>                + " regions; edits skipped=" + editsSkipped + "; log file=" + logPath +<a name="line.410"></a>
+<span class="sourceLineNo">411</span>                ", length=" + logfile.getLen() + // See if length got updated post lease recovery<a name="line.411"></a>
+<span class="sourceLineNo">412</span>                ", corrupted=" + isCorrupted + ", progress failed=" + progress_failed;<a name="line.412"></a>
+<span class="sourceLineNo">413</span>        LOG.info(msg);<a name="line.413"></a>
+<span class="sourceLineNo">414</span>        status.markComplete(msg);<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>    return !progress_failed;<a name="line.417"></a>
+<span class="sourceLineNo">418</span>  }<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>   * Completes the work done by splitLogFile by archiving logs<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   * &lt;p&gt;<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   * It is invoked by SplitLogManager once it knows that one of the<a name="line.423"></a>
+<span class="sourceLineNo">424</span>   * SplitLogWorkers have completed the splitLogFile() part. If the master<a name="line.424"></a>
+<span class="sourceLineNo">425</span>   * crashes then this function might get called multiple times.<a name="line.425"></a>
+<span class="sourceLineNo">426</span>   * &lt;p&gt;<a name="line.426"></a>
+<span class="sourceLineNo">427</span>   * @param logfile<a name="line.427"></a>
+<span class="sourceLineNo">428</span>   * @param conf<a name="line.428"></a>
+<span class="sourceLineNo">429</span>   * @throws IOException<a name="line.429"></a>
+<span class="sourceLineNo">430</span>   */<a name="line.430"></a>
+<span class="sourceLineNo">431</span>  public static void finishSplitLogFile(String logfile,<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      Configuration conf)  throws IOException {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    Path rootdir = FSUtils.getRootDir(conf);<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    Path oldLogDir = new Path(rootdir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.434"></a>
+<span class="sourceLineNo">435</span>    Path logPath;<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    if (FSUtils.isStartingWithPath(rootdir, logfile)) {<a name="line.436"></a>
+<span class="sourceLineNo">437</span>      logPath = new Path(logfile);<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    } else {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>      logPath = new Path(rootdir, logfile);<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    }<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    finishSplitLogFile(rootdir, oldLogDir, logPath, conf);<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>  private static void finishSplitLogFile(Path rootdir, Path oldLogDir,<a name="line.444"></a>
+<span class="sourceLineNo">445</span>      Path logPath, Configuration conf) throws IOException {<a name="line.445"></a>
+<span class="sourceLineNo">446</span>    List&lt;Path&gt; processedLogs = new ArrayList&lt;Path&gt;();<a name="line.446"></a>
+<span class="sourceLineNo">447</span>    List&lt;Path&gt; corruptedLogs = new ArrayList&lt;Path&gt;();<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    FileSystem fs;<a name="line.448"></a>
+<span class="sourceLineNo">449</span>    fs = rootdir.getFileSystem(conf);<a name="line.449"></a>
+<span class="sourceLineNo">450</span>    if (ZKSplitLog.isCorrupted(rootdir, logPath.getName(), fs)) {<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      corruptedLogs.add(logPath);<a name="line.451"></a>
+<span class="sourceLineNo">452</span>    } else {<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      processedLogs.add(logPath);<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    }<a name="line.454"></a>
+<span class="sourceLineNo">455</span>    archiveLogs(corruptedLogs, processedLogs, oldLogDir, fs, conf);<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    Path stagingDir = ZKSplitLog.getSplitLogDir(rootdir, logPath.getName());<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    fs.delete(stagingDir, true);<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>  /**<a name="line.460"></a>
+<span class="sourceLineNo">461</span>   * Moves processed logs to a oldLogDir after successful processing Moves<a name="line.461"></a>
+<span class="sourceLineNo">462</span>   * corrupted logs (any log that couldn't be successfully parsed to corruptDir<a name="line.462"></a>
+<span class="sourceLineNo">463</span>   * (.corrupt) for later investigation<a name="line.463"></a>
+<span class="sourceLineNo">464</span>   *<a name="line.464"></a>
+<span class="sourceLineNo">465</span>   * @param corruptedLogs<a name="line.465"></a>
+<span class="sourceLineNo">466</span>   * @param processedLogs<a name="line.466"></a>
+<span class="sourceLineNo">467</span>   * @param oldLogDir<a name="line.467"></a>
+<span class="sourceLineNo">468</span>   * @param fs<a name="line.468"></a>
+<span class="sourceLineNo">469</span>   * @param conf<a name="line.469"></a>
+<span class="sourceLineNo">470</span>   * @throws IOException<a name="line.470"></a>
+<span class="sourceLineNo">471</span>   */<a name="line.471"></a>
+<span class="sourceLineNo">472</span>  private static void archiveLogs(<a name="line.472"></a>
+<span class="sourceLineNo">473</span>      final List&lt;Path&gt; corruptedLogs,<a name="line.473"></a>
+<span class="sourceLineNo">474</span>      final List&lt;Path&gt; processedLogs, final Path oldLogDir,<a name="line.474"></a>
+<span class="sourceLineNo">475</span>      final FileSystem fs, final Configuration conf) throws IOException {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    final Path corruptDir = new Path(FSUtils.getRootDir(conf), conf.get(<a name="line.476"></a>
+<span class="sourceLineNo">477</span>        "hbase.regionserver.hlog.splitlog.corrupt.dir",  HConstants.CORRUPT_DIR_NAME));<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>    if (!fs.mkdirs(corruptDir)) {<a name="line.479"></a>
+<span class="sourceLineNo">480</span>      LOG.info("Unable to mkdir " + corruptDir);<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    }<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    fs.mkdirs(oldLogDir);<a name="line.482"></a>
+<span class="sourceLineNo">483</span><a name="line.483"></a>
+<span class="sourceLineNo">484</span>    // this method can get restarted or called multiple times for archiving<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    // the same log files.<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    for (Path corrupted : corruptedLogs) {<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      Path p = new Path(corruptDir, corrupted.getName());<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      if (fs.exists(corrupted)) {<a name="line.488"></a>
+<span class="sourceLineNo">489</span>        if (!fs.rename(corrupted, p)) {<a name="line.489"></a>
+<span class="sourceLineNo">490</span>          LOG.warn("Unable to move corrupted log " + corrupted + " to " + p);<a name="line.490"></a>
+<span class="sourceLineNo">491</span>        } else {<a name="line.491"></a>
+<span class="sourceLineNo">492</span>          LOG.warn("Moved corrupted log " + corrupted + " to " + p);<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>    }<a name="line.495"></a>
+<span class="sourceLineNo">496</span><a name="line.496"></a>
+<span class="sourceLineNo">497</span>    for (Path p : processedLogs) {<a name="line.497"></a>
+<span class="sourceLineNo">498</span>      Path newPath = FSHLog.getWALArchivePath(oldLogDir, p);<a name="line.498"></a>
+<span class="sourceLineNo">499</span>      if (fs.exists(p)) {<a name="line.499"></a>
+<span class="sourceLineNo">500</span>        if (!FSUtils.renameAndSetModifyTime(fs, p, newPath)) {<a name="line.500"></a>
+<span class="sourceLineNo">501</span>          LOG.warn("Unable to move  " + p + " to " + newPath);<a name="line.501"></a>
+<span class="sourceLineNo">502</span>        } else {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>          LOG.info("Archived processed log " + p + " to " + newPath);<a name="line.503"></a>
+<span class="sourceLineNo">504</span>        }<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      }<a name="line.505"></a>
+<span class="sourceLineNo">506</span>    }<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>  /**<a name="line.509"></a>
+<span class="sourceLineNo">510</span>   * Path to a file under RECOVERED_EDITS_DIR directory of the region found in<a name="line.510"></a>
+<span class="sourceLineNo">511</span>   * &lt;code&gt;logEntry&lt;/code&gt; named for the sequenceid in the passed<a name="line.511"></a>
+<span class="sourceLineNo">512</span>   * &lt;code&gt;logEntry&lt;/code&gt;: e.g. /hbase/some_table/2323432434/recovered.edits/2332.<a name="line.512"></a>
+<span class="sourceLineNo">513</span>   * This method also ensures existence of RECOVERED_EDITS_DIR under the region<a name="line.513"></a>
+<span class="sourceLineNo">514</span>   * creating it if necessary.<a name="line.514"></a>
+<span class="sourceLineNo">515</span>   * @param fs<a name="line.515"></a>
+<span class="sourceLineNo">516</span>   * @param logEntry<a name="line.516"></a>
+<span class="sourceLineNo">517</span>   * @param rootDir HBase root dir.<a name="line.517"></a>
+<span class="sourceLineNo">518</span>   * @param fileBeingSplit the file being split currently. Used to generate tmp file name.<a name="line.518"></a>
+<span class="sourceLineNo">519</span>   * @return Path to file into which to dump split log edits.<a name="line.519"></a>
+<span class="sourceLineNo">520</span>   * @throws IOException<a name="line.520"></a>
+<span class="sourceLineNo">521</span>   */<a name="line.521"></a>
+<span class="sourceLineNo">522</span>  @SuppressWarnings("deprecation")<a name="line.522"></a>
+<span class="sourceLineNo">523</span>  private static Path getRegionSplitEditsPath(final FileSystem fs,<a name="line.523"></a>
+<span class="sourceLineNo">524</span>      final Entry logEntry, final Path rootDir, FileStatus fileBeingSplit)<a name="line.524"></a>
+<span class="sourceLineNo">525</span>  throws IOException {<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    Path tableDir = FSUtils.getTableDir(rootDir, logEntry.getKey().getTablename());<a name="line.526"></a>
+<span class="sourceLineNo">527</span>    String encodedRegionName = Bytes.toString(logEntry.getKey().getEncodedRegionName());<a name="line.527"></a>
+<span class="sourceLineNo">528</span>    Path regiondir = HRegion.getRegionDir(tableDir, encodedRegionName);<a name="line.528"></a>
+<span class="sourceLineNo">529</span>    Path dir = getRegionDirRecoveredEditsDir(regiondir);<a name="line.529"></a>
+<span class="sourceLineNo">530</span><a name="line.530"></a>
+<span class="sourceLineNo">531</span>    if (!fs.exists(regiondir)) {<a name="line.531"></a>
+<span class="sourceLineNo">532</span>      LOG.info("This region's directory doesn't exist: "<a name="line.532"></a>
+<span class="sourceLineNo">533</span>          + regiondir.toString() + ". It is very likely that it was" +<a name="line.533"></a>
+<span class="sourceLineNo">534</span>          " already split so it's safe to discard those edits.");<a name="line.534"></a>
+<span class="sourceLineNo">535</span>      return null;<a name="line.535"></a>
+<span class="sourceLineNo">536</span>    }<a name="line.536"></a>
+<span class="sourceLineNo">537</span>    if (fs.exists(dir) &amp;&amp; fs.isFile(dir)) {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      Path tmp = new Path("/tmp");<a name="line.538"></a>
+<span class="sourceLineNo">539</span>      if (!fs.exists(tmp)) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span>        fs.mkdirs(tmp);<a name="line.540"></a>
+<span class="sourceLineNo">541</span>      }<a name="line.541"></a>
+<span class="sourceLineNo">542</span>      tmp = new Path(tmp,<a name="line.542"></a>
+<span class="sourceLineNo">543</span>        HConstants.RECOVERED_EDITS_DIR + "_" + encodedRegionName);<a name="line.543"></a>
+<span class="sourceLineNo">544</span>      LOG.warn("Found existing old file: " + dir + ". It could be some "<a name="line.544"></a>
+<span class="sourceLineNo">545</span>        + "leftover of an old installation. It should be a folder instead. "<a name="line.545"></a>
+<span class="sourceLineNo">546</span>        + "So moving it to " + tmp);<a name="line.546"></a>
+<span class="sourceLineNo">547</span>      if (!fs.rename(dir, tmp)) {<a name="line.547"></a>
+<span class="sourceLineNo">548</span>        LOG.warn("Failed to sideline old file " + dir);<a name="line.548"></a>
+<span class="sourceLineNo">549</span>      }<a name="line.549"></a>
+<span class="sourceLineNo">550</span>    }<a name="line.550"></a>
+<span class="sourceLineNo">551</span><a name="line.551"></a>
+<span class="sourceLi

<TRUNCATED>

[16/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.PipelineController.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.PipelineController.html b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.PipelineController.html
index 0597160..b444f46 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.PipelineController.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.PipelineController.html
@@ -184,2145 +184,2183 @@
 <span class="sourceLineNo">176</span>  // Min batch size when replay WAL edits<a name="line.176"></a>
 <span class="sourceLineNo">177</span>  private final int minBatchSize;<a name="line.177"></a>
 <span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span>  WALSplitter(final WALFactory factory, Configuration conf, Path rootDir,<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      FileSystem fs, LastSequenceId idChecker,<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      CoordinatedStateManager csm, RecoveryMode mode) {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    this.conf = HBaseConfiguration.create(conf);<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    String codecClassName = conf<a name="line.183"></a>
-<span class="sourceLineNo">184</span>        .get(WALCellCodec.WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    this.conf.set(HConstants.RPC_CODEC_CONF_KEY, codecClassName);<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    this.rootDir = rootDir;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    this.fs = fs;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    this.sequenceIdChecker = idChecker;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    this.csm = (BaseCoordinatedStateManager)csm;<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    this.walFactory = factory;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    this.controller = new PipelineController();<a name="line.191"></a>
-<span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span>    entryBuffers = new EntryBuffers(controller,<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        this.conf.getInt("hbase.regionserver.hlog.splitlog.buffersize",<a name="line.194"></a>
-<span class="sourceLineNo">195</span>            128*1024*1024));<a name="line.195"></a>
+<span class="sourceLineNo">179</span>  // the file being split currently<a name="line.179"></a>
+<span class="sourceLineNo">180</span>  private FileStatus fileBeingSplit;<a name="line.180"></a>
+<span class="sourceLineNo">181</span><a name="line.181"></a>
+<span class="sourceLineNo">182</span>  @VisibleForTesting<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  WALSplitter(final WALFactory factory, Configuration conf, Path rootDir,<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      FileSystem fs, LastSequenceId idChecker,<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      CoordinatedStateManager csm, RecoveryMode mode) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    this.conf = HBaseConfiguration.create(conf);<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    String codecClassName = conf<a name="line.187"></a>
+<span class="sourceLineNo">188</span>        .get(WALCellCodec.WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    this.conf.set(HConstants.RPC_CODEC_CONF_KEY, codecClassName);<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    this.rootDir = rootDir;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    this.fs = fs;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    this.sequenceIdChecker = idChecker;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    this.csm = (BaseCoordinatedStateManager)csm;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    this.walFactory = factory;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    this.controller = new PipelineController();<a name="line.195"></a>
 <span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span>    // a larger minBatchSize may slow down recovery because replay writer has to wait for<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    // enough edits before replaying them<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    this.minBatchSize = this.conf.getInt("hbase.regionserver.wal.logreplay.batch.size", 64);<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    this.distributedLogReplay = (RecoveryMode.LOG_REPLAY == mode);<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>    this.numWriterThreads = this.conf.getInt("hbase.regionserver.hlog.splitlog.writer.threads", 3);<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    if (csm != null &amp;&amp; this.distributedLogReplay) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      outputSink = new LogReplayOutputSink(controller, entryBuffers, numWriterThreads);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    } else {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      if (this.distributedLogReplay) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        LOG.info("ZooKeeperWatcher is passed in as NULL so disable distrubitedLogRepaly.");<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      }<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      this.distributedLogReplay = false;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      outputSink = new LogRecoveredEditsOutputSink(controller, entryBuffers, numWriterThreads);<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>  }<a name="line.213"></a>
-<span class="sourceLineNo">214</span><a name="line.214"></a>
-<span class="sourceLineNo">215</span>  /**<a name="line.215"></a>
-<span class="sourceLineNo">216</span>   * Splits a WAL file into region's recovered-edits directory.<a name="line.216"></a>
-<span class="sourceLineNo">217</span>   * This is the main entry point for distributed log splitting from SplitLogWorker.<a name="line.217"></a>
-<span class="sourceLineNo">218</span>   * &lt;p&gt;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>   * If the log file has N regions then N recovered.edits files will be produced.<a name="line.219"></a>
-<span class="sourceLineNo">220</span>   * &lt;p&gt;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   * @param rootDir<a name="line.221"></a>
-<span class="sourceLineNo">222</span>   * @param logfile<a name="line.222"></a>
-<span class="sourceLineNo">223</span>   * @param fs<a name="line.223"></a>
-<span class="sourceLineNo">224</span>   * @param conf<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   * @param reporter<a name="line.225"></a>
-<span class="sourceLineNo">226</span>   * @param idChecker<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   * @param cp coordination state manager<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   * @return false if it is interrupted by the progress-able.<a name="line.228"></a>
-<span class="sourceLineNo">229</span>   * @throws IOException<a name="line.229"></a>
-<span class="sourceLineNo">230</span>   */<a name="line.230"></a>
-<span class="sourceLineNo">231</span>  public static boolean splitLogFile(Path rootDir, FileStatus logfile, FileSystem fs,<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      Configuration conf, CancelableProgressable reporter, LastSequenceId idChecker,<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      CoordinatedStateManager cp, RecoveryMode mode, final WALFactory factory) throws IOException {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, idChecker, cp, mode);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    return s.splitLogFile(logfile, reporter);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  }<a name="line.236"></a>
-<span class="sourceLineNo">237</span><a name="line.237"></a>
-<span class="sourceLineNo">238</span>  // A wrapper to split one log folder using the method used by distributed<a name="line.238"></a>
-<span class="sourceLineNo">239</span>  // log splitting. Used by tools and unit tests. It should be package private.<a name="line.239"></a>
-<span class="sourceLineNo">240</span>  // It is public only because TestWALObserver is in a different package,<a name="line.240"></a>
-<span class="sourceLineNo">241</span>  // which uses this method to do log splitting.<a name="line.241"></a>
-<span class="sourceLineNo">242</span>  @VisibleForTesting<a name="line.242"></a>
-<span class="sourceLineNo">243</span>  public static List&lt;Path&gt; split(Path rootDir, Path logDir, Path oldLogDir,<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      FileSystem fs, Configuration conf, final WALFactory factory) throws IOException {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    final FileStatus[] logfiles = SplitLogManager.getFileList(conf,<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        Collections.singletonList(logDir), null);<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    List&lt;Path&gt; splits = new ArrayList&lt;Path&gt;();<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    if (logfiles != null &amp;&amp; logfiles.length &gt; 0) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      for (FileStatus logfile: logfiles) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, null, null,<a name="line.250"></a>
-<span class="sourceLineNo">251</span>            RecoveryMode.LOG_SPLITTING);<a name="line.251"></a>
-<span class="sourceLineNo">252</span>        if (s.splitLogFile(logfile, null)) {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>          finishSplitLogFile(rootDir, oldLogDir, logfile.getPath(), conf);<a name="line.253"></a>
-<span class="sourceLineNo">254</span>          if (s.outputSink.splits != null) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>            splits.addAll(s.outputSink.splits);<a name="line.255"></a>
-<span class="sourceLineNo">256</span>          }<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        }<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      }<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    }<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    if (!fs.delete(logDir, true)) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      throw new IOException("Unable to delete src dir: " + logDir);<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    return splits;<a name="line.263"></a>
-<span class="sourceLineNo">264</span>  }<a name="line.264"></a>
-<span class="sourceLineNo">265</span><a name="line.265"></a>
-<span class="sourceLineNo">266</span>  /**<a name="line.266"></a>
-<span class="sourceLineNo">267</span>   * log splitting implementation, splits one log file.<a name="line.267"></a>
-<span class="sourceLineNo">268</span>   * @param logfile should be an actual log file.<a name="line.268"></a>
-<span class="sourceLineNo">269</span>   */<a name="line.269"></a>
-<span class="sourceLineNo">270</span>  boolean splitLogFile(FileStatus logfile, CancelableProgressable reporter) throws IOException {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    Preconditions.checkState(status == null);<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    Preconditions.checkArgument(logfile.isFile(),<a name="line.272"></a>
-<span class="sourceLineNo">273</span>        "passed in file status is for something other than a regular file.");<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    boolean isCorrupted = false;<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    boolean skipErrors = conf.getBoolean("hbase.hlog.split.skip.errors",<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      SPLIT_SKIP_ERRORS_DEFAULT);<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    int interval = conf.getInt("hbase.splitlog.report.interval.loglines", 1024);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    Path logPath = logfile.getPath();<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    boolean outputSinkStarted = false;<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    boolean progress_failed = false;<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    int editsCount = 0;<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    int editsSkipped = 0;<a name="line.282"></a>
-<span class="sourceLineNo">283</span><a name="line.283"></a>
-<span class="sourceLineNo">284</span>    status =<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        TaskMonitor.get().createStatus(<a name="line.285"></a>
-<span class="sourceLineNo">286</span>          "Splitting log file " + logfile.getPath() + "into a temporary staging area.");<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    Reader in = null;<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    try {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      long logLength = logfile.getLen();<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      LOG.info("Splitting wal: " + logPath + ", length=" + logLength);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      LOG.info("DistributedLogReplay = " + this.distributedLogReplay);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      status.setStatus("Opening log file");<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>        progress_failed = true;<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        return false;<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      }<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      try {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        in = getReader(logfile, skipErrors, reporter);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      } catch (CorruptedLogFileException e) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>        LOG.warn("Could not get reader, corrupted log file " + logPath, e);<a name="line.300"></a>
-<span class="sourceLineNo">301</span>        ZKSplitLog.markCorrupted(rootDir, logfile.getPath().getName(), fs);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>        isCorrupted = true;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      }<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      if (in == null) {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>        LOG.warn("Nothing to split in log file " + logPath);<a name="line.305"></a>
-<span class="sourceLineNo">306</span>        return true;<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      }<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      int numOpenedFilesBeforeReporting = conf.getInt("hbase.splitlog.report.openedfiles", 3);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      int numOpenedFilesLastCheck = 0;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      outputSink.setReporter(reporter);<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      outputSink.startWriterThreads();<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      outputSinkStarted = true;<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      Entry entry;<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      Long lastFlushedSequenceId = -1L;<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      ServerName serverName = DefaultWALProvider.getServerNameFromWALDirectoryName(logPath);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      failedServerName = (serverName == null) ? "" : serverName.getServerName();<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      while ((entry = getNextLogLine(in, logPath, skipErrors)) != null) {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>        byte[] region = entry.getKey().getEncodedRegionName();<a name="line.318"></a>
-<span class="sourceLineNo">319</span>        String encodedRegionNameAsStr = Bytes.toString(region);<a name="line.319"></a>
-<span class="sourceLineNo">320</span>        lastFlushedSequenceId = lastFlushedSequenceIds.get(encodedRegionNameAsStr);<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        if (lastFlushedSequenceId == null) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>          if (this.distributedLogReplay) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>            RegionStoreSequenceIds ids =<a name="line.323"></a>
-<span class="sourceLineNo">324</span>                csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.324"></a>
-<span class="sourceLineNo">325</span>                  encodedRegionNameAsStr);<a name="line.325"></a>
-<span class="sourceLineNo">326</span>            if (ids != null) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>              lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.327"></a>
-<span class="sourceLineNo">328</span>              if (LOG.isDebugEnabled()) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>                LOG.debug("DLR Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.329"></a>
-<span class="sourceLineNo">330</span>                  TextFormat.shortDebugString(ids));<a name="line.330"></a>
-<span class="sourceLineNo">331</span>              }<a name="line.331"></a>
-<span class="sourceLineNo">332</span>            }<a name="line.332"></a>
-<span class="sourceLineNo">333</span>          } else if (sequenceIdChecker != null) {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>            RegionStoreSequenceIds ids = sequenceIdChecker.getLastSequenceId(region);<a name="line.334"></a>
-<span class="sourceLineNo">335</span>            Map&lt;byte[], Long&gt; maxSeqIdInStores = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.335"></a>
-<span class="sourceLineNo">336</span>            for (StoreSequenceId storeSeqId : ids.getStoreSequenceIdList()) {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>              maxSeqIdInStores.put(storeSeqId.getFamilyName().toByteArray(),<a name="line.337"></a>
-<span class="sourceLineNo">338</span>                storeSeqId.getSequenceId());<a name="line.338"></a>
-<span class="sourceLineNo">339</span>            }<a name="line.339"></a>
-<span class="sourceLineNo">340</span>            regionMaxSeqIdInStores.put(encodedRegionNameAsStr, maxSeqIdInStores);<a name="line.340"></a>
-<span class="sourceLineNo">341</span>            lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.341"></a>
-<span class="sourceLineNo">342</span>            if (LOG.isDebugEnabled()) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>              LOG.debug("DLS Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.343"></a>
-<span class="sourceLineNo">344</span>                  TextFormat.shortDebugString(ids));<a name="line.344"></a>
+<span class="sourceLineNo">197</span>    entryBuffers = new EntryBuffers(controller,<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        this.conf.getInt("hbase.regionserver.hlog.splitlog.buffersize",<a name="line.198"></a>
+<span class="sourceLineNo">199</span>            128*1024*1024));<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>    // a larger minBatchSize may slow down recovery because replay writer has to wait for<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    // enough edits before replaying them<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    this.minBatchSize = this.conf.getInt("hbase.regionserver.wal.logreplay.batch.size", 64);<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    this.distributedLogReplay = (RecoveryMode.LOG_REPLAY == mode);<a name="line.204"></a>
+<span class="sourceLineNo">205</span><a name="line.205"></a>
+<span class="sourceLineNo">206</span>    this.numWriterThreads = this.conf.getInt("hbase.regionserver.hlog.splitlog.writer.threads", 3);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    if (csm != null &amp;&amp; this.distributedLogReplay) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      outputSink = new LogReplayOutputSink(controller, entryBuffers, numWriterThreads);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    } else {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      if (this.distributedLogReplay) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>        LOG.info("ZooKeeperWatcher is passed in as NULL so disable distrubitedLogRepaly.");<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      }<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      this.distributedLogReplay = false;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      outputSink = new LogRecoveredEditsOutputSink(controller, entryBuffers, numWriterThreads);<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    }<a name="line.215"></a>
+<span class="sourceLineNo">216</span><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>
+<span class="sourceLineNo">220</span>   * Splits a WAL file into region's recovered-edits directory.<a name="line.220"></a>
+<span class="sourceLineNo">221</span>   * This is the main entry point for distributed log splitting from SplitLogWorker.<a name="line.221"></a>
+<span class="sourceLineNo">222</span>   * &lt;p&gt;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>   * If the log file has N regions then N recovered.edits files will be produced.<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   * &lt;p&gt;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   * @param rootDir<a name="line.225"></a>
+<span class="sourceLineNo">226</span>   * @param logfile<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   * @param fs<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   * @param conf<a name="line.228"></a>
+<span class="sourceLineNo">229</span>   * @param reporter<a name="line.229"></a>
+<span class="sourceLineNo">230</span>   * @param idChecker<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   * @param cp coordination state manager<a name="line.231"></a>
+<span class="sourceLineNo">232</span>   * @return false if it is interrupted by the progress-able.<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   * @throws IOException<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   */<a name="line.234"></a>
+<span class="sourceLineNo">235</span>  public static boolean splitLogFile(Path rootDir, FileStatus logfile, FileSystem fs,<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      Configuration conf, CancelableProgressable reporter, LastSequenceId idChecker,<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      CoordinatedStateManager cp, RecoveryMode mode, final WALFactory factory) throws IOException {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, idChecker, cp, mode);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    return s.splitLogFile(logfile, reporter);<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>  // A wrapper to split one log folder using the method used by distributed<a name="line.242"></a>
+<span class="sourceLineNo">243</span>  // log splitting. Used by tools and unit tests. It should be package private.<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  // It is public only because TestWALObserver is in a different package,<a name="line.244"></a>
+<span class="sourceLineNo">245</span>  // which uses this method to do log splitting.<a name="line.245"></a>
+<span class="sourceLineNo">246</span>  @VisibleForTesting<a name="line.246"></a>
+<span class="sourceLineNo">247</span>  public static List&lt;Path&gt; split(Path rootDir, Path logDir, Path oldLogDir,<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      FileSystem fs, Configuration conf, final WALFactory factory) throws IOException {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    final FileStatus[] logfiles = SplitLogManager.getFileList(conf,<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        Collections.singletonList(logDir), null);<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    List&lt;Path&gt; splits = new ArrayList&lt;Path&gt;();<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    if (logfiles != null &amp;&amp; logfiles.length &gt; 0) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      for (FileStatus logfile: logfiles) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>        WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, null, null,<a name="line.254"></a>
+<span class="sourceLineNo">255</span>            RecoveryMode.LOG_SPLITTING);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>        if (s.splitLogFile(logfile, null)) {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>          finishSplitLogFile(rootDir, oldLogDir, logfile.getPath(), conf);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>          if (s.outputSink.splits != null) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>            splits.addAll(s.outputSink.splits);<a name="line.259"></a>
+<span class="sourceLineNo">260</span>          }<a name="line.260"></a>
+<span class="sourceLineNo">261</span>        }<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      }<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    }<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    if (!fs.delete(logDir, true)) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      throw new IOException("Unable to delete src dir: " + logDir);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    }<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    return splits;<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  }<a name="line.268"></a>
+<span class="sourceLineNo">269</span><a name="line.269"></a>
+<span class="sourceLineNo">270</span>  /**<a name="line.270"></a>
+<span class="sourceLineNo">271</span>   * log splitting implementation, splits one log file.<a name="line.271"></a>
+<span class="sourceLineNo">272</span>   * @param logfile should be an actual log file.<a name="line.272"></a>
+<span class="sourceLineNo">273</span>   */<a name="line.273"></a>
+<span class="sourceLineNo">274</span>  @VisibleForTesting<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  boolean splitLogFile(FileStatus logfile, CancelableProgressable reporter) throws IOException {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    Preconditions.checkState(status == null);<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    Preconditions.checkArgument(logfile.isFile(),<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        "passed in file status is for something other than a regular file.");<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    boolean isCorrupted = false;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    boolean skipErrors = conf.getBoolean("hbase.hlog.split.skip.errors",<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      SPLIT_SKIP_ERRORS_DEFAULT);<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    int interval = conf.getInt("hbase.splitlog.report.interval.loglines", 1024);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    Path logPath = logfile.getPath();<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    boolean outputSinkStarted = false;<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    boolean progress_failed = false;<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    int editsCount = 0;<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    int editsSkipped = 0;<a name="line.287"></a>
+<span class="sourceLineNo">288</span><a name="line.288"></a>
+<span class="sourceLineNo">289</span>    status =<a name="line.289"></a>
+<span class="sourceLineNo">290</span>        TaskMonitor.get().createStatus(<a name="line.290"></a>
+<span class="sourceLineNo">291</span>          "Splitting log file " + logfile.getPath() + "into a temporary staging area.");<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    Reader in = null;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    this.fileBeingSplit = logfile;<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    try {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      long logLength = logfile.getLen();<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      LOG.info("Splitting wal: " + logPath + ", length=" + logLength);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      LOG.info("DistributedLogReplay = " + this.distributedLogReplay);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      status.setStatus("Opening log file");<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>        progress_failed = true;<a name="line.300"></a>
+<span class="sourceLineNo">301</span>        return false;<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      }<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      try {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>        in = getReader(logfile, skipErrors, reporter);<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      } catch (CorruptedLogFileException e) {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>        LOG.warn("Could not get reader, corrupted log file " + logPath, e);<a name="line.306"></a>
+<span class="sourceLineNo">307</span>        ZKSplitLog.markCorrupted(rootDir, logfile.getPath().getName(), fs);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>        isCorrupted = true;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      }<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      if (in == null) {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        LOG.warn("Nothing to split in log file " + logPath);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        return true;<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      }<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      int numOpenedFilesBeforeReporting = conf.getInt("hbase.splitlog.report.openedfiles", 3);<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      int numOpenedFilesLastCheck = 0;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      outputSink.setReporter(reporter);<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      outputSink.startWriterThreads();<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      outputSinkStarted = true;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      Entry entry;<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      Long lastFlushedSequenceId = -1L;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      ServerName serverName = DefaultWALProvider.getServerNameFromWALDirectoryName(logPath);<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      failedServerName = (serverName == null) ? "" : serverName.getServerName();<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      while ((entry = getNextLogLine(in, logPath, skipErrors)) != null) {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>        byte[] region = entry.getKey().getEncodedRegionName();<a name="line.324"></a>
+<span class="sourceLineNo">325</span>        String encodedRegionNameAsStr = Bytes.toString(region);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>        lastFlushedSequenceId = lastFlushedSequenceIds.get(encodedRegionNameAsStr);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>        if (lastFlushedSequenceId == null) {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>          if (this.distributedLogReplay) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>            RegionStoreSequenceIds ids =<a name="line.329"></a>
+<span class="sourceLineNo">330</span>                csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.330"></a>
+<span class="sourceLineNo">331</span>                  encodedRegionNameAsStr);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>            if (ids != null) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span>              lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.333"></a>
+<span class="sourceLineNo">334</span>              if (LOG.isDebugEnabled()) {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>                LOG.debug("DLR Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.335"></a>
+<span class="sourceLineNo">336</span>                  TextFormat.shortDebugString(ids));<a name="line.336"></a>
+<span class="sourceLineNo">337</span>              }<a name="line.337"></a>
+<span class="sourceLineNo">338</span>            }<a name="line.338"></a>
+<span class="sourceLineNo">339</span>          } else if (sequenceIdChecker != null) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>            RegionStoreSequenceIds ids = sequenceIdChecker.getLastSequenceId(region);<a name="line.340"></a>
+<span class="sourceLineNo">341</span>            Map&lt;byte[], Long&gt; maxSeqIdInStores = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.341"></a>
+<span class="sourceLineNo">342</span>            for (StoreSequenceId storeSeqId : ids.getStoreSequenceIdList()) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>              maxSeqIdInStores.put(storeSeqId.getFamilyName().toByteArray(),<a name="line.343"></a>
+<span class="sourceLineNo">344</span>                storeSeqId.getSequenceId());<a name="line.344"></a>
 <span class="sourceLineNo">345</span>            }<a name="line.345"></a>
-<span class="sourceLineNo">346</span>          }<a name="line.346"></a>
-<span class="sourceLineNo">347</span>          if (lastFlushedSequenceId == null) {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>            lastFlushedSequenceId = -1L;<a name="line.348"></a>
-<span class="sourceLineNo">349</span>          }<a name="line.349"></a>
-<span class="sourceLineNo">350</span>          lastFlushedSequenceIds.put(encodedRegionNameAsStr, lastFlushedSequenceId);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        }<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        if (lastFlushedSequenceId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>          editsSkipped++;<a name="line.353"></a>
-<span class="sourceLineNo">354</span>          continue;<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        }<a name="line.355"></a>
-<span class="sourceLineNo">356</span>        entryBuffers.appendEntry(entry);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        editsCount++;<a name="line.357"></a>
-<span class="sourceLineNo">358</span>        int moreWritersFromLastCheck = this.getNumOpenWriters() - numOpenedFilesLastCheck;<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        // If sufficient edits have passed, check if we should report progress.<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        if (editsCount % interval == 0<a name="line.360"></a>
-<span class="sourceLineNo">361</span>            || moreWritersFromLastCheck &gt; numOpenedFilesBeforeReporting) {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>          numOpenedFilesLastCheck = this.getNumOpenWriters();<a name="line.362"></a>
-<span class="sourceLineNo">363</span>          String countsStr = (editsCount - (editsSkipped + outputSink.getSkippedEdits()))<a name="line.363"></a>
-<span class="sourceLineNo">364</span>              + " edits, skipped " + editsSkipped + " edits.";<a name="line.364"></a>
-<span class="sourceLineNo">365</span>          status.setStatus("Split " + countsStr);<a name="line.365"></a>
-<span class="sourceLineNo">366</span>          if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>            progress_failed = true;<a name="line.367"></a>
-<span class="sourceLineNo">368</span>            return false;<a name="line.368"></a>
-<span class="sourceLineNo">369</span>          }<a name="line.369"></a>
-<span class="sourceLineNo">370</span>        }<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      }<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    } catch (InterruptedException ie) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      IOException iie = new InterruptedIOException();<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      iie.initCause(ie);<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      throw iie;<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    } catch (CorruptedLogFileException e) {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      LOG.warn("Could not parse, corrupted log file " + logPath, e);<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      csm.getSplitLogWorkerCoordination().markCorrupted(rootDir,<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        logfile.getPath().getName(), fs);<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      isCorrupted = true;<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    } catch (IOException e) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      throw e;<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    } finally {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      LOG.debug("Finishing writing output logs and closing down.");<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      try {<a name="line.386"></a>
-<span class="sourceLineNo">387</span>        if (null != in) {<a name="line.387"></a>
-<span class="sourceLineNo">388</span>          in.close();<a name="line.388"></a>
-<span class="sourceLineNo">389</span>        }<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      } catch (IOException exception) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        LOG.warn("Could not close wal reader: " + exception.getMessage());<a name="line.391"></a>
-<span class="sourceLineNo">392</span>        LOG.debug("exception details", exception);<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      }<a name="line.393"></a>
-<span class="sourceLineNo">394</span>      try {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        if (outputSinkStarted) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>          // Set progress_failed to true as the immediate following statement will reset its value<a name="line.396"></a>
-<span class="sourceLineNo">397</span>          // when finishWritingAndClose() throws exception, progress_failed has the right value<a name="line.397"></a>
-<span class="sourceLineNo">398</span>          progress_failed = true;<a name="line.398"></a>
-<span class="sourceLineNo">399</span>          progress_failed = outputSink.finishWritingAndClose() == null;<a name="line.399"></a>
-<span class="sourceLineNo">400</span>        }<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      } finally {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        String msg =<a name="line.402"></a>
-<span class="sourceLineNo">403</span>            "Processed " + editsCount + " edits across " + outputSink.getNumberOfRecoveredRegions()<a name="line.403"></a>
-<span class="sourceLineNo">404</span>                + " regions; edits skipped=" + editsSkipped + "; log file=" + logPath +<a name="line.404"></a>
-<span class="sourceLineNo">405</span>                ", length=" + logfile.getLen() + // See if length got updated post lease recovery<a name="line.405"></a>
-<span class="sourceLineNo">406</span>                ", corrupted=" + isCorrupted + ", progress failed=" + progress_failed;<a name="line.406"></a>
-<span class="sourceLineNo">407</span>        LOG.info(msg);<a name="line.407"></a>
-<span class="sourceLineNo">408</span>        status.markComplete(msg);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      }<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    }<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    return !progress_failed;<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>   * Completes the work done by splitLogFile by archiving logs<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   * &lt;p&gt;<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * It is invoked by SplitLogManager once it knows that one of the<a name="line.417"></a>
-<span class="sourceLineNo">418</span>   * SplitLogWorkers have completed the splitLogFile() part. If the master<a name="line.418"></a>
-<span class="sourceLineNo">419</span>   * crashes then this function might get called multiple times.<a name="line.419"></a>
-<span class="sourceLineNo">420</span>   * &lt;p&gt;<a name="line.420"></a>
-<span class="sourceLineNo">421</span>   * @param logfile<a name="line.421"></a>
-<span class="sourceLineNo">422</span>   * @param conf<a name="line.422"></a>
-<span class="sourceLineNo">423</span>   * @throws IOException<a name="line.423"></a>
-<span class="sourceLineNo">424</span>   */<a name="line.424"></a>
-<span class="sourceLineNo">425</span>  public static void finishSplitLogFile(String logfile,<a name="line.425"></a>
-<span class="sourceLineNo">426</span>      Configuration conf)  throws IOException {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    Path rootdir = FSUtils.getRootDir(conf);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    Path oldLogDir = new Path(rootdir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    Path logPath;<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    if (FSUtils.isStartingWithPath(rootdir, logfile)) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      logPath = new Path(logfile);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    } else {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      logPath = new Path(rootdir, logfile);<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    }<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    finishSplitLogFile(rootdir, oldLogDir, logPath, conf);<a name="line.435"></a>
-<span class="sourceLineNo">436</span>  }<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>  static void finishSplitLogFile(Path rootdir, Path oldLogDir,<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      Path logPath, Configuration conf) throws IOException {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    List&lt;Path&gt; processedLogs = new ArrayList&lt;Path&gt;();<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    List&lt;Path&gt; corruptedLogs = new ArrayList&lt;Path&gt;();<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    FileSystem fs;<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    fs = rootdir.getFileSystem(conf);<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    if (ZKSplitLog.isCorrupted(rootdir, logPath.getName(), fs)) {<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      corruptedLogs.add(logPath);<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    } else {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      processedLogs.add(logPath);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    }<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    archiveLogs(corruptedLogs, processedLogs, oldLogDir, fs, conf);<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    Path stagingDir = ZKSplitLog.getSplitLogDir(rootdir, logPath.getName());<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    fs.delete(stagingDir, true);<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  }<a name="line.452"></a>
-<span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span>  /**<a name="line.454"></a>
-<span class="sourceLineNo">455</span>   * Moves processed logs to a oldLogDir after successful processing Moves<a name="line.455"></a>
-<span class="sourceLineNo">456</span>   * corrupted logs (any log that couldn't be successfully parsed to corruptDir<a name="line.456"></a>
-<span class="sourceLineNo">457</span>   * (.corrupt) for later investigation<a name="line.457"></a>
-<span class="sourceLineNo">458</span>   *<a name="line.458"></a>
-<span class="sourceLineNo">459</span>   * @param corruptedLogs<a name="line.459"></a>
-<span class="sourceLineNo">460</span>   * @param processedLogs<a name="line.460"></a>
-<span class="sourceLineNo">461</span>   * @param oldLogDir<a name="line.461"></a>
-<span class="sourceLineNo">462</span>   * @param fs<a name="line.462"></a>
-<span class="sourceLineNo">463</span>   * @param conf<a name="line.463"></a>
-<span class="sourceLineNo">464</span>   * @throws IOException<a name="line.464"></a>
-<span class="sourceLineNo">465</span>   */<a name="line.465"></a>
-<span class="sourceLineNo">466</span>  private static void archiveLogs(<a name="line.466"></a>
-<span class="sourceLineNo">467</span>      final List&lt;Path&gt; corruptedLogs,<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      final List&lt;Path&gt; processedLogs, final Path oldLogDir,<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      final FileSystem fs, final Configuration conf) throws IOException {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    final Path corruptDir = new Path(FSUtils.getRootDir(conf), conf.get(<a name="line.470"></a>
-<span class="sourceLineNo">471</span>        "hbase.regionserver.hlog.splitlog.corrupt.dir",  HConstants.CORRUPT_DIR_NAME));<a name="line.471"></a>
-<span class="sourceLineNo">472</span><a name="line.472"></a>
-<span class="sourceLineNo">473</span>    if (!fs.mkdirs(corruptDir)) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      LOG.info("Unable to mkdir " + corruptDir);<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    }<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    fs.mkdirs(oldLogDir);<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>    // this method can get restarted or called multiple times for archiving<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    // the same log files.<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    for (Path corrupted : corruptedLogs) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      Path p = new Path(corruptDir, corrupted.getName());<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      if (fs.exists(corrupted)) {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        if (!fs.rename(corrupted, p)) {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>          LOG.warn("Unable to move corrupted log " + corrupted + " to " + p);<a name="line.484"></a>
-<span class="sourceLineNo">485</span>        } else {<a name="line.485"></a>
-<span class="sourceLineNo">486</span>          LOG.warn("Moved corrupted log " + corrupted + " to " + p);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>        }<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      }<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    }<a name="line.489"></a>
-<span class="sourceLineNo">490</span><a name="line.490"></a>
-<span class="sourceLineNo">491</span>    for (Path p : processedLogs) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      Path newPath = FSHLog.getWALArchivePath(oldLogDir, p);<a name="line.492"></a>
-<span class="sourceLineNo">493</span>      if (fs.exists(p)) {<a name="line.493"></a>
-<span class="sourceLineNo">494</span>        if (!FSUtils.renameAndSetModifyTime(fs, p, newPath)) {<a name="line.494"></a>
-<span class="sourceLineNo">495</span>          LOG.warn("Unable to move  " + p + " to " + newPath);<a name="line.495"></a>
-<span class="sourceLineNo">496</span>        } else {<a name="line.496"></a>
-<span class="sourceLineNo">497</span>          LOG.info("Archived processed log " + p + " to " + newPath);<a name="line.497"></a>
-<span class="sourceLineNo">498</span>        }<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      }<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><a name="line.502"></a>
-<span class="sourceLineNo">503</span>  /**<a name="line.503"></a>
-<span class="sourceLineNo">504</span>   * Path to a file under RECOVERED_EDITS_DIR directory of the region found in<a name="line.504"></a>
-<span class="sourceLineNo">505</span>   * &lt;code&gt;logEntry&lt;/code&gt; named for the sequenceid in the passed<a name="line.505"></a>
-<span class="sourceLineNo">506</span>   * &lt;code&gt;logEntry&lt;/code&gt;: e.g. /hbase/some_table/2323432434/recovered.edits/2332.<a name="line.506"></a>
-<span class="sourceLineNo">507</span>   * This method also ensures existence of RECOVERED_EDITS_DIR under the region<a name="line.507"></a>
-<span class="sourceLineNo">508</span>   * creating it if necessary.<a name="line.508"></a>
-<span class="sourceLineNo">509</span>   * @param fs<a name="line.509"></a>
-<span class="sourceLineNo">510</span>   * @param logEntry<a name="line.510"></a>
-<span class="sourceLineNo">511</span>   * @param rootDir HBase root dir.<a name="line.511"></a>
-<span class="sourceLineNo">512</span>   * @return Path to file into which to dump split log edits.<a name="line.512"></a>
-<span class="sourceLineNo">513</span>   * @throws IOException<a name="line.513"></a>
-<span class="sourceLineNo">514</span>   */<a name="line.514"></a>
-<span class="sourceLineNo">515</span>  @SuppressWarnings("deprecation")<a name="line.515"></a>
-<span class="sourceLineNo">516</span>  static Path getRegionSplitEditsPath(final FileSystem fs,<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      final Entry logEntry, final Path rootDir, boolean isCreate)<a name="line.517"></a>
-<span class="sourceLineNo">518</span>  throws IOException {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    Path tableDir = FSUtils.getTableDir(rootDir, logEntry.getKey().getTablename());<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    String encodedRegionName = Bytes.toString(logEntry.getKey().getEncodedRegionName());<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    Path regiondir = HRegion.getRegionDir(tableDir, encodedRegionName);<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    Path dir = getRegionDirRecoveredEditsDir(regiondir);<a name="line.522"></a>
-<span class="sourceLineNo">523</span><a name="line.523"></a>
-<span class="sourceLineNo">524</span>    if (!fs.exists(regiondir)) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      LOG.info("This region's directory doesn't exist: "<a name="line.525"></a>
-<span class="sourceLineNo">526</span>          + regiondir.toString() + ". It is very likely that it was" +<a name="line.526"></a>
-<span class="sourceLineNo">527</span>          " already split so it's safe to discard those edits.");<a name="line.527"></a>
-<span class="sourceLineNo">528</span>      return null;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    }<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    if (fs.exists(dir) &amp;&amp; fs.isFile(dir)) {<a name="line.530"></a>
-<span class="sourceLineNo">531</span>      Path tmp = new Path("/tmp");<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      if (!fs.exists(tmp)) {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>        fs.mkdirs(tmp);<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      }<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      tmp = new Path(tmp,<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        HConstants.RECOVERED_EDITS_DIR + "_" + encodedRegionName);<a name="line.536"></a>
-<span class="sourceLineNo">537</span>      LOG.warn("Found existing old file: " + dir + ". It could be some "<a name="line.537"></a>
-<span class="sourceLineNo">538</span>        + "leftover of an old installation. It should be a folder instead. "<a name="line.538"></a>
-<span class="sourceLineNo">539</span>        + "So moving it to " + tmp);<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      if (!fs.rename(dir, tmp)) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        LOG.warn("Failed to sideline old file " + dir);<a name="line.541"></a>
-<span class="sourceLineNo">542</span>      }<a name="line.542"></a>
-<span class="sourceLineNo">543</span>    }<a name="line.543"></a>
-<span class="sourceLineNo">544</span><a name="line.544"></a>
-<span class="sourceLineNo">545</span>    if (isCreate &amp;&amp; !fs.exists(dir)) {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>      if (!fs.mkdirs(dir)) LOG.warn("mkdir failed on " + dir);<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    }<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    // Append file name ends with RECOVERED_LOG_TMPFILE_SUFFIX to ensure<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    // region's replayRecoveredEdits will not delete it<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    String fileName = formatRecoveredEditsFileName(logEntry.getKey().getLogSeqNum());<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    fileName = getTmpRecoveredEditsFileName(fileName);<a name="line.551"></a>
-<span class="sourceLineNo">552</span>    return new Path(dir, fileName);<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>  static String getTmpRecoveredEditsFileName(String fileName) {<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    return fileName + RECOVERED_LOG_TMPFILE_SUFFIX;<a name="line.556"></a>
-<span class="sourceLineNo">557</span>  }<a name="line.557"></a>
-<span class="sourceLineNo">558</span><a name="line.558"></a>
-<span class="sourceLineNo">559</span>  /**<a name="line.559"></a>
-<span class="sourceLineNo">560</span>   * Get the completed recovered edits file path, renaming it to be by last edit<a name="line.560"></a>
-<span class="sourceLineNo">561</span>   * in the file from its first edit. Then we could use the name to skip<a name="line.561"></a>
-<span class="sourceLineNo">562</span>   * recovered edits when doing {@link HRegion#replayRecoveredEditsIfAny}.<a name="line.562"></a>
-<span class="sourceLineNo">563</span>   * @param srcPath<a name="line.563"></a>
-<span class="sourceLineNo">564</span>   * @param maximumEditLogSeqNum<a name="line.564"></a>
-<span class="sourceLineNo">565</span>   * @return dstPath take file's last edit log seq num as the name<a name="line.565"></a>
-<span class="sourceLineNo">566</span>   */<a name="line.566"></a>
-<span class="sourceLineNo">567</span>  static Path getCompletedRecoveredEditsFilePath(Path srcPath,<a name="line.567"></a>
-<span class="sourceLineNo">568</span>      Long maximumEditLogSeqNum) {<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    String fileName = formatRecoveredEditsFileName(maximumEditLogSeqNum);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    return new Path(srcPath.getParent(), fileName);<a name="line.570"></a>
-<span class="sourceLineNo">571</span>  }<a name="line.571"></a>
-<span class="sourceLineNo">572</span><a name="line.572"></a>
-<span class="sourceLineNo">573</span>  static String formatRecoveredEditsFileName(final long seqid) {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    return String.format("%019d", seqid);<a name="line.574"></a>
-<span class="sourceLineNo">575</span>  }<a name="line.575"></a>
-<span class="sourceLineNo">576</span><a name="line.576"></a>
-<span class="sourceLineNo">577</span>  private static final Pattern EDITFILES_NAME_PATTERN = Pattern.compile("-?[0-9]+");<a name="line.577"></a>
-<span class="sourceLineNo">578</span>  private static final String RECOVERED_LOG_TMPFILE_SUFFIX = ".temp";<a name="line.578"></a>
-<span class="sourceLineNo">579</span><a name="line.579"></a>
-<span class="sourceLineNo">580</span>  /**<a name="line.580"></a>
-<span class="sourceLineNo">581</span>   * @param regiondir<a name="line.581"></a>
-<span class="sourceLineNo">582</span>   *          This regions directory in the filesystem.<a name="line.582"></a>
-<span class="sourceLineNo">583</span>   * @return The directory that holds recovered edits files for the region<a name="line.583"></a>
-<span class="sourceLineNo">584</span>   *         &lt;code&gt;regiondir&lt;/code&gt;<a name="line.584"></a>
-<span class="sourceLineNo">585</span>   */<a name="line.585"></a>
-<span class="sourceLineNo">586</span>  public static Path getRegionDirRecoveredEditsDir(final Path regiondir) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    return new Path(regiondir, HConstants.RECOVERED_EDITS_DIR);<a name="line.587"></a>
-<span class="sourceLineNo">588</span>  }<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span>  /**<a name="line.590"></a>
-<span class="sourceLineNo">591</span>   * Returns sorted set of edit files made by splitter, excluding files<a name="line.591"></a>
-<span class="sourceLineNo">592</span>   * with '.temp' suffix.<a name="line.592"></a>
-<span class="sourceLineNo">593</span>   *<a name="line.593"></a>
-<span class="sourceLineNo">594</span>   * @param fs<a name="line.594"></a>
-<span class="sourceLineNo">595</span>   * @param regiondir<a name="line.595"></a>
-<span class="sourceLineNo">596</span>   * @return Files in passed &lt;code&gt;regiondir&lt;/code&gt; as a sorted set.<a name="line.596"></a>
-<span class="sourceLineNo">597</span>   * @throws IOException<a name="line.597"></a>
-<span class="sourceLineNo">598</span>   */<a name="line.598"></a>
-<span class="sourceLineNo">599</span>  public static NavigableSet&lt;Path&gt; getSplitEditFilesSorted(final FileSystem fs,<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      final Path regiondir) throws IOException {<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    NavigableSet&lt;Path&gt; filesSorted = new TreeSet&lt;Path&gt;();<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    Path editsdir = getRegionDirRecoveredEditsDir(regiondir);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    if (!fs.exists(editsdir))<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      return filesSorted;<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    FileStatus[] files = FSUtils.listStatus(fs, editsdir, new PathFilter() {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      @Override<a name="line.606"></a>
-<span class="sourceLineNo">607</span>      public boolean accept(Path p) {<a name="line.607"></a>
-<span class="sourceLineNo">608</span>        boolean result = false;<a name="line.608"></a>
-<span class="sourceLineNo">609</span>        try {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>          // Return files and only files that match the editfile names pattern.<a name="line.610"></a>
-<span class="sourceLineNo">611</span>          // There can be other files in this directory other than edit files.<a name="line.611"></a>
-<span class="sourceLineNo">612</span>          // In particular, on error, we'll move aside the bad edit file giving<a name="line.612"></a>
-<span class="sourceLineNo">613</span>          // it a timestamp suffix. See moveAsideBadEditsFile.<a name="line.613"></a>
-<span class="sourceLineNo">614</span>          Matcher m = EDITFILES_NAME_PATTERN.matcher(p.getName());<a name="line.614"></a>
-<span class="sourceLineNo">615</span>          result = fs.isFile(p) &amp;&amp; m.matches();<a name="line.615"></a>
-<span class="sourceLineNo">616</span>          // Skip the file whose name ends with RECOVERED_LOG_TMPFILE_SUFFIX,<a name="line.616"></a>
-<span class="sourceLineNo">617</span>          // because it means splitwal thread is writting this file.<a name="line.617"></a>
-<span class="sourceLineNo">618</span>          if (p.getName().endsWith(RECOVERED_LOG_TMPFILE_SUFFIX)) {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>            result = false;<a name="line.619"></a>
-<span class="sourceLineNo">620</span>          }<a name="line.620"></a>
-<span class="sourceLineNo">621</span>          // Skip SeqId Files<a name="line.621"></a>
-<span class="sourceLineNo">622</span>          if (isSequenceIdFile(p)) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span>            result = false;<a name="line.623"></a>
-<span class="sourceLineNo">624</span>          }<a name="line.624"></a>
-<span class="sourceLineNo">625</span>        } catch (IOException e) {<a name="line.625"></a>
-<span class="sourceLineNo">626</span>          LOG.warn("Failed isFile check on " + p);<a name="line.626"></a>
-<span class="sourceLineNo">627</span>        }<a name="line.627"></a>
-<span class="sourceLineNo">628</span>        return result;<a name="line.628"></a>
-<span class="sourceLineNo">629</span>      }<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    });<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    if (files == null) {<a name="line.631"></a>
-<span class="sourceLineNo">632</span>      return filesSorted;<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    }<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    for (FileStatus status : files) {<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      filesSorted.add(status.getPath());<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    }<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    return filesSorted;<a name="line.637"></a>
-<span class="sourceLineNo">638</span>  }<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>   * Move aside a bad edits file.<a name="line.641"></a>
-<span class="sourceLineNo">642</span>   *<a name="line.642"></a>
-<span class="sourceLineNo">643</span>   * @param fs<a name="line.643"></a>
-<span class="sourceLineNo">644</span>   * @param edits<a name="line.644"></a>
-<span class="sourceLineNo">645</span>   *          Edits file to move aside.<a name="line.645"></a>
-<span class="sourceLineNo">646</span>   * @return The name of the moved aside file.<a name="line.646"></a>
-<span class="sourceLineNo">647</span>   * @throws IOException<a name="line.647"></a>
-<span class="sourceLineNo">648</span>   */<a name="line.648"></a>
-<span class="sourceLineNo">649</span>  public static Path moveAsideBadEditsFile(final FileSystem fs, final Path edits)<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      throws IOException {<a name="line.650"></a>
-<span class="sourceLineNo">651</span>    Path moveAsideName = new Path(edits.getParent(), edits.getName() + "."<a name="line.651"></a>
-<span class="sourceLineNo">652</span>        + System.currentTimeMillis());<a name="line.652"></a>
-<span class="sourceLineNo">653</span>    if (!fs.rename(edits, moveAsideName)) {<a name="line.653"></a>
-<span class="sourceLineNo">654</span>      LOG.warn("Rename failed from " + edits + " to " + moveAsideName);<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    }<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    return moveAsideName;<a name="line.656"></a>
-<span class="sourceLineNo">657</span>  }<a name="line.657"></a>
-<span class="sourceLineNo">658</span><a name="line.658"></a>
-<span class="sourceLineNo">659</span>  private static final String SEQUENCE_ID_FILE_SUFFIX = ".seqid";<a name="line.659"></a>
-<span class="sourceLineNo">660</span>  private static final String OLD_SEQUENCE_ID_FILE_SUFFIX = "_seqid";<a name="line.660"></a>
-<span class="sourceLineNo">661</span>  private static final int SEQUENCE_ID_FILE_SUFFIX_LENGTH = SEQUENCE_ID_FILE_SUFFIX.length();<a name="line.661"></a>
-<span class="sourceLineNo">662</span><a name="line.662"></a>
-<span class="sourceLineNo">663</span>  /**<a name="line.663"></a>
-<span class="sourceLineNo">664</span>   * Is the given file a region open sequence id file.<a name="line.664"></a>
-<span class="sourceLineNo">665</span>   */<a name="line.665"></a>
-<span class="sourceLineNo">666</span>  @VisibleForTesting<a name="line.666"></a>
-<span class="sourceLineNo">667</span>  public static boolean isSequenceIdFile(final Path file) {<a name="line.667"></a>
-<span class="sourceLineNo">668</span>    return file.getName().endsWith(SEQUENCE_ID_FILE_SUFFIX)<a name="line.668"></a>
-<span class="sourceLineNo">669</span>        || file.getName().endsWith(OLD_SEQUENCE_ID_FILE_SUFFIX);<a name="line.669"></a>
-<span class="sourceLineNo">670</span>  }<a name="line.670"></a>
+<span class="sourceLineNo">346</span>            regionMaxSeqIdInStores.put(encodedRegionNameAsStr, maxSeqIdInStores);<a name="line.346"></a>
+<span class="sourceLineNo">347</span>            lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.347"></a>
+<span class="sourceLineNo">348</span>            if (LOG.isDebugEnabled()) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>              LOG.debug("DLS Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.349"></a>
+<span class="sourceLineNo">350</span>                  TextFormat.shortDebugString(ids));<a name="line.350"></a>
+<span class="sourceLineNo">351</span>            }<a name="line.351"></a>
+<span class="sourceLineNo">352</span>          }<a name="line.352"></a>
+<span class="sourceLineNo">353</span>          if (lastFlushedSequenceId == null) {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>            lastFlushedSequenceId = -1L;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>          }<a name="line.355"></a>
+<span class="sourceLineNo">356</span>          lastFlushedSequenceIds.put(encodedRegionNameAsStr, lastFlushedSequenceId);<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        }<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        if (lastFlushedSequenceId &gt;= entry.getKey().getSequenceId()) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>          editsSkipped++;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>          continue;<a name="line.360"></a>
+<span class="sourceLineNo">361</span>        }<a name="line.361"></a>
+<span class="sourceLineNo">362</span>        entryBuffers.appendEntry(entry);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        editsCount++;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>        int moreWritersFromLastCheck = this.getNumOpenWriters() - numOpenedFilesLastCheck;<a name="line.364"></a>
+<span class="sourceLineNo">365</span>        // If sufficient edits have passed, check if we should report progress.<a name="line.365"></a>
+<span class="sourceLineNo">366</span>        if (editsCount % interval == 0<a name="line.366"></a>
+<span class="sourceLineNo">367</span>            || moreWritersFromLastCheck &gt; numOpenedFilesBeforeReporting) {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>          numOpenedFilesLastCheck = this.getNumOpenWriters();<a name="line.368"></a>
+<span class="sourceLineNo">369</span>          String countsStr = (editsCount - (editsSkipped + outputSink.getSkippedEdits()))<a name="line.369"></a>
+<span class="sourceLineNo">370</span>              + " edits, skipped " + editsSkipped + " edits.";<a name="line.370"></a>
+<span class="sourceLineNo">371</span>          status.setStatus("Split " + countsStr);<a name="line.371"></a>
+<span class="sourceLineNo">372</span>          if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>            progress_failed = true;<a name="line.373"></a>
+<span class="sourceLineNo">374</span>            return false;<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>      }<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    } catch (InterruptedException ie) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      IOException iie = new InterruptedIOException();<a name="line.379"></a>
+<span class="sourceLineNo">380</span>      iie.initCause(ie);<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      throw iie;<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    } catch (CorruptedLogFileException e) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      LOG.warn("Could not parse, corrupted log file " + logPath, e);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      csm.getSplitLogWorkerCoordination().markCorrupted(rootDir,<a name="line.384"></a>
+<span class="sourceLineNo">385</span>        logfile.getPath().getName(), fs);<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      isCorrupted = true;<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    } catch (IOException e) {<a name="line.387"></a>
+<span class="sourceLineNo">388</span>      e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      throw e;<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    } finally {<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      LOG.debug("Finishing writing output logs and closing down.");<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      try {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>        if (null != in) {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>          in.close();<a name="line.394"></a>
+<span class="sourceLineNo">395</span>        }<a name="line.395"></a>
+<span class="sourceLineNo">396</span>      } catch (IOException exception) {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>        LOG.warn("Could not close wal reader: " + exception.getMessage());<a name="line.397"></a>
+<span class="sourceLineNo">398</span>        LOG.debug("exception details", exception);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      }<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      try {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>        if (outputSinkStarted) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>          // Set progress_failed to true as the immediate following statement will reset its value<a name="line.402"></a>
+<span class="sourceLineNo">403</span>          // when finishWritingAndClose() throws exception, progress_failed has the right value<a name="line.403"></a>
+<span class="sourceLineNo">404</span>          progress_failed = true;<a name="line.404"></a>
+<span class="sourceLineNo">405</span>          progress_failed = outputSink.finishWritingAndClose() == null;<a name="line.405"></a>
+<span class="sourceLineNo">406</span>        }<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      } finally {<a name="line.407"></a>
+<span class="sourceLineNo">408</span>        String msg =<a name="line.408"></a>
+<span class="sourceLineNo">409</span>            "Processed " + editsCount + " edits across " + outputSink.getNumberOfRecoveredRegions()<a name="line.409"></a>
+<span class="sourceLineNo">410</span>                + " regions; edits skipped=" + editsSkipped + "; log file=" + logPath +<a name="line.410"></a>
+<span class="sourceLineNo">411</span>                ", length=" + logfile.getLen() + // See if length got updated post lease recovery<a name="line.411"></a>
+<span class="sourceLineNo">412</span>                ", corrupted=" + isCorrupted + ", progress failed=" + progress_failed;<a name="line.412"></a>
+<span class="sourceLineNo">413</span>        LOG.info(msg);<a name="line.413"></a>
+<span class="sourceLineNo">414</span>        status.markComplete(msg);<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>    return !progress_failed;<a name="line.417"></a>
+<span class="sourceLineNo">418</span>  }<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>   * Completes the work done by splitLogFile by archiving logs<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   * &lt;p&gt;<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   * It is invoked by SplitLogManager once it knows that one of the<a name="line.423"></a>
+<span class="sourceLineNo">424</span>   * SplitLogWorkers have completed the splitLogFile() part. If the master<a name="line.424"></a>
+<span class="sourceLineNo">425</span>   * crashes then this function might get called multiple times.<a name="line.425"></a>
+<span class="sourceLineNo">426</span>   * &lt;p&gt;<a name="line.426"></a>
+<span class="sourceLineNo">427</span>   * @param logfile<a name="line.427"></a>
+<span class="sourceLineNo">428</span>   * @param conf<a name="line.428"></a>
+<span class="sourceLineNo">429</span>   * @throws IOException<a name="line.429"></a>
+<span class="sourceLineNo">430</span>   */<a name="line.430"></a>
+<span class="sourceLineNo">431</span>  public static void finishSplitLogFile(String logfile,<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      Configuration conf)  throws IOException {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    Path rootdir = FSUtils.getRootDir(conf);<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    Path oldLogDir = new Path(rootdir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.434"></a>
+<span class="sourceLineNo">435</span>    Path logPath;<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    if (FSUtils.isStartingWithPath(rootdir, logfile)) {<a name="line.436"></a>
+<span class="sourceLineNo">437</span>      logPath = new Path(logfile);<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    } else {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>      logPath = new Path(rootdir, logfile);<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    }<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    finishSplitLogFile(rootdir, oldLogDir, logPath, conf);<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>  private static void finishSplitLogFile(Path rootdir, Path oldLogDir,<a name="line.444"></a>
+<span class="sourceLineNo">445</span>      Path logPath, Configuration conf) throws IOException {<a name="line.445"></a>
+<span class="sourceLineNo">446</span>    List&lt;Path&gt; processedLogs = new ArrayList&lt;Path&gt;();<a name="line.446"></a>
+<span class="sourceLineNo">447</span>    List&lt;Path&gt; corruptedLogs = new ArrayList&lt;Path&gt;();<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    FileSystem fs;<a name="line.448"></a>
+<span class="sourceLineNo">449</span>    fs = rootdir.getFileSystem(conf);<a name="line.449"></a>
+<span class="sourceLineNo">450</span>    if (ZKSplitLog.isCorrupted(rootdir, logPath.getName(), fs)) {<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      corruptedLogs.add(logPath);<a name="line.451"></a>
+<span class="sourceLineNo">452</span>    } else {<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      processedLogs.add(logPath);<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    }<a name="line.454"></a>
+<span class="sourceLineNo">455</span>    archiveLogs(corruptedLogs, processedLogs, oldLogDir, fs, conf);<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    Path stagingDir = ZKSplitLog.getSplitLogDir(rootdir, logPath.getName());<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    fs.delete(stagingDir, true);<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>  /**<a name="line.460"></a>
+<span class="sourceLineNo">461</span>   * Moves processed logs to a oldLogDir after successful processing Moves<a name="line.461"></a>
+<span class="sourceLineNo">462</span>   * corrupted logs (any log that couldn't be successfully parsed to corruptDir<a name="line.462"></a>
+<span class="sourceLineNo">463</span>   * (.corrupt) for later investigation<a name="line.463"></a>
+<span class="sourceLineNo">464</span>   *<a name="line.464"></a>
+<span class="sourceLineNo">465</span>   * @param corruptedLogs<a name="line.465"></a>
+<span class="sourceLineNo">466</span>   * @param processedLogs<a name="line.466"></a>
+<span class="sourceLineNo">467</span>   * @param oldLogDir<a name="line.467"></a>
+<span class="sourceLineNo">468</span>   * @param fs<a name="line.468"></a>
+<span class="sourceLineNo">469</span>   * @param conf<a name="line.469"></a>
+<span class="sourceLineNo">470</span>   * @throws IOException<a name="line.470"></a>
+<span class="sourceLineNo">471</span>   */<a name="line.471"></a>
+<span class="sourceLineNo">472</span>  private static void archiveLogs(<a name="line.472"></a>
+<span class="sourceLineNo">473</span>      final List&lt;Path&gt; corruptedLogs,<a name="line.473"></a>
+<span class="sourceLineNo">474</span>      final List&lt;Path&gt; processedLogs, final Path oldLogDir,<a name="line.474"></a>
+<span class="sourceLineNo">475</span>      final FileSystem fs, final Configuration conf) throws IOException {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    final Path corruptDir = new Path(FSUtils.getRootDir(conf), conf.get(<a name="line.476"></a>
+<span class="sourceLineNo">477</span>        "hbase.regionserver.hlog.splitlog.corrupt.dir",  HConstants.CORRUPT_DIR_NAME));<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>    if (!fs.mkdirs(corruptDir)) {<a name="line.479"></a>
+<span class="sourceLineNo">480</span>      LOG.info("Unable to mkdir " + corruptDir);<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    }<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    fs.mkdirs(oldLogDir);<a name="line.482"></a>
+<span class="sourceLineNo">483</span><a name="line.483"></a>
+<span class="sourceLineNo">484</span>    // this method can get restarted or called multiple times for archiving<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    // the same log files.<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    for (Path corrupted : corruptedLogs) {<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      Path p = new Path(corruptDir, corrupted.getName());<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      if (fs.exists(corrupted)) {<a name="line.488"></a>
+<span class="sourceLineNo">489</span>        if (!fs.rename(corrupted, p)) {<a name="line.489"></a>
+<span class="sourceLineNo">490</span>          LOG.warn("Unable to move corrupted log " + corrupted + " to " + p);<a name="line.490"></a>
+<span class="sourceLineNo">491</span>        } else {<a name="line.491"></a>
+<span class="sourceLineNo">492</span>          LOG.warn("Moved corrupted log " + corrupted + " to " + p);<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>    }<a name="line.495"></a>
+<span class="sourceLineNo">496</span><a name="line.496"></a>
+<span class="sourceLineNo">497</span>    for (Path p : processedLogs) {<a name="line.497"></a>
+<span class="sourceLineNo">498</span>      Path newPath = FSHLog.getWALArchivePath(oldLogDir, p);<a name="line.498"></a>
+<span class="sourceLineNo">499</span>      if (fs.exists(p)) {<a name="line.499"></a>
+<span class="sourceLineNo">500</span>        if (!FSUtils.renameAndSetModifyTime(fs, p, newPath)) {<a name="line.500"></a>
+<span class="sourceLineNo">501</span>          LOG.warn("Unable to move  " + p + " to " + newPath);<a name="line.501"></a>
+<span class="sourceLineNo">502</span>        } else {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>          LOG.info("Archived processed log " + p + " to " + newPath);<a name="line.503"></a>
+<span class="sourceLineNo">504</span>        }<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      }<a name="line.505"></a>
+<span class="sourceLineNo">506</span>    }<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>  /**<a name="line.509"></a>
+<span class="sourceLineNo">510</span>   * Path to a file under RECOVERED_EDITS_DIR directory of the region found in<a name="line.510"></a>
+<span class="sourceLineNo">511</span>   * &lt;code&gt;logEntry&lt;/code&gt; named for the sequenceid in the passed<a name="line.511"></a>
+<span class="sourceLineNo">512</span>   * &lt;code&gt;logEntry&lt;/code&gt;: e.g. /hbase/some_table/2323432434/recovered.edits/2332.<a name="line.512"></a>
+<span class="sourceLineNo">513</span>   * This method also ensures existence of RECOVERED_EDITS_DIR under the region<a name="line.513"></a>
+<span class="sourceLineNo">514</span>   * creating it if necessary.<a name="line.514"></a>
+<span class="sourceLineNo">515</span>   * @param fs<a name="line.515"></a>
+<span class="sourceLineNo">516</span>   * @param logEntry<a name="line.516"></a>
+<span class="sourceLineNo">517</span>   * @param rootDir HBase root dir.<a name="line.517"></a>
+<span class="sourceLineNo">518</span>   * @param fileBeingSplit the file being split currently. Used to generate tmp file name.<a name="line.518"></a>
+<span class="sourceLineNo">519</span>   * @return Path to file into which to dump split log edits.<a name="line.519"></a>
+<span class="sourceLineNo">520</span>   * @throws IOException<a name="line.520"></a>
+<span class="sourceLineNo">521</span>   */<a name="line.521"></a>
+<span class="sourceLineNo">522</span>  @SuppressWarnings("deprecation")<a name="line.522"></a>
+<span class="sourceLineNo">523</span>  private static Path getRegionSplitEditsPath(final FileSystem fs,<a name="line.523"></a>
+<span class="sourceLineNo">524</span>      final Entry logEntry, final Path rootDir, FileStatus fileBeingSplit)<a name="line.524"></a>
+<span class="sourceLineNo">525</span>  throws IOException {<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    Path tableDir = FSUtils.getTableDir(rootDir, logEntry.getKey().getTablename());<a name="line.526"></a>
+<span class="sourceLineNo">527</span>    String encodedRegionName = Bytes.toString(logEntry.getKey().getEncodedRegionName());<a name="line.527"></a>
+<span class="sourceLineNo">528</span>    Path regiondir = HRegion.getRegionDir(tableDir, encodedRegionName);<a name="line.528"></a>
+<span class="sourceLineNo">529</span>    Path dir = getRegionDirRecoveredEditsDir(regiondir);<a name="line.529"></a>
+<span class="sourceLineNo">530</span><a name="line.530"></a>
+<span class="sourceLineNo">531</span>    if (!fs.exists(regiondir)) {<a name="line.531"></a>
+<span class="sourceLineNo">532</span>      LOG.info("This region's directory doesn't exist: "<a name="line.532"></a>
+<span class="sourceLineNo">533</span>          + regiondir.toString() + ". It is very likely that it was" +<a name="line.533"></a>
+<span class="sourceLineNo">534</span>          " already split so it's safe to discard those edits.");<a name="line.534"></a>
+<span class="sourceLineNo">535</span>      return null;<a name="line.535"></a>
+<span class="sourceLineNo">536</span>    }<a name="line.536"></a>
+<span class="sourceLineNo">537</span>    if (fs.exists(dir) &amp;&amp; fs.isFile(dir)) {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      Path tmp = new Path("/tmp");<a name="line.538"></a>
+<span class="sourceLineNo">539</span>      if (!fs.exists(tmp)) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span>        fs.mkdirs(tmp);<a name="line.540"></a>
+<span class="sourceLineNo">541</span>      }<a name="line.541"></a>
+<span class="sourceLineNo">542</span>      tmp = new Path(tmp,<a name="line.542"></a>
+<span class="sourceLineNo">543</span>        HConstants.RECOVERED_EDITS_DIR + "_" + encodedRegionName);<a name="line.543"></a>
+<span class="sourceLineNo">544</span>      LOG.warn("Found existing old file: " + dir + ". It could be some "<a name="line.544"></a>
+<span class="sourceLineNo">545</span>        + "leftover of an old installation. It should be a folder instead. "<a name="line.545"></a>
+<span class="sourceLineNo">546</span>        + "So moving it to " + tmp);<a name="line.546"></a>
+<span class="sourceLineNo">547</span>      if (!fs.rename(dir, tmp)) {<a name="line.547"></a>
+<span class="sourceLineNo">548</span>        LOG.warn("Failed to sideline old file " + dir);<a name="line.548"></a>
+<span class="sourceLineNo">549</span>      }<a name="line.549"></a>
+<span class="sourceLineNo">550</span>    }<a name="line.550"></a>
+<span class="sourceLineNo">551</span><a name="line.551"></a>
+<span class="sourceLineNo">552</span>    if (!fs.exists(dir) &amp;

<TRUNCATED>

[28/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/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 1d64963..a232cc8 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
@@ -6980,880 +6980,882 @@
 <span class="sourceLineNo">6972</span>      lock(this.updatesLock.readLock());<a name="line.6972"></a>
 <span class="sourceLineNo">6973</span>      try {<a name="line.6973"></a>
 <span class="sourceLineNo">6974</span>        Result cpResult = doCoprocessorPreCall(op, mutation);<a name="line.6974"></a>
-<span class="sourceLineNo">6975</span>        if (cpResult != null) return cpResult;<a name="line.6975"></a>
-<span class="sourceLineNo">6976</span>        Durability effectiveDurability = getEffectiveDurability(mutation.getDurability());<a name="line.6976"></a>
-<span class="sourceLineNo">6977</span>        Map&lt;Store, List&lt;Cell&gt;&gt; forMemStore =<a name="line.6977"></a>
-<span class="sourceLineNo">6978</span>            new HashMap&lt;Store, List&lt;Cell&gt;&gt;(mutation.getFamilyCellMap().size());<a name="line.6978"></a>
-<span class="sourceLineNo">6979</span>        // Reckon Cells to apply to WAL --  in returned walEdit -- and what to add to memstore and<a name="line.6979"></a>
-<span class="sourceLineNo">6980</span>        // what to return back to the client (in 'forMemStore' and 'results' respectively).<a name="line.6980"></a>
-<span class="sourceLineNo">6981</span>        WALEdit walEdit = reckonDeltas(op, mutation, effectiveDurability, forMemStore, results);<a name="line.6981"></a>
-<span class="sourceLineNo">6982</span>        // Actually write to WAL now if a walEdit to apply.<a name="line.6982"></a>
-<span class="sourceLineNo">6983</span>        if (walEdit != null &amp;&amp; !walEdit.isEmpty()) {<a name="line.6983"></a>
-<span class="sourceLineNo">6984</span>          writeEntry = doWALAppend(walEdit, durability, nonceGroup, nonce);<a name="line.6984"></a>
-<span class="sourceLineNo">6985</span>        } else {<a name="line.6985"></a>
-<span class="sourceLineNo">6986</span>          // If walEdits is empty, it means we skipped the WAL; update counters and start an mvcc<a name="line.6986"></a>
-<span class="sourceLineNo">6987</span>          // transaction.<a name="line.6987"></a>
-<span class="sourceLineNo">6988</span>          recordMutationWithoutWal(mutation.getFamilyCellMap());<a name="line.6988"></a>
-<span class="sourceLineNo">6989</span>          writeEntry = mvcc.begin();<a name="line.6989"></a>
-<span class="sourceLineNo">6990</span>        }<a name="line.6990"></a>
-<span class="sourceLineNo">6991</span>        // Now write to MemStore. Do it a column family at a time.<a name="line.6991"></a>
-<span class="sourceLineNo">6992</span>        long sequenceId = writeEntry.getWriteNumber();<a name="line.6992"></a>
-<span class="sourceLineNo">6993</span>        for (Map.Entry&lt;Store, List&lt;Cell&gt;&gt; e: forMemStore.entrySet()) {<a name="line.6993"></a>
-<span class="sourceLineNo">6994</span>          accumulatedResultSize +=<a name="line.6994"></a>
-<span class="sourceLineNo">6995</span>              applyToMemstore(e.getKey(), e.getValue(), true, false, sequenceId);<a name="line.6995"></a>
-<span class="sourceLineNo">6996</span>        }<a name="line.6996"></a>
-<span class="sourceLineNo">6997</span>        mvcc.completeAndWait(writeEntry);<a name="line.6997"></a>
-<span class="sourceLineNo">6998</span>        writeEntry = null;<a name="line.6998"></a>
-<span class="sourceLineNo">6999</span>      } finally {<a name="line.6999"></a>
-<span class="sourceLineNo">7000</span>        this.updatesLock.readLock().unlock();<a name="line.7000"></a>
-<span class="sourceLineNo">7001</span>      }<a name="line.7001"></a>
-<span class="sourceLineNo">7002</span>      // If results is null, then client asked that we not return the calculated results.<a name="line.7002"></a>
-<span class="sourceLineNo">7003</span>      return results !=  null? Result.create(results): null;<a name="line.7003"></a>
-<span class="sourceLineNo">7004</span>    } finally {<a name="line.7004"></a>
-<span class="sourceLineNo">7005</span>      // Call complete always, even on success. doDelta is doing a Get READ_UNCOMMITTED when it goes<a name="line.7005"></a>
-<span class="sourceLineNo">7006</span>      // to get current value under an exclusive lock so no need so no need to wait to return to<a name="line.7006"></a>
-<span class="sourceLineNo">7007</span>      // the client. Means only way to read-your-own-increment or append is to come in with an<a name="line.7007"></a>
-<span class="sourceLineNo">7008</span>      // a 0 increment.<a name="line.7008"></a>
-<span class="sourceLineNo">7009</span>      if (writeEntry != null) mvcc.complete(writeEntry);<a name="line.7009"></a>
-<span class="sourceLineNo">7010</span>      rowLock.release();<a name="line.7010"></a>
-<span class="sourceLineNo">7011</span>      // Request a cache flush if over the limit.  Do it outside update lock.<a name="line.7011"></a>
-<span class="sourceLineNo">7012</span>      if (isFlushSize(this.addAndGetGlobalMemstoreSize(accumulatedResultSize))) requestFlush();<a name="line.7012"></a>
-<span class="sourceLineNo">7013</span>      closeRegionOperation(op);<a name="line.7013"></a>
-<span class="sourceLineNo">7014</span>      if (this.metricsRegion != null) {<a name="line.7014"></a>
-<span class="sourceLineNo">7015</span>        switch (op) {<a name="line.7015"></a>
-<span class="sourceLineNo">7016</span>          case INCREMENT:<a name="line.7016"></a>
-<span class="sourceLineNo">7017</span>            this.metricsRegion.updateIncrement();<a name="line.7017"></a>
-<span class="sourceLineNo">7018</span>            break;<a name="line.7018"></a>
-<span class="sourceLineNo">7019</span>          case APPEND:<a name="line.7019"></a>
-<span class="sourceLineNo">7020</span>            this.metricsRegion.updateAppend();<a name="line.7020"></a>
-<span class="sourceLineNo">7021</span>            break;<a name="line.7021"></a>
-<span class="sourceLineNo">7022</span>          default:<a name="line.7022"></a>
+<span class="sourceLineNo">6975</span>        if (cpResult != null) {<a name="line.6975"></a>
+<span class="sourceLineNo">6976</span>          return returnResults? cpResult: null;<a name="line.6976"></a>
+<span class="sourceLineNo">6977</span>        }<a name="line.6977"></a>
+<span class="sourceLineNo">6978</span>        Durability effectiveDurability = getEffectiveDurability(mutation.getDurability());<a name="line.6978"></a>
+<span class="sourceLineNo">6979</span>        Map&lt;Store, List&lt;Cell&gt;&gt; forMemStore =<a name="line.6979"></a>
+<span class="sourceLineNo">6980</span>            new HashMap&lt;Store, List&lt;Cell&gt;&gt;(mutation.getFamilyCellMap().size());<a name="line.6980"></a>
+<span class="sourceLineNo">6981</span>        // Reckon Cells to apply to WAL --  in returned walEdit -- and what to add to memstore and<a name="line.6981"></a>
+<span class="sourceLineNo">6982</span>        // what to return back to the client (in 'forMemStore' and 'results' respectively).<a name="line.6982"></a>
+<span class="sourceLineNo">6983</span>        WALEdit walEdit = reckonDeltas(op, mutation, effectiveDurability, forMemStore, results);<a name="line.6983"></a>
+<span class="sourceLineNo">6984</span>        // Actually write to WAL now if a walEdit to apply.<a name="line.6984"></a>
+<span class="sourceLineNo">6985</span>        if (walEdit != null &amp;&amp; !walEdit.isEmpty()) {<a name="line.6985"></a>
+<span class="sourceLineNo">6986</span>          writeEntry = doWALAppend(walEdit, durability, nonceGroup, nonce);<a name="line.6986"></a>
+<span class="sourceLineNo">6987</span>        } else {<a name="line.6987"></a>
+<span class="sourceLineNo">6988</span>          // If walEdits is empty, it means we skipped the WAL; update counters and start an mvcc<a name="line.6988"></a>
+<span class="sourceLineNo">6989</span>          // transaction.<a name="line.6989"></a>
+<span class="sourceLineNo">6990</span>          recordMutationWithoutWal(mutation.getFamilyCellMap());<a name="line.6990"></a>
+<span class="sourceLineNo">6991</span>          writeEntry = mvcc.begin();<a name="line.6991"></a>
+<span class="sourceLineNo">6992</span>        }<a name="line.6992"></a>
+<span class="sourceLineNo">6993</span>        // Now write to MemStore. Do it a column family at a time.<a name="line.6993"></a>
+<span class="sourceLineNo">6994</span>        long sequenceId = writeEntry.getWriteNumber();<a name="line.6994"></a>
+<span class="sourceLineNo">6995</span>        for (Map.Entry&lt;Store, List&lt;Cell&gt;&gt; e: forMemStore.entrySet()) {<a name="line.6995"></a>
+<span class="sourceLineNo">6996</span>          accumulatedResultSize +=<a name="line.6996"></a>
+<span class="sourceLineNo">6997</span>              applyToMemstore(e.getKey(), e.getValue(), true, false, sequenceId);<a name="line.6997"></a>
+<span class="sourceLineNo">6998</span>        }<a name="line.6998"></a>
+<span class="sourceLineNo">6999</span>        mvcc.completeAndWait(writeEntry);<a name="line.6999"></a>
+<span class="sourceLineNo">7000</span>        writeEntry = null;<a name="line.7000"></a>
+<span class="sourceLineNo">7001</span>      } finally {<a name="line.7001"></a>
+<span class="sourceLineNo">7002</span>        this.updatesLock.readLock().unlock();<a name="line.7002"></a>
+<span class="sourceLineNo">7003</span>      }<a name="line.7003"></a>
+<span class="sourceLineNo">7004</span>      // If results is null, then client asked that we not return the calculated results.<a name="line.7004"></a>
+<span class="sourceLineNo">7005</span>      return results != null &amp;&amp; returnResults? Result.create(results): null;<a name="line.7005"></a>
+<span class="sourceLineNo">7006</span>    } finally {<a name="line.7006"></a>
+<span class="sourceLineNo">7007</span>      // Call complete always, even on success. doDelta is doing a Get READ_UNCOMMITTED when it goes<a name="line.7007"></a>
+<span class="sourceLineNo">7008</span>      // to get current value under an exclusive lock so no need so no need to wait to return to<a name="line.7008"></a>
+<span class="sourceLineNo">7009</span>      // the client. Means only way to read-your-own-increment or append is to come in with an<a name="line.7009"></a>
+<span class="sourceLineNo">7010</span>      // a 0 increment.<a name="line.7010"></a>
+<span class="sourceLineNo">7011</span>      if (writeEntry != null) mvcc.complete(writeEntry);<a name="line.7011"></a>
+<span class="sourceLineNo">7012</span>      rowLock.release();<a name="line.7012"></a>
+<span class="sourceLineNo">7013</span>      // Request a cache flush if over the limit.  Do it outside update lock.<a name="line.7013"></a>
+<span class="sourceLineNo">7014</span>      if (isFlushSize(this.addAndGetGlobalMemstoreSize(accumulatedResultSize))) requestFlush();<a name="line.7014"></a>
+<span class="sourceLineNo">7015</span>      closeRegionOperation(op);<a name="line.7015"></a>
+<span class="sourceLineNo">7016</span>      if (this.metricsRegion != null) {<a name="line.7016"></a>
+<span class="sourceLineNo">7017</span>        switch (op) {<a name="line.7017"></a>
+<span class="sourceLineNo">7018</span>          case INCREMENT:<a name="line.7018"></a>
+<span class="sourceLineNo">7019</span>            this.metricsRegion.updateIncrement();<a name="line.7019"></a>
+<span class="sourceLineNo">7020</span>            break;<a name="line.7020"></a>
+<span class="sourceLineNo">7021</span>          case APPEND:<a name="line.7021"></a>
+<span class="sourceLineNo">7022</span>            this.metricsRegion.updateAppend();<a name="line.7022"></a>
 <span class="sourceLineNo">7023</span>            break;<a name="line.7023"></a>
-<span class="sourceLineNo">7024</span>        }<a name="line.7024"></a>
-<span class="sourceLineNo">7025</span>      }<a name="line.7025"></a>
-<span class="sourceLineNo">7026</span>    }<a name="line.7026"></a>
-<span class="sourceLineNo">7027</span>  }<a name="line.7027"></a>
-<span class="sourceLineNo">7028</span><a name="line.7028"></a>
-<span class="sourceLineNo">7029</span>  private WriteEntry doWALAppend(WALEdit walEdit, Durability durability, long nonceGroup,<a name="line.7029"></a>
-<span class="sourceLineNo">7030</span>      long nonce)<a name="line.7030"></a>
-<span class="sourceLineNo">7031</span>  throws IOException {<a name="line.7031"></a>
-<span class="sourceLineNo">7032</span>    return doWALAppend(walEdit, durability, WALKey.EMPTY_UUIDS, System.currentTimeMillis(),<a name="line.7032"></a>
-<span class="sourceLineNo">7033</span>      nonceGroup, nonce);<a name="line.7033"></a>
-<span class="sourceLineNo">7034</span>  }<a name="line.7034"></a>
-<span class="sourceLineNo">7035</span><a name="line.7035"></a>
-<span class="sourceLineNo">7036</span>  /**<a name="line.7036"></a>
-<span class="sourceLineNo">7037</span>   * @return writeEntry associated with this append<a name="line.7037"></a>
-<span class="sourceLineNo">7038</span>   */<a name="line.7038"></a>
-<span class="sourceLineNo">7039</span>  private WriteEntry doWALAppend(WALEdit walEdit, Durability durability, List&lt;UUID&gt; clusterIds,<a name="line.7039"></a>
-<span class="sourceLineNo">7040</span>      long now, long nonceGroup, long nonce)<a name="line.7040"></a>
-<span class="sourceLineNo">7041</span>  throws IOException {<a name="line.7041"></a>
-<span class="sourceLineNo">7042</span>    WriteEntry writeEntry = null;<a name="line.7042"></a>
-<span class="sourceLineNo">7043</span>    // Using default cluster id, as this can only happen in the originating cluster.<a name="line.7043"></a>
-<span class="sourceLineNo">7044</span>    // A slave cluster receives the final value (not the delta) as a Put. We use HLogKey<a name="line.7044"></a>
-<span class="sourceLineNo">7045</span>    // here instead of WALKey directly to support legacy coprocessors.<a name="line.7045"></a>
-<span class="sourceLineNo">7046</span>    WALKey walKey = new WALKey(this.getRegionInfo().getEncodedNameAsBytes(),<a name="line.7046"></a>
-<span class="sourceLineNo">7047</span>      this.htableDescriptor.getTableName(), WALKey.NO_SEQUENCE_ID, now, clusterIds,<a name="line.7047"></a>
-<span class="sourceLineNo">7048</span>      nonceGroup, nonce, mvcc);<a name="line.7048"></a>
-<span class="sourceLineNo">7049</span>    try {<a name="line.7049"></a>
-<span class="sourceLineNo">7050</span>      long txid =<a name="line.7050"></a>
-<span class="sourceLineNo">7051</span>        this.wal.append(this.htableDescriptor, this.getRegionInfo(), walKey, walEdit, true);<a name="line.7051"></a>
-<span class="sourceLineNo">7052</span>      // Call sync on our edit.<a name="line.7052"></a>
-<span class="sourceLineNo">7053</span>      if (txid != 0) sync(txid, durability);<a name="line.7053"></a>
-<span class="sourceLineNo">7054</span>      writeEntry = walKey.getWriteEntry();<a name="line.7054"></a>
-<span class="sourceLineNo">7055</span>    } catch (IOException ioe) {<a name="line.7055"></a>
-<span class="sourceLineNo">7056</span>      if (walKey != null) mvcc.complete(walKey.getWriteEntry());<a name="line.7056"></a>
-<span class="sourceLineNo">7057</span>      throw ioe;<a name="line.7057"></a>
-<span class="sourceLineNo">7058</span>    }<a name="line.7058"></a>
-<span class="sourceLineNo">7059</span>    return writeEntry;<a name="line.7059"></a>
-<span class="sourceLineNo">7060</span>  }<a name="line.7060"></a>
-<span class="sourceLineNo">7061</span><a name="line.7061"></a>
-<span class="sourceLineNo">7062</span>  /**<a name="line.7062"></a>
-<span class="sourceLineNo">7063</span>   * Do coprocessor pre-increment or pre-append call.<a name="line.7063"></a>
-<span class="sourceLineNo">7064</span>   * @return Result returned out of the coprocessor, which means bypass all further processing and<a name="line.7064"></a>
-<span class="sourceLineNo">7065</span>   *  return the proffered Result instead, or null which means proceed.<a name="line.7065"></a>
-<span class="sourceLineNo">7066</span>   */<a name="line.7066"></a>
-<span class="sourceLineNo">7067</span>  private Result doCoprocessorPreCall(final Operation op, final Mutation mutation)<a name="line.7067"></a>
-<span class="sourceLineNo">7068</span>  throws IOException {<a name="line.7068"></a>
-<span class="sourceLineNo">7069</span>    Result result = null;<a name="line.7069"></a>
-<span class="sourceLineNo">7070</span>    if (this.coprocessorHost != null) {<a name="line.7070"></a>
-<span class="sourceLineNo">7071</span>      switch(op) {<a name="line.7071"></a>
-<span class="sourceLineNo">7072</span>        case INCREMENT:<a name="line.7072"></a>
-<span class="sourceLineNo">7073</span>          result = this.coprocessorHost.preIncrementAfterRowLock((Increment)mutation);<a name="line.7073"></a>
-<span class="sourceLineNo">7074</span>          break;<a name="line.7074"></a>
-<span class="sourceLineNo">7075</span>        case APPEND:<a name="line.7075"></a>
-<span class="sourceLineNo">7076</span>          result = this.coprocessorHost.preAppendAfterRowLock((Append)mutation);<a name="line.7076"></a>
-<span class="sourceLineNo">7077</span>          break;<a name="line.7077"></a>
-<span class="sourceLineNo">7078</span>        default: throw new UnsupportedOperationException(op.toString());<a name="line.7078"></a>
-<span class="sourceLineNo">7079</span>      }<a name="line.7079"></a>
-<span class="sourceLineNo">7080</span>    }<a name="line.7080"></a>
-<span class="sourceLineNo">7081</span>    return result;<a name="line.7081"></a>
-<span class="sourceLineNo">7082</span>  }<a name="line.7082"></a>
-<span class="sourceLineNo">7083</span><a name="line.7083"></a>
-<span class="sourceLineNo">7084</span>  /**<a name="line.7084"></a>
-<span class="sourceLineNo">7085</span>   * Reckon the Cells to apply to WAL, memstore, and to return to the Client; these Sets are not<a name="line.7085"></a>
-<span class="sourceLineNo">7086</span>   * always the same dependent on whether to write WAL or if the amount to increment is zero (in<a name="line.7086"></a>
-<span class="sourceLineNo">7087</span>   * this case we write back nothing, just return latest Cell value to the client).<a name="line.7087"></a>
-<span class="sourceLineNo">7088</span>   *<a name="line.7088"></a>
-<span class="sourceLineNo">7089</span>   * @param results Fill in here what goes back to the Client if it is non-null (if null, client<a name="line.7089"></a>
-<span class="sourceLineNo">7090</span>   *  doesn't want results).<a name="line.7090"></a>
-<span class="sourceLineNo">7091</span>   * @param forMemStore Fill in here what to apply to the MemStore (by Store).<a name="line.7091"></a>
-<span class="sourceLineNo">7092</span>   * @return A WALEdit to apply to WAL or null if we are to skip the WAL.<a name="line.7092"></a>
-<span class="sourceLineNo">7093</span>   */<a name="line.7093"></a>
-<span class="sourceLineNo">7094</span>  private WALEdit reckonDeltas(final Operation op, final Mutation mutation,<a name="line.7094"></a>
-<span class="sourceLineNo">7095</span>      final Durability effectiveDurability, final Map&lt;Store, List&lt;Cell&gt;&gt; forMemStore,<a name="line.7095"></a>
-<span class="sourceLineNo">7096</span>      final List&lt;Cell&gt; results)<a name="line.7096"></a>
-<span class="sourceLineNo">7097</span>  throws IOException {<a name="line.7097"></a>
-<span class="sourceLineNo">7098</span>    WALEdit walEdit = null;<a name="line.7098"></a>
-<span class="sourceLineNo">7099</span>    long now = EnvironmentEdgeManager.currentTime();<a name="line.7099"></a>
-<span class="sourceLineNo">7100</span>    final boolean writeToWAL = effectiveDurability != Durability.SKIP_WAL;<a name="line.7100"></a>
-<span class="sourceLineNo">7101</span>    // Process a Store/family at a time.<a name="line.7101"></a>
-<span class="sourceLineNo">7102</span>    for (Map.Entry&lt;byte [], List&lt;Cell&gt;&gt; entry: mutation.getFamilyCellMap().entrySet()) {<a name="line.7102"></a>
-<span class="sourceLineNo">7103</span>      final byte [] columnFamilyName = entry.getKey();<a name="line.7103"></a>
-<span class="sourceLineNo">7104</span>      List&lt;Cell&gt; deltas = entry.getValue();<a name="line.7104"></a>
-<span class="sourceLineNo">7105</span>      Store store = this.stores.get(columnFamilyName);<a name="line.7105"></a>
-<span class="sourceLineNo">7106</span>      // Reckon for the Store what to apply to WAL and MemStore.<a name="line.7106"></a>
-<span class="sourceLineNo">7107</span>      List&lt;Cell&gt; toApply =<a name="line.7107"></a>
-<span class="sourceLineNo">7108</span>        reckonDeltasByStore(store, op, mutation, effectiveDurability, now, deltas, results);<a name="line.7108"></a>
-<span class="sourceLineNo">7109</span>      if (!toApply.isEmpty()) {<a name="line.7109"></a>
-<span class="sourceLineNo">7110</span>        forMemStore.put(store, toApply);<a name="line.7110"></a>
-<span class="sourceLineNo">7111</span>        if (writeToWAL) {<a name="line.7111"></a>
-<span class="sourceLineNo">7112</span>          if (walEdit == null) {<a name="line.7112"></a>
-<span class="sourceLineNo">7113</span>            walEdit = new WALEdit();<a name="line.7113"></a>
-<span class="sourceLineNo">7114</span>          }<a name="line.7114"></a>
-<span class="sourceLineNo">7115</span>          walEdit.getCells().addAll(toApply);<a name="line.7115"></a>
-<span class="sourceLineNo">7116</span>        }<a name="line.7116"></a>
-<span class="sourceLineNo">7117</span>      }<a name="line.7117"></a>
-<span class="sourceLineNo">7118</span>    }<a name="line.7118"></a>
-<span class="sourceLineNo">7119</span>    return walEdit;<a name="line.7119"></a>
-<span class="sourceLineNo">7120</span>  }<a name="line.7120"></a>
-<span class="sourceLineNo">7121</span><a name="line.7121"></a>
-<span class="sourceLineNo">7122</span>  /**<a name="line.7122"></a>
-<span class="sourceLineNo">7123</span>   * Reckon the Cells to apply to WAL, memstore, and to return to the Client in passed<a name="line.7123"></a>
-<span class="sourceLineNo">7124</span>   * column family/Store.<a name="line.7124"></a>
-<span class="sourceLineNo">7125</span>   *<a name="line.7125"></a>
-<span class="sourceLineNo">7126</span>   * Does Get of current value and then adds passed in deltas for this Store returning the result.<a name="line.7126"></a>
+<span class="sourceLineNo">7024</span>          default:<a name="line.7024"></a>
+<span class="sourceLineNo">7025</span>            break;<a name="line.7025"></a>
+<span class="sourceLineNo">7026</span>        }<a name="line.7026"></a>
+<span class="sourceLineNo">7027</span>      }<a name="line.7027"></a>
+<span class="sourceLineNo">7028</span>    }<a name="line.7028"></a>
+<span class="sourceLineNo">7029</span>  }<a name="line.7029"></a>
+<span class="sourceLineNo">7030</span><a name="line.7030"></a>
+<span class="sourceLineNo">7031</span>  private WriteEntry doWALAppend(WALEdit walEdit, Durability durability, long nonceGroup,<a name="line.7031"></a>
+<span class="sourceLineNo">7032</span>      long nonce)<a name="line.7032"></a>
+<span class="sourceLineNo">7033</span>  throws IOException {<a name="line.7033"></a>
+<span class="sourceLineNo">7034</span>    return doWALAppend(walEdit, durability, WALKey.EMPTY_UUIDS, System.currentTimeMillis(),<a name="line.7034"></a>
+<span class="sourceLineNo">7035</span>      nonceGroup, nonce);<a name="line.7035"></a>
+<span class="sourceLineNo">7036</span>  }<a name="line.7036"></a>
+<span class="sourceLineNo">7037</span><a name="line.7037"></a>
+<span class="sourceLineNo">7038</span>  /**<a name="line.7038"></a>
+<span class="sourceLineNo">7039</span>   * @return writeEntry associated with this append<a name="line.7039"></a>
+<span class="sourceLineNo">7040</span>   */<a name="line.7040"></a>
+<span class="sourceLineNo">7041</span>  private WriteEntry doWALAppend(WALEdit walEdit, Durability durability, List&lt;UUID&gt; clusterIds,<a name="line.7041"></a>
+<span class="sourceLineNo">7042</span>      long now, long nonceGroup, long nonce)<a name="line.7042"></a>
+<span class="sourceLineNo">7043</span>  throws IOException {<a name="line.7043"></a>
+<span class="sourceLineNo">7044</span>    WriteEntry writeEntry = null;<a name="line.7044"></a>
+<span class="sourceLineNo">7045</span>    // Using default cluster id, as this can only happen in the originating cluster.<a name="line.7045"></a>
+<span class="sourceLineNo">7046</span>    // A slave cluster receives the final value (not the delta) as a Put. We use HLogKey<a name="line.7046"></a>
+<span class="sourceLineNo">7047</span>    // here instead of WALKey directly to support legacy coprocessors.<a name="line.7047"></a>
+<span class="sourceLineNo">7048</span>    WALKey walKey = new WALKey(this.getRegionInfo().getEncodedNameAsBytes(),<a name="line.7048"></a>
+<span class="sourceLineNo">7049</span>      this.htableDescriptor.getTableName(), WALKey.NO_SEQUENCE_ID, now, clusterIds,<a name="line.7049"></a>
+<span class="sourceLineNo">7050</span>      nonceGroup, nonce, mvcc);<a name="line.7050"></a>
+<span class="sourceLineNo">7051</span>    try {<a name="line.7051"></a>
+<span class="sourceLineNo">7052</span>      long txid =<a name="line.7052"></a>
+<span class="sourceLineNo">7053</span>        this.wal.append(this.htableDescriptor, this.getRegionInfo(), walKey, walEdit, true);<a name="line.7053"></a>
+<span class="sourceLineNo">7054</span>      // Call sync on our edit.<a name="line.7054"></a>
+<span class="sourceLineNo">7055</span>      if (txid != 0) sync(txid, durability);<a name="line.7055"></a>
+<span class="sourceLineNo">7056</span>      writeEntry = walKey.getWriteEntry();<a name="line.7056"></a>
+<span class="sourceLineNo">7057</span>    } catch (IOException ioe) {<a name="line.7057"></a>
+<span class="sourceLineNo">7058</span>      if (walKey != null) mvcc.complete(walKey.getWriteEntry());<a name="line.7058"></a>
+<span class="sourceLineNo">7059</span>      throw ioe;<a name="line.7059"></a>
+<span class="sourceLineNo">7060</span>    }<a name="line.7060"></a>
+<span class="sourceLineNo">7061</span>    return writeEntry;<a name="line.7061"></a>
+<span class="sourceLineNo">7062</span>  }<a name="line.7062"></a>
+<span class="sourceLineNo">7063</span><a name="line.7063"></a>
+<span class="sourceLineNo">7064</span>  /**<a name="line.7064"></a>
+<span class="sourceLineNo">7065</span>   * Do coprocessor pre-increment or pre-append call.<a name="line.7065"></a>
+<span class="sourceLineNo">7066</span>   * @return Result returned out of the coprocessor, which means bypass all further processing and<a name="line.7066"></a>
+<span class="sourceLineNo">7067</span>   *  return the proffered Result instead, or null which means proceed.<a name="line.7067"></a>
+<span class="sourceLineNo">7068</span>   */<a name="line.7068"></a>
+<span class="sourceLineNo">7069</span>  private Result doCoprocessorPreCall(final Operation op, final Mutation mutation)<a name="line.7069"></a>
+<span class="sourceLineNo">7070</span>  throws IOException {<a name="line.7070"></a>
+<span class="sourceLineNo">7071</span>    Result result = null;<a name="line.7071"></a>
+<span class="sourceLineNo">7072</span>    if (this.coprocessorHost != null) {<a name="line.7072"></a>
+<span class="sourceLineNo">7073</span>      switch(op) {<a name="line.7073"></a>
+<span class="sourceLineNo">7074</span>        case INCREMENT:<a name="line.7074"></a>
+<span class="sourceLineNo">7075</span>          result = this.coprocessorHost.preIncrementAfterRowLock((Increment)mutation);<a name="line.7075"></a>
+<span class="sourceLineNo">7076</span>          break;<a name="line.7076"></a>
+<span class="sourceLineNo">7077</span>        case APPEND:<a name="line.7077"></a>
+<span class="sourceLineNo">7078</span>          result = this.coprocessorHost.preAppendAfterRowLock((Append)mutation);<a name="line.7078"></a>
+<span class="sourceLineNo">7079</span>          break;<a name="line.7079"></a>
+<span class="sourceLineNo">7080</span>        default: throw new UnsupportedOperationException(op.toString());<a name="line.7080"></a>
+<span class="sourceLineNo">7081</span>      }<a name="line.7081"></a>
+<span class="sourceLineNo">7082</span>    }<a name="line.7082"></a>
+<span class="sourceLineNo">7083</span>    return result;<a name="line.7083"></a>
+<span class="sourceLineNo">7084</span>  }<a name="line.7084"></a>
+<span class="sourceLineNo">7085</span><a name="line.7085"></a>
+<span class="sourceLineNo">7086</span>  /**<a name="line.7086"></a>
+<span class="sourceLineNo">7087</span>   * Reckon the Cells to apply to WAL, memstore, and to return to the Client; these Sets are not<a name="line.7087"></a>
+<span class="sourceLineNo">7088</span>   * always the same dependent on whether to write WAL or if the amount to increment is zero (in<a name="line.7088"></a>
+<span class="sourceLineNo">7089</span>   * this case we write back nothing, just return latest Cell value to the client).<a name="line.7089"></a>
+<span class="sourceLineNo">7090</span>   *<a name="line.7090"></a>
+<span class="sourceLineNo">7091</span>   * @param results Fill in here what goes back to the Client if it is non-null (if null, client<a name="line.7091"></a>
+<span class="sourceLineNo">7092</span>   *  doesn't want results).<a name="line.7092"></a>
+<span class="sourceLineNo">7093</span>   * @param forMemStore Fill in here what to apply to the MemStore (by Store).<a name="line.7093"></a>
+<span class="sourceLineNo">7094</span>   * @return A WALEdit to apply to WAL or null if we are to skip the WAL.<a name="line.7094"></a>
+<span class="sourceLineNo">7095</span>   */<a name="line.7095"></a>
+<span class="sourceLineNo">7096</span>  private WALEdit reckonDeltas(final Operation op, final Mutation mutation,<a name="line.7096"></a>
+<span class="sourceLineNo">7097</span>      final Durability effectiveDurability, final Map&lt;Store, List&lt;Cell&gt;&gt; forMemStore,<a name="line.7097"></a>
+<span class="sourceLineNo">7098</span>      final List&lt;Cell&gt; results)<a name="line.7098"></a>
+<span class="sourceLineNo">7099</span>  throws IOException {<a name="line.7099"></a>
+<span class="sourceLineNo">7100</span>    WALEdit walEdit = null;<a name="line.7100"></a>
+<span class="sourceLineNo">7101</span>    long now = EnvironmentEdgeManager.currentTime();<a name="line.7101"></a>
+<span class="sourceLineNo">7102</span>    final boolean writeToWAL = effectiveDurability != Durability.SKIP_WAL;<a name="line.7102"></a>
+<span class="sourceLineNo">7103</span>    // Process a Store/family at a time.<a name="line.7103"></a>
+<span class="sourceLineNo">7104</span>    for (Map.Entry&lt;byte [], List&lt;Cell&gt;&gt; entry: mutation.getFamilyCellMap().entrySet()) {<a name="line.7104"></a>
+<span class="sourceLineNo">7105</span>      final byte [] columnFamilyName = entry.getKey();<a name="line.7105"></a>
+<span class="sourceLineNo">7106</span>      List&lt;Cell&gt; deltas = entry.getValue();<a name="line.7106"></a>
+<span class="sourceLineNo">7107</span>      Store store = this.stores.get(columnFamilyName);<a name="line.7107"></a>
+<span class="sourceLineNo">7108</span>      // Reckon for the Store what to apply to WAL and MemStore.<a name="line.7108"></a>
+<span class="sourceLineNo">7109</span>      List&lt;Cell&gt; toApply =<a name="line.7109"></a>
+<span class="sourceLineNo">7110</span>        reckonDeltasByStore(store, op, mutation, effectiveDurability, now, deltas, results);<a name="line.7110"></a>
+<span class="sourceLineNo">7111</span>      if (!toApply.isEmpty()) {<a name="line.7111"></a>
+<span class="sourceLineNo">7112</span>        forMemStore.put(store, toApply);<a name="line.7112"></a>
+<span class="sourceLineNo">7113</span>        if (writeToWAL) {<a name="line.7113"></a>
+<span class="sourceLineNo">7114</span>          if (walEdit == null) {<a name="line.7114"></a>
+<span class="sourceLineNo">7115</span>            walEdit = new WALEdit();<a name="line.7115"></a>
+<span class="sourceLineNo">7116</span>          }<a name="line.7116"></a>
+<span class="sourceLineNo">7117</span>          walEdit.getCells().addAll(toApply);<a name="line.7117"></a>
+<span class="sourceLineNo">7118</span>        }<a name="line.7118"></a>
+<span class="sourceLineNo">7119</span>      }<a name="line.7119"></a>
+<span class="sourceLineNo">7120</span>    }<a name="line.7120"></a>
+<span class="sourceLineNo">7121</span>    return walEdit;<a name="line.7121"></a>
+<span class="sourceLineNo">7122</span>  }<a name="line.7122"></a>
+<span class="sourceLineNo">7123</span><a name="line.7123"></a>
+<span class="sourceLineNo">7124</span>  /**<a name="line.7124"></a>
+<span class="sourceLineNo">7125</span>   * Reckon the Cells to apply to WAL, memstore, and to return to the Client in passed<a name="line.7125"></a>
+<span class="sourceLineNo">7126</span>   * column family/Store.<a name="line.7126"></a>
 <span class="sourceLineNo">7127</span>   *<a name="line.7127"></a>
-<span class="sourceLineNo">7128</span>   * @param op Whether Increment or Append<a name="line.7128"></a>
-<span class="sourceLineNo">7129</span>   * @param mutation The encompassing Mutation object<a name="line.7129"></a>
-<span class="sourceLineNo">7130</span>   * @param deltas Changes to apply to this Store; either increment amount or data to append<a name="line.7130"></a>
-<span class="sourceLineNo">7131</span>   * @param results In here we accumulate all the Cells we are to return to the client; this List<a name="line.7131"></a>
-<span class="sourceLineNo">7132</span>   *  can be larger than what we return in case where delta is zero; i.e. don't write<a name="line.7132"></a>
-<span class="sourceLineNo">7133</span>   *  out new values, just return current value. If null, client doesn't want results returned.<a name="line.7133"></a>
-<span class="sourceLineNo">7134</span>   * @return Resulting Cells after &lt;code&gt;deltas&lt;/code&gt; have been applied to current<a name="line.7134"></a>
-<span class="sourceLineNo">7135</span>   *  values. Side effect is our filling out of the &lt;code&gt;results&lt;/code&gt; List.<a name="line.7135"></a>
-<span class="sourceLineNo">7136</span>   */<a name="line.7136"></a>
-<span class="sourceLineNo">7137</span>  private List&lt;Cell&gt; reckonDeltasByStore(final Store store, final Operation op,<a name="line.7137"></a>
-<span class="sourceLineNo">7138</span>      final Mutation mutation, final Durability effectiveDurability, final long now,<a name="line.7138"></a>
-<span class="sourceLineNo">7139</span>      final List&lt;Cell&gt; deltas, final List&lt;Cell&gt; results)<a name="line.7139"></a>
-<span class="sourceLineNo">7140</span>  throws IOException {<a name="line.7140"></a>
-<span class="sourceLineNo">7141</span>    byte [] columnFamily = store.getFamily().getName();<a name="line.7141"></a>
-<span class="sourceLineNo">7142</span>    List&lt;Cell&gt; toApply = new ArrayList&lt;Cell&gt;(deltas.size());<a name="line.7142"></a>
-<span class="sourceLineNo">7143</span>    // Get previous values for all columns in this family.<a name="line.7143"></a>
-<span class="sourceLineNo">7144</span>    List&lt;Cell&gt; currentValues = get(mutation, store, deltas,<a name="line.7144"></a>
-<span class="sourceLineNo">7145</span>        null/*Default IsolationLevel*/,<a name="line.7145"></a>
-<span class="sourceLineNo">7146</span>        op == Operation.INCREMENT? ((Increment)mutation).getTimeRange(): null);<a name="line.7146"></a>
-<span class="sourceLineNo">7147</span>    // Iterate the input columns and update existing values if they were found, otherwise<a name="line.7147"></a>
-<span class="sourceLineNo">7148</span>    // add new column initialized to the delta amount<a name="line.7148"></a>
-<span class="sourceLineNo">7149</span>    int currentValuesIndex = 0;<a name="line.7149"></a>
-<span class="sourceLineNo">7150</span>    for (int i = 0; i &lt; deltas.size(); i++) {<a name="line.7150"></a>
-<span class="sourceLineNo">7151</span>      Cell delta = deltas.get(i);<a name="line.7151"></a>
-<span class="sourceLineNo">7152</span>      Cell currentValue = null;<a name="line.7152"></a>
-<span class="sourceLineNo">7153</span>      if (currentValuesIndex &lt; currentValues.size() &amp;&amp;<a name="line.7153"></a>
-<span class="sourceLineNo">7154</span>          CellUtil.matchingQualifier(currentValues.get(currentValuesIndex), delta)) {<a name="line.7154"></a>
-<span class="sourceLineNo">7155</span>        currentValue = currentValues.get(currentValuesIndex);<a name="line.7155"></a>
-<span class="sourceLineNo">7156</span>        if (i &lt; (deltas.size() - 1) &amp;&amp; !CellUtil.matchingQualifier(delta, deltas.get(i + 1))) {<a name="line.7156"></a>
-<span class="sourceLineNo">7157</span>          currentValuesIndex++;<a name="line.7157"></a>
-<span class="sourceLineNo">7158</span>        }<a name="line.7158"></a>
-<span class="sourceLineNo">7159</span>      }<a name="line.7159"></a>
-<span class="sourceLineNo">7160</span>      // Switch on whether this an increment or an append building the new Cell to apply.<a name="line.7160"></a>
-<span class="sourceLineNo">7161</span>      Cell newCell = null;<a name="line.7161"></a>
-<span class="sourceLineNo">7162</span>      MutationType mutationType = null;<a name="line.7162"></a>
-<span class="sourceLineNo">7163</span>      boolean apply = true;<a name="line.7163"></a>
-<span class="sourceLineNo">7164</span>      switch (op) {<a name="line.7164"></a>
-<span class="sourceLineNo">7165</span>        case INCREMENT:<a name="line.7165"></a>
-<span class="sourceLineNo">7166</span>          mutationType = MutationType.INCREMENT;<a name="line.7166"></a>
-<span class="sourceLineNo">7167</span>          // If delta amount to apply is 0, don't write WAL or MemStore.<a name="line.7167"></a>
-<span class="sourceLineNo">7168</span>          long deltaAmount = getLongValue(delta);<a name="line.7168"></a>
-<span class="sourceLineNo">7169</span>          apply = deltaAmount != 0;<a name="line.7169"></a>
-<span class="sourceLineNo">7170</span>          newCell = reckonIncrement(delta, deltaAmount, currentValue, columnFamily, now,<a name="line.7170"></a>
-<span class="sourceLineNo">7171</span>            (Increment)mutation);<a name="line.7171"></a>
-<span class="sourceLineNo">7172</span>          break;<a name="line.7172"></a>
-<span class="sourceLineNo">7173</span>        case APPEND:<a name="line.7173"></a>
-<span class="sourceLineNo">7174</span>          mutationType = MutationType.APPEND;<a name="line.7174"></a>
-<span class="sourceLineNo">7175</span>          // Always apply Append. TODO: Does empty delta value mean reset Cell? It seems to.<a name="line.7175"></a>
-<span class="sourceLineNo">7176</span>          newCell = reckonAppend(delta, currentValue, now, (Append)mutation);<a name="line.7176"></a>
-<span class="sourceLineNo">7177</span>          break;<a name="line.7177"></a>
-<span class="sourceLineNo">7178</span>        default: throw new UnsupportedOperationException(op.toString());<a name="line.7178"></a>
-<span class="sourceLineNo">7179</span>      }<a name="line.7179"></a>
-<span class="sourceLineNo">7180</span><a name="line.7180"></a>
-<span class="sourceLineNo">7181</span>      // Give coprocessors a chance to update the new cell<a name="line.7181"></a>
-<span class="sourceLineNo">7182</span>      if (coprocessorHost != null) {<a name="line.7182"></a>
-<span class="sourceLineNo">7183</span>        newCell =<a name="line.7183"></a>
-<span class="sourceLineNo">7184</span>            coprocessorHost.postMutationBeforeWAL(mutationType, mutation, currentValue, newCell);<a name="line.7184"></a>
-<span class="sourceLineNo">7185</span>      }<a name="line.7185"></a>
-<span class="sourceLineNo">7186</span>      // If apply, we need to update memstore/WAL with new value; add it toApply.<a name="line.7186"></a>
-<span class="sourceLineNo">7187</span>      if (apply) {<a name="line.7187"></a>
-<span class="sourceLineNo">7188</span>        toApply.add(newCell);<a name="line.7188"></a>
-<span class="sourceLineNo">7189</span>      }<a name="line.7189"></a>
-<span class="sourceLineNo">7190</span>      // Add to results to get returned to the Client. If null, cilent does not want results.<a name="line.7190"></a>
-<span class="sourceLineNo">7191</span>      if (results != null) {<a name="line.7191"></a>
-<span class="sourceLineNo">7192</span>        results.add(newCell);<a name="line.7192"></a>
-<span class="sourceLineNo">7193</span>      }<a name="line.7193"></a>
-<span class="sourceLineNo">7194</span>    }<a name="line.7194"></a>
-<span class="sourceLineNo">7195</span>    return toApply;<a name="line.7195"></a>
-<span class="sourceLineNo">7196</span>  }<a name="line.7196"></a>
-<span class="sourceLineNo">7197</span><a name="line.7197"></a>
-<span class="sourceLineNo">7198</span>  /**<a name="line.7198"></a>
-<span class="sourceLineNo">7199</span>   * Calculate new Increment Cell.<a name="line.7199"></a>
-<span class="sourceLineNo">7200</span>   * @return New Increment Cell with delta applied to currentValue if currentValue is not null;<a name="line.7200"></a>
-<span class="sourceLineNo">7201</span>   *  otherwise, a new Cell with the delta set as its value.<a name="line.7201"></a>
-<span class="sourceLineNo">7202</span>   */<a name="line.7202"></a>
-<span class="sourceLineNo">7203</span>  private Cell reckonIncrement(final Cell delta, final long deltaAmount, final Cell currentValue,<a name="line.7203"></a>
-<span class="sourceLineNo">7204</span>      byte [] columnFamily, final long now, Mutation mutation)<a name="line.7204"></a>
-<span class="sourceLineNo">7205</span>  throws IOException {<a name="line.7205"></a>
-<span class="sourceLineNo">7206</span>    // Forward any tags found on the delta.<a name="line.7206"></a>
-<span class="sourceLineNo">7207</span>    List&lt;Tag&gt; tags = TagUtil.carryForwardTags(delta);<a name="line.7207"></a>
-<span class="sourceLineNo">7208</span>    long newValue = deltaAmount;<a name="line.7208"></a>
-<span class="sourceLineNo">7209</span>    long ts = now;<a name="line.7209"></a>
-<span class="sourceLineNo">7210</span>    if (currentValue != null) {<a name="line.7210"></a>
-<span class="sourceLineNo">7211</span>      tags = TagUtil.carryForwardTags(tags, currentValue);<a name="line.7211"></a>
-<span class="sourceLineNo">7212</span>      ts = Math.max(now, currentValue.getTimestamp());<a name="line.7212"></a>
-<span class="sourceLineNo">7213</span>      newValue += getLongValue(currentValue);<a name="line.7213"></a>
-<span class="sourceLineNo">7214</span>    }<a name="line.7214"></a>
-<span class="sourceLineNo">7215</span>    // Now make up the new Cell. TODO: FIX. This is carnel knowledge of how KeyValues are made...<a name="line.7215"></a>
-<span class="sourceLineNo">7216</span>    // doesn't work well with offheaping or if we are doing a different Cell type.<a name="line.7216"></a>
-<span class="sourceLineNo">7217</span>    byte [] incrementAmountInBytes = Bytes.toBytes(newValue);<a name="line.7217"></a>
-<span class="sourceLineNo">7218</span>    tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7218"></a>
-<span class="sourceLineNo">7219</span>    byte [] row = mutation.getRow();<a name="line.7219"></a>
-<span class="sourceLineNo">7220</span>    return new KeyValue(row, 0, row.length,<a name="line.7220"></a>
-<span class="sourceLineNo">7221</span>      columnFamily, 0, columnFamily.length,<a name="line.7221"></a>
-<span class="sourceLineNo">7222</span>      delta.getQualifierArray(), delta.getQualifierOffset(), delta.getQualifierLength(),<a name="line.7222"></a>
-<span class="sourceLineNo">7223</span>      ts, KeyValue.Type.Put,<a name="line.7223"></a>
-<span class="sourceLineNo">7224</span>      incrementAmountInBytes, 0, incrementAmountInBytes.length,<a name="line.7224"></a>
-<span class="sourceLineNo">7225</span>      tags);<a name="line.7225"></a>
-<span class="sourceLineNo">7226</span>  }<a name="line.7226"></a>
-<span class="sourceLineNo">7227</span><a name="line.7227"></a>
-<span class="sourceLineNo">7228</span>  private Cell reckonAppend(final Cell delta, final Cell currentValue, final long now,<a name="line.7228"></a>
-<span class="sourceLineNo">7229</span>      Append mutation)<a name="line.7229"></a>
-<span class="sourceLineNo">7230</span>  throws IOException {<a name="line.7230"></a>
-<span class="sourceLineNo">7231</span>    // Forward any tags found on the delta.<a name="line.7231"></a>
-<span class="sourceLineNo">7232</span>    List&lt;Tag&gt; tags = TagUtil.carryForwardTags(delta);<a name="line.7232"></a>
-<span class="sourceLineNo">7233</span>    long ts = now;<a name="line.7233"></a>
-<span class="sourceLineNo">7234</span>    Cell newCell = null;<a name="line.7234"></a>
-<span class="sourceLineNo">7235</span>    byte [] row = mutation.getRow();<a name="line.7235"></a>
-<span class="sourceLineNo">7236</span>    if (currentValue != null) {<a name="line.7236"></a>
-<span class="sourceLineNo">7237</span>      tags = TagUtil.carryForwardTags(tags, currentValue);<a name="line.7237"></a>
-<span class="sourceLineNo">7238</span>      ts = Math.max(now, currentValue.getTimestamp());<a name="line.7238"></a>
-<span class="sourceLineNo">7239</span>      tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7239"></a>
-<span class="sourceLineNo">7240</span>      byte[] tagBytes = TagUtil.fromList(tags);<a name="line.7240"></a>
-<span class="sourceLineNo">7241</span>      // Allocate an empty cell and copy in all parts.<a name="line.7241"></a>
-<span class="sourceLineNo">7242</span>      // TODO: This is intimate knowledge of how a KeyValue is made. Undo!!! Prevents our doing<a name="line.7242"></a>
-<span class="sourceLineNo">7243</span>      // other Cell types. Copying on-heap too if an off-heap Cell.<a name="line.7243"></a>
-<span class="sourceLineNo">7244</span>      newCell = new KeyValue(row.length, delta.getFamilyLength(),<a name="line.7244"></a>
-<span class="sourceLineNo">7245</span>        delta.getQualifierLength(), ts, KeyValue.Type.Put,<a name="line.7245"></a>
-<span class="sourceLineNo">7246</span>        delta.getValueLength() + currentValue.getValueLength(),<a name="line.7246"></a>
-<span class="sourceLineNo">7247</span>        tagBytes == null? 0: tagBytes.length);<a name="line.7247"></a>
-<span class="sourceLineNo">7248</span>      // Copy in row, family, and qualifier<a name="line.7248"></a>
-<span class="sourceLineNo">7249</span>      System.arraycopy(row, 0, newCell.getRowArray(), newCell.getRowOffset(), row.length);<a name="line.7249"></a>
-<span class="sourceLineNo">7250</span>      System.arraycopy(delta.getFamilyArray(), delta.getFamilyOffset(),<a name="line.7250"></a>
-<span class="sourceLineNo">7251</span>          newCell.getFamilyArray(), newCell.getFamilyOffset(), delta.getFamilyLength());<a name="line.7251"></a>
-<span class="sourceLineNo">7252</span>      System.arraycopy(delta.getQualifierArray(), delta.getQualifierOffset(),<a name="line.7252"></a>
-<span class="sourceLineNo">7253</span>          newCell.getQualifierArray(), newCell.getQualifierOffset(), delta.getQualifierLength());<a name="line.7253"></a>
-<span class="sourceLineNo">7254</span>      // Copy in the value<a name="line.7254"></a>
-<span class="sourceLineNo">7255</span>      CellUtil.copyValueTo(currentValue, newCell.getValueArray(), newCell.getValueOffset());<a name="line.7255"></a>
-<span class="sourceLineNo">7256</span>      System.arraycopy(delta.getValueArray(), delta.getValueOffset(),<a name="line.7256"></a>
-<span class="sourceLineNo">7257</span>          newCell.getValueArray(), newCell.getValueOffset() + currentValue.getValueLength(),<a name="line.7257"></a>
-<span class="sourceLineNo">7258</span>          delta.getValueLength());<a name="line.7258"></a>
-<span class="sourceLineNo">7259</span>      // Copy in tag data<a name="line.7259"></a>
-<span class="sourceLineNo">7260</span>      if (tagBytes != null) {<a name="line.7260"></a>
-<span class="sourceLineNo">7261</span>        System.arraycopy(tagBytes, 0,<a name="line.7261"></a>
-<span class="sourceLineNo">7262</span>            newCell.getTagsArray(), newCell.getTagsOffset(), tagBytes.length);<a name="line.7262"></a>
-<span class="sourceLineNo">7263</span>      }<a name="line.7263"></a>
-<span class="sourceLineNo">7264</span>    } else {<a name="line.7264"></a>
-<span class="sourceLineNo">7265</span>      // Append's KeyValue.Type==Put and ts==HConstants.LATEST_TIMESTAMP<a name="line.7265"></a>
-<span class="sourceLineNo">7266</span>      CellUtil.updateLatestStamp(delta, now);<a name="line.7266"></a>
-<span class="sourceLineNo">7267</span>      newCell = delta;<a name="line.7267"></a>
-<span class="sourceLineNo">7268</span>      tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7268"></a>
-<span class="sourceLineNo">7269</span>      if (tags != null) {<a name="line.7269"></a>
-<span class="sourceLineNo">7270</span>        newCell = new TagRewriteCell(delta, TagUtil.fromList(tags));<a name="line.7270"></a>
-<span class="sourceLineNo">7271</span>      }<a name="line.7271"></a>
-<span class="sourceLineNo">7272</span>    }<a name="line.7272"></a>
-<span class="sourceLineNo">7273</span>    return newCell;<a name="line.7273"></a>
-<span class="sourceLineNo">7274</span>  }<a name="line.7274"></a>
-<span class="sourceLineNo">7275</span><a name="line.7275"></a>
-<span class="sourceLineNo">7276</span>  /**<a name="line.7276"></a>
-<span class="sourceLineNo">7277</span>   * @return Get the long out of the passed in Cell<a name="line.7277"></a>
-<span class="sourceLineNo">7278</span>   */<a name="line.7278"></a>
-<span class="sourceLineNo">7279</span>  private static long getLongValue(final Cell cell) throws DoNotRetryIOException {<a name="line.7279"></a>
-<span class="sourceLineNo">7280</span>    int len = cell.getValueLength();<a name="line.7280"></a>
-<span class="sourceLineNo">7281</span>    if (len != Bytes.SIZEOF_LONG) {<a name="line.7281"></a>
-<span class="sourceLineNo">7282</span>      // throw DoNotRetryIOException instead of IllegalArgumentException<a name="line.7282"></a>
-<span class="sourceLineNo">7283</span>      throw new DoNotRetryIOException("Field is not a long, it's " + len + " bytes wide");<a name="line.7283"></a>
-<span class="sourceLineNo">7284</span>    }<a name="line.7284"></a>
-<span class="sourceLineNo">7285</span>    return Bytes.toLong(cell.getValueArray(), cell.getValueOffset(), len);<a name="line.7285"></a>
-<span class="sourceLineNo">7286</span>  }<a name="line.7286"></a>
-<span class="sourceLineNo">7287</span><a name="line.7287"></a>
-<span class="sourceLineNo">7288</span>  /**<a name="line.7288"></a>
-<span class="sourceLineNo">7289</span>   * Do a specific Get on passed &lt;code&gt;columnFamily&lt;/code&gt; and column qualifiers.<a name="line.7289"></a>
-<span class="sourceLineNo">7290</span>   * @param mutation Mutation we are doing this Get for.<a name="line.7290"></a>
-<span class="sourceLineNo">7291</span>   * @param columnFamily Which column family on row (TODO: Go all Gets in one go)<a name="line.7291"></a>
-<span class="sourceLineNo">7292</span>   * @param coordinates Cells from &lt;code&gt;mutation&lt;/code&gt; used as coordinates applied to Get.<a name="line.7292"></a>
-<span class="sourceLineNo">7293</span>   * @return Return list of Cells found.<a name="line.7293"></a>
-<span class="sourceLineNo">7294</span>   */<a name="line.7294"></a>
-<span class="sourceLineNo">7295</span>  private List&lt;Cell&gt; get(final Mutation mutation, final Store store,<a name="line.7295"></a>
-<span class="sourceLineNo">7296</span>          final List&lt;Cell&gt; coordinates, final IsolationLevel isolation, final TimeRange tr)<a name="line.7296"></a>
-<span class="sourceLineNo">7297</span>  throws IOException {<a name="line.7297"></a>
-<span class="sourceLineNo">7298</span>    // Sort the cells so that they match the order that they appear in the Get results. Otherwise,<a name="line.7298"></a>
-<span class="sourceLineNo">7299</span>    // we won't be able to find the existing values if the cells are not specified in order by the<a name="line.7299"></a>
-<span class="sourceLineNo">7300</span>    // client since cells are in an array list.<a name="line.7300"></a>
-<span class="sourceLineNo">7301</span>    // TODO: I don't get why we are sorting. St.Ack 20150107<a name="line.7301"></a>
-<span class="sourceLineNo">7302</span>    sort(coordinates, store.getComparator());<a name="line.7302"></a>
-<span class="sourceLineNo">7303</span>    Get get = new Get(mutation.getRow());<a name="line.7303"></a>
-<span class="sourceLineNo">7304</span>    if (isolation != null) {<a name="line.7304"></a>
-<span class="sourceLineNo">7305</span>      get.setIsolationLevel(isolation);<a name="line.7305"></a>
-<span class="sourceLineNo">7306</span>    }<a name="line.7306"></a>
-<span class="sourceLineNo">7307</span>    for (Cell cell: coordinates) {<a name="line.7307"></a>
-<span class="sourceLineNo">7308</span>      get.addColumn(store.getFamily().getName(), CellUtil.cloneQualifier(cell));<a name="line.7308"></a>
-<span class="sourceLineNo">7309</span>    }<a name="line.7309"></a>
-<span class="sourceLineNo">7310</span>    // Increments carry time range. If an Increment instance, put it on the Get.<a name="line.7310"></a>
-<span class="sourceLineNo">7311</span>    if (tr != null) {<a name="line.7311"></a>
-<span class="sourceLineNo">7312</span>      get.setTimeRange(tr.getMin(), tr.getMax());<a name="line.7312"></a>
-<span class="sourceLineNo">7313</span>    }<a name="line.7313"></a>
-<span class="sourceLineNo">7314</span>    return get(get, false);<a name="line.7314"></a>
-<span class="sourceLineNo">7315</span>  }<a name="line.7315"></a>
-<span class="sourceLineNo">7316</span><a name="line.7316"></a>
-<span class="sourceLineNo">7317</span>  /**<a name="line.7317"></a>
-<span class="sourceLineNo">7318</span>   * @return Sorted list of &lt;code&gt;cells&lt;/code&gt; using &lt;code&gt;comparator&lt;/code&gt;<a name="line.7318"></a>
-<span class="sourceLineNo">7319</span>   */<a name="line.7319"></a>
-<span class="sourceLineNo">7320</span>  private static List&lt;Cell&gt; sort(List&lt;Cell&gt; cells, final Comparator&lt;Cell&gt; comparator) {<a name="line.7320"></a>
-<span class="sourceLineNo">7321</span>    Collections.sort(cells, comparator);<a name="line.7321"></a>
-<span class="sourceLineNo">7322</span>    return cells;<a name="line.7322"></a>
-<span class="sourceLineNo">7323</span>  }<a name="line.7323"></a>
-<span class="sourceLineNo">7324</span><a name="line.7324"></a>
-<span class="sourceLineNo">7325</span>  //<a name="line.7325"></a>
-<span class="sourceLineNo">7326</span>  // New HBASE-880 Helpers<a name="line.7326"></a>
+<span class="sourceLineNo">7128</span>   * Does Get of current value and then adds passed in deltas for this Store returning the result.<a name="line.7128"></a>
+<span class="sourceLineNo">7129</span>   *<a name="line.7129"></a>
+<span class="sourceLineNo">7130</span>   * @param op Whether Increment or Append<a name="line.7130"></a>
+<span class="sourceLineNo">7131</span>   * @param mutation The encompassing Mutation object<a name="line.7131"></a>
+<span class="sourceLineNo">7132</span>   * @param deltas Changes to apply to this Store; either increment amount or data to append<a name="line.7132"></a>
+<span class="sourceLineNo">7133</span>   * @param results In here we accumulate all the Cells we are to return to the client; this List<a name="line.7133"></a>
+<span class="sourceLineNo">7134</span>   *  can be larger than what we return in case where delta is zero; i.e. don't write<a name="line.7134"></a>
+<span class="sourceLineNo">7135</span>   *  out new values, just return current value. If null, client doesn't want results returned.<a name="line.7135"></a>
+<span class="sourceLineNo">7136</span>   * @return Resulting Cells after &lt;code&gt;deltas&lt;/code&gt; have been applied to current<a name="line.7136"></a>
+<span class="sourceLineNo">7137</span>   *  values. Side effect is our filling out of the &lt;code&gt;results&lt;/code&gt; List.<a name="line.7137"></a>
+<span class="sourceLineNo">7138</span>   */<a name="line.7138"></a>
+<span class="sourceLineNo">7139</span>  private List&lt;Cell&gt; reckonDeltasByStore(final Store store, final Operation op,<a name="line.7139"></a>
+<span class="sourceLineNo">7140</span>      final Mutation mutation, final Durability effectiveDurability, final long now,<a name="line.7140"></a>
+<span class="sourceLineNo">7141</span>      final List&lt;Cell&gt; deltas, final List&lt;Cell&gt; results)<a name="line.7141"></a>
+<span class="sourceLineNo">7142</span>  throws IOException {<a name="line.7142"></a>
+<span class="sourceLineNo">7143</span>    byte [] columnFamily = store.getFamily().getName();<a name="line.7143"></a>
+<span class="sourceLineNo">7144</span>    List&lt;Cell&gt; toApply = new ArrayList&lt;Cell&gt;(deltas.size());<a name="line.7144"></a>
+<span class="sourceLineNo">7145</span>    // Get previous values for all columns in this family.<a name="line.7145"></a>
+<span class="sourceLineNo">7146</span>    List&lt;Cell&gt; currentValues = get(mutation, store, deltas,<a name="line.7146"></a>
+<span class="sourceLineNo">7147</span>        null/*Default IsolationLevel*/,<a name="line.7147"></a>
+<span class="sourceLineNo">7148</span>        op == Operation.INCREMENT? ((Increment)mutation).getTimeRange(): null);<a name="line.7148"></a>
+<span class="sourceLineNo">7149</span>    // Iterate the input columns and update existing values if they were found, otherwise<a name="line.7149"></a>
+<span class="sourceLineNo">7150</span>    // add new column initialized to the delta amount<a name="line.7150"></a>
+<span class="sourceLineNo">7151</span>    int currentValuesIndex = 0;<a name="line.7151"></a>
+<span class="sourceLineNo">7152</span>    for (int i = 0; i &lt; deltas.size(); i++) {<a name="line.7152"></a>
+<span class="sourceLineNo">7153</span>      Cell delta = deltas.get(i);<a name="line.7153"></a>
+<span class="sourceLineNo">7154</span>      Cell currentValue = null;<a name="line.7154"></a>
+<span class="sourceLineNo">7155</span>      if (currentValuesIndex &lt; currentValues.size() &amp;&amp;<a name="line.7155"></a>
+<span class="sourceLineNo">7156</span>          CellUtil.matchingQualifier(currentValues.get(currentValuesIndex), delta)) {<a name="line.7156"></a>
+<span class="sourceLineNo">7157</span>        currentValue = currentValues.get(currentValuesIndex);<a name="line.7157"></a>
+<span class="sourceLineNo">7158</span>        if (i &lt; (deltas.size() - 1) &amp;&amp; !CellUtil.matchingQualifier(delta, deltas.get(i + 1))) {<a name="line.7158"></a>
+<span class="sourceLineNo">7159</span>          currentValuesIndex++;<a name="line.7159"></a>
+<span class="sourceLineNo">7160</span>        }<a name="line.7160"></a>
+<span class="sourceLineNo">7161</span>      }<a name="line.7161"></a>
+<span class="sourceLineNo">7162</span>      // Switch on whether this an increment or an append building the new Cell to apply.<a name="line.7162"></a>
+<span class="sourceLineNo">7163</span>      Cell newCell = null;<a name="line.7163"></a>
+<span class="sourceLineNo">7164</span>      MutationType mutationType = null;<a name="line.7164"></a>
+<span class="sourceLineNo">7165</span>      boolean apply = true;<a name="line.7165"></a>
+<span class="sourceLineNo">7166</span>      switch (op) {<a name="line.7166"></a>
+<span class="sourceLineNo">7167</span>        case INCREMENT:<a name="line.7167"></a>
+<span class="sourceLineNo">7168</span>          mutationType = MutationType.INCREMENT;<a name="line.7168"></a>
+<span class="sourceLineNo">7169</span>          // If delta amount to apply is 0, don't write WAL or MemStore.<a name="line.7169"></a>
+<span class="sourceLineNo">7170</span>          long deltaAmount = getLongValue(delta);<a name="line.7170"></a>
+<span class="sourceLineNo">7171</span>          apply = deltaAmount != 0;<a name="line.7171"></a>
+<span class="sourceLineNo">7172</span>          newCell = reckonIncrement(delta, deltaAmount, currentValue, columnFamily, now,<a name="line.7172"></a>
+<span class="sourceLineNo">7173</span>            (Increment)mutation);<a name="line.7173"></a>
+<span class="sourceLineNo">7174</span>          break;<a name="line.7174"></a>
+<span class="sourceLineNo">7175</span>        case APPEND:<a name="line.7175"></a>
+<span class="sourceLineNo">7176</span>          mutationType = MutationType.APPEND;<a name="line.7176"></a>
+<span class="sourceLineNo">7177</span>          // Always apply Append. TODO: Does empty delta value mean reset Cell? It seems to.<a name="line.7177"></a>
+<span class="sourceLineNo">7178</span>          newCell = reckonAppend(delta, currentValue, now, (Append)mutation);<a name="line.7178"></a>
+<span class="sourceLineNo">7179</span>          break;<a name="line.7179"></a>
+<span class="sourceLineNo">7180</span>        default: throw new UnsupportedOperationException(op.toString());<a name="line.7180"></a>
+<span class="sourceLineNo">7181</span>      }<a name="line.7181"></a>
+<span class="sourceLineNo">7182</span><a name="line.7182"></a>
+<span class="sourceLineNo">7183</span>      // Give coprocessors a chance to update the new cell<a name="line.7183"></a>
+<span class="sourceLineNo">7184</span>      if (coprocessorHost != null) {<a name="line.7184"></a>
+<span class="sourceLineNo">7185</span>        newCell =<a name="line.7185"></a>
+<span class="sourceLineNo">7186</span>            coprocessorHost.postMutationBeforeWAL(mutationType, mutation, currentValue, newCell);<a name="line.7186"></a>
+<span class="sourceLineNo">7187</span>      }<a name="line.7187"></a>
+<span class="sourceLineNo">7188</span>      // If apply, we need to update memstore/WAL with new value; add it toApply.<a name="line.7188"></a>
+<span class="sourceLineNo">7189</span>      if (apply) {<a name="line.7189"></a>
+<span class="sourceLineNo">7190</span>        toApply.add(newCell);<a name="line.7190"></a>
+<span class="sourceLineNo">7191</span>      }<a name="line.7191"></a>
+<span class="sourceLineNo">7192</span>      // Add to results to get returned to the Client. If null, cilent does not want results.<a name="line.7192"></a>
+<span class="sourceLineNo">7193</span>      if (results != null) {<a name="line.7193"></a>
+<span class="sourceLineNo">7194</span>        results.add(newCell);<a name="line.7194"></a>
+<span class="sourceLineNo">7195</span>      }<a name="line.7195"></a>
+<span class="sourceLineNo">7196</span>    }<a name="line.7196"></a>
+<span class="sourceLineNo">7197</span>    return toApply;<a name="line.7197"></a>
+<span class="sourceLineNo">7198</span>  }<a name="line.7198"></a>
+<span class="sourceLineNo">7199</span><a name="line.7199"></a>
+<span class="sourceLineNo">7200</span>  /**<a name="line.7200"></a>
+<span class="sourceLineNo">7201</span>   * Calculate new Increment Cell.<a name="line.7201"></a>
+<span class="sourceLineNo">7202</span>   * @return New Increment Cell with delta applied to currentValue if currentValue is not null;<a name="line.7202"></a>
+<span class="sourceLineNo">7203</span>   *  otherwise, a new Cell with the delta set as its value.<a name="line.7203"></a>
+<span class="sourceLineNo">7204</span>   */<a name="line.7204"></a>
+<span class="sourceLineNo">7205</span>  private Cell reckonIncrement(final Cell delta, final long deltaAmount, final Cell currentValue,<a name="line.7205"></a>
+<span class="sourceLineNo">7206</span>      byte [] columnFamily, final long now, Mutation mutation)<a name="line.7206"></a>
+<span class="sourceLineNo">7207</span>  throws IOException {<a name="line.7207"></a>
+<span class="sourceLineNo">7208</span>    // Forward any tags found on the delta.<a name="line.7208"></a>
+<span class="sourceLineNo">7209</span>    List&lt;Tag&gt; tags = TagUtil.carryForwardTags(delta);<a name="line.7209"></a>
+<span class="sourceLineNo">7210</span>    long newValue = deltaAmount;<a name="line.7210"></a>
+<span class="sourceLineNo">7211</span>    long ts = now;<a name="line.7211"></a>
+<span class="sourceLineNo">7212</span>    if (currentValue != null) {<a name="line.7212"></a>
+<span class="sourceLineNo">7213</span>      tags = TagUtil.carryForwardTags(tags, currentValue);<a name="line.7213"></a>
+<span class="sourceLineNo">7214</span>      ts = Math.max(now, currentValue.getTimestamp());<a name="line.7214"></a>
+<span class="sourceLineNo">7215</span>      newValue += getLongValue(currentValue);<a name="line.7215"></a>
+<span class="sourceLineNo">7216</span>    }<a name="line.7216"></a>
+<span class="sourceLineNo">7217</span>    // Now make up the new Cell. TODO: FIX. This is carnel knowledge of how KeyValues are made...<a name="line.7217"></a>
+<span class="sourceLineNo">7218</span>    // doesn't work well with offheaping or if we are doing a different Cell type.<a name="line.7218"></a>
+<span class="sourceLineNo">7219</span>    byte [] incrementAmountInBytes = Bytes.toBytes(newValue);<a name="line.7219"></a>
+<span class="sourceLineNo">7220</span>    tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7220"></a>
+<span class="sourceLineNo">7221</span>    byte [] row = mutation.getRow();<a name="line.7221"></a>
+<span class="sourceLineNo">7222</span>    return new KeyValue(row, 0, row.length,<a name="line.7222"></a>
+<span class="sourceLineNo">7223</span>      columnFamily, 0, columnFamily.length,<a name="line.7223"></a>
+<span class="sourceLineNo">7224</span>      delta.getQualifierArray(), delta.getQualifierOffset(), delta.getQualifierLength(),<a name="line.7224"></a>
+<span class="sourceLineNo">7225</span>      ts, KeyValue.Type.Put,<a name="line.7225"></a>
+<span class="sourceLineNo">7226</span>      incrementAmountInBytes, 0, incrementAmountInBytes.length,<a name="line.7226"></a>
+<span class="sourceLineNo">7227</span>      tags);<a name="line.7227"></a>
+<span class="sourceLineNo">7228</span>  }<a name="line.7228"></a>
+<span class="sourceLineNo">7229</span><a name="line.7229"></a>
+<span class="sourceLineNo">7230</span>  private Cell reckonAppend(final Cell delta, final Cell currentValue, final long now,<a name="line.7230"></a>
+<span class="sourceLineNo">7231</span>      Append mutation)<a name="line.7231"></a>
+<span class="sourceLineNo">7232</span>  throws IOException {<a name="line.7232"></a>
+<span class="sourceLineNo">7233</span>    // Forward any tags found on the delta.<a name="line.7233"></a>
+<span class="sourceLineNo">7234</span>    List&lt;Tag&gt; tags = TagUtil.carryForwardTags(delta);<a name="line.7234"></a>
+<span class="sourceLineNo">7235</span>    long ts = now;<a name="line.7235"></a>
+<span class="sourceLineNo">7236</span>    Cell newCell = null;<a name="line.7236"></a>
+<span class="sourceLineNo">7237</span>    byte [] row = mutation.getRow();<a name="line.7237"></a>
+<span class="sourceLineNo">7238</span>    if (currentValue != null) {<a name="line.7238"></a>
+<span class="sourceLineNo">7239</span>      tags = TagUtil.carryForwardTags(tags, currentValue);<a name="line.7239"></a>
+<span class="sourceLineNo">7240</span>      ts = Math.max(now, currentValue.getTimestamp());<a name="line.7240"></a>
+<span class="sourceLineNo">7241</span>      tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7241"></a>
+<span class="sourceLineNo">7242</span>      byte[] tagBytes = TagUtil.fromList(tags);<a name="line.7242"></a>
+<span class="sourceLineNo">7243</span>      // Allocate an empty cell and copy in all parts.<a name="line.7243"></a>
+<span class="sourceLineNo">7244</span>      // TODO: This is intimate knowledge of how a KeyValue is made. Undo!!! Prevents our doing<a name="line.7244"></a>
+<span class="sourceLineNo">7245</span>      // other Cell types. Copying on-heap too if an off-heap Cell.<a name="line.7245"></a>
+<span class="sourceLineNo">7246</span>      newCell = new KeyValue(row.length, delta.getFamilyLength(),<a name="line.7246"></a>
+<span class="sourceLineNo">7247</span>        delta.getQualifierLength(), ts, KeyValue.Type.Put,<a name="line.7247"></a>
+<span class="sourceLineNo">7248</span>        delta.getValueLength() + currentValue.getValueLength(),<a name="line.7248"></a>
+<span class="sourceLineNo">7249</span>        tagBytes == null? 0: tagBytes.length);<a name="line.7249"></a>
+<span class="sourceLineNo">7250</span>      // Copy in row, family, and qualifier<a name="line.7250"></a>
+<span class="sourceLineNo">7251</span>      System.arraycopy(row, 0, newCell.getRowArray(), newCell.getRowOffset(), row.length);<a name="line.7251"></a>
+<span class="sourceLineNo">7252</span>      System.arraycopy(delta.getFamilyArray(), delta.getFamilyOffset(),<a name="line.7252"></a>
+<span class="sourceLineNo">7253</span>          newCell.getFamilyArray(), newCell.getFamilyOffset(), delta.getFamilyLength());<a name="line.7253"></a>
+<span class="sourceLineNo">7254</span>      System.arraycopy(delta.getQualifierArray(), delta.getQualifierOffset(),<a name="line.7254"></a>
+<span class="sourceLineNo">7255</span>          newCell.getQualifierArray(), newCell.getQualifierOffset(), delta.getQualifierLength());<a name="line.7255"></a>
+<span class="sourceLineNo">7256</span>      // Copy in the value<a name="line.7256"></a>
+<span class="sourceLineNo">7257</span>      CellUtil.copyValueTo(currentValue, newCell.getValueArray(), newCell.getValueOffset());<a name="line.7257"></a>
+<span class="sourceLineNo">7258</span>      System.arraycopy(delta.getValueArray(), delta.getValueOffset(),<a name="line.7258"></a>
+<span class="sourceLineNo">7259</span>          newCell.getValueArray(), newCell.getValueOffset() + currentValue.getValueLength(),<a name="line.7259"></a>
+<span class="sourceLineNo">7260</span>          delta.getValueLength());<a name="line.7260"></a>
+<span class="sourceLineNo">7261</span>      // Copy in tag data<a name="line.7261"></a>
+<span class="sourceLineNo">7262</span>      if (tagBytes != null) {<a name="line.7262"></a>
+<span class="sourceLineNo">7263</span>        System.arraycopy(tagBytes, 0,<a name="line.7263"></a>
+<span class="sourceLineNo">7264</span>            newCell.getTagsArray(), newCell.getTagsOffset(), tagBytes.length);<a name="line.7264"></a>
+<span class="sourceLineNo">7265</span>      }<a name="line.7265"></a>
+<span class="sourceLineNo">7266</span>    } else {<a name="line.7266"></a>
+<span class="sourceLineNo">7267</span>      // Append's KeyValue.Type==Put and ts==HConstants.LATEST_TIMESTAMP<a name="line.7267"></a>
+<span class="sourceLineNo">7268</span>      CellUtil.updateLatestStamp(delta, now);<a name="line.7268"></a>
+<span class="sourceLineNo">7269</span>      newCell = delta;<a name="line.7269"></a>
+<span class="sourceLineNo">7270</span>      tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7270"></a>
+<span class="sourceLineNo">7271</span>      if (tags != null) {<a name="line.7271"></a>
+<span class="sourceLineNo">7272</span>        newCell = new TagRewriteCell(delta, TagUtil.fromList(tags));<a name="line.7272"></a>
+<span class="sourceLineNo">7273</span>      }<a name="line.7273"></a>
+<span class="sourceLineNo">7274</span>    }<a name="line.7274"></a>
+<span class="sourceLineNo">7275</span>    return newCell;<a name="line.7275"></a>
+<span class="sourceLineNo">7276</span>  }<a name="line.7276"></a>
+<span class="sourceLineNo">7277</span><a name="line.7277"></a>
+<span class="sourceLineNo">7278</span>  /**<a name="line.7278"></a>
+<span class="sourceLineNo">7279</span>   * @return Get the long out of the passed in Cell<a name="line.7279"></a>
+<span class="sourceLineNo">7280</span>   */<a name="line.7280"></a>
+<span class="sourceLineNo">7281</span>  private static long getLongValue(final Cell cell) throws DoNotRetryIOException {<a name="line.7281"></a>
+<span class="sourceLineNo">7282</span>    int len = cell.getValueLength();<a name="line.7282"></a>
+<span class="sourceLineNo">7283</span>    if (len != Bytes.SIZEOF_LONG) {<a name="line.7283"></a>
+<span class="sourceLineNo">7284</span>      // throw DoNotRetryIOException instead of IllegalArgumentException<a name="line.7284"></a>
+<span class="sourceLineNo">7285</span>      throw new DoNotRetryIOException("Field is not a long, it's " + len + " bytes wide");<a name="line.7285"></a>
+<span class="sourceLineNo">7286</span>    }<a name="line.7286"></a>
+<span class="sourceLineNo">7287</span>    return Bytes.toLong(cell.getValueArray(), cell.getValueOffset(), len);<a name="line.7287"></a>
+<span class="sourceLineNo">7288</span>  }<a name="line.7288"></a>
+<span class="sourceLineNo">7289</span><a name="line.7289"></a>
+<span class="sourceLineNo">7290</span>  /**<a name="line.7290"></a>
+<span class="sourceLineNo">7291</span>   * Do a specific Get on passed &lt;code&gt;columnFamily&lt;/code&gt; and column qualifiers.<a name="line.7291"></a>
+<span class="sourceLineNo">7292</span>   * @param mutation Mutation we are doing this Get for.<a name="line.7292"></a>
+<span class="sourceLineNo">7293</span>   * @param columnFamily Which column family on row (TODO: Go all Gets in one go)<a name="line.7293"></a>
+<span class="sourceLineNo">7294</span>   * @param coordinates Cells from &lt;code&gt;mutation&lt;/code&gt; used as coordinates applied to Get.<a name="line.7294"></a>
+<span class="sourceLineNo">7295</span>   * @return Return list of Cells found.<a name="line.7295"></a>
+<span class="sourceLineNo">7296</span>   */<a name="line.7296"></a>
+<span class="sourceLineNo">7297</span>  private List&lt;Cell&gt; get(final Mutation mutation, final Store store,<a name="line.7297"></a>
+<span class="sourceLineNo">7298</span>          final List&lt;Cell&gt; coordinates, final IsolationLevel isolation, final TimeRange tr)<a name="line.7298"></a>
+<span class="sourceLineNo">7299</span>  throws IOException {<a name="line.7299"></a>
+<span class="sourceLineNo">7300</span>    // Sort the cells so that they match the order that they appear in the Get results. Otherwise,<a name="line.7300"></a>
+<span class="sourceLineNo">7301</span>    // we won't be able to find the existing values if the cells are not specified in order by the<a name="line.7301"></a>
+<span class="sourceLineNo">7302</span>    // client since cells are in an array list.<a name="line.7302"></a>
+<span class="sourceLineNo">7303</span>    // TODO: I don't get why we are sorting. St.Ack 20150107<a name="line.7303"></a>
+<span class="sourceLineNo">7304</span>    sort(coordinates, store.getComparator());<a name="line.7304"></a>
+<span class="sourceLineNo">7305</span>    Get get = new Get(mutation.getRow());<a name="line.7305"></a>
+<span class="sourceLineNo">7306</span>    if (isolation != null) {<a name="line.7306"></a>
+<span class="sourceLineNo">7307</span>      get.setIsolationLevel(isolation);<a name="line.7307"></a>
+<span class="sourceLineNo">7308</span>    }<a name="line.7308"></a>
+<span class="sourceLineNo">7309</span>    for (Cell cell: coordinates) {<a name="line.7309"></a>
+<span class="sourceLineNo">7310</span>      get.addColumn(store.getFamily().getName(), CellUtil.cloneQualifier(cell));<a name="line.7310"></a>
+<span class="sourceLineNo">7311</span>    }<a name="line.7311"></a>
+<span class="sourceLineNo">7312</span>    // Increments carry time range. If an Increment instance, put it on the Get.<a name="line.7312"></a>
+<span class="sourceLineNo">7313</span>    if (tr != null) {<a name="line.7313"></a>
+<span class="sourceLineNo">7314</span>      get.setTimeRange(tr.getMin(), tr.getMax());<a name="line.7314"></a>
+<span class="sourceLineNo">7315</span>    }<a name="line.7315"></a>
+<span class="sourceLineNo">7316</span>    return get(get, false);<a name="line.7316"></a>
+<span class="sourceLineNo">7317</span>  }<a name="line.7317"></a>
+<span class="sourceLineNo">7318</span><a name="line.7318"></a>
+<span class="sourceLineNo">7319</span>  /**<a name="line.7319"></a>
+<span class="sourceLineNo">7320</span>   * @return Sorted list of &lt;code&gt;cells&lt;/code&gt; using &lt;code&gt;comparator&lt;/code&gt;<a name="line.7320"></a>
+<span class="sourceLineNo">7321</span>   */<a name="line.7321"></a>
+<span class="sourceLineNo">7322</span>  private static List&lt;Cell&gt; sort(List&lt;Cell&gt; cells, final Comparator&lt;Cell&gt; comparator) {<a name="line.7322"></a>
+<span class="sourceLineNo">7323</span>    Collections.sort(cells, comparator);<a name="line.7323"></a>
+<span class="sourceLineNo">7324</span>    return cells;<a name="line.7324"></a>
+<span class="sourceLineNo">7325</span>  }<a name="line.7325"></a>
+<span class="sourceLineNo">7326</span><a name="line.7326"></a>
 <span class="sourceLineNo">7327</span>  //<a name="line.7327"></a>
-<span class="sourceLineNo">7328</span><a name="line.7328"></a>
-<span class="sourceLineNo">7329</span>  void checkFamily(final byte [] family)<a name="line.7329"></a>
-<span class="sourceLineNo">7330</span>  throws NoSuchColumnFamilyException {<a name="line.7330"></a>
-<span class="sourceLineNo">7331</span>    if (!this.htableDescriptor.hasFamily(family)) {<a name="line.7331"></a>
-<span class="sourceLineNo">7332</span>      throw new NoSuchColumnFamilyException("Column family " +<a name="line.7332"></a>
-<span class="sourceLineNo">7333</span>          Bytes.toString(family) + " does not exist in region " + this<a name="line.7333"></a>
-<span class="sourceLineNo">7334</span>          + " in table " + this.htableDescriptor);<a name="line.7334"></a>
-<span class="sourceLineNo">7335</span>    }<a name="line.7335"></a>
-<span class="sourceLineNo">7336</span>  }<a name="line.7336"></a>
-<span class="sourceLineNo">7337</span><a name="line.7337"></a>
-<span class="sourceLineNo">7338</span>  public static final long FIXED_OVERHEAD = ClassSize.align(<a name="line.7338"></a>
-<span class="sourceLineNo">7339</span>      ClassSize.OBJECT +<a name="line.7339"></a>
-<span class="sourceLineNo">7340</span>      ClassSize.ARRAY +<a name="line.7340"></a>
-<span class="sourceLineNo">7341</span>      45 * ClassSize.REFERENCE + 2 * Bytes.SIZEOF_INT +<a name="line.7341"></a>
-<span class="sourceLineNo">7342</span>      (14 * Bytes.SIZEOF_LONG) +<a name="line.7342"></a>
-<span class="sourceLineNo">7343</span>      5 * Bytes.SIZEOF_BOOLEAN);<a name="line.7343"></a>
-<span class="sourceLineNo">7344</span><a name="line.7344"></a>
-<span class="sourceLineNo">7345</span>  // woefully out of date - currently missing:<a name="line.7345"></a>
-<span class="sourceLineNo">7346</span>  // 1 x HashMap - coprocessorServiceHandlers<a name="line.7346"></a>
-<span class="sourceLineNo">7347</span>  // 6 x Counter - numMutationsWithoutWAL, dataInMemoryWithoutWAL,<a name="line.7347"></a>
-<span class="sourceLineNo">7348</span>  //   checkAndMutateChecksPassed, checkAndMutateChecksFailed, readRequestsCount,<a name="line.7348"></a>
-<span class="sourceLineNo">7349</span>  //   writeRequestsCount<a name="line.7349"></a>
-<span class="sourceLineNo">7350</span>  // 1 x HRegion$WriteState - writestate<a name="line.7350"></a>
-<span class="sourceLineNo">7351</span>  // 1 x RegionCoprocessorHost - coprocessorHost<a name="line.7351"></a>
-<span class="sourceLineNo">7352</span>  // 1 x RegionSplitPolicy - splitPolicy<a name="line.7352"></a>
-<span class="sourceLineNo">7353</span>  // 1 x MetricsRegion - metricsRegion<a name="line.7353"></a>
-<span class="sourceLineNo">7354</span>  // 1 x MetricsRegionWrapperImpl - metricsRegionWrapper<a name="line.7354"></a>
-<span class="sourceLineNo">7355</span>  public static final long DEEP_OVERHEAD = FIXED_OVERHEAD +<a name="line.7355"></a>
-<span class="sourceLineNo">7356</span>      ClassSize.OBJECT + // closeLock<a name="line.7356"></a>
-<span class="sourceLineNo">7357</span>      (2 * ClassSize.ATOMIC_BOOLEAN) + // closed, closing<a name="line.7357"></a>
-<span class="sourceLineNo">7358</span>      (3 * ClassSize.ATOMIC_LONG) + // memStoreSize, numPutsWithoutWAL, dataInMemoryWithoutWAL<a name="line.7358"></a>
-<span class="sourceLineNo">7359</span>      (2 * ClassSize.CONCURRENT_HASHMAP) +  // lockedRows, scannerReadPoints<a name="line.7359"></a>
-<span class="sourceLineNo">7360</span>      WriteState.HEAP_SIZE + // writestate<a name="line.7360"></a>
-<span class="sourceLineNo">7361</span>      ClassSize.CONCURRENT_SKIPLISTMAP + ClassSize.CONCURRENT_SKIPLISTMAP_ENTRY + // stores<a name="line.7361"></a>
-<span class="sourceLineNo">7362</span>      (2 * ClassSize.REENTRANT_LOCK) + // lock, updatesLock<a name="line.7362"></a>
-<span class="sourceLineNo">7363</span>      MultiVersionConcurrencyControl.FIXED_SIZE // mvcc<a name="line.7363"></a>
-<span class="sourceLineNo">7364</span>      + ClassSize.TREEMAP // maxSeqIdInStores<a name="line.7364"></a>
-<span class="sourceLineNo">7365</span>      + 2 * ClassSize.ATOMIC_INTEGER // majorInProgress, minorInProgress<a name="line.7365"></a>
-<span class="sourceLineNo">7366</span>      ;<a name="line.7366"></a>
-<span class="sourceLineNo">7367</span><a name="line.7367"></a>
-<span class="sourceLineNo">7368</span>  @Override<a name="line.7368"></a>
-<span class="sourceLineNo">7369</span>  public long heapSize() {<a name="line.7369"></a>
-<span class="sourceLineNo">7370</span>    long heapSize = DEEP_OVERHEAD;<a name="line.7370"></a>
-<span class="sourceLineNo">7371</span>    for (Store store : this.stores.values()) {<a name="line.7371"></a>
-<span class="sourceLineNo">7372</span>      heapSize += store.heapSize();<a name="line.7372"></a>
-<span class="sourceLineNo">7373</span>    }<a name="line.7373"></a>
-<span class="sourceLineNo">7374</span>    // this does not take into account row locks, recent flushes, mvcc entries, and more<a name="line.7374"></a>
-<span class="sourceLineNo">7375</span>    return heapSize;<a name="line.7375"></a>
-<span class="sourceLineNo">7376</span>  }<a name="line.7376"></a>
-<span class="sourceLineNo">7377</span><a name="line.7377"></a>
-<span class="sourceLineNo">7378</span>  @Override<a name="line.7378"></a>
-<span class="sourceLineNo">7379</span>  public boolean registerService(Service instance) {<a name="line.7379"></a>
-<span class="sourceLineNo">7380</span>    /*<a name="line.7380"></a>
-<span class="sourceLineNo">7381</span>     * No stacking of instances is allowed for a single service name<a name="line.7381"></a>
-<span class="sourceLineNo">7382</span>     */<a name="line.7382"></a>
-<span class="sourceLineNo">7383</span>    Descriptors.ServiceDescriptor serviceDesc = instance.getDescriptorForType();<a name="line.7383"></a>
-<span class="sourceLineNo">7384</span>    if (coprocessorServiceHandlers.containsKey(serviceDesc.getFullName())) {<a name="line.7384"></a>
-<span class="sourceLineNo">7385</span>      LOG.error("Coprocessor service " + serviceDesc.getFullName() +<a name="line.7385"></a>
-<span class="sourceLineNo">7386</span>              " already registered, rejecting request from " + instance<a name="line.7386"></a>
-<span class="sourceLineNo">7387</span>      );<a name="line.7387"></a>
-<span class="sourceLineNo">7388</span>      return false;<a name="line.7388"></a>
-<span class="sourceLineNo">7389</span>    }<a name="line.7389"></a>
-<span class="sourceLineNo">7390</span><a name="line.7390"></a>
-<span class="sourceLineNo">7391</span>    coprocessorServiceHandlers.put(serviceDesc.getFullName(), instance);<a name="line.7391"></a>
-<span class="sourceLineNo">7392</span>    if (LOG.isDebugEnabled()) {<a name="line.7392"></a>
-<span class="sourceLineNo">7393</span>      LOG.debug("Registered coprocessor service: region=" +<a name="line.7393"></a>
-<span class="sourceLineNo">7394</span>          Bytes.toStringBinary(getRegionInfo().getRegionName()) +<a name="line.7394"></a>
-<span class="sourceLineNo">7395</span>          " service=" + serviceDesc.getFullName());<a name="line.7395"></a>
-<span class="sourceLineNo">7396</span>    }<a name="line.7396"></a>
-<span class="sourceLineNo">7397</span>    return true;<a name="line.7397"></a>
-<span class="sourceLineNo">7398</span>  }<a name="line.7398"></a>
-<span class="sourceLineNo">7399</span><a name="line.7399"></a>
-<span class="sourceLineNo">7400</span>  @Override<a name="line.7400"></a>
-<span class="sourceLineNo">7401</span>  public Message execService(RpcController controller, CoprocessorServiceCall call)<a name="line.7401"></a>
-<span class="sourceLineNo">7402</span>      throws IOException {<a name="line.7402"></a>
-<span class="sourceLineNo">7403</span>    String serviceName = call.getServiceName();<a name="line.7403"></a>
-<span class="sourceLineNo">7404</span>    String methodName = call.getMethodName();<a name="line.7404"></a>
-<span class="sourceLineNo">7405</span>    if (!coprocessorServiceHandlers.containsKey(serviceName)) {<a name="line.7405"></a>
-<span class="sourceLineNo">7406</span>      throw new UnknownProtocolException(null,<a name="line.7406"></a>
-<span class="sourceLineNo">7407</span>          "No registered coprocessor service found for name "+serviceName+<a name="line.7407"></a>
-<span class="sourceLineNo">7408</span>          " in region "+Bytes.toStringBinary(getRegionInfo().getRegionName()));<a name="line.7408"></a>
-<span class="sourceLineNo">7409</span>    }<a name="line.7409"></a>
-<span class="sourceLineNo">7410</span><a name="line.7410"></a>
-<span class="sourceLineNo">7411</span>    Service service = coprocessorServiceHandlers.get(serviceName);<a name="line.7411"></a>
-<span class="sourceLineNo">7412</span>    Descriptors.ServiceDescriptor serviceDesc = service.getDescriptorForType();<a name="line.7412"></a>
-<span class="sourceLineNo">7413</span>    Descriptors.MethodDescriptor methodDesc = serviceDesc.findMethodByName(methodName);<a name="line.7413"></a>
-<span class="sourceLineNo">7414</span>    if (methodDesc == null) {<a name="line.7414"></a>
-<span class="sourceLineNo">7415</span>      throw new UnknownProtocolException(service.getClass(),<a name="line.7415"></a>
-<span class="sourceLineNo">7416</span>          "Unknown method "+methodName+" called on service "+serviceName+<a name="line.7416"></a>
-<span class="sourceLineNo">7417</span>              " in region "+Bytes.toStringBinary(getRegionInfo().getRegionName()));<a name="line.7417"></a>
-<span class="sourceLineNo">7418</span>    }<a name="line.7418"></a>
-<span class="sourceLineNo">7419</span><a name="line.7419"></a>
-<span class="sourceLineNo">7420</span>    Message.Builder builder = service.getRequestPrototype(methodDesc).newBuilderForType();<a name="line.7420"></a>
-<span class="sourceLineNo">7421</span>    ProtobufUtil.mergeFrom(builder, call.getRequest());<a name="line.7421"></a>
-<span class="sourceLineNo">7422</span>    Message request = builder.build();<a name="line.7422"></a>
-<span class="sourceLineNo">7423</span><a name="line.7423"></a>
-<span class="sourceLineNo">7424</span>    if (coprocessorHost != null) {<a name="line.7424"></a>
-<span class="sourceLineNo">7425</span>      request = coprocessorHost.preEndpointInvocation(service, methodName, request);<a name="line.7425"></a>
-<span class="sourceLineNo">7426</span>    }<a name="line.7426"></a>
-<span class="sourceLineNo">7427</span><a name="line.7427"></a>
-<span class="sourceLineNo">7428</span>    final Message.Builder responseBuilder =<a name="line.7428"></a>
-<span class="sourceLineNo">7429</span>        service.getResponsePrototype(methodDesc).newBuilderForType();<a name="line.7429"></a>
-<span class="sourceLineNo">7430</span>    service.callMethod(methodDesc, controller, request, new RpcCallback&lt;Message&gt;() {<a name="line.7430"></a>
-<span class="sourceLineNo">7431</span>      @Override<a name="line.7431"></a>
-<span class="sourceLineNo">7432</span>      public void run(Message message) {<a name="line.7432"></a>
-<span class="sourceLineNo">7433</span>        if (message != null) {<a name="line.7433"></a>
-<span class="sourceLineNo">7434</span>          responseBuilder.mergeFrom(message);<a name="line.7434"></a>
-<span class="sourceLineNo">7435</span>        }<a name="line.7435"></a>
-<span class="sourceLineNo">7436</span>      }<a name="line.7436"></a>
-<span class="sourceLineNo">7437</span>    });<a name="line.7437"></a>
-<span class="sourceLineNo">7438</span><a name="line.7438"></a>
-<span class="sourceLineNo">7439</span>    if (coprocessorHost != null) {<a name="line.7439"></a>
-<span class="sourceLineNo">7440</span>      coprocessorHost.postEndpointInvocation(service, methodName, request, responseBuilder);<a name="line.7440"></a>
-<span class="sourceLineNo">7441</span>    }<a name="line.7441"></a>
-<span class="sourceLineNo">7442</span><a name="line.7442"></a>
-<span class="sourceLineNo">7443</span>    IOException exception = ResponseConverter.getControllerException(controller);<a name="line.7443"></a>
-<span class="sourceLineNo">7444</span>    if (exception != null) {<a name="line.7444"></a>
-<span class="sourceLineNo">7445</span>      throw exception;<a name="line.7445"></a>
-<span class="sourceLineNo">7446</span>    }<a name="line.

<TRUNCATED>

[22/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.CorruptedLogFileException.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.CorruptedLogFileException.html b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.CorruptedLogFileException.html
index 0597160..b444f46 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.CorruptedLogFileException.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.CorruptedLogFileException.html
@@ -184,2145 +184,2183 @@
 <span class="sourceLineNo">176</span>  // Min batch size when replay WAL edits<a name="line.176"></a>
 <span class="sourceLineNo">177</span>  private final int minBatchSize;<a name="line.177"></a>
 <span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span>  WALSplitter(final WALFactory factory, Configuration conf, Path rootDir,<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      FileSystem fs, LastSequenceId idChecker,<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      CoordinatedStateManager csm, RecoveryMode mode) {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    this.conf = HBaseConfiguration.create(conf);<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    String codecClassName = conf<a name="line.183"></a>
-<span class="sourceLineNo">184</span>        .get(WALCellCodec.WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    this.conf.set(HConstants.RPC_CODEC_CONF_KEY, codecClassName);<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    this.rootDir = rootDir;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    this.fs = fs;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    this.sequenceIdChecker = idChecker;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    this.csm = (BaseCoordinatedStateManager)csm;<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    this.walFactory = factory;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    this.controller = new PipelineController();<a name="line.191"></a>
-<span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span>    entryBuffers = new EntryBuffers(controller,<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        this.conf.getInt("hbase.regionserver.hlog.splitlog.buffersize",<a name="line.194"></a>
-<span class="sourceLineNo">195</span>            128*1024*1024));<a name="line.195"></a>
+<span class="sourceLineNo">179</span>  // the file being split currently<a name="line.179"></a>
+<span class="sourceLineNo">180</span>  private FileStatus fileBeingSplit;<a name="line.180"></a>
+<span class="sourceLineNo">181</span><a name="line.181"></a>
+<span class="sourceLineNo">182</span>  @VisibleForTesting<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  WALSplitter(final WALFactory factory, Configuration conf, Path rootDir,<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      FileSystem fs, LastSequenceId idChecker,<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      CoordinatedStateManager csm, RecoveryMode mode) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    this.conf = HBaseConfiguration.create(conf);<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    String codecClassName = conf<a name="line.187"></a>
+<span class="sourceLineNo">188</span>        .get(WALCellCodec.WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    this.conf.set(HConstants.RPC_CODEC_CONF_KEY, codecClassName);<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    this.rootDir = rootDir;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    this.fs = fs;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    this.sequenceIdChecker = idChecker;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    this.csm = (BaseCoordinatedStateManager)csm;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    this.walFactory = factory;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    this.controller = new PipelineController();<a name="line.195"></a>
 <span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span>    // a larger minBatchSize may slow down recovery because replay writer has to wait for<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    // enough edits before replaying them<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    this.minBatchSize = this.conf.getInt("hbase.regionserver.wal.logreplay.batch.size", 64);<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    this.distributedLogReplay = (RecoveryMode.LOG_REPLAY == mode);<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>    this.numWriterThreads = this.conf.getInt("hbase.regionserver.hlog.splitlog.writer.threads", 3);<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    if (csm != null &amp;&amp; this.distributedLogReplay) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      outputSink = new LogReplayOutputSink(controller, entryBuffers, numWriterThreads);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    } else {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      if (this.distributedLogReplay) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        LOG.info("ZooKeeperWatcher is passed in as NULL so disable distrubitedLogRepaly.");<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      }<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      this.distributedLogReplay = false;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      outputSink = new LogRecoveredEditsOutputSink(controller, entryBuffers, numWriterThreads);<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>  }<a name="line.213"></a>
-<span class="sourceLineNo">214</span><a name="line.214"></a>
-<span class="sourceLineNo">215</span>  /**<a name="line.215"></a>
-<span class="sourceLineNo">216</span>   * Splits a WAL file into region's recovered-edits directory.<a name="line.216"></a>
-<span class="sourceLineNo">217</span>   * This is the main entry point for distributed log splitting from SplitLogWorker.<a name="line.217"></a>
-<span class="sourceLineNo">218</span>   * &lt;p&gt;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>   * If the log file has N regions then N recovered.edits files will be produced.<a name="line.219"></a>
-<span class="sourceLineNo">220</span>   * &lt;p&gt;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   * @param rootDir<a name="line.221"></a>
-<span class="sourceLineNo">222</span>   * @param logfile<a name="line.222"></a>
-<span class="sourceLineNo">223</span>   * @param fs<a name="line.223"></a>
-<span class="sourceLineNo">224</span>   * @param conf<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   * @param reporter<a name="line.225"></a>
-<span class="sourceLineNo">226</span>   * @param idChecker<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   * @param cp coordination state manager<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   * @return false if it is interrupted by the progress-able.<a name="line.228"></a>
-<span class="sourceLineNo">229</span>   * @throws IOException<a name="line.229"></a>
-<span class="sourceLineNo">230</span>   */<a name="line.230"></a>
-<span class="sourceLineNo">231</span>  public static boolean splitLogFile(Path rootDir, FileStatus logfile, FileSystem fs,<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      Configuration conf, CancelableProgressable reporter, LastSequenceId idChecker,<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      CoordinatedStateManager cp, RecoveryMode mode, final WALFactory factory) throws IOException {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, idChecker, cp, mode);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    return s.splitLogFile(logfile, reporter);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  }<a name="line.236"></a>
-<span class="sourceLineNo">237</span><a name="line.237"></a>
-<span class="sourceLineNo">238</span>  // A wrapper to split one log folder using the method used by distributed<a name="line.238"></a>
-<span class="sourceLineNo">239</span>  // log splitting. Used by tools and unit tests. It should be package private.<a name="line.239"></a>
-<span class="sourceLineNo">240</span>  // It is public only because TestWALObserver is in a different package,<a name="line.240"></a>
-<span class="sourceLineNo">241</span>  // which uses this method to do log splitting.<a name="line.241"></a>
-<span class="sourceLineNo">242</span>  @VisibleForTesting<a name="line.242"></a>
-<span class="sourceLineNo">243</span>  public static List&lt;Path&gt; split(Path rootDir, Path logDir, Path oldLogDir,<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      FileSystem fs, Configuration conf, final WALFactory factory) throws IOException {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    final FileStatus[] logfiles = SplitLogManager.getFileList(conf,<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        Collections.singletonList(logDir), null);<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    List&lt;Path&gt; splits = new ArrayList&lt;Path&gt;();<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    if (logfiles != null &amp;&amp; logfiles.length &gt; 0) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      for (FileStatus logfile: logfiles) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, null, null,<a name="line.250"></a>
-<span class="sourceLineNo">251</span>            RecoveryMode.LOG_SPLITTING);<a name="line.251"></a>
-<span class="sourceLineNo">252</span>        if (s.splitLogFile(logfile, null)) {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>          finishSplitLogFile(rootDir, oldLogDir, logfile.getPath(), conf);<a name="line.253"></a>
-<span class="sourceLineNo">254</span>          if (s.outputSink.splits != null) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>            splits.addAll(s.outputSink.splits);<a name="line.255"></a>
-<span class="sourceLineNo">256</span>          }<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        }<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      }<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    }<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    if (!fs.delete(logDir, true)) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      throw new IOException("Unable to delete src dir: " + logDir);<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    return splits;<a name="line.263"></a>
-<span class="sourceLineNo">264</span>  }<a name="line.264"></a>
-<span class="sourceLineNo">265</span><a name="line.265"></a>
-<span class="sourceLineNo">266</span>  /**<a name="line.266"></a>
-<span class="sourceLineNo">267</span>   * log splitting implementation, splits one log file.<a name="line.267"></a>
-<span class="sourceLineNo">268</span>   * @param logfile should be an actual log file.<a name="line.268"></a>
-<span class="sourceLineNo">269</span>   */<a name="line.269"></a>
-<span class="sourceLineNo">270</span>  boolean splitLogFile(FileStatus logfile, CancelableProgressable reporter) throws IOException {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    Preconditions.checkState(status == null);<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    Preconditions.checkArgument(logfile.isFile(),<a name="line.272"></a>
-<span class="sourceLineNo">273</span>        "passed in file status is for something other than a regular file.");<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    boolean isCorrupted = false;<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    boolean skipErrors = conf.getBoolean("hbase.hlog.split.skip.errors",<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      SPLIT_SKIP_ERRORS_DEFAULT);<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    int interval = conf.getInt("hbase.splitlog.report.interval.loglines", 1024);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    Path logPath = logfile.getPath();<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    boolean outputSinkStarted = false;<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    boolean progress_failed = false;<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    int editsCount = 0;<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    int editsSkipped = 0;<a name="line.282"></a>
-<span class="sourceLineNo">283</span><a name="line.283"></a>
-<span class="sourceLineNo">284</span>    status =<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        TaskMonitor.get().createStatus(<a name="line.285"></a>
-<span class="sourceLineNo">286</span>          "Splitting log file " + logfile.getPath() + "into a temporary staging area.");<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    Reader in = null;<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    try {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      long logLength = logfile.getLen();<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      LOG.info("Splitting wal: " + logPath + ", length=" + logLength);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      LOG.info("DistributedLogReplay = " + this.distributedLogReplay);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      status.setStatus("Opening log file");<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>        progress_failed = true;<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        return false;<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      }<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      try {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        in = getReader(logfile, skipErrors, reporter);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      } catch (CorruptedLogFileException e) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>        LOG.warn("Could not get reader, corrupted log file " + logPath, e);<a name="line.300"></a>
-<span class="sourceLineNo">301</span>        ZKSplitLog.markCorrupted(rootDir, logfile.getPath().getName(), fs);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>        isCorrupted = true;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      }<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      if (in == null) {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>        LOG.warn("Nothing to split in log file " + logPath);<a name="line.305"></a>
-<span class="sourceLineNo">306</span>        return true;<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      }<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      int numOpenedFilesBeforeReporting = conf.getInt("hbase.splitlog.report.openedfiles", 3);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      int numOpenedFilesLastCheck = 0;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      outputSink.setReporter(reporter);<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      outputSink.startWriterThreads();<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      outputSinkStarted = true;<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      Entry entry;<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      Long lastFlushedSequenceId = -1L;<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      ServerName serverName = DefaultWALProvider.getServerNameFromWALDirectoryName(logPath);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      failedServerName = (serverName == null) ? "" : serverName.getServerName();<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      while ((entry = getNextLogLine(in, logPath, skipErrors)) != null) {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>        byte[] region = entry.getKey().getEncodedRegionName();<a name="line.318"></a>
-<span class="sourceLineNo">319</span>        String encodedRegionNameAsStr = Bytes.toString(region);<a name="line.319"></a>
-<span class="sourceLineNo">320</span>        lastFlushedSequenceId = lastFlushedSequenceIds.get(encodedRegionNameAsStr);<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        if (lastFlushedSequenceId == null) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>          if (this.distributedLogReplay) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>            RegionStoreSequenceIds ids =<a name="line.323"></a>
-<span class="sourceLineNo">324</span>                csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.324"></a>
-<span class="sourceLineNo">325</span>                  encodedRegionNameAsStr);<a name="line.325"></a>
-<span class="sourceLineNo">326</span>            if (ids != null) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>              lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.327"></a>
-<span class="sourceLineNo">328</span>              if (LOG.isDebugEnabled()) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>                LOG.debug("DLR Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.329"></a>
-<span class="sourceLineNo">330</span>                  TextFormat.shortDebugString(ids));<a name="line.330"></a>
-<span class="sourceLineNo">331</span>              }<a name="line.331"></a>
-<span class="sourceLineNo">332</span>            }<a name="line.332"></a>
-<span class="sourceLineNo">333</span>          } else if (sequenceIdChecker != null) {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>            RegionStoreSequenceIds ids = sequenceIdChecker.getLastSequenceId(region);<a name="line.334"></a>
-<span class="sourceLineNo">335</span>            Map&lt;byte[], Long&gt; maxSeqIdInStores = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.335"></a>
-<span class="sourceLineNo">336</span>            for (StoreSequenceId storeSeqId : ids.getStoreSequenceIdList()) {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>              maxSeqIdInStores.put(storeSeqId.getFamilyName().toByteArray(),<a name="line.337"></a>
-<span class="sourceLineNo">338</span>                storeSeqId.getSequenceId());<a name="line.338"></a>
-<span class="sourceLineNo">339</span>            }<a name="line.339"></a>
-<span class="sourceLineNo">340</span>            regionMaxSeqIdInStores.put(encodedRegionNameAsStr, maxSeqIdInStores);<a name="line.340"></a>
-<span class="sourceLineNo">341</span>            lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.341"></a>
-<span class="sourceLineNo">342</span>            if (LOG.isDebugEnabled()) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>              LOG.debug("DLS Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.343"></a>
-<span class="sourceLineNo">344</span>                  TextFormat.shortDebugString(ids));<a name="line.344"></a>
+<span class="sourceLineNo">197</span>    entryBuffers = new EntryBuffers(controller,<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        this.conf.getInt("hbase.regionserver.hlog.splitlog.buffersize",<a name="line.198"></a>
+<span class="sourceLineNo">199</span>            128*1024*1024));<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>    // a larger minBatchSize may slow down recovery because replay writer has to wait for<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    // enough edits before replaying them<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    this.minBatchSize = this.conf.getInt("hbase.regionserver.wal.logreplay.batch.size", 64);<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    this.distributedLogReplay = (RecoveryMode.LOG_REPLAY == mode);<a name="line.204"></a>
+<span class="sourceLineNo">205</span><a name="line.205"></a>
+<span class="sourceLineNo">206</span>    this.numWriterThreads = this.conf.getInt("hbase.regionserver.hlog.splitlog.writer.threads", 3);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    if (csm != null &amp;&amp; this.distributedLogReplay) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      outputSink = new LogReplayOutputSink(controller, entryBuffers, numWriterThreads);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    } else {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      if (this.distributedLogReplay) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>        LOG.info("ZooKeeperWatcher is passed in as NULL so disable distrubitedLogRepaly.");<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      }<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      this.distributedLogReplay = false;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      outputSink = new LogRecoveredEditsOutputSink(controller, entryBuffers, numWriterThreads);<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    }<a name="line.215"></a>
+<span class="sourceLineNo">216</span><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>
+<span class="sourceLineNo">220</span>   * Splits a WAL file into region's recovered-edits directory.<a name="line.220"></a>
+<span class="sourceLineNo">221</span>   * This is the main entry point for distributed log splitting from SplitLogWorker.<a name="line.221"></a>
+<span class="sourceLineNo">222</span>   * &lt;p&gt;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>   * If the log file has N regions then N recovered.edits files will be produced.<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   * &lt;p&gt;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   * @param rootDir<a name="line.225"></a>
+<span class="sourceLineNo">226</span>   * @param logfile<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   * @param fs<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   * @param conf<a name="line.228"></a>
+<span class="sourceLineNo">229</span>   * @param reporter<a name="line.229"></a>
+<span class="sourceLineNo">230</span>   * @param idChecker<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   * @param cp coordination state manager<a name="line.231"></a>
+<span class="sourceLineNo">232</span>   * @return false if it is interrupted by the progress-able.<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   * @throws IOException<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   */<a name="line.234"></a>
+<span class="sourceLineNo">235</span>  public static boolean splitLogFile(Path rootDir, FileStatus logfile, FileSystem fs,<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      Configuration conf, CancelableProgressable reporter, LastSequenceId idChecker,<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      CoordinatedStateManager cp, RecoveryMode mode, final WALFactory factory) throws IOException {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, idChecker, cp, mode);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    return s.splitLogFile(logfile, reporter);<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>  // A wrapper to split one log folder using the method used by distributed<a name="line.242"></a>
+<span class="sourceLineNo">243</span>  // log splitting. Used by tools and unit tests. It should be package private.<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  // It is public only because TestWALObserver is in a different package,<a name="line.244"></a>
+<span class="sourceLineNo">245</span>  // which uses this method to do log splitting.<a name="line.245"></a>
+<span class="sourceLineNo">246</span>  @VisibleForTesting<a name="line.246"></a>
+<span class="sourceLineNo">247</span>  public static List&lt;Path&gt; split(Path rootDir, Path logDir, Path oldLogDir,<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      FileSystem fs, Configuration conf, final WALFactory factory) throws IOException {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    final FileStatus[] logfiles = SplitLogManager.getFileList(conf,<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        Collections.singletonList(logDir), null);<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    List&lt;Path&gt; splits = new ArrayList&lt;Path&gt;();<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    if (logfiles != null &amp;&amp; logfiles.length &gt; 0) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      for (FileStatus logfile: logfiles) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>        WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, null, null,<a name="line.254"></a>
+<span class="sourceLineNo">255</span>            RecoveryMode.LOG_SPLITTING);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>        if (s.splitLogFile(logfile, null)) {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>          finishSplitLogFile(rootDir, oldLogDir, logfile.getPath(), conf);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>          if (s.outputSink.splits != null) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>            splits.addAll(s.outputSink.splits);<a name="line.259"></a>
+<span class="sourceLineNo">260</span>          }<a name="line.260"></a>
+<span class="sourceLineNo">261</span>        }<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      }<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    }<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    if (!fs.delete(logDir, true)) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      throw new IOException("Unable to delete src dir: " + logDir);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    }<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    return splits;<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  }<a name="line.268"></a>
+<span class="sourceLineNo">269</span><a name="line.269"></a>
+<span class="sourceLineNo">270</span>  /**<a name="line.270"></a>
+<span class="sourceLineNo">271</span>   * log splitting implementation, splits one log file.<a name="line.271"></a>
+<span class="sourceLineNo">272</span>   * @param logfile should be an actual log file.<a name="line.272"></a>
+<span class="sourceLineNo">273</span>   */<a name="line.273"></a>
+<span class="sourceLineNo">274</span>  @VisibleForTesting<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  boolean splitLogFile(FileStatus logfile, CancelableProgressable reporter) throws IOException {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    Preconditions.checkState(status == null);<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    Preconditions.checkArgument(logfile.isFile(),<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        "passed in file status is for something other than a regular file.");<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    boolean isCorrupted = false;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    boolean skipErrors = conf.getBoolean("hbase.hlog.split.skip.errors",<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      SPLIT_SKIP_ERRORS_DEFAULT);<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    int interval = conf.getInt("hbase.splitlog.report.interval.loglines", 1024);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    Path logPath = logfile.getPath();<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    boolean outputSinkStarted = false;<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    boolean progress_failed = false;<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    int editsCount = 0;<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    int editsSkipped = 0;<a name="line.287"></a>
+<span class="sourceLineNo">288</span><a name="line.288"></a>
+<span class="sourceLineNo">289</span>    status =<a name="line.289"></a>
+<span class="sourceLineNo">290</span>        TaskMonitor.get().createStatus(<a name="line.290"></a>
+<span class="sourceLineNo">291</span>          "Splitting log file " + logfile.getPath() + "into a temporary staging area.");<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    Reader in = null;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    this.fileBeingSplit = logfile;<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    try {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      long logLength = logfile.getLen();<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      LOG.info("Splitting wal: " + logPath + ", length=" + logLength);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      LOG.info("DistributedLogReplay = " + this.distributedLogReplay);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      status.setStatus("Opening log file");<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>        progress_failed = true;<a name="line.300"></a>
+<span class="sourceLineNo">301</span>        return false;<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      }<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      try {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>        in = getReader(logfile, skipErrors, reporter);<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      } catch (CorruptedLogFileException e) {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>        LOG.warn("Could not get reader, corrupted log file " + logPath, e);<a name="line.306"></a>
+<span class="sourceLineNo">307</span>        ZKSplitLog.markCorrupted(rootDir, logfile.getPath().getName(), fs);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>        isCorrupted = true;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      }<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      if (in == null) {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        LOG.warn("Nothing to split in log file " + logPath);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        return true;<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      }<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      int numOpenedFilesBeforeReporting = conf.getInt("hbase.splitlog.report.openedfiles", 3);<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      int numOpenedFilesLastCheck = 0;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      outputSink.setReporter(reporter);<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      outputSink.startWriterThreads();<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      outputSinkStarted = true;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      Entry entry;<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      Long lastFlushedSequenceId = -1L;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      ServerName serverName = DefaultWALProvider.getServerNameFromWALDirectoryName(logPath);<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      failedServerName = (serverName == null) ? "" : serverName.getServerName();<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      while ((entry = getNextLogLine(in, logPath, skipErrors)) != null) {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>        byte[] region = entry.getKey().getEncodedRegionName();<a name="line.324"></a>
+<span class="sourceLineNo">325</span>        String encodedRegionNameAsStr = Bytes.toString(region);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>        lastFlushedSequenceId = lastFlushedSequenceIds.get(encodedRegionNameAsStr);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>        if (lastFlushedSequenceId == null) {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>          if (this.distributedLogReplay) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>            RegionStoreSequenceIds ids =<a name="line.329"></a>
+<span class="sourceLineNo">330</span>                csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.330"></a>
+<span class="sourceLineNo">331</span>                  encodedRegionNameAsStr);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>            if (ids != null) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span>              lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.333"></a>
+<span class="sourceLineNo">334</span>              if (LOG.isDebugEnabled()) {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>                LOG.debug("DLR Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.335"></a>
+<span class="sourceLineNo">336</span>                  TextFormat.shortDebugString(ids));<a name="line.336"></a>
+<span class="sourceLineNo">337</span>              }<a name="line.337"></a>
+<span class="sourceLineNo">338</span>            }<a name="line.338"></a>
+<span class="sourceLineNo">339</span>          } else if (sequenceIdChecker != null) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>            RegionStoreSequenceIds ids = sequenceIdChecker.getLastSequenceId(region);<a name="line.340"></a>
+<span class="sourceLineNo">341</span>            Map&lt;byte[], Long&gt; maxSeqIdInStores = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.341"></a>
+<span class="sourceLineNo">342</span>            for (StoreSequenceId storeSeqId : ids.getStoreSequenceIdList()) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>              maxSeqIdInStores.put(storeSeqId.getFamilyName().toByteArray(),<a name="line.343"></a>
+<span class="sourceLineNo">344</span>                storeSeqId.getSequenceId());<a name="line.344"></a>
 <span class="sourceLineNo">345</span>            }<a name="line.345"></a>
-<span class="sourceLineNo">346</span>          }<a name="line.346"></a>
-<span class="sourceLineNo">347</span>          if (lastFlushedSequenceId == null) {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>            lastFlushedSequenceId = -1L;<a name="line.348"></a>
-<span class="sourceLineNo">349</span>          }<a name="line.349"></a>
-<span class="sourceLineNo">350</span>          lastFlushedSequenceIds.put(encodedRegionNameAsStr, lastFlushedSequenceId);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        }<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        if (lastFlushedSequenceId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>          editsSkipped++;<a name="line.353"></a>
-<span class="sourceLineNo">354</span>          continue;<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        }<a name="line.355"></a>
-<span class="sourceLineNo">356</span>        entryBuffers.appendEntry(entry);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        editsCount++;<a name="line.357"></a>
-<span class="sourceLineNo">358</span>        int moreWritersFromLastCheck = this.getNumOpenWriters() - numOpenedFilesLastCheck;<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        // If sufficient edits have passed, check if we should report progress.<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        if (editsCount % interval == 0<a name="line.360"></a>
-<span class="sourceLineNo">361</span>            || moreWritersFromLastCheck &gt; numOpenedFilesBeforeReporting) {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>          numOpenedFilesLastCheck = this.getNumOpenWriters();<a name="line.362"></a>
-<span class="sourceLineNo">363</span>          String countsStr = (editsCount - (editsSkipped + outputSink.getSkippedEdits()))<a name="line.363"></a>
-<span class="sourceLineNo">364</span>              + " edits, skipped " + editsSkipped + " edits.";<a name="line.364"></a>
-<span class="sourceLineNo">365</span>          status.setStatus("Split " + countsStr);<a name="line.365"></a>
-<span class="sourceLineNo">366</span>          if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>            progress_failed = true;<a name="line.367"></a>
-<span class="sourceLineNo">368</span>            return false;<a name="line.368"></a>
-<span class="sourceLineNo">369</span>          }<a name="line.369"></a>
-<span class="sourceLineNo">370</span>        }<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      }<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    } catch (InterruptedException ie) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      IOException iie = new InterruptedIOException();<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      iie.initCause(ie);<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      throw iie;<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    } catch (CorruptedLogFileException e) {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      LOG.warn("Could not parse, corrupted log file " + logPath, e);<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      csm.getSplitLogWorkerCoordination().markCorrupted(rootDir,<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        logfile.getPath().getName(), fs);<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      isCorrupted = true;<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    } catch (IOException e) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      throw e;<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    } finally {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      LOG.debug("Finishing writing output logs and closing down.");<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      try {<a name="line.386"></a>
-<span class="sourceLineNo">387</span>        if (null != in) {<a name="line.387"></a>
-<span class="sourceLineNo">388</span>          in.close();<a name="line.388"></a>
-<span class="sourceLineNo">389</span>        }<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      } catch (IOException exception) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        LOG.warn("Could not close wal reader: " + exception.getMessage());<a name="line.391"></a>
-<span class="sourceLineNo">392</span>        LOG.debug("exception details", exception);<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      }<a name="line.393"></a>
-<span class="sourceLineNo">394</span>      try {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        if (outputSinkStarted) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>          // Set progress_failed to true as the immediate following statement will reset its value<a name="line.396"></a>
-<span class="sourceLineNo">397</span>          // when finishWritingAndClose() throws exception, progress_failed has the right value<a name="line.397"></a>
-<span class="sourceLineNo">398</span>          progress_failed = true;<a name="line.398"></a>
-<span class="sourceLineNo">399</span>          progress_failed = outputSink.finishWritingAndClose() == null;<a name="line.399"></a>
-<span class="sourceLineNo">400</span>        }<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      } finally {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        String msg =<a name="line.402"></a>
-<span class="sourceLineNo">403</span>            "Processed " + editsCount + " edits across " + outputSink.getNumberOfRecoveredRegions()<a name="line.403"></a>
-<span class="sourceLineNo">404</span>                + " regions; edits skipped=" + editsSkipped + "; log file=" + logPath +<a name="line.404"></a>
-<span class="sourceLineNo">405</span>                ", length=" + logfile.getLen() + // See if length got updated post lease recovery<a name="line.405"></a>
-<span class="sourceLineNo">406</span>                ", corrupted=" + isCorrupted + ", progress failed=" + progress_failed;<a name="line.406"></a>
-<span class="sourceLineNo">407</span>        LOG.info(msg);<a name="line.407"></a>
-<span class="sourceLineNo">408</span>        status.markComplete(msg);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      }<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    }<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    return !progress_failed;<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>   * Completes the work done by splitLogFile by archiving logs<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   * &lt;p&gt;<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * It is invoked by SplitLogManager once it knows that one of the<a name="line.417"></a>
-<span class="sourceLineNo">418</span>   * SplitLogWorkers have completed the splitLogFile() part. If the master<a name="line.418"></a>
-<span class="sourceLineNo">419</span>   * crashes then this function might get called multiple times.<a name="line.419"></a>
-<span class="sourceLineNo">420</span>   * &lt;p&gt;<a name="line.420"></a>
-<span class="sourceLineNo">421</span>   * @param logfile<a name="line.421"></a>
-<span class="sourceLineNo">422</span>   * @param conf<a name="line.422"></a>
-<span class="sourceLineNo">423</span>   * @throws IOException<a name="line.423"></a>
-<span class="sourceLineNo">424</span>   */<a name="line.424"></a>
-<span class="sourceLineNo">425</span>  public static void finishSplitLogFile(String logfile,<a name="line.425"></a>
-<span class="sourceLineNo">426</span>      Configuration conf)  throws IOException {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    Path rootdir = FSUtils.getRootDir(conf);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    Path oldLogDir = new Path(rootdir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    Path logPath;<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    if (FSUtils.isStartingWithPath(rootdir, logfile)) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      logPath = new Path(logfile);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    } else {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      logPath = new Path(rootdir, logfile);<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    }<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    finishSplitLogFile(rootdir, oldLogDir, logPath, conf);<a name="line.435"></a>
-<span class="sourceLineNo">436</span>  }<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>  static void finishSplitLogFile(Path rootdir, Path oldLogDir,<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      Path logPath, Configuration conf) throws IOException {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    List&lt;Path&gt; processedLogs = new ArrayList&lt;Path&gt;();<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    List&lt;Path&gt; corruptedLogs = new ArrayList&lt;Path&gt;();<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    FileSystem fs;<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    fs = rootdir.getFileSystem(conf);<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    if (ZKSplitLog.isCorrupted(rootdir, logPath.getName(), fs)) {<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      corruptedLogs.add(logPath);<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    } else {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      processedLogs.add(logPath);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    }<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    archiveLogs(corruptedLogs, processedLogs, oldLogDir, fs, conf);<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    Path stagingDir = ZKSplitLog.getSplitLogDir(rootdir, logPath.getName());<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    fs.delete(stagingDir, true);<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  }<a name="line.452"></a>
-<span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span>  /**<a name="line.454"></a>
-<span class="sourceLineNo">455</span>   * Moves processed logs to a oldLogDir after successful processing Moves<a name="line.455"></a>
-<span class="sourceLineNo">456</span>   * corrupted logs (any log that couldn't be successfully parsed to corruptDir<a name="line.456"></a>
-<span class="sourceLineNo">457</span>   * (.corrupt) for later investigation<a name="line.457"></a>
-<span class="sourceLineNo">458</span>   *<a name="line.458"></a>
-<span class="sourceLineNo">459</span>   * @param corruptedLogs<a name="line.459"></a>
-<span class="sourceLineNo">460</span>   * @param processedLogs<a name="line.460"></a>
-<span class="sourceLineNo">461</span>   * @param oldLogDir<a name="line.461"></a>
-<span class="sourceLineNo">462</span>   * @param fs<a name="line.462"></a>
-<span class="sourceLineNo">463</span>   * @param conf<a name="line.463"></a>
-<span class="sourceLineNo">464</span>   * @throws IOException<a name="line.464"></a>
-<span class="sourceLineNo">465</span>   */<a name="line.465"></a>
-<span class="sourceLineNo">466</span>  private static void archiveLogs(<a name="line.466"></a>
-<span class="sourceLineNo">467</span>      final List&lt;Path&gt; corruptedLogs,<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      final List&lt;Path&gt; processedLogs, final Path oldLogDir,<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      final FileSystem fs, final Configuration conf) throws IOException {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    final Path corruptDir = new Path(FSUtils.getRootDir(conf), conf.get(<a name="line.470"></a>
-<span class="sourceLineNo">471</span>        "hbase.regionserver.hlog.splitlog.corrupt.dir",  HConstants.CORRUPT_DIR_NAME));<a name="line.471"></a>
-<span class="sourceLineNo">472</span><a name="line.472"></a>
-<span class="sourceLineNo">473</span>    if (!fs.mkdirs(corruptDir)) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      LOG.info("Unable to mkdir " + corruptDir);<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    }<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    fs.mkdirs(oldLogDir);<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>    // this method can get restarted or called multiple times for archiving<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    // the same log files.<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    for (Path corrupted : corruptedLogs) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      Path p = new Path(corruptDir, corrupted.getName());<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      if (fs.exists(corrupted)) {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        if (!fs.rename(corrupted, p)) {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>          LOG.warn("Unable to move corrupted log " + corrupted + " to " + p);<a name="line.484"></a>
-<span class="sourceLineNo">485</span>        } else {<a name="line.485"></a>
-<span class="sourceLineNo">486</span>          LOG.warn("Moved corrupted log " + corrupted + " to " + p);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>        }<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      }<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    }<a name="line.489"></a>
-<span class="sourceLineNo">490</span><a name="line.490"></a>
-<span class="sourceLineNo">491</span>    for (Path p : processedLogs) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      Path newPath = FSHLog.getWALArchivePath(oldLogDir, p);<a name="line.492"></a>
-<span class="sourceLineNo">493</span>      if (fs.exists(p)) {<a name="line.493"></a>
-<span class="sourceLineNo">494</span>        if (!FSUtils.renameAndSetModifyTime(fs, p, newPath)) {<a name="line.494"></a>
-<span class="sourceLineNo">495</span>          LOG.warn("Unable to move  " + p + " to " + newPath);<a name="line.495"></a>
-<span class="sourceLineNo">496</span>        } else {<a name="line.496"></a>
-<span class="sourceLineNo">497</span>          LOG.info("Archived processed log " + p + " to " + newPath);<a name="line.497"></a>
-<span class="sourceLineNo">498</span>        }<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      }<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><a name="line.502"></a>
-<span class="sourceLineNo">503</span>  /**<a name="line.503"></a>
-<span class="sourceLineNo">504</span>   * Path to a file under RECOVERED_EDITS_DIR directory of the region found in<a name="line.504"></a>
-<span class="sourceLineNo">505</span>   * &lt;code&gt;logEntry&lt;/code&gt; named for the sequenceid in the passed<a name="line.505"></a>
-<span class="sourceLineNo">506</span>   * &lt;code&gt;logEntry&lt;/code&gt;: e.g. /hbase/some_table/2323432434/recovered.edits/2332.<a name="line.506"></a>
-<span class="sourceLineNo">507</span>   * This method also ensures existence of RECOVERED_EDITS_DIR under the region<a name="line.507"></a>
-<span class="sourceLineNo">508</span>   * creating it if necessary.<a name="line.508"></a>
-<span class="sourceLineNo">509</span>   * @param fs<a name="line.509"></a>
-<span class="sourceLineNo">510</span>   * @param logEntry<a name="line.510"></a>
-<span class="sourceLineNo">511</span>   * @param rootDir HBase root dir.<a name="line.511"></a>
-<span class="sourceLineNo">512</span>   * @return Path to file into which to dump split log edits.<a name="line.512"></a>
-<span class="sourceLineNo">513</span>   * @throws IOException<a name="line.513"></a>
-<span class="sourceLineNo">514</span>   */<a name="line.514"></a>
-<span class="sourceLineNo">515</span>  @SuppressWarnings("deprecation")<a name="line.515"></a>
-<span class="sourceLineNo">516</span>  static Path getRegionSplitEditsPath(final FileSystem fs,<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      final Entry logEntry, final Path rootDir, boolean isCreate)<a name="line.517"></a>
-<span class="sourceLineNo">518</span>  throws IOException {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    Path tableDir = FSUtils.getTableDir(rootDir, logEntry.getKey().getTablename());<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    String encodedRegionName = Bytes.toString(logEntry.getKey().getEncodedRegionName());<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    Path regiondir = HRegion.getRegionDir(tableDir, encodedRegionName);<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    Path dir = getRegionDirRecoveredEditsDir(regiondir);<a name="line.522"></a>
-<span class="sourceLineNo">523</span><a name="line.523"></a>
-<span class="sourceLineNo">524</span>    if (!fs.exists(regiondir)) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      LOG.info("This region's directory doesn't exist: "<a name="line.525"></a>
-<span class="sourceLineNo">526</span>          + regiondir.toString() + ". It is very likely that it was" +<a name="line.526"></a>
-<span class="sourceLineNo">527</span>          " already split so it's safe to discard those edits.");<a name="line.527"></a>
-<span class="sourceLineNo">528</span>      return null;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    }<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    if (fs.exists(dir) &amp;&amp; fs.isFile(dir)) {<a name="line.530"></a>
-<span class="sourceLineNo">531</span>      Path tmp = new Path("/tmp");<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      if (!fs.exists(tmp)) {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>        fs.mkdirs(tmp);<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      }<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      tmp = new Path(tmp,<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        HConstants.RECOVERED_EDITS_DIR + "_" + encodedRegionName);<a name="line.536"></a>
-<span class="sourceLineNo">537</span>      LOG.warn("Found existing old file: " + dir + ". It could be some "<a name="line.537"></a>
-<span class="sourceLineNo">538</span>        + "leftover of an old installation. It should be a folder instead. "<a name="line.538"></a>
-<span class="sourceLineNo">539</span>        + "So moving it to " + tmp);<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      if (!fs.rename(dir, tmp)) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        LOG.warn("Failed to sideline old file " + dir);<a name="line.541"></a>
-<span class="sourceLineNo">542</span>      }<a name="line.542"></a>
-<span class="sourceLineNo">543</span>    }<a name="line.543"></a>
-<span class="sourceLineNo">544</span><a name="line.544"></a>
-<span class="sourceLineNo">545</span>    if (isCreate &amp;&amp; !fs.exists(dir)) {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>      if (!fs.mkdirs(dir)) LOG.warn("mkdir failed on " + dir);<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    }<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    // Append file name ends with RECOVERED_LOG_TMPFILE_SUFFIX to ensure<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    // region's replayRecoveredEdits will not delete it<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    String fileName = formatRecoveredEditsFileName(logEntry.getKey().getLogSeqNum());<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    fileName = getTmpRecoveredEditsFileName(fileName);<a name="line.551"></a>
-<span class="sourceLineNo">552</span>    return new Path(dir, fileName);<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>  static String getTmpRecoveredEditsFileName(String fileName) {<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    return fileName + RECOVERED_LOG_TMPFILE_SUFFIX;<a name="line.556"></a>
-<span class="sourceLineNo">557</span>  }<a name="line.557"></a>
-<span class="sourceLineNo">558</span><a name="line.558"></a>
-<span class="sourceLineNo">559</span>  /**<a name="line.559"></a>
-<span class="sourceLineNo">560</span>   * Get the completed recovered edits file path, renaming it to be by last edit<a name="line.560"></a>
-<span class="sourceLineNo">561</span>   * in the file from its first edit. Then we could use the name to skip<a name="line.561"></a>
-<span class="sourceLineNo">562</span>   * recovered edits when doing {@link HRegion#replayRecoveredEditsIfAny}.<a name="line.562"></a>
-<span class="sourceLineNo">563</span>   * @param srcPath<a name="line.563"></a>
-<span class="sourceLineNo">564</span>   * @param maximumEditLogSeqNum<a name="line.564"></a>
-<span class="sourceLineNo">565</span>   * @return dstPath take file's last edit log seq num as the name<a name="line.565"></a>
-<span class="sourceLineNo">566</span>   */<a name="line.566"></a>
-<span class="sourceLineNo">567</span>  static Path getCompletedRecoveredEditsFilePath(Path srcPath,<a name="line.567"></a>
-<span class="sourceLineNo">568</span>      Long maximumEditLogSeqNum) {<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    String fileName = formatRecoveredEditsFileName(maximumEditLogSeqNum);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    return new Path(srcPath.getParent(), fileName);<a name="line.570"></a>
-<span class="sourceLineNo">571</span>  }<a name="line.571"></a>
-<span class="sourceLineNo">572</span><a name="line.572"></a>
-<span class="sourceLineNo">573</span>  static String formatRecoveredEditsFileName(final long seqid) {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    return String.format("%019d", seqid);<a name="line.574"></a>
-<span class="sourceLineNo">575</span>  }<a name="line.575"></a>
-<span class="sourceLineNo">576</span><a name="line.576"></a>
-<span class="sourceLineNo">577</span>  private static final Pattern EDITFILES_NAME_PATTERN = Pattern.compile("-?[0-9]+");<a name="line.577"></a>
-<span class="sourceLineNo">578</span>  private static final String RECOVERED_LOG_TMPFILE_SUFFIX = ".temp";<a name="line.578"></a>
-<span class="sourceLineNo">579</span><a name="line.579"></a>
-<span class="sourceLineNo">580</span>  /**<a name="line.580"></a>
-<span class="sourceLineNo">581</span>   * @param regiondir<a name="line.581"></a>
-<span class="sourceLineNo">582</span>   *          This regions directory in the filesystem.<a name="line.582"></a>
-<span class="sourceLineNo">583</span>   * @return The directory that holds recovered edits files for the region<a name="line.583"></a>
-<span class="sourceLineNo">584</span>   *         &lt;code&gt;regiondir&lt;/code&gt;<a name="line.584"></a>
-<span class="sourceLineNo">585</span>   */<a name="line.585"></a>
-<span class="sourceLineNo">586</span>  public static Path getRegionDirRecoveredEditsDir(final Path regiondir) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    return new Path(regiondir, HConstants.RECOVERED_EDITS_DIR);<a name="line.587"></a>
-<span class="sourceLineNo">588</span>  }<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span>  /**<a name="line.590"></a>
-<span class="sourceLineNo">591</span>   * Returns sorted set of edit files made by splitter, excluding files<a name="line.591"></a>
-<span class="sourceLineNo">592</span>   * with '.temp' suffix.<a name="line.592"></a>
-<span class="sourceLineNo">593</span>   *<a name="line.593"></a>
-<span class="sourceLineNo">594</span>   * @param fs<a name="line.594"></a>
-<span class="sourceLineNo">595</span>   * @param regiondir<a name="line.595"></a>
-<span class="sourceLineNo">596</span>   * @return Files in passed &lt;code&gt;regiondir&lt;/code&gt; as a sorted set.<a name="line.596"></a>
-<span class="sourceLineNo">597</span>   * @throws IOException<a name="line.597"></a>
-<span class="sourceLineNo">598</span>   */<a name="line.598"></a>
-<span class="sourceLineNo">599</span>  public static NavigableSet&lt;Path&gt; getSplitEditFilesSorted(final FileSystem fs,<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      final Path regiondir) throws IOException {<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    NavigableSet&lt;Path&gt; filesSorted = new TreeSet&lt;Path&gt;();<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    Path editsdir = getRegionDirRecoveredEditsDir(regiondir);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    if (!fs.exists(editsdir))<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      return filesSorted;<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    FileStatus[] files = FSUtils.listStatus(fs, editsdir, new PathFilter() {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      @Override<a name="line.606"></a>
-<span class="sourceLineNo">607</span>      public boolean accept(Path p) {<a name="line.607"></a>
-<span class="sourceLineNo">608</span>        boolean result = false;<a name="line.608"></a>
-<span class="sourceLineNo">609</span>        try {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>          // Return files and only files that match the editfile names pattern.<a name="line.610"></a>
-<span class="sourceLineNo">611</span>          // There can be other files in this directory other than edit files.<a name="line.611"></a>
-<span class="sourceLineNo">612</span>          // In particular, on error, we'll move aside the bad edit file giving<a name="line.612"></a>
-<span class="sourceLineNo">613</span>          // it a timestamp suffix. See moveAsideBadEditsFile.<a name="line.613"></a>
-<span class="sourceLineNo">614</span>          Matcher m = EDITFILES_NAME_PATTERN.matcher(p.getName());<a name="line.614"></a>
-<span class="sourceLineNo">615</span>          result = fs.isFile(p) &amp;&amp; m.matches();<a name="line.615"></a>
-<span class="sourceLineNo">616</span>          // Skip the file whose name ends with RECOVERED_LOG_TMPFILE_SUFFIX,<a name="line.616"></a>
-<span class="sourceLineNo">617</span>          // because it means splitwal thread is writting this file.<a name="line.617"></a>
-<span class="sourceLineNo">618</span>          if (p.getName().endsWith(RECOVERED_LOG_TMPFILE_SUFFIX)) {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>            result = false;<a name="line.619"></a>
-<span class="sourceLineNo">620</span>          }<a name="line.620"></a>
-<span class="sourceLineNo">621</span>          // Skip SeqId Files<a name="line.621"></a>
-<span class="sourceLineNo">622</span>          if (isSequenceIdFile(p)) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span>            result = false;<a name="line.623"></a>
-<span class="sourceLineNo">624</span>          }<a name="line.624"></a>
-<span class="sourceLineNo">625</span>        } catch (IOException e) {<a name="line.625"></a>
-<span class="sourceLineNo">626</span>          LOG.warn("Failed isFile check on " + p);<a name="line.626"></a>
-<span class="sourceLineNo">627</span>        }<a name="line.627"></a>
-<span class="sourceLineNo">628</span>        return result;<a name="line.628"></a>
-<span class="sourceLineNo">629</span>      }<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    });<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    if (files == null) {<a name="line.631"></a>
-<span class="sourceLineNo">632</span>      return filesSorted;<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    }<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    for (FileStatus status : files) {<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      filesSorted.add(status.getPath());<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    }<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    return filesSorted;<a name="line.637"></a>
-<span class="sourceLineNo">638</span>  }<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>   * Move aside a bad edits file.<a name="line.641"></a>
-<span class="sourceLineNo">642</span>   *<a name="line.642"></a>
-<span class="sourceLineNo">643</span>   * @param fs<a name="line.643"></a>
-<span class="sourceLineNo">644</span>   * @param edits<a name="line.644"></a>
-<span class="sourceLineNo">645</span>   *          Edits file to move aside.<a name="line.645"></a>
-<span class="sourceLineNo">646</span>   * @return The name of the moved aside file.<a name="line.646"></a>
-<span class="sourceLineNo">647</span>   * @throws IOException<a name="line.647"></a>
-<span class="sourceLineNo">648</span>   */<a name="line.648"></a>
-<span class="sourceLineNo">649</span>  public static Path moveAsideBadEditsFile(final FileSystem fs, final Path edits)<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      throws IOException {<a name="line.650"></a>
-<span class="sourceLineNo">651</span>    Path moveAsideName = new Path(edits.getParent(), edits.getName() + "."<a name="line.651"></a>
-<span class="sourceLineNo">652</span>        + System.currentTimeMillis());<a name="line.652"></a>
-<span class="sourceLineNo">653</span>    if (!fs.rename(edits, moveAsideName)) {<a name="line.653"></a>
-<span class="sourceLineNo">654</span>      LOG.warn("Rename failed from " + edits + " to " + moveAsideName);<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    }<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    return moveAsideName;<a name="line.656"></a>
-<span class="sourceLineNo">657</span>  }<a name="line.657"></a>
-<span class="sourceLineNo">658</span><a name="line.658"></a>
-<span class="sourceLineNo">659</span>  private static final String SEQUENCE_ID_FILE_SUFFIX = ".seqid";<a name="line.659"></a>
-<span class="sourceLineNo">660</span>  private static final String OLD_SEQUENCE_ID_FILE_SUFFIX = "_seqid";<a name="line.660"></a>
-<span class="sourceLineNo">661</span>  private static final int SEQUENCE_ID_FILE_SUFFIX_LENGTH = SEQUENCE_ID_FILE_SUFFIX.length();<a name="line.661"></a>
-<span class="sourceLineNo">662</span><a name="line.662"></a>
-<span class="sourceLineNo">663</span>  /**<a name="line.663"></a>
-<span class="sourceLineNo">664</span>   * Is the given file a region open sequence id file.<a name="line.664"></a>
-<span class="sourceLineNo">665</span>   */<a name="line.665"></a>
-<span class="sourceLineNo">666</span>  @VisibleForTesting<a name="line.666"></a>
-<span class="sourceLineNo">667</span>  public static boolean isSequenceIdFile(final Path file) {<a name="line.667"></a>
-<span class="sourceLineNo">668</span>    return file.getName().endsWith(SEQUENCE_ID_FILE_SUFFIX)<a name="line.668"></a>
-<span class="sourceLineNo">669</span>        || file.getName().endsWith(OLD_SEQUENCE_ID_FILE_SUFFIX);<a name="line.669"></a>
-<span class="sourceLineNo">670</span>  }<a name="line.670"></a>
+<span class="sourceLineNo">346</span>            regionMaxSeqIdInStores.put(encodedRegionNameAsStr, maxSeqIdInStores);<a name="line.346"></a>
+<span class="sourceLineNo">347</span>            lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.347"></a>
+<span class="sourceLineNo">348</span>            if (LOG.isDebugEnabled()) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>              LOG.debug("DLS Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.349"></a>
+<span class="sourceLineNo">350</span>                  TextFormat.shortDebugString(ids));<a name="line.350"></a>
+<span class="sourceLineNo">351</span>            }<a name="line.351"></a>
+<span class="sourceLineNo">352</span>          }<a name="line.352"></a>
+<span class="sourceLineNo">353</span>          if (lastFlushedSequenceId == null) {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>            lastFlushedSequenceId = -1L;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>          }<a name="line.355"></a>
+<span class="sourceLineNo">356</span>          lastFlushedSequenceIds.put(encodedRegionNameAsStr, lastFlushedSequenceId);<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        }<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        if (lastFlushedSequenceId &gt;= entry.getKey().getSequenceId()) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>          editsSkipped++;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>          continue;<a name="line.360"></a>
+<span class="sourceLineNo">361</span>        }<a name="line.361"></a>
+<span class="sourceLineNo">362</span>        entryBuffers.appendEntry(entry);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        editsCount++;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>        int moreWritersFromLastCheck = this.getNumOpenWriters() - numOpenedFilesLastCheck;<a name="line.364"></a>
+<span class="sourceLineNo">365</span>        // If sufficient edits have passed, check if we should report progress.<a name="line.365"></a>
+<span class="sourceLineNo">366</span>        if (editsCount % interval == 0<a name="line.366"></a>
+<span class="sourceLineNo">367</span>            || moreWritersFromLastCheck &gt; numOpenedFilesBeforeReporting) {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>          numOpenedFilesLastCheck = this.getNumOpenWriters();<a name="line.368"></a>
+<span class="sourceLineNo">369</span>          String countsStr = (editsCount - (editsSkipped + outputSink.getSkippedEdits()))<a name="line.369"></a>
+<span class="sourceLineNo">370</span>              + " edits, skipped " + editsSkipped + " edits.";<a name="line.370"></a>
+<span class="sourceLineNo">371</span>          status.setStatus("Split " + countsStr);<a name="line.371"></a>
+<span class="sourceLineNo">372</span>          if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>            progress_failed = true;<a name="line.373"></a>
+<span class="sourceLineNo">374</span>            return false;<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>      }<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    } catch (InterruptedException ie) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      IOException iie = new InterruptedIOException();<a name="line.379"></a>
+<span class="sourceLineNo">380</span>      iie.initCause(ie);<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      throw iie;<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    } catch (CorruptedLogFileException e) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      LOG.warn("Could not parse, corrupted log file " + logPath, e);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      csm.getSplitLogWorkerCoordination().markCorrupted(rootDir,<a name="line.384"></a>
+<span class="sourceLineNo">385</span>        logfile.getPath().getName(), fs);<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      isCorrupted = true;<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    } catch (IOException e) {<a name="line.387"></a>
+<span class="sourceLineNo">388</span>      e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      throw e;<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    } finally {<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      LOG.debug("Finishing writing output logs and closing down.");<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      try {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>        if (null != in) {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>          in.close();<a name="line.394"></a>
+<span class="sourceLineNo">395</span>        }<a name="line.395"></a>
+<span class="sourceLineNo">396</span>      } catch (IOException exception) {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>        LOG.warn("Could not close wal reader: " + exception.getMessage());<a name="line.397"></a>
+<span class="sourceLineNo">398</span>        LOG.debug("exception details", exception);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      }<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      try {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>        if (outputSinkStarted) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>          // Set progress_failed to true as the immediate following statement will reset its value<a name="line.402"></a>
+<span class="sourceLineNo">403</span>          // when finishWritingAndClose() throws exception, progress_failed has the right value<a name="line.403"></a>
+<span class="sourceLineNo">404</span>          progress_failed = true;<a name="line.404"></a>
+<span class="sourceLineNo">405</span>          progress_failed = outputSink.finishWritingAndClose() == null;<a name="line.405"></a>
+<span class="sourceLineNo">406</span>        }<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      } finally {<a name="line.407"></a>
+<span class="sourceLineNo">408</span>        String msg =<a name="line.408"></a>
+<span class="sourceLineNo">409</span>            "Processed " + editsCount + " edits across " + outputSink.getNumberOfRecoveredRegions()<a name="line.409"></a>
+<span class="sourceLineNo">410</span>                + " regions; edits skipped=" + editsSkipped + "; log file=" + logPath +<a name="line.410"></a>
+<span class="sourceLineNo">411</span>                ", length=" + logfile.getLen() + // See if length got updated post lease recovery<a name="line.411"></a>
+<span class="sourceLineNo">412</span>                ", corrupted=" + isCorrupted + ", progress failed=" + progress_failed;<a name="line.412"></a>
+<span class="sourceLineNo">413</span>        LOG.info(msg);<a name="line.413"></a>
+<span class="sourceLineNo">414</span>        status.markComplete(msg);<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>    return !progress_failed;<a name="line.417"></a>
+<span class="sourceLineNo">418</span>  }<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>   * Completes the work done by splitLogFile by archiving logs<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   * &lt;p&gt;<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   * It is invoked by SplitLogManager once it knows that one of the<a name="line.423"></a>
+<span class="sourceLineNo">424</span>   * SplitLogWorkers have completed the splitLogFile() part. If the master<a name="line.424"></a>
+<span class="sourceLineNo">425</span>   * crashes then this function might get called multiple times.<a name="line.425"></a>
+<span class="sourceLineNo">426</span>   * &lt;p&gt;<a name="line.426"></a>
+<span class="sourceLineNo">427</span>   * @param logfile<a name="line.427"></a>
+<span class="sourceLineNo">428</span>   * @param conf<a name="line.428"></a>
+<span class="sourceLineNo">429</span>   * @throws IOException<a name="line.429"></a>
+<span class="sourceLineNo">430</span>   */<a name="line.430"></a>
+<span class="sourceLineNo">431</span>  public static void finishSplitLogFile(String logfile,<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      Configuration conf)  throws IOException {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    Path rootdir = FSUtils.getRootDir(conf);<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    Path oldLogDir = new Path(rootdir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.434"></a>
+<span class="sourceLineNo">435</span>    Path logPath;<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    if (FSUtils.isStartingWithPath(rootdir, logfile)) {<a name="line.436"></a>
+<span class="sourceLineNo">437</span>      logPath = new Path(logfile);<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    } else {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>      logPath = new Path(rootdir, logfile);<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    }<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    finishSplitLogFile(rootdir, oldLogDir, logPath, conf);<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>  private static void finishSplitLogFile(Path rootdir, Path oldLogDir,<a name="line.444"></a>
+<span class="sourceLineNo">445</span>      Path logPath, Configuration conf) throws IOException {<a name="line.445"></a>
+<span class="sourceLineNo">446</span>    List&lt;Path&gt; processedLogs = new ArrayList&lt;Path&gt;();<a name="line.446"></a>
+<span class="sourceLineNo">447</span>    List&lt;Path&gt; corruptedLogs = new ArrayList&lt;Path&gt;();<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    FileSystem fs;<a name="line.448"></a>
+<span class="sourceLineNo">449</span>    fs = rootdir.getFileSystem(conf);<a name="line.449"></a>
+<span class="sourceLineNo">450</span>    if (ZKSplitLog.isCorrupted(rootdir, logPath.getName(), fs)) {<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      corruptedLogs.add(logPath);<a name="line.451"></a>
+<span class="sourceLineNo">452</span>    } else {<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      processedLogs.add(logPath);<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    }<a name="line.454"></a>
+<span class="sourceLineNo">455</span>    archiveLogs(corruptedLogs, processedLogs, oldLogDir, fs, conf);<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    Path stagingDir = ZKSplitLog.getSplitLogDir(rootdir, logPath.getName());<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    fs.delete(stagingDir, true);<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>  /**<a name="line.460"></a>
+<span class="sourceLineNo">461</span>   * Moves processed logs to a oldLogDir after successful processing Moves<a name="line.461"></a>
+<span class="sourceLineNo">462</span>   * corrupted logs (any log that couldn't be successfully parsed to corruptDir<a name="line.462"></a>
+<span class="sourceLineNo">463</span>   * (.corrupt) for later investigation<a name="line.463"></a>
+<span class="sourceLineNo">464</span>   *<a name="line.464"></a>
+<span class="sourceLineNo">465</span>   * @param corruptedLogs<a name="line.465"></a>
+<span class="sourceLineNo">466</span>   * @param processedLogs<a name="line.466"></a>
+<span class="sourceLineNo">467</span>   * @param oldLogDir<a name="line.467"></a>
+<span class="sourceLineNo">468</span>   * @param fs<a name="line.468"></a>
+<span class="sourceLineNo">469</span>   * @param conf<a name="line.469"></a>
+<span class="sourceLineNo">470</span>   * @throws IOException<a name="line.470"></a>
+<span class="sourceLineNo">471</span>   */<a name="line.471"></a>
+<span class="sourceLineNo">472</span>  private static void archiveLogs(<a name="line.472"></a>
+<span class="sourceLineNo">473</span>      final List&lt;Path&gt; corruptedLogs,<a name="line.473"></a>
+<span class="sourceLineNo">474</span>      final List&lt;Path&gt; processedLogs, final Path oldLogDir,<a name="line.474"></a>
+<span class="sourceLineNo">475</span>      final FileSystem fs, final Configuration conf) throws IOException {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    final Path corruptDir = new Path(FSUtils.getRootDir(conf), conf.get(<a name="line.476"></a>
+<span class="sourceLineNo">477</span>        "hbase.regionserver.hlog.splitlog.corrupt.dir",  HConstants.CORRUPT_DIR_NAME));<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>    if (!fs.mkdirs(corruptDir)) {<a name="line.479"></a>
+<span class="sourceLineNo">480</span>      LOG.info("Unable to mkdir " + corruptDir);<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    }<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    fs.mkdirs(oldLogDir);<a name="line.482"></a>
+<span class="sourceLineNo">483</span><a name="line.483"></a>
+<span class="sourceLineNo">484</span>    // this method can get restarted or called multiple times for archiving<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    // the same log files.<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    for (Path corrupted : corruptedLogs) {<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      Path p = new Path(corruptDir, corrupted.getName());<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      if (fs.exists(corrupted)) {<a name="line.488"></a>
+<span class="sourceLineNo">489</span>        if (!fs.rename(corrupted, p)) {<a name="line.489"></a>
+<span class="sourceLineNo">490</span>          LOG.warn("Unable to move corrupted log " + corrupted + " to " + p);<a name="line.490"></a>
+<span class="sourceLineNo">491</span>        } else {<a name="line.491"></a>
+<span class="sourceLineNo">492</span>          LOG.warn("Moved corrupted log " + corrupted + " to " + p);<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>    }<a name="line.495"></a>
+<span class="sourceLineNo">496</span><a name="line.496"></a>
+<span class="sourceLineNo">497</span>    for (Path p : processedLogs) {<a name="line.497"></a>
+<span class="sourceLineNo">498</span>      Path newPath = FSHLog.getWALArchivePath(oldLogDir, p);<a name="line.498"></a>
+<span class="sourceLineNo">499</span>      if (fs.exists(p)) {<a name="line.499"></a>
+<span class="sourceLineNo">500</span>        if (!FSUtils.renameAndSetModifyTime(fs, p, newPath)) {<a name="line.500"></a>
+<span class="sourceLineNo">501</span>          LOG.warn("Unable to move  " + p + " to " + newPath);<a name="line.501"></a>
+<span class="sourceLineNo">502</span>        } else {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>          LOG.info("Archived processed log " + p + " to " + newPath);<a name="line.503"></a>
+<span class="sourceLineNo">504</span>        }<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      }<a name="line.505"></a>
+<span class="sourceLineNo">506</span>    }<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>  /**<a name="line.509"></a>
+<span class="sourceLineNo">510</span>   * Path to a file under RECOVERED_EDITS_DIR directory of the region found in<a name="line.510"></a>
+<span class="sourceLineNo">511</span>   * &lt;code&gt;logEntry&lt;/code&gt; named for the sequenceid in the passed<a name="line.511"></a>
+<span class="sourceLineNo">512</span>   * &lt;code&gt;logEntry&lt;/code&gt;: e.g. /hbase/some_table/2323432434/recovered.edits/2332.<a name="line.512"></a>
+<span class="sourceLineNo">513</span>   * This method also ensures existence of RECOVERED_EDITS_DIR under the region<a name="line.513"></a>
+<span class="sourceLineNo">514</span>   * creating it if necessary.<a name="line.514"></a>
+<span class="sourceLineNo">515</span>   * @param fs<a name="line.515"></a>
+<span class="sourceLineNo">516</span>   * @param logEntry<a name="line.516"></a>
+<span class="sourceLineNo">517</span>   * @param rootDir HBase root dir.<a name="line.517"></a>
+<span class="sourceLineNo">518</span>   * @param fileBeingSplit the file being split currently. Used to generate tmp file name.<a name="line.518"></a>
+<span class="sourceLineNo">519</span>   * @return Path to file into which to dump split log edits.<a name="line.519"></a>
+<span class="sourceLineNo">520</span>   * @throws IOException<a name="line.520"></a>
+<span class="sourceLineNo">521</span>   */<a name="line.521"></a>
+<span class="sourceLineNo">522</span>  @SuppressWarnings("deprecation")<a name="line.522"></a>
+<span class="sourceLineNo">523</span>  private static Path getRegionSplitEditsPath(final FileSystem fs,<a name="line.523"></a>
+<span class="sourceLineNo">524</span>      final Entry logEntry, final Path rootDir, FileStatus fileBeingSplit)<a name="line.524"></a>
+<span class="sourceLineNo">525</span>  throws IOException {<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    Path tableDir = FSUtils.getTableDir(rootDir, logEntry.getKey().getTablename());<a name="line.526"></a>
+<span class="sourceLineNo">527</span>    String encodedRegionName = Bytes.toString(logEntry.getKey().getEncodedRegionName());<a name="line.527"></a>
+<span class="sourceLineNo">528</span>    Path regiondir = HRegion.getRegionDir(tableDir, encodedRegionName);<a name="line.528"></a>
+<span class="sourceLineNo">529</span>    Path dir = getRegionDirRecoveredEditsDir(regiondir);<a name="line.529"></a>
+<span class="sourceLineNo">530</span><a name="line.530"></a>
+<span class="sourceLineNo">531</span>    if (!fs.exists(regiondir)) {<a name="line.531"></a>
+<span class="sourceLineNo">532</span>      LOG.info("This region's directory doesn't exist: "<a name="line.532"></a>
+<span class="sourceLineNo">533</span>          + regiondir.toString() + ". It is very likely that it was" +<a name="line.533"></a>
+<span class="sourceLineNo">534</span>          " already split so it's safe to discard those edits.");<a name="line.534"></a>
+<span class="sourceLineNo">535</span>      return null;<a name="line.535"></a>
+<span class="sourceLineNo">536</span>    }<a name="line.536"></a>
+<span class="sourceLineNo">537</span>    if (fs.exists(dir) &amp;&amp; fs.isFile(dir)) {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      Path tmp = new Path("/tmp");<a name="line.538"></a>
+<span class="sourceLineNo">539</span>      if (!fs.exists(tmp)) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span>        fs.mkdirs(tmp);<a name="line.540"></a>
+<span class="sourceLineNo">541</span>      }<a name="line.541"></a>
+<span class="sourceLineNo">542</span>      tmp = new Path(tmp,<a name="line.542"></a>
+<span class="sourceLineNo">543</span>        HConstants.RECOVERED_EDITS_DIR + "_" + encodedRegionName);<a name="line.543"></a>
+<span class="sourceLineNo">544</span>      LOG.warn("Found existing old file: " + dir + ". It could be some "<a name="line.544"></a>
+<span class="sourceLineNo">545</span>        + "leftover of an old installation. It should be a folder instead. "<a name="line.545"></a>
+<span class="sourceLineNo">546</span>        + "So moving it to " + tmp);<a name="line.546"></a>
+<span class="sourceLineNo">547</span>      if (!fs.rename(dir, tmp)) {<a name="line.547"></a>
+<span class="sourceLineNo">548</span>        LOG.warn("Failed to sideline old file " + dir);<a name="line.548"></a>
+<span class="sourceLineNo">549</span>      }<a name="line.549"></a>
+<span class="sourceLineNo">550</span>    }<a name="line.550"></a>
+<span class="sourceLineNo">551</span><a name="line.551"></a>
+<span class="sourceLineNo">552<

<TRUNCATED>

[30/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/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 1d64963..a232cc8 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
@@ -6980,880 +6980,882 @@
 <span class="sourceLineNo">6972</span>      lock(this.updatesLock.readLock());<a name="line.6972"></a>
 <span class="sourceLineNo">6973</span>      try {<a name="line.6973"></a>
 <span class="sourceLineNo">6974</span>        Result cpResult = doCoprocessorPreCall(op, mutation);<a name="line.6974"></a>
-<span class="sourceLineNo">6975</span>        if (cpResult != null) return cpResult;<a name="line.6975"></a>
-<span class="sourceLineNo">6976</span>        Durability effectiveDurability = getEffectiveDurability(mutation.getDurability());<a name="line.6976"></a>
-<span class="sourceLineNo">6977</span>        Map&lt;Store, List&lt;Cell&gt;&gt; forMemStore =<a name="line.6977"></a>
-<span class="sourceLineNo">6978</span>            new HashMap&lt;Store, List&lt;Cell&gt;&gt;(mutation.getFamilyCellMap().size());<a name="line.6978"></a>
-<span class="sourceLineNo">6979</span>        // Reckon Cells to apply to WAL --  in returned walEdit -- and what to add to memstore and<a name="line.6979"></a>
-<span class="sourceLineNo">6980</span>        // what to return back to the client (in 'forMemStore' and 'results' respectively).<a name="line.6980"></a>
-<span class="sourceLineNo">6981</span>        WALEdit walEdit = reckonDeltas(op, mutation, effectiveDurability, forMemStore, results);<a name="line.6981"></a>
-<span class="sourceLineNo">6982</span>        // Actually write to WAL now if a walEdit to apply.<a name="line.6982"></a>
-<span class="sourceLineNo">6983</span>        if (walEdit != null &amp;&amp; !walEdit.isEmpty()) {<a name="line.6983"></a>
-<span class="sourceLineNo">6984</span>          writeEntry = doWALAppend(walEdit, durability, nonceGroup, nonce);<a name="line.6984"></a>
-<span class="sourceLineNo">6985</span>        } else {<a name="line.6985"></a>
-<span class="sourceLineNo">6986</span>          // If walEdits is empty, it means we skipped the WAL; update counters and start an mvcc<a name="line.6986"></a>
-<span class="sourceLineNo">6987</span>          // transaction.<a name="line.6987"></a>
-<span class="sourceLineNo">6988</span>          recordMutationWithoutWal(mutation.getFamilyCellMap());<a name="line.6988"></a>
-<span class="sourceLineNo">6989</span>          writeEntry = mvcc.begin();<a name="line.6989"></a>
-<span class="sourceLineNo">6990</span>        }<a name="line.6990"></a>
-<span class="sourceLineNo">6991</span>        // Now write to MemStore. Do it a column family at a time.<a name="line.6991"></a>
-<span class="sourceLineNo">6992</span>        long sequenceId = writeEntry.getWriteNumber();<a name="line.6992"></a>
-<span class="sourceLineNo">6993</span>        for (Map.Entry&lt;Store, List&lt;Cell&gt;&gt; e: forMemStore.entrySet()) {<a name="line.6993"></a>
-<span class="sourceLineNo">6994</span>          accumulatedResultSize +=<a name="line.6994"></a>
-<span class="sourceLineNo">6995</span>              applyToMemstore(e.getKey(), e.getValue(), true, false, sequenceId);<a name="line.6995"></a>
-<span class="sourceLineNo">6996</span>        }<a name="line.6996"></a>
-<span class="sourceLineNo">6997</span>        mvcc.completeAndWait(writeEntry);<a name="line.6997"></a>
-<span class="sourceLineNo">6998</span>        writeEntry = null;<a name="line.6998"></a>
-<span class="sourceLineNo">6999</span>      } finally {<a name="line.6999"></a>
-<span class="sourceLineNo">7000</span>        this.updatesLock.readLock().unlock();<a name="line.7000"></a>
-<span class="sourceLineNo">7001</span>      }<a name="line.7001"></a>
-<span class="sourceLineNo">7002</span>      // If results is null, then client asked that we not return the calculated results.<a name="line.7002"></a>
-<span class="sourceLineNo">7003</span>      return results !=  null? Result.create(results): null;<a name="line.7003"></a>
-<span class="sourceLineNo">7004</span>    } finally {<a name="line.7004"></a>
-<span class="sourceLineNo">7005</span>      // Call complete always, even on success. doDelta is doing a Get READ_UNCOMMITTED when it goes<a name="line.7005"></a>
-<span class="sourceLineNo">7006</span>      // to get current value under an exclusive lock so no need so no need to wait to return to<a name="line.7006"></a>
-<span class="sourceLineNo">7007</span>      // the client. Means only way to read-your-own-increment or append is to come in with an<a name="line.7007"></a>
-<span class="sourceLineNo">7008</span>      // a 0 increment.<a name="line.7008"></a>
-<span class="sourceLineNo">7009</span>      if (writeEntry != null) mvcc.complete(writeEntry);<a name="line.7009"></a>
-<span class="sourceLineNo">7010</span>      rowLock.release();<a name="line.7010"></a>
-<span class="sourceLineNo">7011</span>      // Request a cache flush if over the limit.  Do it outside update lock.<a name="line.7011"></a>
-<span class="sourceLineNo">7012</span>      if (isFlushSize(this.addAndGetGlobalMemstoreSize(accumulatedResultSize))) requestFlush();<a name="line.7012"></a>
-<span class="sourceLineNo">7013</span>      closeRegionOperation(op);<a name="line.7013"></a>
-<span class="sourceLineNo">7014</span>      if (this.metricsRegion != null) {<a name="line.7014"></a>
-<span class="sourceLineNo">7015</span>        switch (op) {<a name="line.7015"></a>
-<span class="sourceLineNo">7016</span>          case INCREMENT:<a name="line.7016"></a>
-<span class="sourceLineNo">7017</span>            this.metricsRegion.updateIncrement();<a name="line.7017"></a>
-<span class="sourceLineNo">7018</span>            break;<a name="line.7018"></a>
-<span class="sourceLineNo">7019</span>          case APPEND:<a name="line.7019"></a>
-<span class="sourceLineNo">7020</span>            this.metricsRegion.updateAppend();<a name="line.7020"></a>
-<span class="sourceLineNo">7021</span>            break;<a name="line.7021"></a>
-<span class="sourceLineNo">7022</span>          default:<a name="line.7022"></a>
+<span class="sourceLineNo">6975</span>        if (cpResult != null) {<a name="line.6975"></a>
+<span class="sourceLineNo">6976</span>          return returnResults? cpResult: null;<a name="line.6976"></a>
+<span class="sourceLineNo">6977</span>        }<a name="line.6977"></a>
+<span class="sourceLineNo">6978</span>        Durability effectiveDurability = getEffectiveDurability(mutation.getDurability());<a name="line.6978"></a>
+<span class="sourceLineNo">6979</span>        Map&lt;Store, List&lt;Cell&gt;&gt; forMemStore =<a name="line.6979"></a>
+<span class="sourceLineNo">6980</span>            new HashMap&lt;Store, List&lt;Cell&gt;&gt;(mutation.getFamilyCellMap().size());<a name="line.6980"></a>
+<span class="sourceLineNo">6981</span>        // Reckon Cells to apply to WAL --  in returned walEdit -- and what to add to memstore and<a name="line.6981"></a>
+<span class="sourceLineNo">6982</span>        // what to return back to the client (in 'forMemStore' and 'results' respectively).<a name="line.6982"></a>
+<span class="sourceLineNo">6983</span>        WALEdit walEdit = reckonDeltas(op, mutation, effectiveDurability, forMemStore, results);<a name="line.6983"></a>
+<span class="sourceLineNo">6984</span>        // Actually write to WAL now if a walEdit to apply.<a name="line.6984"></a>
+<span class="sourceLineNo">6985</span>        if (walEdit != null &amp;&amp; !walEdit.isEmpty()) {<a name="line.6985"></a>
+<span class="sourceLineNo">6986</span>          writeEntry = doWALAppend(walEdit, durability, nonceGroup, nonce);<a name="line.6986"></a>
+<span class="sourceLineNo">6987</span>        } else {<a name="line.6987"></a>
+<span class="sourceLineNo">6988</span>          // If walEdits is empty, it means we skipped the WAL; update counters and start an mvcc<a name="line.6988"></a>
+<span class="sourceLineNo">6989</span>          // transaction.<a name="line.6989"></a>
+<span class="sourceLineNo">6990</span>          recordMutationWithoutWal(mutation.getFamilyCellMap());<a name="line.6990"></a>
+<span class="sourceLineNo">6991</span>          writeEntry = mvcc.begin();<a name="line.6991"></a>
+<span class="sourceLineNo">6992</span>        }<a name="line.6992"></a>
+<span class="sourceLineNo">6993</span>        // Now write to MemStore. Do it a column family at a time.<a name="line.6993"></a>
+<span class="sourceLineNo">6994</span>        long sequenceId = writeEntry.getWriteNumber();<a name="line.6994"></a>
+<span class="sourceLineNo">6995</span>        for (Map.Entry&lt;Store, List&lt;Cell&gt;&gt; e: forMemStore.entrySet()) {<a name="line.6995"></a>
+<span class="sourceLineNo">6996</span>          accumulatedResultSize +=<a name="line.6996"></a>
+<span class="sourceLineNo">6997</span>              applyToMemstore(e.getKey(), e.getValue(), true, false, sequenceId);<a name="line.6997"></a>
+<span class="sourceLineNo">6998</span>        }<a name="line.6998"></a>
+<span class="sourceLineNo">6999</span>        mvcc.completeAndWait(writeEntry);<a name="line.6999"></a>
+<span class="sourceLineNo">7000</span>        writeEntry = null;<a name="line.7000"></a>
+<span class="sourceLineNo">7001</span>      } finally {<a name="line.7001"></a>
+<span class="sourceLineNo">7002</span>        this.updatesLock.readLock().unlock();<a name="line.7002"></a>
+<span class="sourceLineNo">7003</span>      }<a name="line.7003"></a>
+<span class="sourceLineNo">7004</span>      // If results is null, then client asked that we not return the calculated results.<a name="line.7004"></a>
+<span class="sourceLineNo">7005</span>      return results != null &amp;&amp; returnResults? Result.create(results): null;<a name="line.7005"></a>
+<span class="sourceLineNo">7006</span>    } finally {<a name="line.7006"></a>
+<span class="sourceLineNo">7007</span>      // Call complete always, even on success. doDelta is doing a Get READ_UNCOMMITTED when it goes<a name="line.7007"></a>
+<span class="sourceLineNo">7008</span>      // to get current value under an exclusive lock so no need so no need to wait to return to<a name="line.7008"></a>
+<span class="sourceLineNo">7009</span>      // the client. Means only way to read-your-own-increment or append is to come in with an<a name="line.7009"></a>
+<span class="sourceLineNo">7010</span>      // a 0 increment.<a name="line.7010"></a>
+<span class="sourceLineNo">7011</span>      if (writeEntry != null) mvcc.complete(writeEntry);<a name="line.7011"></a>
+<span class="sourceLineNo">7012</span>      rowLock.release();<a name="line.7012"></a>
+<span class="sourceLineNo">7013</span>      // Request a cache flush if over the limit.  Do it outside update lock.<a name="line.7013"></a>
+<span class="sourceLineNo">7014</span>      if (isFlushSize(this.addAndGetGlobalMemstoreSize(accumulatedResultSize))) requestFlush();<a name="line.7014"></a>
+<span class="sourceLineNo">7015</span>      closeRegionOperation(op);<a name="line.7015"></a>
+<span class="sourceLineNo">7016</span>      if (this.metricsRegion != null) {<a name="line.7016"></a>
+<span class="sourceLineNo">7017</span>        switch (op) {<a name="line.7017"></a>
+<span class="sourceLineNo">7018</span>          case INCREMENT:<a name="line.7018"></a>
+<span class="sourceLineNo">7019</span>            this.metricsRegion.updateIncrement();<a name="line.7019"></a>
+<span class="sourceLineNo">7020</span>            break;<a name="line.7020"></a>
+<span class="sourceLineNo">7021</span>          case APPEND:<a name="line.7021"></a>
+<span class="sourceLineNo">7022</span>            this.metricsRegion.updateAppend();<a name="line.7022"></a>
 <span class="sourceLineNo">7023</span>            break;<a name="line.7023"></a>
-<span class="sourceLineNo">7024</span>        }<a name="line.7024"></a>
-<span class="sourceLineNo">7025</span>      }<a name="line.7025"></a>
-<span class="sourceLineNo">7026</span>    }<a name="line.7026"></a>
-<span class="sourceLineNo">7027</span>  }<a name="line.7027"></a>
-<span class="sourceLineNo">7028</span><a name="line.7028"></a>
-<span class="sourceLineNo">7029</span>  private WriteEntry doWALAppend(WALEdit walEdit, Durability durability, long nonceGroup,<a name="line.7029"></a>
-<span class="sourceLineNo">7030</span>      long nonce)<a name="line.7030"></a>
-<span class="sourceLineNo">7031</span>  throws IOException {<a name="line.7031"></a>
-<span class="sourceLineNo">7032</span>    return doWALAppend(walEdit, durability, WALKey.EMPTY_UUIDS, System.currentTimeMillis(),<a name="line.7032"></a>
-<span class="sourceLineNo">7033</span>      nonceGroup, nonce);<a name="line.7033"></a>
-<span class="sourceLineNo">7034</span>  }<a name="line.7034"></a>
-<span class="sourceLineNo">7035</span><a name="line.7035"></a>
-<span class="sourceLineNo">7036</span>  /**<a name="line.7036"></a>
-<span class="sourceLineNo">7037</span>   * @return writeEntry associated with this append<a name="line.7037"></a>
-<span class="sourceLineNo">7038</span>   */<a name="line.7038"></a>
-<span class="sourceLineNo">7039</span>  private WriteEntry doWALAppend(WALEdit walEdit, Durability durability, List&lt;UUID&gt; clusterIds,<a name="line.7039"></a>
-<span class="sourceLineNo">7040</span>      long now, long nonceGroup, long nonce)<a name="line.7040"></a>
-<span class="sourceLineNo">7041</span>  throws IOException {<a name="line.7041"></a>
-<span class="sourceLineNo">7042</span>    WriteEntry writeEntry = null;<a name="line.7042"></a>
-<span class="sourceLineNo">7043</span>    // Using default cluster id, as this can only happen in the originating cluster.<a name="line.7043"></a>
-<span class="sourceLineNo">7044</span>    // A slave cluster receives the final value (not the delta) as a Put. We use HLogKey<a name="line.7044"></a>
-<span class="sourceLineNo">7045</span>    // here instead of WALKey directly to support legacy coprocessors.<a name="line.7045"></a>
-<span class="sourceLineNo">7046</span>    WALKey walKey = new WALKey(this.getRegionInfo().getEncodedNameAsBytes(),<a name="line.7046"></a>
-<span class="sourceLineNo">7047</span>      this.htableDescriptor.getTableName(), WALKey.NO_SEQUENCE_ID, now, clusterIds,<a name="line.7047"></a>
-<span class="sourceLineNo">7048</span>      nonceGroup, nonce, mvcc);<a name="line.7048"></a>
-<span class="sourceLineNo">7049</span>    try {<a name="line.7049"></a>
-<span class="sourceLineNo">7050</span>      long txid =<a name="line.7050"></a>
-<span class="sourceLineNo">7051</span>        this.wal.append(this.htableDescriptor, this.getRegionInfo(), walKey, walEdit, true);<a name="line.7051"></a>
-<span class="sourceLineNo">7052</span>      // Call sync on our edit.<a name="line.7052"></a>
-<span class="sourceLineNo">7053</span>      if (txid != 0) sync(txid, durability);<a name="line.7053"></a>
-<span class="sourceLineNo">7054</span>      writeEntry = walKey.getWriteEntry();<a name="line.7054"></a>
-<span class="sourceLineNo">7055</span>    } catch (IOException ioe) {<a name="line.7055"></a>
-<span class="sourceLineNo">7056</span>      if (walKey != null) mvcc.complete(walKey.getWriteEntry());<a name="line.7056"></a>
-<span class="sourceLineNo">7057</span>      throw ioe;<a name="line.7057"></a>
-<span class="sourceLineNo">7058</span>    }<a name="line.7058"></a>
-<span class="sourceLineNo">7059</span>    return writeEntry;<a name="line.7059"></a>
-<span class="sourceLineNo">7060</span>  }<a name="line.7060"></a>
-<span class="sourceLineNo">7061</span><a name="line.7061"></a>
-<span class="sourceLineNo">7062</span>  /**<a name="line.7062"></a>
-<span class="sourceLineNo">7063</span>   * Do coprocessor pre-increment or pre-append call.<a name="line.7063"></a>
-<span class="sourceLineNo">7064</span>   * @return Result returned out of the coprocessor, which means bypass all further processing and<a name="line.7064"></a>
-<span class="sourceLineNo">7065</span>   *  return the proffered Result instead, or null which means proceed.<a name="line.7065"></a>
-<span class="sourceLineNo">7066</span>   */<a name="line.7066"></a>
-<span class="sourceLineNo">7067</span>  private Result doCoprocessorPreCall(final Operation op, final Mutation mutation)<a name="line.7067"></a>
-<span class="sourceLineNo">7068</span>  throws IOException {<a name="line.7068"></a>
-<span class="sourceLineNo">7069</span>    Result result = null;<a name="line.7069"></a>
-<span class="sourceLineNo">7070</span>    if (this.coprocessorHost != null) {<a name="line.7070"></a>
-<span class="sourceLineNo">7071</span>      switch(op) {<a name="line.7071"></a>
-<span class="sourceLineNo">7072</span>        case INCREMENT:<a name="line.7072"></a>
-<span class="sourceLineNo">7073</span>          result = this.coprocessorHost.preIncrementAfterRowLock((Increment)mutation);<a name="line.7073"></a>
-<span class="sourceLineNo">7074</span>          break;<a name="line.7074"></a>
-<span class="sourceLineNo">7075</span>        case APPEND:<a name="line.7075"></a>
-<span class="sourceLineNo">7076</span>          result = this.coprocessorHost.preAppendAfterRowLock((Append)mutation);<a name="line.7076"></a>
-<span class="sourceLineNo">7077</span>          break;<a name="line.7077"></a>
-<span class="sourceLineNo">7078</span>        default: throw new UnsupportedOperationException(op.toString());<a name="line.7078"></a>
-<span class="sourceLineNo">7079</span>      }<a name="line.7079"></a>
-<span class="sourceLineNo">7080</span>    }<a name="line.7080"></a>
-<span class="sourceLineNo">7081</span>    return result;<a name="line.7081"></a>
-<span class="sourceLineNo">7082</span>  }<a name="line.7082"></a>
-<span class="sourceLineNo">7083</span><a name="line.7083"></a>
-<span class="sourceLineNo">7084</span>  /**<a name="line.7084"></a>
-<span class="sourceLineNo">7085</span>   * Reckon the Cells to apply to WAL, memstore, and to return to the Client; these Sets are not<a name="line.7085"></a>
-<span class="sourceLineNo">7086</span>   * always the same dependent on whether to write WAL or if the amount to increment is zero (in<a name="line.7086"></a>
-<span class="sourceLineNo">7087</span>   * this case we write back nothing, just return latest Cell value to the client).<a name="line.7087"></a>
-<span class="sourceLineNo">7088</span>   *<a name="line.7088"></a>
-<span class="sourceLineNo">7089</span>   * @param results Fill in here what goes back to the Client if it is non-null (if null, client<a name="line.7089"></a>
-<span class="sourceLineNo">7090</span>   *  doesn't want results).<a name="line.7090"></a>
-<span class="sourceLineNo">7091</span>   * @param forMemStore Fill in here what to apply to the MemStore (by Store).<a name="line.7091"></a>
-<span class="sourceLineNo">7092</span>   * @return A WALEdit to apply to WAL or null if we are to skip the WAL.<a name="line.7092"></a>
-<span class="sourceLineNo">7093</span>   */<a name="line.7093"></a>
-<span class="sourceLineNo">7094</span>  private WALEdit reckonDeltas(final Operation op, final Mutation mutation,<a name="line.7094"></a>
-<span class="sourceLineNo">7095</span>      final Durability effectiveDurability, final Map&lt;Store, List&lt;Cell&gt;&gt; forMemStore,<a name="line.7095"></a>
-<span class="sourceLineNo">7096</span>      final List&lt;Cell&gt; results)<a name="line.7096"></a>
-<span class="sourceLineNo">7097</span>  throws IOException {<a name="line.7097"></a>
-<span class="sourceLineNo">7098</span>    WALEdit walEdit = null;<a name="line.7098"></a>
-<span class="sourceLineNo">7099</span>    long now = EnvironmentEdgeManager.currentTime();<a name="line.7099"></a>
-<span class="sourceLineNo">7100</span>    final boolean writeToWAL = effectiveDurability != Durability.SKIP_WAL;<a name="line.7100"></a>
-<span class="sourceLineNo">7101</span>    // Process a Store/family at a time.<a name="line.7101"></a>
-<span class="sourceLineNo">7102</span>    for (Map.Entry&lt;byte [], List&lt;Cell&gt;&gt; entry: mutation.getFamilyCellMap().entrySet()) {<a name="line.7102"></a>
-<span class="sourceLineNo">7103</span>      final byte [] columnFamilyName = entry.getKey();<a name="line.7103"></a>
-<span class="sourceLineNo">7104</span>      List&lt;Cell&gt; deltas = entry.getValue();<a name="line.7104"></a>
-<span class="sourceLineNo">7105</span>      Store store = this.stores.get(columnFamilyName);<a name="line.7105"></a>
-<span class="sourceLineNo">7106</span>      // Reckon for the Store what to apply to WAL and MemStore.<a name="line.7106"></a>
-<span class="sourceLineNo">7107</span>      List&lt;Cell&gt; toApply =<a name="line.7107"></a>
-<span class="sourceLineNo">7108</span>        reckonDeltasByStore(store, op, mutation, effectiveDurability, now, deltas, results);<a name="line.7108"></a>
-<span class="sourceLineNo">7109</span>      if (!toApply.isEmpty()) {<a name="line.7109"></a>
-<span class="sourceLineNo">7110</span>        forMemStore.put(store, toApply);<a name="line.7110"></a>
-<span class="sourceLineNo">7111</span>        if (writeToWAL) {<a name="line.7111"></a>
-<span class="sourceLineNo">7112</span>          if (walEdit == null) {<a name="line.7112"></a>
-<span class="sourceLineNo">7113</span>            walEdit = new WALEdit();<a name="line.7113"></a>
-<span class="sourceLineNo">7114</span>          }<a name="line.7114"></a>
-<span class="sourceLineNo">7115</span>          walEdit.getCells().addAll(toApply);<a name="line.7115"></a>
-<span class="sourceLineNo">7116</span>        }<a name="line.7116"></a>
-<span class="sourceLineNo">7117</span>      }<a name="line.7117"></a>
-<span class="sourceLineNo">7118</span>    }<a name="line.7118"></a>
-<span class="sourceLineNo">7119</span>    return walEdit;<a name="line.7119"></a>
-<span class="sourceLineNo">7120</span>  }<a name="line.7120"></a>
-<span class="sourceLineNo">7121</span><a name="line.7121"></a>
-<span class="sourceLineNo">7122</span>  /**<a name="line.7122"></a>
-<span class="sourceLineNo">7123</span>   * Reckon the Cells to apply to WAL, memstore, and to return to the Client in passed<a name="line.7123"></a>
-<span class="sourceLineNo">7124</span>   * column family/Store.<a name="line.7124"></a>
-<span class="sourceLineNo">7125</span>   *<a name="line.7125"></a>
-<span class="sourceLineNo">7126</span>   * Does Get of current value and then adds passed in deltas for this Store returning the result.<a name="line.7126"></a>
+<span class="sourceLineNo">7024</span>          default:<a name="line.7024"></a>
+<span class="sourceLineNo">7025</span>            break;<a name="line.7025"></a>
+<span class="sourceLineNo">7026</span>        }<a name="line.7026"></a>
+<span class="sourceLineNo">7027</span>      }<a name="line.7027"></a>
+<span class="sourceLineNo">7028</span>    }<a name="line.7028"></a>
+<span class="sourceLineNo">7029</span>  }<a name="line.7029"></a>
+<span class="sourceLineNo">7030</span><a name="line.7030"></a>
+<span class="sourceLineNo">7031</span>  private WriteEntry doWALAppend(WALEdit walEdit, Durability durability, long nonceGroup,<a name="line.7031"></a>
+<span class="sourceLineNo">7032</span>      long nonce)<a name="line.7032"></a>
+<span class="sourceLineNo">7033</span>  throws IOException {<a name="line.7033"></a>
+<span class="sourceLineNo">7034</span>    return doWALAppend(walEdit, durability, WALKey.EMPTY_UUIDS, System.currentTimeMillis(),<a name="line.7034"></a>
+<span class="sourceLineNo">7035</span>      nonceGroup, nonce);<a name="line.7035"></a>
+<span class="sourceLineNo">7036</span>  }<a name="line.7036"></a>
+<span class="sourceLineNo">7037</span><a name="line.7037"></a>
+<span class="sourceLineNo">7038</span>  /**<a name="line.7038"></a>
+<span class="sourceLineNo">7039</span>   * @return writeEntry associated with this append<a name="line.7039"></a>
+<span class="sourceLineNo">7040</span>   */<a name="line.7040"></a>
+<span class="sourceLineNo">7041</span>  private WriteEntry doWALAppend(WALEdit walEdit, Durability durability, List&lt;UUID&gt; clusterIds,<a name="line.7041"></a>
+<span class="sourceLineNo">7042</span>      long now, long nonceGroup, long nonce)<a name="line.7042"></a>
+<span class="sourceLineNo">7043</span>  throws IOException {<a name="line.7043"></a>
+<span class="sourceLineNo">7044</span>    WriteEntry writeEntry = null;<a name="line.7044"></a>
+<span class="sourceLineNo">7045</span>    // Using default cluster id, as this can only happen in the originating cluster.<a name="line.7045"></a>
+<span class="sourceLineNo">7046</span>    // A slave cluster receives the final value (not the delta) as a Put. We use HLogKey<a name="line.7046"></a>
+<span class="sourceLineNo">7047</span>    // here instead of WALKey directly to support legacy coprocessors.<a name="line.7047"></a>
+<span class="sourceLineNo">7048</span>    WALKey walKey = new WALKey(this.getRegionInfo().getEncodedNameAsBytes(),<a name="line.7048"></a>
+<span class="sourceLineNo">7049</span>      this.htableDescriptor.getTableName(), WALKey.NO_SEQUENCE_ID, now, clusterIds,<a name="line.7049"></a>
+<span class="sourceLineNo">7050</span>      nonceGroup, nonce, mvcc);<a name="line.7050"></a>
+<span class="sourceLineNo">7051</span>    try {<a name="line.7051"></a>
+<span class="sourceLineNo">7052</span>      long txid =<a name="line.7052"></a>
+<span class="sourceLineNo">7053</span>        this.wal.append(this.htableDescriptor, this.getRegionInfo(), walKey, walEdit, true);<a name="line.7053"></a>
+<span class="sourceLineNo">7054</span>      // Call sync on our edit.<a name="line.7054"></a>
+<span class="sourceLineNo">7055</span>      if (txid != 0) sync(txid, durability);<a name="line.7055"></a>
+<span class="sourceLineNo">7056</span>      writeEntry = walKey.getWriteEntry();<a name="line.7056"></a>
+<span class="sourceLineNo">7057</span>    } catch (IOException ioe) {<a name="line.7057"></a>
+<span class="sourceLineNo">7058</span>      if (walKey != null) mvcc.complete(walKey.getWriteEntry());<a name="line.7058"></a>
+<span class="sourceLineNo">7059</span>      throw ioe;<a name="line.7059"></a>
+<span class="sourceLineNo">7060</span>    }<a name="line.7060"></a>
+<span class="sourceLineNo">7061</span>    return writeEntry;<a name="line.7061"></a>
+<span class="sourceLineNo">7062</span>  }<a name="line.7062"></a>
+<span class="sourceLineNo">7063</span><a name="line.7063"></a>
+<span class="sourceLineNo">7064</span>  /**<a name="line.7064"></a>
+<span class="sourceLineNo">7065</span>   * Do coprocessor pre-increment or pre-append call.<a name="line.7065"></a>
+<span class="sourceLineNo">7066</span>   * @return Result returned out of the coprocessor, which means bypass all further processing and<a name="line.7066"></a>
+<span class="sourceLineNo">7067</span>   *  return the proffered Result instead, or null which means proceed.<a name="line.7067"></a>
+<span class="sourceLineNo">7068</span>   */<a name="line.7068"></a>
+<span class="sourceLineNo">7069</span>  private Result doCoprocessorPreCall(final Operation op, final Mutation mutation)<a name="line.7069"></a>
+<span class="sourceLineNo">7070</span>  throws IOException {<a name="line.7070"></a>
+<span class="sourceLineNo">7071</span>    Result result = null;<a name="line.7071"></a>
+<span class="sourceLineNo">7072</span>    if (this.coprocessorHost != null) {<a name="line.7072"></a>
+<span class="sourceLineNo">7073</span>      switch(op) {<a name="line.7073"></a>
+<span class="sourceLineNo">7074</span>        case INCREMENT:<a name="line.7074"></a>
+<span class="sourceLineNo">7075</span>          result = this.coprocessorHost.preIncrementAfterRowLock((Increment)mutation);<a name="line.7075"></a>
+<span class="sourceLineNo">7076</span>          break;<a name="line.7076"></a>
+<span class="sourceLineNo">7077</span>        case APPEND:<a name="line.7077"></a>
+<span class="sourceLineNo">7078</span>          result = this.coprocessorHost.preAppendAfterRowLock((Append)mutation);<a name="line.7078"></a>
+<span class="sourceLineNo">7079</span>          break;<a name="line.7079"></a>
+<span class="sourceLineNo">7080</span>        default: throw new UnsupportedOperationException(op.toString());<a name="line.7080"></a>
+<span class="sourceLineNo">7081</span>      }<a name="line.7081"></a>
+<span class="sourceLineNo">7082</span>    }<a name="line.7082"></a>
+<span class="sourceLineNo">7083</span>    return result;<a name="line.7083"></a>
+<span class="sourceLineNo">7084</span>  }<a name="line.7084"></a>
+<span class="sourceLineNo">7085</span><a name="line.7085"></a>
+<span class="sourceLineNo">7086</span>  /**<a name="line.7086"></a>
+<span class="sourceLineNo">7087</span>   * Reckon the Cells to apply to WAL, memstore, and to return to the Client; these Sets are not<a name="line.7087"></a>
+<span class="sourceLineNo">7088</span>   * always the same dependent on whether to write WAL or if the amount to increment is zero (in<a name="line.7088"></a>
+<span class="sourceLineNo">7089</span>   * this case we write back nothing, just return latest Cell value to the client).<a name="line.7089"></a>
+<span class="sourceLineNo">7090</span>   *<a name="line.7090"></a>
+<span class="sourceLineNo">7091</span>   * @param results Fill in here what goes back to the Client if it is non-null (if null, client<a name="line.7091"></a>
+<span class="sourceLineNo">7092</span>   *  doesn't want results).<a name="line.7092"></a>
+<span class="sourceLineNo">7093</span>   * @param forMemStore Fill in here what to apply to the MemStore (by Store).<a name="line.7093"></a>
+<span class="sourceLineNo">7094</span>   * @return A WALEdit to apply to WAL or null if we are to skip the WAL.<a name="line.7094"></a>
+<span class="sourceLineNo">7095</span>   */<a name="line.7095"></a>
+<span class="sourceLineNo">7096</span>  private WALEdit reckonDeltas(final Operation op, final Mutation mutation,<a name="line.7096"></a>
+<span class="sourceLineNo">7097</span>      final Durability effectiveDurability, final Map&lt;Store, List&lt;Cell&gt;&gt; forMemStore,<a name="line.7097"></a>
+<span class="sourceLineNo">7098</span>      final List&lt;Cell&gt; results)<a name="line.7098"></a>
+<span class="sourceLineNo">7099</span>  throws IOException {<a name="line.7099"></a>
+<span class="sourceLineNo">7100</span>    WALEdit walEdit = null;<a name="line.7100"></a>
+<span class="sourceLineNo">7101</span>    long now = EnvironmentEdgeManager.currentTime();<a name="line.7101"></a>
+<span class="sourceLineNo">7102</span>    final boolean writeToWAL = effectiveDurability != Durability.SKIP_WAL;<a name="line.7102"></a>
+<span class="sourceLineNo">7103</span>    // Process a Store/family at a time.<a name="line.7103"></a>
+<span class="sourceLineNo">7104</span>    for (Map.Entry&lt;byte [], List&lt;Cell&gt;&gt; entry: mutation.getFamilyCellMap().entrySet()) {<a name="line.7104"></a>
+<span class="sourceLineNo">7105</span>      final byte [] columnFamilyName = entry.getKey();<a name="line.7105"></a>
+<span class="sourceLineNo">7106</span>      List&lt;Cell&gt; deltas = entry.getValue();<a name="line.7106"></a>
+<span class="sourceLineNo">7107</span>      Store store = this.stores.get(columnFamilyName);<a name="line.7107"></a>
+<span class="sourceLineNo">7108</span>      // Reckon for the Store what to apply to WAL and MemStore.<a name="line.7108"></a>
+<span class="sourceLineNo">7109</span>      List&lt;Cell&gt; toApply =<a name="line.7109"></a>
+<span class="sourceLineNo">7110</span>        reckonDeltasByStore(store, op, mutation, effectiveDurability, now, deltas, results);<a name="line.7110"></a>
+<span class="sourceLineNo">7111</span>      if (!toApply.isEmpty()) {<a name="line.7111"></a>
+<span class="sourceLineNo">7112</span>        forMemStore.put(store, toApply);<a name="line.7112"></a>
+<span class="sourceLineNo">7113</span>        if (writeToWAL) {<a name="line.7113"></a>
+<span class="sourceLineNo">7114</span>          if (walEdit == null) {<a name="line.7114"></a>
+<span class="sourceLineNo">7115</span>            walEdit = new WALEdit();<a name="line.7115"></a>
+<span class="sourceLineNo">7116</span>          }<a name="line.7116"></a>
+<span class="sourceLineNo">7117</span>          walEdit.getCells().addAll(toApply);<a name="line.7117"></a>
+<span class="sourceLineNo">7118</span>        }<a name="line.7118"></a>
+<span class="sourceLineNo">7119</span>      }<a name="line.7119"></a>
+<span class="sourceLineNo">7120</span>    }<a name="line.7120"></a>
+<span class="sourceLineNo">7121</span>    return walEdit;<a name="line.7121"></a>
+<span class="sourceLineNo">7122</span>  }<a name="line.7122"></a>
+<span class="sourceLineNo">7123</span><a name="line.7123"></a>
+<span class="sourceLineNo">7124</span>  /**<a name="line.7124"></a>
+<span class="sourceLineNo">7125</span>   * Reckon the Cells to apply to WAL, memstore, and to return to the Client in passed<a name="line.7125"></a>
+<span class="sourceLineNo">7126</span>   * column family/Store.<a name="line.7126"></a>
 <span class="sourceLineNo">7127</span>   *<a name="line.7127"></a>
-<span class="sourceLineNo">7128</span>   * @param op Whether Increment or Append<a name="line.7128"></a>
-<span class="sourceLineNo">7129</span>   * @param mutation The encompassing Mutation object<a name="line.7129"></a>
-<span class="sourceLineNo">7130</span>   * @param deltas Changes to apply to this Store; either increment amount or data to append<a name="line.7130"></a>
-<span class="sourceLineNo">7131</span>   * @param results In here we accumulate all the Cells we are to return to the client; this List<a name="line.7131"></a>
-<span class="sourceLineNo">7132</span>   *  can be larger than what we return in case where delta is zero; i.e. don't write<a name="line.7132"></a>
-<span class="sourceLineNo">7133</span>   *  out new values, just return current value. If null, client doesn't want results returned.<a name="line.7133"></a>
-<span class="sourceLineNo">7134</span>   * @return Resulting Cells after &lt;code&gt;deltas&lt;/code&gt; have been applied to current<a name="line.7134"></a>
-<span class="sourceLineNo">7135</span>   *  values. Side effect is our filling out of the &lt;code&gt;results&lt;/code&gt; List.<a name="line.7135"></a>
-<span class="sourceLineNo">7136</span>   */<a name="line.7136"></a>
-<span class="sourceLineNo">7137</span>  private List&lt;Cell&gt; reckonDeltasByStore(final Store store, final Operation op,<a name="line.7137"></a>
-<span class="sourceLineNo">7138</span>      final Mutation mutation, final Durability effectiveDurability, final long now,<a name="line.7138"></a>
-<span class="sourceLineNo">7139</span>      final List&lt;Cell&gt; deltas, final List&lt;Cell&gt; results)<a name="line.7139"></a>
-<span class="sourceLineNo">7140</span>  throws IOException {<a name="line.7140"></a>
-<span class="sourceLineNo">7141</span>    byte [] columnFamily = store.getFamily().getName();<a name="line.7141"></a>
-<span class="sourceLineNo">7142</span>    List&lt;Cell&gt; toApply = new ArrayList&lt;Cell&gt;(deltas.size());<a name="line.7142"></a>
-<span class="sourceLineNo">7143</span>    // Get previous values for all columns in this family.<a name="line.7143"></a>
-<span class="sourceLineNo">7144</span>    List&lt;Cell&gt; currentValues = get(mutation, store, deltas,<a name="line.7144"></a>
-<span class="sourceLineNo">7145</span>        null/*Default IsolationLevel*/,<a name="line.7145"></a>
-<span class="sourceLineNo">7146</span>        op == Operation.INCREMENT? ((Increment)mutation).getTimeRange(): null);<a name="line.7146"></a>
-<span class="sourceLineNo">7147</span>    // Iterate the input columns and update existing values if they were found, otherwise<a name="line.7147"></a>
-<span class="sourceLineNo">7148</span>    // add new column initialized to the delta amount<a name="line.7148"></a>
-<span class="sourceLineNo">7149</span>    int currentValuesIndex = 0;<a name="line.7149"></a>
-<span class="sourceLineNo">7150</span>    for (int i = 0; i &lt; deltas.size(); i++) {<a name="line.7150"></a>
-<span class="sourceLineNo">7151</span>      Cell delta = deltas.get(i);<a name="line.7151"></a>
-<span class="sourceLineNo">7152</span>      Cell currentValue = null;<a name="line.7152"></a>
-<span class="sourceLineNo">7153</span>      if (currentValuesIndex &lt; currentValues.size() &amp;&amp;<a name="line.7153"></a>
-<span class="sourceLineNo">7154</span>          CellUtil.matchingQualifier(currentValues.get(currentValuesIndex), delta)) {<a name="line.7154"></a>
-<span class="sourceLineNo">7155</span>        currentValue = currentValues.get(currentValuesIndex);<a name="line.7155"></a>
-<span class="sourceLineNo">7156</span>        if (i &lt; (deltas.size() - 1) &amp;&amp; !CellUtil.matchingQualifier(delta, deltas.get(i + 1))) {<a name="line.7156"></a>
-<span class="sourceLineNo">7157</span>          currentValuesIndex++;<a name="line.7157"></a>
-<span class="sourceLineNo">7158</span>        }<a name="line.7158"></a>
-<span class="sourceLineNo">7159</span>      }<a name="line.7159"></a>
-<span class="sourceLineNo">7160</span>      // Switch on whether this an increment or an append building the new Cell to apply.<a name="line.7160"></a>
-<span class="sourceLineNo">7161</span>      Cell newCell = null;<a name="line.7161"></a>
-<span class="sourceLineNo">7162</span>      MutationType mutationType = null;<a name="line.7162"></a>
-<span class="sourceLineNo">7163</span>      boolean apply = true;<a name="line.7163"></a>
-<span class="sourceLineNo">7164</span>      switch (op) {<a name="line.7164"></a>
-<span class="sourceLineNo">7165</span>        case INCREMENT:<a name="line.7165"></a>
-<span class="sourceLineNo">7166</span>          mutationType = MutationType.INCREMENT;<a name="line.7166"></a>
-<span class="sourceLineNo">7167</span>          // If delta amount to apply is 0, don't write WAL or MemStore.<a name="line.7167"></a>
-<span class="sourceLineNo">7168</span>          long deltaAmount = getLongValue(delta);<a name="line.7168"></a>
-<span class="sourceLineNo">7169</span>          apply = deltaAmount != 0;<a name="line.7169"></a>
-<span class="sourceLineNo">7170</span>          newCell = reckonIncrement(delta, deltaAmount, currentValue, columnFamily, now,<a name="line.7170"></a>
-<span class="sourceLineNo">7171</span>            (Increment)mutation);<a name="line.7171"></a>
-<span class="sourceLineNo">7172</span>          break;<a name="line.7172"></a>
-<span class="sourceLineNo">7173</span>        case APPEND:<a name="line.7173"></a>
-<span class="sourceLineNo">7174</span>          mutationType = MutationType.APPEND;<a name="line.7174"></a>
-<span class="sourceLineNo">7175</span>          // Always apply Append. TODO: Does empty delta value mean reset Cell? It seems to.<a name="line.7175"></a>
-<span class="sourceLineNo">7176</span>          newCell = reckonAppend(delta, currentValue, now, (Append)mutation);<a name="line.7176"></a>
-<span class="sourceLineNo">7177</span>          break;<a name="line.7177"></a>
-<span class="sourceLineNo">7178</span>        default: throw new UnsupportedOperationException(op.toString());<a name="line.7178"></a>
-<span class="sourceLineNo">7179</span>      }<a name="line.7179"></a>
-<span class="sourceLineNo">7180</span><a name="line.7180"></a>
-<span class="sourceLineNo">7181</span>      // Give coprocessors a chance to update the new cell<a name="line.7181"></a>
-<span class="sourceLineNo">7182</span>      if (coprocessorHost != null) {<a name="line.7182"></a>
-<span class="sourceLineNo">7183</span>        newCell =<a name="line.7183"></a>
-<span class="sourceLineNo">7184</span>            coprocessorHost.postMutationBeforeWAL(mutationType, mutation, currentValue, newCell);<a name="line.7184"></a>
-<span class="sourceLineNo">7185</span>      }<a name="line.7185"></a>
-<span class="sourceLineNo">7186</span>      // If apply, we need to update memstore/WAL with new value; add it toApply.<a name="line.7186"></a>
-<span class="sourceLineNo">7187</span>      if (apply) {<a name="line.7187"></a>
-<span class="sourceLineNo">7188</span>        toApply.add(newCell);<a name="line.7188"></a>
-<span class="sourceLineNo">7189</span>      }<a name="line.7189"></a>
-<span class="sourceLineNo">7190</span>      // Add to results to get returned to the Client. If null, cilent does not want results.<a name="line.7190"></a>
-<span class="sourceLineNo">7191</span>      if (results != null) {<a name="line.7191"></a>
-<span class="sourceLineNo">7192</span>        results.add(newCell);<a name="line.7192"></a>
-<span class="sourceLineNo">7193</span>      }<a name="line.7193"></a>
-<span class="sourceLineNo">7194</span>    }<a name="line.7194"></a>
-<span class="sourceLineNo">7195</span>    return toApply;<a name="line.7195"></a>
-<span class="sourceLineNo">7196</span>  }<a name="line.7196"></a>
-<span class="sourceLineNo">7197</span><a name="line.7197"></a>
-<span class="sourceLineNo">7198</span>  /**<a name="line.7198"></a>
-<span class="sourceLineNo">7199</span>   * Calculate new Increment Cell.<a name="line.7199"></a>
-<span class="sourceLineNo">7200</span>   * @return New Increment Cell with delta applied to currentValue if currentValue is not null;<a name="line.7200"></a>
-<span class="sourceLineNo">7201</span>   *  otherwise, a new Cell with the delta set as its value.<a name="line.7201"></a>
-<span class="sourceLineNo">7202</span>   */<a name="line.7202"></a>
-<span class="sourceLineNo">7203</span>  private Cell reckonIncrement(final Cell delta, final long deltaAmount, final Cell currentValue,<a name="line.7203"></a>
-<span class="sourceLineNo">7204</span>      byte [] columnFamily, final long now, Mutation mutation)<a name="line.7204"></a>
-<span class="sourceLineNo">7205</span>  throws IOException {<a name="line.7205"></a>
-<span class="sourceLineNo">7206</span>    // Forward any tags found on the delta.<a name="line.7206"></a>
-<span class="sourceLineNo">7207</span>    List&lt;Tag&gt; tags = TagUtil.carryForwardTags(delta);<a name="line.7207"></a>
-<span class="sourceLineNo">7208</span>    long newValue = deltaAmount;<a name="line.7208"></a>
-<span class="sourceLineNo">7209</span>    long ts = now;<a name="line.7209"></a>
-<span class="sourceLineNo">7210</span>    if (currentValue != null) {<a name="line.7210"></a>
-<span class="sourceLineNo">7211</span>      tags = TagUtil.carryForwardTags(tags, currentValue);<a name="line.7211"></a>
-<span class="sourceLineNo">7212</span>      ts = Math.max(now, currentValue.getTimestamp());<a name="line.7212"></a>
-<span class="sourceLineNo">7213</span>      newValue += getLongValue(currentValue);<a name="line.7213"></a>
-<span class="sourceLineNo">7214</span>    }<a name="line.7214"></a>
-<span class="sourceLineNo">7215</span>    // Now make up the new Cell. TODO: FIX. This is carnel knowledge of how KeyValues are made...<a name="line.7215"></a>
-<span class="sourceLineNo">7216</span>    // doesn't work well with offheaping or if we are doing a different Cell type.<a name="line.7216"></a>
-<span class="sourceLineNo">7217</span>    byte [] incrementAmountInBytes = Bytes.toBytes(newValue);<a name="line.7217"></a>
-<span class="sourceLineNo">7218</span>    tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7218"></a>
-<span class="sourceLineNo">7219</span>    byte [] row = mutation.getRow();<a name="line.7219"></a>
-<span class="sourceLineNo">7220</span>    return new KeyValue(row, 0, row.length,<a name="line.7220"></a>
-<span class="sourceLineNo">7221</span>      columnFamily, 0, columnFamily.length,<a name="line.7221"></a>
-<span class="sourceLineNo">7222</span>      delta.getQualifierArray(), delta.getQualifierOffset(), delta.getQualifierLength(),<a name="line.7222"></a>
-<span class="sourceLineNo">7223</span>      ts, KeyValue.Type.Put,<a name="line.7223"></a>
-<span class="sourceLineNo">7224</span>      incrementAmountInBytes, 0, incrementAmountInBytes.length,<a name="line.7224"></a>
-<span class="sourceLineNo">7225</span>      tags);<a name="line.7225"></a>
-<span class="sourceLineNo">7226</span>  }<a name="line.7226"></a>
-<span class="sourceLineNo">7227</span><a name="line.7227"></a>
-<span class="sourceLineNo">7228</span>  private Cell reckonAppend(final Cell delta, final Cell currentValue, final long now,<a name="line.7228"></a>
-<span class="sourceLineNo">7229</span>      Append mutation)<a name="line.7229"></a>
-<span class="sourceLineNo">7230</span>  throws IOException {<a name="line.7230"></a>
-<span class="sourceLineNo">7231</span>    // Forward any tags found on the delta.<a name="line.7231"></a>
-<span class="sourceLineNo">7232</span>    List&lt;Tag&gt; tags = TagUtil.carryForwardTags(delta);<a name="line.7232"></a>
-<span class="sourceLineNo">7233</span>    long ts = now;<a name="line.7233"></a>
-<span class="sourceLineNo">7234</span>    Cell newCell = null;<a name="line.7234"></a>
-<span class="sourceLineNo">7235</span>    byte [] row = mutation.getRow();<a name="line.7235"></a>
-<span class="sourceLineNo">7236</span>    if (currentValue != null) {<a name="line.7236"></a>
-<span class="sourceLineNo">7237</span>      tags = TagUtil.carryForwardTags(tags, currentValue);<a name="line.7237"></a>
-<span class="sourceLineNo">7238</span>      ts = Math.max(now, currentValue.getTimestamp());<a name="line.7238"></a>
-<span class="sourceLineNo">7239</span>      tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7239"></a>
-<span class="sourceLineNo">7240</span>      byte[] tagBytes = TagUtil.fromList(tags);<a name="line.7240"></a>
-<span class="sourceLineNo">7241</span>      // Allocate an empty cell and copy in all parts.<a name="line.7241"></a>
-<span class="sourceLineNo">7242</span>      // TODO: This is intimate knowledge of how a KeyValue is made. Undo!!! Prevents our doing<a name="line.7242"></a>
-<span class="sourceLineNo">7243</span>      // other Cell types. Copying on-heap too if an off-heap Cell.<a name="line.7243"></a>
-<span class="sourceLineNo">7244</span>      newCell = new KeyValue(row.length, delta.getFamilyLength(),<a name="line.7244"></a>
-<span class="sourceLineNo">7245</span>        delta.getQualifierLength(), ts, KeyValue.Type.Put,<a name="line.7245"></a>
-<span class="sourceLineNo">7246</span>        delta.getValueLength() + currentValue.getValueLength(),<a name="line.7246"></a>
-<span class="sourceLineNo">7247</span>        tagBytes == null? 0: tagBytes.length);<a name="line.7247"></a>
-<span class="sourceLineNo">7248</span>      // Copy in row, family, and qualifier<a name="line.7248"></a>
-<span class="sourceLineNo">7249</span>      System.arraycopy(row, 0, newCell.getRowArray(), newCell.getRowOffset(), row.length);<a name="line.7249"></a>
-<span class="sourceLineNo">7250</span>      System.arraycopy(delta.getFamilyArray(), delta.getFamilyOffset(),<a name="line.7250"></a>
-<span class="sourceLineNo">7251</span>          newCell.getFamilyArray(), newCell.getFamilyOffset(), delta.getFamilyLength());<a name="line.7251"></a>
-<span class="sourceLineNo">7252</span>      System.arraycopy(delta.getQualifierArray(), delta.getQualifierOffset(),<a name="line.7252"></a>
-<span class="sourceLineNo">7253</span>          newCell.getQualifierArray(), newCell.getQualifierOffset(), delta.getQualifierLength());<a name="line.7253"></a>
-<span class="sourceLineNo">7254</span>      // Copy in the value<a name="line.7254"></a>
-<span class="sourceLineNo">7255</span>      CellUtil.copyValueTo(currentValue, newCell.getValueArray(), newCell.getValueOffset());<a name="line.7255"></a>
-<span class="sourceLineNo">7256</span>      System.arraycopy(delta.getValueArray(), delta.getValueOffset(),<a name="line.7256"></a>
-<span class="sourceLineNo">7257</span>          newCell.getValueArray(), newCell.getValueOffset() + currentValue.getValueLength(),<a name="line.7257"></a>
-<span class="sourceLineNo">7258</span>          delta.getValueLength());<a name="line.7258"></a>
-<span class="sourceLineNo">7259</span>      // Copy in tag data<a name="line.7259"></a>
-<span class="sourceLineNo">7260</span>      if (tagBytes != null) {<a name="line.7260"></a>
-<span class="sourceLineNo">7261</span>        System.arraycopy(tagBytes, 0,<a name="line.7261"></a>
-<span class="sourceLineNo">7262</span>            newCell.getTagsArray(), newCell.getTagsOffset(), tagBytes.length);<a name="line.7262"></a>
-<span class="sourceLineNo">7263</span>      }<a name="line.7263"></a>
-<span class="sourceLineNo">7264</span>    } else {<a name="line.7264"></a>
-<span class="sourceLineNo">7265</span>      // Append's KeyValue.Type==Put and ts==HConstants.LATEST_TIMESTAMP<a name="line.7265"></a>
-<span class="sourceLineNo">7266</span>      CellUtil.updateLatestStamp(delta, now);<a name="line.7266"></a>
-<span class="sourceLineNo">7267</span>      newCell = delta;<a name="line.7267"></a>
-<span class="sourceLineNo">7268</span>      tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7268"></a>
-<span class="sourceLineNo">7269</span>      if (tags != null) {<a name="line.7269"></a>
-<span class="sourceLineNo">7270</span>        newCell = new TagRewriteCell(delta, TagUtil.fromList(tags));<a name="line.7270"></a>
-<span class="sourceLineNo">7271</span>      }<a name="line.7271"></a>
-<span class="sourceLineNo">7272</span>    }<a name="line.7272"></a>
-<span class="sourceLineNo">7273</span>    return newCell;<a name="line.7273"></a>
-<span class="sourceLineNo">7274</span>  }<a name="line.7274"></a>
-<span class="sourceLineNo">7275</span><a name="line.7275"></a>
-<span class="sourceLineNo">7276</span>  /**<a name="line.7276"></a>
-<span class="sourceLineNo">7277</span>   * @return Get the long out of the passed in Cell<a name="line.7277"></a>
-<span class="sourceLineNo">7278</span>   */<a name="line.7278"></a>
-<span class="sourceLineNo">7279</span>  private static long getLongValue(final Cell cell) throws DoNotRetryIOException {<a name="line.7279"></a>
-<span class="sourceLineNo">7280</span>    int len = cell.getValueLength();<a name="line.7280"></a>
-<span class="sourceLineNo">7281</span>    if (len != Bytes.SIZEOF_LONG) {<a name="line.7281"></a>
-<span class="sourceLineNo">7282</span>      // throw DoNotRetryIOException instead of IllegalArgumentException<a name="line.7282"></a>
-<span class="sourceLineNo">7283</span>      throw new DoNotRetryIOException("Field is not a long, it's " + len + " bytes wide");<a name="line.7283"></a>
-<span class="sourceLineNo">7284</span>    }<a name="line.7284"></a>
-<span class="sourceLineNo">7285</span>    return Bytes.toLong(cell.getValueArray(), cell.getValueOffset(), len);<a name="line.7285"></a>
-<span class="sourceLineNo">7286</span>  }<a name="line.7286"></a>
-<span class="sourceLineNo">7287</span><a name="line.7287"></a>
-<span class="sourceLineNo">7288</span>  /**<a name="line.7288"></a>
-<span class="sourceLineNo">7289</span>   * Do a specific Get on passed &lt;code&gt;columnFamily&lt;/code&gt; and column qualifiers.<a name="line.7289"></a>
-<span class="sourceLineNo">7290</span>   * @param mutation Mutation we are doing this Get for.<a name="line.7290"></a>
-<span class="sourceLineNo">7291</span>   * @param columnFamily Which column family on row (TODO: Go all Gets in one go)<a name="line.7291"></a>
-<span class="sourceLineNo">7292</span>   * @param coordinates Cells from &lt;code&gt;mutation&lt;/code&gt; used as coordinates applied to Get.<a name="line.7292"></a>
-<span class="sourceLineNo">7293</span>   * @return Return list of Cells found.<a name="line.7293"></a>
-<span class="sourceLineNo">7294</span>   */<a name="line.7294"></a>
-<span class="sourceLineNo">7295</span>  private List&lt;Cell&gt; get(final Mutation mutation, final Store store,<a name="line.7295"></a>
-<span class="sourceLineNo">7296</span>          final List&lt;Cell&gt; coordinates, final IsolationLevel isolation, final TimeRange tr)<a name="line.7296"></a>
-<span class="sourceLineNo">7297</span>  throws IOException {<a name="line.7297"></a>
-<span class="sourceLineNo">7298</span>    // Sort the cells so that they match the order that they appear in the Get results. Otherwise,<a name="line.7298"></a>
-<span class="sourceLineNo">7299</span>    // we won't be able to find the existing values if the cells are not specified in order by the<a name="line.7299"></a>
-<span class="sourceLineNo">7300</span>    // client since cells are in an array list.<a name="line.7300"></a>
-<span class="sourceLineNo">7301</span>    // TODO: I don't get why we are sorting. St.Ack 20150107<a name="line.7301"></a>
-<span class="sourceLineNo">7302</span>    sort(coordinates, store.getComparator());<a name="line.7302"></a>
-<span class="sourceLineNo">7303</span>    Get get = new Get(mutation.getRow());<a name="line.7303"></a>
-<span class="sourceLineNo">7304</span>    if (isolation != null) {<a name="line.7304"></a>
-<span class="sourceLineNo">7305</span>      get.setIsolationLevel(isolation);<a name="line.7305"></a>
-<span class="sourceLineNo">7306</span>    }<a name="line.7306"></a>
-<span class="sourceLineNo">7307</span>    for (Cell cell: coordinates) {<a name="line.7307"></a>
-<span class="sourceLineNo">7308</span>      get.addColumn(store.getFamily().getName(), CellUtil.cloneQualifier(cell));<a name="line.7308"></a>
-<span class="sourceLineNo">7309</span>    }<a name="line.7309"></a>
-<span class="sourceLineNo">7310</span>    // Increments carry time range. If an Increment instance, put it on the Get.<a name="line.7310"></a>
-<span class="sourceLineNo">7311</span>    if (tr != null) {<a name="line.7311"></a>
-<span class="sourceLineNo">7312</span>      get.setTimeRange(tr.getMin(), tr.getMax());<a name="line.7312"></a>
-<span class="sourceLineNo">7313</span>    }<a name="line.7313"></a>
-<span class="sourceLineNo">7314</span>    return get(get, false);<a name="line.7314"></a>
-<span class="sourceLineNo">7315</span>  }<a name="line.7315"></a>
-<span class="sourceLineNo">7316</span><a name="line.7316"></a>
-<span class="sourceLineNo">7317</span>  /**<a name="line.7317"></a>
-<span class="sourceLineNo">7318</span>   * @return Sorted list of &lt;code&gt;cells&lt;/code&gt; using &lt;code&gt;comparator&lt;/code&gt;<a name="line.7318"></a>
-<span class="sourceLineNo">7319</span>   */<a name="line.7319"></a>
-<span class="sourceLineNo">7320</span>  private static List&lt;Cell&gt; sort(List&lt;Cell&gt; cells, final Comparator&lt;Cell&gt; comparator) {<a name="line.7320"></a>
-<span class="sourceLineNo">7321</span>    Collections.sort(cells, comparator);<a name="line.7321"></a>
-<span class="sourceLineNo">7322</span>    return cells;<a name="line.7322"></a>
-<span class="sourceLineNo">7323</span>  }<a name="line.7323"></a>
-<span class="sourceLineNo">7324</span><a name="line.7324"></a>
-<span class="sourceLineNo">7325</span>  //<a name="line.7325"></a>
-<span class="sourceLineNo">7326</span>  // New HBASE-880 Helpers<a name="line.7326"></a>
+<span class="sourceLineNo">7128</span>   * Does Get of current value and then adds passed in deltas for this Store returning the result.<a name="line.7128"></a>
+<span class="sourceLineNo">7129</span>   *<a name="line.7129"></a>
+<span class="sourceLineNo">7130</span>   * @param op Whether Increment or Append<a name="line.7130"></a>
+<span class="sourceLineNo">7131</span>   * @param mutation The encompassing Mutation object<a name="line.7131"></a>
+<span class="sourceLineNo">7132</span>   * @param deltas Changes to apply to this Store; either increment amount or data to append<a name="line.7132"></a>
+<span class="sourceLineNo">7133</span>   * @param results In here we accumulate all the Cells we are to return to the client; this List<a name="line.7133"></a>
+<span class="sourceLineNo">7134</span>   *  can be larger than what we return in case where delta is zero; i.e. don't write<a name="line.7134"></a>
+<span class="sourceLineNo">7135</span>   *  out new values, just return current value. If null, client doesn't want results returned.<a name="line.7135"></a>
+<span class="sourceLineNo">7136</span>   * @return Resulting Cells after &lt;code&gt;deltas&lt;/code&gt; have been applied to current<a name="line.7136"></a>
+<span class="sourceLineNo">7137</span>   *  values. Side effect is our filling out of the &lt;code&gt;results&lt;/code&gt; List.<a name="line.7137"></a>
+<span class="sourceLineNo">7138</span>   */<a name="line.7138"></a>
+<span class="sourceLineNo">7139</span>  private List&lt;Cell&gt; reckonDeltasByStore(final Store store, final Operation op,<a name="line.7139"></a>
+<span class="sourceLineNo">7140</span>      final Mutation mutation, final Durability effectiveDurability, final long now,<a name="line.7140"></a>
+<span class="sourceLineNo">7141</span>      final List&lt;Cell&gt; deltas, final List&lt;Cell&gt; results)<a name="line.7141"></a>
+<span class="sourceLineNo">7142</span>  throws IOException {<a name="line.7142"></a>
+<span class="sourceLineNo">7143</span>    byte [] columnFamily = store.getFamily().getName();<a name="line.7143"></a>
+<span class="sourceLineNo">7144</span>    List&lt;Cell&gt; toApply = new ArrayList&lt;Cell&gt;(deltas.size());<a name="line.7144"></a>
+<span class="sourceLineNo">7145</span>    // Get previous values for all columns in this family.<a name="line.7145"></a>
+<span class="sourceLineNo">7146</span>    List&lt;Cell&gt; currentValues = get(mutation, store, deltas,<a name="line.7146"></a>
+<span class="sourceLineNo">7147</span>        null/*Default IsolationLevel*/,<a name="line.7147"></a>
+<span class="sourceLineNo">7148</span>        op == Operation.INCREMENT? ((Increment)mutation).getTimeRange(): null);<a name="line.7148"></a>
+<span class="sourceLineNo">7149</span>    // Iterate the input columns and update existing values if they were found, otherwise<a name="line.7149"></a>
+<span class="sourceLineNo">7150</span>    // add new column initialized to the delta amount<a name="line.7150"></a>
+<span class="sourceLineNo">7151</span>    int currentValuesIndex = 0;<a name="line.7151"></a>
+<span class="sourceLineNo">7152</span>    for (int i = 0; i &lt; deltas.size(); i++) {<a name="line.7152"></a>
+<span class="sourceLineNo">7153</span>      Cell delta = deltas.get(i);<a name="line.7153"></a>
+<span class="sourceLineNo">7154</span>      Cell currentValue = null;<a name="line.7154"></a>
+<span class="sourceLineNo">7155</span>      if (currentValuesIndex &lt; currentValues.size() &amp;&amp;<a name="line.7155"></a>
+<span class="sourceLineNo">7156</span>          CellUtil.matchingQualifier(currentValues.get(currentValuesIndex), delta)) {<a name="line.7156"></a>
+<span class="sourceLineNo">7157</span>        currentValue = currentValues.get(currentValuesIndex);<a name="line.7157"></a>
+<span class="sourceLineNo">7158</span>        if (i &lt; (deltas.size() - 1) &amp;&amp; !CellUtil.matchingQualifier(delta, deltas.get(i + 1))) {<a name="line.7158"></a>
+<span class="sourceLineNo">7159</span>          currentValuesIndex++;<a name="line.7159"></a>
+<span class="sourceLineNo">7160</span>        }<a name="line.7160"></a>
+<span class="sourceLineNo">7161</span>      }<a name="line.7161"></a>
+<span class="sourceLineNo">7162</span>      // Switch on whether this an increment or an append building the new Cell to apply.<a name="line.7162"></a>
+<span class="sourceLineNo">7163</span>      Cell newCell = null;<a name="line.7163"></a>
+<span class="sourceLineNo">7164</span>      MutationType mutationType = null;<a name="line.7164"></a>
+<span class="sourceLineNo">7165</span>      boolean apply = true;<a name="line.7165"></a>
+<span class="sourceLineNo">7166</span>      switch (op) {<a name="line.7166"></a>
+<span class="sourceLineNo">7167</span>        case INCREMENT:<a name="line.7167"></a>
+<span class="sourceLineNo">7168</span>          mutationType = MutationType.INCREMENT;<a name="line.7168"></a>
+<span class="sourceLineNo">7169</span>          // If delta amount to apply is 0, don't write WAL or MemStore.<a name="line.7169"></a>
+<span class="sourceLineNo">7170</span>          long deltaAmount = getLongValue(delta);<a name="line.7170"></a>
+<span class="sourceLineNo">7171</span>          apply = deltaAmount != 0;<a name="line.7171"></a>
+<span class="sourceLineNo">7172</span>          newCell = reckonIncrement(delta, deltaAmount, currentValue, columnFamily, now,<a name="line.7172"></a>
+<span class="sourceLineNo">7173</span>            (Increment)mutation);<a name="line.7173"></a>
+<span class="sourceLineNo">7174</span>          break;<a name="line.7174"></a>
+<span class="sourceLineNo">7175</span>        case APPEND:<a name="line.7175"></a>
+<span class="sourceLineNo">7176</span>          mutationType = MutationType.APPEND;<a name="line.7176"></a>
+<span class="sourceLineNo">7177</span>          // Always apply Append. TODO: Does empty delta value mean reset Cell? It seems to.<a name="line.7177"></a>
+<span class="sourceLineNo">7178</span>          newCell = reckonAppend(delta, currentValue, now, (Append)mutation);<a name="line.7178"></a>
+<span class="sourceLineNo">7179</span>          break;<a name="line.7179"></a>
+<span class="sourceLineNo">7180</span>        default: throw new UnsupportedOperationException(op.toString());<a name="line.7180"></a>
+<span class="sourceLineNo">7181</span>      }<a name="line.7181"></a>
+<span class="sourceLineNo">7182</span><a name="line.7182"></a>
+<span class="sourceLineNo">7183</span>      // Give coprocessors a chance to update the new cell<a name="line.7183"></a>
+<span class="sourceLineNo">7184</span>      if (coprocessorHost != null) {<a name="line.7184"></a>
+<span class="sourceLineNo">7185</span>        newCell =<a name="line.7185"></a>
+<span class="sourceLineNo">7186</span>            coprocessorHost.postMutationBeforeWAL(mutationType, mutation, currentValue, newCell);<a name="line.7186"></a>
+<span class="sourceLineNo">7187</span>      }<a name="line.7187"></a>
+<span class="sourceLineNo">7188</span>      // If apply, we need to update memstore/WAL with new value; add it toApply.<a name="line.7188"></a>
+<span class="sourceLineNo">7189</span>      if (apply) {<a name="line.7189"></a>
+<span class="sourceLineNo">7190</span>        toApply.add(newCell);<a name="line.7190"></a>
+<span class="sourceLineNo">7191</span>      }<a name="line.7191"></a>
+<span class="sourceLineNo">7192</span>      // Add to results to get returned to the Client. If null, cilent does not want results.<a name="line.7192"></a>
+<span class="sourceLineNo">7193</span>      if (results != null) {<a name="line.7193"></a>
+<span class="sourceLineNo">7194</span>        results.add(newCell);<a name="line.7194"></a>
+<span class="sourceLineNo">7195</span>      }<a name="line.7195"></a>
+<span class="sourceLineNo">7196</span>    }<a name="line.7196"></a>
+<span class="sourceLineNo">7197</span>    return toApply;<a name="line.7197"></a>
+<span class="sourceLineNo">7198</span>  }<a name="line.7198"></a>
+<span class="sourceLineNo">7199</span><a name="line.7199"></a>
+<span class="sourceLineNo">7200</span>  /**<a name="line.7200"></a>
+<span class="sourceLineNo">7201</span>   * Calculate new Increment Cell.<a name="line.7201"></a>
+<span class="sourceLineNo">7202</span>   * @return New Increment Cell with delta applied to currentValue if currentValue is not null;<a name="line.7202"></a>
+<span class="sourceLineNo">7203</span>   *  otherwise, a new Cell with the delta set as its value.<a name="line.7203"></a>
+<span class="sourceLineNo">7204</span>   */<a name="line.7204"></a>
+<span class="sourceLineNo">7205</span>  private Cell reckonIncrement(final Cell delta, final long deltaAmount, final Cell currentValue,<a name="line.7205"></a>
+<span class="sourceLineNo">7206</span>      byte [] columnFamily, final long now, Mutation mutation)<a name="line.7206"></a>
+<span class="sourceLineNo">7207</span>  throws IOException {<a name="line.7207"></a>
+<span class="sourceLineNo">7208</span>    // Forward any tags found on the delta.<a name="line.7208"></a>
+<span class="sourceLineNo">7209</span>    List&lt;Tag&gt; tags = TagUtil.carryForwardTags(delta);<a name="line.7209"></a>
+<span class="sourceLineNo">7210</span>    long newValue = deltaAmount;<a name="line.7210"></a>
+<span class="sourceLineNo">7211</span>    long ts = now;<a name="line.7211"></a>
+<span class="sourceLineNo">7212</span>    if (currentValue != null) {<a name="line.7212"></a>
+<span class="sourceLineNo">7213</span>      tags = TagUtil.carryForwardTags(tags, currentValue);<a name="line.7213"></a>
+<span class="sourceLineNo">7214</span>      ts = Math.max(now, currentValue.getTimestamp());<a name="line.7214"></a>
+<span class="sourceLineNo">7215</span>      newValue += getLongValue(currentValue);<a name="line.7215"></a>
+<span class="sourceLineNo">7216</span>    }<a name="line.7216"></a>
+<span class="sourceLineNo">7217</span>    // Now make up the new Cell. TODO: FIX. This is carnel knowledge of how KeyValues are made...<a name="line.7217"></a>
+<span class="sourceLineNo">7218</span>    // doesn't work well with offheaping or if we are doing a different Cell type.<a name="line.7218"></a>
+<span class="sourceLineNo">7219</span>    byte [] incrementAmountInBytes = Bytes.toBytes(newValue);<a name="line.7219"></a>
+<span class="sourceLineNo">7220</span>    tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7220"></a>
+<span class="sourceLineNo">7221</span>    byte [] row = mutation.getRow();<a name="line.7221"></a>
+<span class="sourceLineNo">7222</span>    return new KeyValue(row, 0, row.length,<a name="line.7222"></a>
+<span class="sourceLineNo">7223</span>      columnFamily, 0, columnFamily.length,<a name="line.7223"></a>
+<span class="sourceLineNo">7224</span>      delta.getQualifierArray(), delta.getQualifierOffset(), delta.getQualifierLength(),<a name="line.7224"></a>
+<span class="sourceLineNo">7225</span>      ts, KeyValue.Type.Put,<a name="line.7225"></a>
+<span class="sourceLineNo">7226</span>      incrementAmountInBytes, 0, incrementAmountInBytes.length,<a name="line.7226"></a>
+<span class="sourceLineNo">7227</span>      tags);<a name="line.7227"></a>
+<span class="sourceLineNo">7228</span>  }<a name="line.7228"></a>
+<span class="sourceLineNo">7229</span><a name="line.7229"></a>
+<span class="sourceLineNo">7230</span>  private Cell reckonAppend(final Cell delta, final Cell currentValue, final long now,<a name="line.7230"></a>
+<span class="sourceLineNo">7231</span>      Append mutation)<a name="line.7231"></a>
+<span class="sourceLineNo">7232</span>  throws IOException {<a name="line.7232"></a>
+<span class="sourceLineNo">7233</span>    // Forward any tags found on the delta.<a name="line.7233"></a>
+<span class="sourceLineNo">7234</span>    List&lt;Tag&gt; tags = TagUtil.carryForwardTags(delta);<a name="line.7234"></a>
+<span class="sourceLineNo">7235</span>    long ts = now;<a name="line.7235"></a>
+<span class="sourceLineNo">7236</span>    Cell newCell = null;<a name="line.7236"></a>
+<span class="sourceLineNo">7237</span>    byte [] row = mutation.getRow();<a name="line.7237"></a>
+<span class="sourceLineNo">7238</span>    if (currentValue != null) {<a name="line.7238"></a>
+<span class="sourceLineNo">7239</span>      tags = TagUtil.carryForwardTags(tags, currentValue);<a name="line.7239"></a>
+<span class="sourceLineNo">7240</span>      ts = Math.max(now, currentValue.getTimestamp());<a name="line.7240"></a>
+<span class="sourceLineNo">7241</span>      tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7241"></a>
+<span class="sourceLineNo">7242</span>      byte[] tagBytes = TagUtil.fromList(tags);<a name="line.7242"></a>
+<span class="sourceLineNo">7243</span>      // Allocate an empty cell and copy in all parts.<a name="line.7243"></a>
+<span class="sourceLineNo">7244</span>      // TODO: This is intimate knowledge of how a KeyValue is made. Undo!!! Prevents our doing<a name="line.7244"></a>
+<span class="sourceLineNo">7245</span>      // other Cell types. Copying on-heap too if an off-heap Cell.<a name="line.7245"></a>
+<span class="sourceLineNo">7246</span>      newCell = new KeyValue(row.length, delta.getFamilyLength(),<a name="line.7246"></a>
+<span class="sourceLineNo">7247</span>        delta.getQualifierLength(), ts, KeyValue.Type.Put,<a name="line.7247"></a>
+<span class="sourceLineNo">7248</span>        delta.getValueLength() + currentValue.getValueLength(),<a name="line.7248"></a>
+<span class="sourceLineNo">7249</span>        tagBytes == null? 0: tagBytes.length);<a name="line.7249"></a>
+<span class="sourceLineNo">7250</span>      // Copy in row, family, and qualifier<a name="line.7250"></a>
+<span class="sourceLineNo">7251</span>      System.arraycopy(row, 0, newCell.getRowArray(), newCell.getRowOffset(), row.length);<a name="line.7251"></a>
+<span class="sourceLineNo">7252</span>      System.arraycopy(delta.getFamilyArray(), delta.getFamilyOffset(),<a name="line.7252"></a>
+<span class="sourceLineNo">7253</span>          newCell.getFamilyArray(), newCell.getFamilyOffset(), delta.getFamilyLength());<a name="line.7253"></a>
+<span class="sourceLineNo">7254</span>      System.arraycopy(delta.getQualifierArray(), delta.getQualifierOffset(),<a name="line.7254"></a>
+<span class="sourceLineNo">7255</span>          newCell.getQualifierArray(), newCell.getQualifierOffset(), delta.getQualifierLength());<a name="line.7255"></a>
+<span class="sourceLineNo">7256</span>      // Copy in the value<a name="line.7256"></a>
+<span class="sourceLineNo">7257</span>      CellUtil.copyValueTo(currentValue, newCell.getValueArray(), newCell.getValueOffset());<a name="line.7257"></a>
+<span class="sourceLineNo">7258</span>      System.arraycopy(delta.getValueArray(), delta.getValueOffset(),<a name="line.7258"></a>
+<span class="sourceLineNo">7259</span>          newCell.getValueArray(), newCell.getValueOffset() + currentValue.getValueLength(),<a name="line.7259"></a>
+<span class="sourceLineNo">7260</span>          delta.getValueLength());<a name="line.7260"></a>
+<span class="sourceLineNo">7261</span>      // Copy in tag data<a name="line.7261"></a>
+<span class="sourceLineNo">7262</span>      if (tagBytes != null) {<a name="line.7262"></a>
+<span class="sourceLineNo">7263</span>        System.arraycopy(tagBytes, 0,<a name="line.7263"></a>
+<span class="sourceLineNo">7264</span>            newCell.getTagsArray(), newCell.getTagsOffset(), tagBytes.length);<a name="line.7264"></a>
+<span class="sourceLineNo">7265</span>      }<a name="line.7265"></a>
+<span class="sourceLineNo">7266</span>    } else {<a name="line.7266"></a>
+<span class="sourceLineNo">7267</span>      // Append's KeyValue.Type==Put and ts==HConstants.LATEST_TIMESTAMP<a name="line.7267"></a>
+<span class="sourceLineNo">7268</span>      CellUtil.updateLatestStamp(delta, now);<a name="line.7268"></a>
+<span class="sourceLineNo">7269</span>      newCell = delta;<a name="line.7269"></a>
+<span class="sourceLineNo">7270</span>      tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7270"></a>
+<span class="sourceLineNo">7271</span>      if (tags != null) {<a name="line.7271"></a>
+<span class="sourceLineNo">7272</span>        newCell = new TagRewriteCell(delta, TagUtil.fromList(tags));<a name="line.7272"></a>
+<span class="sourceLineNo">7273</span>      }<a name="line.7273"></a>
+<span class="sourceLineNo">7274</span>    }<a name="line.7274"></a>
+<span class="sourceLineNo">7275</span>    return newCell;<a name="line.7275"></a>
+<span class="sourceLineNo">7276</span>  }<a name="line.7276"></a>
+<span class="sourceLineNo">7277</span><a name="line.7277"></a>
+<span class="sourceLineNo">7278</span>  /**<a name="line.7278"></a>
+<span class="sourceLineNo">7279</span>   * @return Get the long out of the passed in Cell<a name="line.7279"></a>
+<span class="sourceLineNo">7280</span>   */<a name="line.7280"></a>
+<span class="sourceLineNo">7281</span>  private static long getLongValue(final Cell cell) throws DoNotRetryIOException {<a name="line.7281"></a>
+<span class="sourceLineNo">7282</span>    int len = cell.getValueLength();<a name="line.7282"></a>
+<span class="sourceLineNo">7283</span>    if (len != Bytes.SIZEOF_LONG) {<a name="line.7283"></a>
+<span class="sourceLineNo">7284</span>      // throw DoNotRetryIOException instead of IllegalArgumentException<a name="line.7284"></a>
+<span class="sourceLineNo">7285</span>      throw new DoNotRetryIOException("Field is not a long, it's " + len + " bytes wide");<a name="line.7285"></a>
+<span class="sourceLineNo">7286</span>    }<a name="line.7286"></a>
+<span class="sourceLineNo">7287</span>    return Bytes.toLong(cell.getValueArray(), cell.getValueOffset(), len);<a name="line.7287"></a>
+<span class="sourceLineNo">7288</span>  }<a name="line.7288"></a>
+<span class="sourceLineNo">7289</span><a name="line.7289"></a>
+<span class="sourceLineNo">7290</span>  /**<a name="line.7290"></a>
+<span class="sourceLineNo">7291</span>   * Do a specific Get on passed &lt;code&gt;columnFamily&lt;/code&gt; and column qualifiers.<a name="line.7291"></a>
+<span class="sourceLineNo">7292</span>   * @param mutation Mutation we are doing this Get for.<a name="line.7292"></a>
+<span class="sourceLineNo">7293</span>   * @param columnFamily Which column family on row (TODO: Go all Gets in one go)<a name="line.7293"></a>
+<span class="sourceLineNo">7294</span>   * @param coordinates Cells from &lt;code&gt;mutation&lt;/code&gt; used as coordinates applied to Get.<a name="line.7294"></a>
+<span class="sourceLineNo">7295</span>   * @return Return list of Cells found.<a name="line.7295"></a>
+<span class="sourceLineNo">7296</span>   */<a name="line.7296"></a>
+<span class="sourceLineNo">7297</span>  private List&lt;Cell&gt; get(final Mutation mutation, final Store store,<a name="line.7297"></a>
+<span class="sourceLineNo">7298</span>          final List&lt;Cell&gt; coordinates, final IsolationLevel isolation, final TimeRange tr)<a name="line.7298"></a>
+<span class="sourceLineNo">7299</span>  throws IOException {<a name="line.7299"></a>
+<span class="sourceLineNo">7300</span>    // Sort the cells so that they match the order that they appear in the Get results. Otherwise,<a name="line.7300"></a>
+<span class="sourceLineNo">7301</span>    // we won't be able to find the existing values if the cells are not specified in order by the<a name="line.7301"></a>
+<span class="sourceLineNo">7302</span>    // client since cells are in an array list.<a name="line.7302"></a>
+<span class="sourceLineNo">7303</span>    // TODO: I don't get why we are sorting. St.Ack 20150107<a name="line.7303"></a>
+<span class="sourceLineNo">7304</span>    sort(coordinates, store.getComparator());<a name="line.7304"></a>
+<span class="sourceLineNo">7305</span>    Get get = new Get(mutation.getRow());<a name="line.7305"></a>
+<span class="sourceLineNo">7306</span>    if (isolation != null) {<a name="line.7306"></a>
+<span class="sourceLineNo">7307</span>      get.setIsolationLevel(isolation);<a name="line.7307"></a>
+<span class="sourceLineNo">7308</span>    }<a name="line.7308"></a>
+<span class="sourceLineNo">7309</span>    for (Cell cell: coordinates) {<a name="line.7309"></a>
+<span class="sourceLineNo">7310</span>      get.addColumn(store.getFamily().getName(), CellUtil.cloneQualifier(cell));<a name="line.7310"></a>
+<span class="sourceLineNo">7311</span>    }<a name="line.7311"></a>
+<span class="sourceLineNo">7312</span>    // Increments carry time range. If an Increment instance, put it on the Get.<a name="line.7312"></a>
+<span class="sourceLineNo">7313</span>    if (tr != null) {<a name="line.7313"></a>
+<span class="sourceLineNo">7314</span>      get.setTimeRange(tr.getMin(), tr.getMax());<a name="line.7314"></a>
+<span class="sourceLineNo">7315</span>    }<a name="line.7315"></a>
+<span class="sourceLineNo">7316</span>    return get(get, false);<a name="line.7316"></a>
+<span class="sourceLineNo">7317</span>  }<a name="line.7317"></a>
+<span class="sourceLineNo">7318</span><a name="line.7318"></a>
+<span class="sourceLineNo">7319</span>  /**<a name="line.7319"></a>
+<span class="sourceLineNo">7320</span>   * @return Sorted list of &lt;code&gt;cells&lt;/code&gt; using &lt;code&gt;comparator&lt;/code&gt;<a name="line.7320"></a>
+<span class="sourceLineNo">7321</span>   */<a name="line.7321"></a>
+<span class="sourceLineNo">7322</span>  private static List&lt;Cell&gt; sort(List&lt;Cell&gt; cells, final Comparator&lt;Cell&gt; comparator) {<a name="line.7322"></a>
+<span class="sourceLineNo">7323</span>    Collections.sort(cells, comparator);<a name="line.7323"></a>
+<span class="sourceLineNo">7324</span>    return cells;<a name="line.7324"></a>
+<span class="sourceLineNo">7325</span>  }<a name="line.7325"></a>
+<span class="sourceLineNo">7326</span><a name="line.7326"></a>
 <span class="sourceLineNo">7327</span>  //<a name="line.7327"></a>
-<span class="sourceLineNo">7328</span><a name="line.7328"></a>
-<span class="sourceLineNo">7329</span>  void checkFamily(final byte [] family)<a name="line.7329"></a>
-<span class="sourceLineNo">7330</span>  throws NoSuchColumnFamilyException {<a name="line.7330"></a>
-<span class="sourceLineNo">7331</span>    if (!this.htableDescriptor.hasFamily(family)) {<a name="line.7331"></a>
-<span class="sourceLineNo">7332</span>      throw new NoSuchColumnFamilyException("Column family " +<a name="line.7332"></a>
-<span class="sourceLineNo">7333</span>          Bytes.toString(family) + " does not exist in region " + this<a name="line.7333"></a>
-<span class="sourceLineNo">7334</span>          + " in table " + this.htableDescriptor);<a name="line.7334"></a>
-<span class="sourceLineNo">7335</span>    }<a name="line.7335"></a>
-<span class="sourceLineNo">7336</span>  }<a name="line.7336"></a>
-<span class="sourceLineNo">7337</span><a name="line.7337"></a>
-<span class="sourceLineNo">7338</span>  public static final long FIXED_OVERHEAD = ClassSize.align(<a name="line.7338"></a>
-<span class="sourceLineNo">7339</span>      ClassSize.OBJECT +<a name="line.7339"></a>
-<span class="sourceLineNo">7340</span>      ClassSize.ARRAY +<a name="line.7340"></a>
-<span class="sourceLineNo">7341</span>      45 * ClassSize.REFERENCE + 2 * Bytes.SIZEOF_INT +<a name="line.7341"></a>
-<span class="sourceLineNo">7342</span>      (14 * Bytes.SIZEOF_LONG) +<a name="line.7342"></a>
-<span class="sourceLineNo">7343</span>      5 * Bytes.SIZEOF_BOOLEAN);<a name="line.7343"></a>
-<span class="sourceLineNo">7344</span><a name="line.7344"></a>
-<span class="sourceLineNo">7345</span>  // woefully out of date - currently missing:<a name="line.7345"></a>
-<span class="sourceLineNo">7346</span>  // 1 x HashMap - coprocessorServiceHandlers<a name="line.7346"></a>
-<span class="sourceLineNo">7347</span>  // 6 x Counter - numMutationsWithoutWAL, dataInMemoryWithoutWAL,<a name="line.7347"></a>
-<span class="sourceLineNo">7348</span>  //   checkAndMutateChecksPassed, checkAndMutateChecksFailed, readRequestsCount,<a name="line.7348"></a>
-<span class="sourceLineNo">7349</span>  //   writeRequestsCount<a name="line.7349"></a>
-<span class="sourceLineNo">7350</span>  // 1 x HRegion$WriteState - writestate<a name="line.7350"></a>
-<span class="sourceLineNo">7351</span>  // 1 x RegionCoprocessorHost - coprocessorHost<a name="line.7351"></a>
-<span class="sourceLineNo">7352</span>  // 1 x RegionSplitPolicy - splitPolicy<a name="line.7352"></a>
-<span class="sourceLineNo">7353</span>  // 1 x MetricsRegion - metricsRegion<a name="line.7353"></a>
-<span class="sourceLineNo">7354</span>  // 1 x MetricsRegionWrapperImpl - metricsRegionWrapper<a name="line.7354"></a>
-<span class="sourceLineNo">7355</span>  public static final long DEEP_OVERHEAD = FIXED_OVERHEAD +<a name="line.7355"></a>
-<span class="sourceLineNo">7356</span>      ClassSize.OBJECT + // closeLock<a name="line.7356"></a>
-<span class="sourceLineNo">7357</span>      (2 * ClassSize.ATOMIC_BOOLEAN) + // closed, closing<a name="line.7357"></a>
-<span class="sourceLineNo">7358</span>      (3 * ClassSize.ATOMIC_LONG) + // memStoreSize, numPutsWithoutWAL, dataInMemoryWithoutWAL<a name="line.7358"></a>
-<span class="sourceLineNo">7359</span>      (2 * ClassSize.CONCURRENT_HASHMAP) +  // lockedRows, scannerReadPoints<a name="line.7359"></a>
-<span class="sourceLineNo">7360</span>      WriteState.HEAP_SIZE + // writestate<a name="line.7360"></a>
-<span class="sourceLineNo">7361</span>      ClassSize.CONCURRENT_SKIPLISTMAP + ClassSize.CONCURRENT_SKIPLISTMAP_ENTRY + // stores<a name="line.7361"></a>
-<span class="sourceLineNo">7362</span>      (2 * ClassSize.REENTRANT_LOCK) + // lock, updatesLock<a name="line.7362"></a>
-<span class="sourceLineNo">7363</span>      MultiVersionConcurrencyControl.FIXED_SIZE // mvcc<a name="line.7363"></a>
-<span class="sourceLineNo">7364</span>      + ClassSize.TREEMAP // maxSeqIdInStores<a name="line.7364"></a>
-<span class="sourceLineNo">7365</span>      + 2 * ClassSize.ATOMIC_INTEGER // majorInProgress, minorInProgress<a name="line.7365"></a>
-<span class="sourceLineNo">7366</span>      ;<a name="line.7366"></a>
-<span class="sourceLineNo">7367</span><a name="line.7367"></a>
-<span class="sourceLineNo">7368</span>  @Override<a name="line.7368"></a>
-<span class="sourceLineNo">7369</span>  public long heapSize() {<a name="line.7369"></a>
-<span class="sourceLineNo">7370</span>    long heapSize = DEEP_OVERHEAD;<a name="line.7370"></a>
-<span class="sourceLineNo">7371</span>    for (Store store : this.stores.values()) {<a name="line.7371"></a>
-<span class="sourceLineNo">7372</span>      heapSize += store.heapSize();<a name="line.7372"></a>
-<span class="sourceLineNo">7373</span>    }<a name="line.7373"></a>
-<span class="sourceLineNo">7374</span>    // this does not take into account row locks, recent flushes, mvcc entries, and more<a name="line.7374"></a>
-<span class="sourceLineNo">7375</span>    return heapSize;<a name="line.7375"></a>
-<span class="sourceLineNo">7376</span>  }<a name="line.7376"></a>
-<span class="sourceLineNo">7377</span><a name="line.7377"></a>
-<span class="sourceLineNo">7378</span>  @Override<a name="line.7378"></a>
-<span class="sourceLineNo">7379</span>  public boolean registerService(Service instance) {<a name="line.7379"></a>
-<span class="sourceLineNo">7380</span>    /*<a name="line.7380"></a>
-<span class="sourceLineNo">7381</span>     * No stacking of instances is allowed for a single service name<a name="line.7381"></a>
-<span class="sourceLineNo">7382</span>     */<a name="line.7382"></a>
-<span class="sourceLineNo">7383</span>    Descriptors.ServiceDescriptor serviceDesc = instance.getDescriptorForType();<a name="line.7383"></a>
-<span class="sourceLineNo">7384</span>    if (coprocessorServiceHandlers.containsKey(serviceDesc.getFullName())) {<a name="line.7384"></a>
-<span class="sourceLineNo">7385</span>      LOG.error("Coprocessor service " + serviceDesc.getFullName() +<a name="line.7385"></a>
-<span class="sourceLineNo">7386</span>              " already registered, rejecting request from " + instance<a name="line.7386"></a>
-<span class="sourceLineNo">7387</span>      );<a name="line.7387"></a>
-<span class="sourceLineNo">7388</span>      return false;<a name="line.7388"></a>
-<span class="sourceLineNo">7389</span>    }<a name="line.7389"></a>
-<span class="sourceLineNo">7390</span><a name="line.7390"></a>
-<span class="sourceLineNo">7391</span>    coprocessorServiceHandlers.put(serviceDesc.getFullName(), instance);<a name="line.7391"></a>
-<span class="sourceLineNo">7392</span>    if (LOG.isDebugEnabled()) {<a name="line.7392"></a>
-<span class="sourceLineNo">7393</span>      LOG.debug("Registered coprocessor service: region=" +<a name="line.7393"></a>
-<span class="sourceLineNo">7394</span>          Bytes.toStringBinary(getRegionInfo().getRegionName()) +<a name="line.7394"></a>
-<span class="sourceLineNo">7395</span>          " service=" + serviceDesc.getFullName());<a name="line.7395"></a>
-<span class="sourceLineNo">7396</span>    }<a name="line.7396"></a>
-<span class="sourceLineNo">7397</span>    return true;<a name="line.7397"></a>
-<span class="sourceLineNo">7398</span>  }<a name="line.7398"></a>
-<span class="sourceLineNo">7399</span><a name="line.7399"></a>
-<span class="sourceLineNo">7400</span>  @Override<a name="line.7400"></a>
-<span class="sourceLineNo">7401</span>  public Message execService(RpcController controller, CoprocessorServiceCall call)<a name="line.7401"></a>
-<span class="sourceLineNo">7402</span>      throws IOException {<a name="line.7402"></a>
-<span class="sourceLineNo">7403</span>    String serviceName = call.getServiceName();<a name="line.7403"></a>
-<span class="sourceLineNo">7404</span>    String methodName = call.getMethodName();<a name="line.7404"></a>
-<span class="sourceLineNo">7405</span>    if (!coprocessorServiceHandlers.containsKey(serviceName)) {<a name="line.7405"></a>
-<span class="sourceLineNo">7406</span>      throw new UnknownProtocolException(null,<a name="line.7406"></a>
-<span class="sourceLineNo">7407</span>          "No registered coprocessor service found for name "+serviceName+<a name="line.7407"></a>
-<span class="sourceLineNo">7408</span>          " in region "+Bytes.toStringBinary(getRegionInfo().getRegionName()));<a name="line.7408"></a>
-<span class="sourceLineNo">7409</span>    }<a name="line.7409"></a>
-<span class="sourceLineNo">7410</span><a name="line.7410"></a>
-<span class="sourceLineNo">7411</span>    Service service = coprocessorServiceHandlers.get(serviceName);<a name="line.7411"></a>
-<span class="sourceLineNo">7412</span>    Descriptors.ServiceDescriptor serviceDesc = service.getDescriptorForType();<a name="line.7412"></a>
-<span class="sourceLineNo">7413</span>    Descriptors.MethodDescriptor methodDesc = serviceDesc.findMethodByName(methodName);<a name="line.7413"></a>
-<span class="sourceLineNo">7414</span>    if (methodDesc == null) {<a name="line.7414"></a>
-<span class="sourceLineNo">7415</span>      throw new UnknownProtocolException(service.getClass(),<a name="line.7415"></a>
-<span class="sourceLineNo">7416</span>          "Unknown method "+methodName+" called on service "+serviceName+<a name="line.7416"></a>
-<span class="sourceLineNo">7417</span>              " in region "+Bytes.toStringBinary(getRegionInfo().getRegionName()));<a name="line.7417"></a>
-<span class="sourceLineNo">7418</span>    }<a name="line.7418"></a>
-<span class="sourceLineNo">7419</span><a name="line.7419"></a>
-<span class="sourceLineNo">7420</span>    Message.Builder builder = service.getRequestPrototype(methodDesc).newBuilderForType();<a name="line.7420"></a>
-<span class="sourceLineNo">7421</span>    ProtobufUtil.mergeFrom(builder, call.getRequest());<a name="line.7421"></a>
-<span class="sourceLineNo">7422</span>    Message request = builder.build();<a name="line.7422"></a>
-<span class="sourceLineNo">7423</span><a name="line.7423"></a>
-<span class="sourceLineNo">7424</span>    if (coprocessorHost != null) {<a name="line.7424"></a>
-<span class="sourceLineNo">7425</span>      request = coprocessorHost.preEndpointInvocation(service, methodName, request);<a name="line.7425"></a>
-<span class="sourceLineNo">7426</span>    }<a name="line.7426"></a>
-<span class="sourceLineNo">7427</span><a name="line.7427"></a>
-<span class="sourceLineNo">7428</span>    final Message.Builder responseBuilder =<a name="line.7428"></a>
-<span class="sourceLineNo">7429</span>        service.getResponsePrototype(methodDesc).newBuilderForType();<a name="line.7429"></a>
-<span class="sourceLineNo">7430</span>    service.callMethod(methodDesc, controller, request, new RpcCallback&lt;Message&gt;() {<a name="line.7430"></a>
-<span class="sourceLineNo">7431</span>      @Override<a name="line.7431"></a>
-<span class="sourceLineNo">7432</span>      public void run(Message message) {<a name="line.7432"></a>
-<span class="sourceLineNo">7433</span>        if (message != null) {<a name="line.7433"></a>
-<span class="sourceLineNo">7434</span>          responseBuilder.mergeFrom(message);<a name="line.7434"></a>
-<span class="sourceLineNo">7435</span>        }<a name="line.7435"></a>
-<span class="sourceLineNo">7436</span>      }<a name="line.7436"></a>
-<span class="sourceLineNo">7437</span>    });<a name="line.7437"></a>
-<span class="sourceLineNo">7438</span><a name="line.7438"></a>
-<span class="sourceLineNo">7439</span>    if (coprocessorHost != null) {<a name="line.7439"></a>
-<span class="sourceLineNo">7440</span>      coprocessorHost.postEndpointInvocation(service, methodName, request, responseBuilder);<a name="line.7440"></a>
-<span class="sourceLineNo">7441</span>    }<a name="line.7441"></a>
-<span class="sourceLineNo">7442</span><a name="line.7442"></a>
-<span class="sourceLineNo">7443</span>    IOException exception = ResponseConverter.getControllerException(controller);<a name="line.7443"></a>
-<span class="sourceLineNo">7444</span>    if (exception != null) {<a name="line.7444"></a>
-<span class="sourceLineNo">7445</span>      throw exception;<a name="line.7445"></a>
-<span class="sourceLineNo">7446</span>    }<a name="line.

<TRUNCATED>

[21/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.EntryBuffers.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.EntryBuffers.html b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.EntryBuffers.html
index 0597160..b444f46 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.EntryBuffers.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.EntryBuffers.html
@@ -184,2145 +184,2183 @@
 <span class="sourceLineNo">176</span>  // Min batch size when replay WAL edits<a name="line.176"></a>
 <span class="sourceLineNo">177</span>  private final int minBatchSize;<a name="line.177"></a>
 <span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span>  WALSplitter(final WALFactory factory, Configuration conf, Path rootDir,<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      FileSystem fs, LastSequenceId idChecker,<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      CoordinatedStateManager csm, RecoveryMode mode) {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    this.conf = HBaseConfiguration.create(conf);<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    String codecClassName = conf<a name="line.183"></a>
-<span class="sourceLineNo">184</span>        .get(WALCellCodec.WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    this.conf.set(HConstants.RPC_CODEC_CONF_KEY, codecClassName);<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    this.rootDir = rootDir;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    this.fs = fs;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    this.sequenceIdChecker = idChecker;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    this.csm = (BaseCoordinatedStateManager)csm;<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    this.walFactory = factory;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    this.controller = new PipelineController();<a name="line.191"></a>
-<span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span>    entryBuffers = new EntryBuffers(controller,<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        this.conf.getInt("hbase.regionserver.hlog.splitlog.buffersize",<a name="line.194"></a>
-<span class="sourceLineNo">195</span>            128*1024*1024));<a name="line.195"></a>
+<span class="sourceLineNo">179</span>  // the file being split currently<a name="line.179"></a>
+<span class="sourceLineNo">180</span>  private FileStatus fileBeingSplit;<a name="line.180"></a>
+<span class="sourceLineNo">181</span><a name="line.181"></a>
+<span class="sourceLineNo">182</span>  @VisibleForTesting<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  WALSplitter(final WALFactory factory, Configuration conf, Path rootDir,<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      FileSystem fs, LastSequenceId idChecker,<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      CoordinatedStateManager csm, RecoveryMode mode) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    this.conf = HBaseConfiguration.create(conf);<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    String codecClassName = conf<a name="line.187"></a>
+<span class="sourceLineNo">188</span>        .get(WALCellCodec.WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    this.conf.set(HConstants.RPC_CODEC_CONF_KEY, codecClassName);<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    this.rootDir = rootDir;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    this.fs = fs;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    this.sequenceIdChecker = idChecker;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    this.csm = (BaseCoordinatedStateManager)csm;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    this.walFactory = factory;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    this.controller = new PipelineController();<a name="line.195"></a>
 <span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span>    // a larger minBatchSize may slow down recovery because replay writer has to wait for<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    // enough edits before replaying them<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    this.minBatchSize = this.conf.getInt("hbase.regionserver.wal.logreplay.batch.size", 64);<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    this.distributedLogReplay = (RecoveryMode.LOG_REPLAY == mode);<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>    this.numWriterThreads = this.conf.getInt("hbase.regionserver.hlog.splitlog.writer.threads", 3);<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    if (csm != null &amp;&amp; this.distributedLogReplay) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      outputSink = new LogReplayOutputSink(controller, entryBuffers, numWriterThreads);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    } else {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      if (this.distributedLogReplay) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        LOG.info("ZooKeeperWatcher is passed in as NULL so disable distrubitedLogRepaly.");<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      }<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      this.distributedLogReplay = false;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      outputSink = new LogRecoveredEditsOutputSink(controller, entryBuffers, numWriterThreads);<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>  }<a name="line.213"></a>
-<span class="sourceLineNo">214</span><a name="line.214"></a>
-<span class="sourceLineNo">215</span>  /**<a name="line.215"></a>
-<span class="sourceLineNo">216</span>   * Splits a WAL file into region's recovered-edits directory.<a name="line.216"></a>
-<span class="sourceLineNo">217</span>   * This is the main entry point for distributed log splitting from SplitLogWorker.<a name="line.217"></a>
-<span class="sourceLineNo">218</span>   * &lt;p&gt;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>   * If the log file has N regions then N recovered.edits files will be produced.<a name="line.219"></a>
-<span class="sourceLineNo">220</span>   * &lt;p&gt;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   * @param rootDir<a name="line.221"></a>
-<span class="sourceLineNo">222</span>   * @param logfile<a name="line.222"></a>
-<span class="sourceLineNo">223</span>   * @param fs<a name="line.223"></a>
-<span class="sourceLineNo">224</span>   * @param conf<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   * @param reporter<a name="line.225"></a>
-<span class="sourceLineNo">226</span>   * @param idChecker<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   * @param cp coordination state manager<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   * @return false if it is interrupted by the progress-able.<a name="line.228"></a>
-<span class="sourceLineNo">229</span>   * @throws IOException<a name="line.229"></a>
-<span class="sourceLineNo">230</span>   */<a name="line.230"></a>
-<span class="sourceLineNo">231</span>  public static boolean splitLogFile(Path rootDir, FileStatus logfile, FileSystem fs,<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      Configuration conf, CancelableProgressable reporter, LastSequenceId idChecker,<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      CoordinatedStateManager cp, RecoveryMode mode, final WALFactory factory) throws IOException {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, idChecker, cp, mode);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    return s.splitLogFile(logfile, reporter);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  }<a name="line.236"></a>
-<span class="sourceLineNo">237</span><a name="line.237"></a>
-<span class="sourceLineNo">238</span>  // A wrapper to split one log folder using the method used by distributed<a name="line.238"></a>
-<span class="sourceLineNo">239</span>  // log splitting. Used by tools and unit tests. It should be package private.<a name="line.239"></a>
-<span class="sourceLineNo">240</span>  // It is public only because TestWALObserver is in a different package,<a name="line.240"></a>
-<span class="sourceLineNo">241</span>  // which uses this method to do log splitting.<a name="line.241"></a>
-<span class="sourceLineNo">242</span>  @VisibleForTesting<a name="line.242"></a>
-<span class="sourceLineNo">243</span>  public static List&lt;Path&gt; split(Path rootDir, Path logDir, Path oldLogDir,<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      FileSystem fs, Configuration conf, final WALFactory factory) throws IOException {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    final FileStatus[] logfiles = SplitLogManager.getFileList(conf,<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        Collections.singletonList(logDir), null);<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    List&lt;Path&gt; splits = new ArrayList&lt;Path&gt;();<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    if (logfiles != null &amp;&amp; logfiles.length &gt; 0) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      for (FileStatus logfile: logfiles) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, null, null,<a name="line.250"></a>
-<span class="sourceLineNo">251</span>            RecoveryMode.LOG_SPLITTING);<a name="line.251"></a>
-<span class="sourceLineNo">252</span>        if (s.splitLogFile(logfile, null)) {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>          finishSplitLogFile(rootDir, oldLogDir, logfile.getPath(), conf);<a name="line.253"></a>
-<span class="sourceLineNo">254</span>          if (s.outputSink.splits != null) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>            splits.addAll(s.outputSink.splits);<a name="line.255"></a>
-<span class="sourceLineNo">256</span>          }<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        }<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      }<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    }<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    if (!fs.delete(logDir, true)) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      throw new IOException("Unable to delete src dir: " + logDir);<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    return splits;<a name="line.263"></a>
-<span class="sourceLineNo">264</span>  }<a name="line.264"></a>
-<span class="sourceLineNo">265</span><a name="line.265"></a>
-<span class="sourceLineNo">266</span>  /**<a name="line.266"></a>
-<span class="sourceLineNo">267</span>   * log splitting implementation, splits one log file.<a name="line.267"></a>
-<span class="sourceLineNo">268</span>   * @param logfile should be an actual log file.<a name="line.268"></a>
-<span class="sourceLineNo">269</span>   */<a name="line.269"></a>
-<span class="sourceLineNo">270</span>  boolean splitLogFile(FileStatus logfile, CancelableProgressable reporter) throws IOException {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    Preconditions.checkState(status == null);<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    Preconditions.checkArgument(logfile.isFile(),<a name="line.272"></a>
-<span class="sourceLineNo">273</span>        "passed in file status is for something other than a regular file.");<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    boolean isCorrupted = false;<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    boolean skipErrors = conf.getBoolean("hbase.hlog.split.skip.errors",<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      SPLIT_SKIP_ERRORS_DEFAULT);<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    int interval = conf.getInt("hbase.splitlog.report.interval.loglines", 1024);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    Path logPath = logfile.getPath();<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    boolean outputSinkStarted = false;<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    boolean progress_failed = false;<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    int editsCount = 0;<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    int editsSkipped = 0;<a name="line.282"></a>
-<span class="sourceLineNo">283</span><a name="line.283"></a>
-<span class="sourceLineNo">284</span>    status =<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        TaskMonitor.get().createStatus(<a name="line.285"></a>
-<span class="sourceLineNo">286</span>          "Splitting log file " + logfile.getPath() + "into a temporary staging area.");<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    Reader in = null;<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    try {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      long logLength = logfile.getLen();<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      LOG.info("Splitting wal: " + logPath + ", length=" + logLength);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      LOG.info("DistributedLogReplay = " + this.distributedLogReplay);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      status.setStatus("Opening log file");<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>        progress_failed = true;<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        return false;<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      }<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      try {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        in = getReader(logfile, skipErrors, reporter);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      } catch (CorruptedLogFileException e) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>        LOG.warn("Could not get reader, corrupted log file " + logPath, e);<a name="line.300"></a>
-<span class="sourceLineNo">301</span>        ZKSplitLog.markCorrupted(rootDir, logfile.getPath().getName(), fs);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>        isCorrupted = true;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      }<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      if (in == null) {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>        LOG.warn("Nothing to split in log file " + logPath);<a name="line.305"></a>
-<span class="sourceLineNo">306</span>        return true;<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      }<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      int numOpenedFilesBeforeReporting = conf.getInt("hbase.splitlog.report.openedfiles", 3);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      int numOpenedFilesLastCheck = 0;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      outputSink.setReporter(reporter);<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      outputSink.startWriterThreads();<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      outputSinkStarted = true;<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      Entry entry;<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      Long lastFlushedSequenceId = -1L;<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      ServerName serverName = DefaultWALProvider.getServerNameFromWALDirectoryName(logPath);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      failedServerName = (serverName == null) ? "" : serverName.getServerName();<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      while ((entry = getNextLogLine(in, logPath, skipErrors)) != null) {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>        byte[] region = entry.getKey().getEncodedRegionName();<a name="line.318"></a>
-<span class="sourceLineNo">319</span>        String encodedRegionNameAsStr = Bytes.toString(region);<a name="line.319"></a>
-<span class="sourceLineNo">320</span>        lastFlushedSequenceId = lastFlushedSequenceIds.get(encodedRegionNameAsStr);<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        if (lastFlushedSequenceId == null) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>          if (this.distributedLogReplay) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>            RegionStoreSequenceIds ids =<a name="line.323"></a>
-<span class="sourceLineNo">324</span>                csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.324"></a>
-<span class="sourceLineNo">325</span>                  encodedRegionNameAsStr);<a name="line.325"></a>
-<span class="sourceLineNo">326</span>            if (ids != null) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>              lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.327"></a>
-<span class="sourceLineNo">328</span>              if (LOG.isDebugEnabled()) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>                LOG.debug("DLR Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.329"></a>
-<span class="sourceLineNo">330</span>                  TextFormat.shortDebugString(ids));<a name="line.330"></a>
-<span class="sourceLineNo">331</span>              }<a name="line.331"></a>
-<span class="sourceLineNo">332</span>            }<a name="line.332"></a>
-<span class="sourceLineNo">333</span>          } else if (sequenceIdChecker != null) {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>            RegionStoreSequenceIds ids = sequenceIdChecker.getLastSequenceId(region);<a name="line.334"></a>
-<span class="sourceLineNo">335</span>            Map&lt;byte[], Long&gt; maxSeqIdInStores = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.335"></a>
-<span class="sourceLineNo">336</span>            for (StoreSequenceId storeSeqId : ids.getStoreSequenceIdList()) {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>              maxSeqIdInStores.put(storeSeqId.getFamilyName().toByteArray(),<a name="line.337"></a>
-<span class="sourceLineNo">338</span>                storeSeqId.getSequenceId());<a name="line.338"></a>
-<span class="sourceLineNo">339</span>            }<a name="line.339"></a>
-<span class="sourceLineNo">340</span>            regionMaxSeqIdInStores.put(encodedRegionNameAsStr, maxSeqIdInStores);<a name="line.340"></a>
-<span class="sourceLineNo">341</span>            lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.341"></a>
-<span class="sourceLineNo">342</span>            if (LOG.isDebugEnabled()) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>              LOG.debug("DLS Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.343"></a>
-<span class="sourceLineNo">344</span>                  TextFormat.shortDebugString(ids));<a name="line.344"></a>
+<span class="sourceLineNo">197</span>    entryBuffers = new EntryBuffers(controller,<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        this.conf.getInt("hbase.regionserver.hlog.splitlog.buffersize",<a name="line.198"></a>
+<span class="sourceLineNo">199</span>            128*1024*1024));<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>    // a larger minBatchSize may slow down recovery because replay writer has to wait for<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    // enough edits before replaying them<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    this.minBatchSize = this.conf.getInt("hbase.regionserver.wal.logreplay.batch.size", 64);<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    this.distributedLogReplay = (RecoveryMode.LOG_REPLAY == mode);<a name="line.204"></a>
+<span class="sourceLineNo">205</span><a name="line.205"></a>
+<span class="sourceLineNo">206</span>    this.numWriterThreads = this.conf.getInt("hbase.regionserver.hlog.splitlog.writer.threads", 3);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    if (csm != null &amp;&amp; this.distributedLogReplay) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      outputSink = new LogReplayOutputSink(controller, entryBuffers, numWriterThreads);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    } else {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      if (this.distributedLogReplay) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>        LOG.info("ZooKeeperWatcher is passed in as NULL so disable distrubitedLogRepaly.");<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      }<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      this.distributedLogReplay = false;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      outputSink = new LogRecoveredEditsOutputSink(controller, entryBuffers, numWriterThreads);<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    }<a name="line.215"></a>
+<span class="sourceLineNo">216</span><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>
+<span class="sourceLineNo">220</span>   * Splits a WAL file into region's recovered-edits directory.<a name="line.220"></a>
+<span class="sourceLineNo">221</span>   * This is the main entry point for distributed log splitting from SplitLogWorker.<a name="line.221"></a>
+<span class="sourceLineNo">222</span>   * &lt;p&gt;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>   * If the log file has N regions then N recovered.edits files will be produced.<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   * &lt;p&gt;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   * @param rootDir<a name="line.225"></a>
+<span class="sourceLineNo">226</span>   * @param logfile<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   * @param fs<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   * @param conf<a name="line.228"></a>
+<span class="sourceLineNo">229</span>   * @param reporter<a name="line.229"></a>
+<span class="sourceLineNo">230</span>   * @param idChecker<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   * @param cp coordination state manager<a name="line.231"></a>
+<span class="sourceLineNo">232</span>   * @return false if it is interrupted by the progress-able.<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   * @throws IOException<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   */<a name="line.234"></a>
+<span class="sourceLineNo">235</span>  public static boolean splitLogFile(Path rootDir, FileStatus logfile, FileSystem fs,<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      Configuration conf, CancelableProgressable reporter, LastSequenceId idChecker,<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      CoordinatedStateManager cp, RecoveryMode mode, final WALFactory factory) throws IOException {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, idChecker, cp, mode);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    return s.splitLogFile(logfile, reporter);<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>  // A wrapper to split one log folder using the method used by distributed<a name="line.242"></a>
+<span class="sourceLineNo">243</span>  // log splitting. Used by tools and unit tests. It should be package private.<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  // It is public only because TestWALObserver is in a different package,<a name="line.244"></a>
+<span class="sourceLineNo">245</span>  // which uses this method to do log splitting.<a name="line.245"></a>
+<span class="sourceLineNo">246</span>  @VisibleForTesting<a name="line.246"></a>
+<span class="sourceLineNo">247</span>  public static List&lt;Path&gt; split(Path rootDir, Path logDir, Path oldLogDir,<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      FileSystem fs, Configuration conf, final WALFactory factory) throws IOException {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    final FileStatus[] logfiles = SplitLogManager.getFileList(conf,<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        Collections.singletonList(logDir), null);<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    List&lt;Path&gt; splits = new ArrayList&lt;Path&gt;();<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    if (logfiles != null &amp;&amp; logfiles.length &gt; 0) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      for (FileStatus logfile: logfiles) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>        WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, null, null,<a name="line.254"></a>
+<span class="sourceLineNo">255</span>            RecoveryMode.LOG_SPLITTING);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>        if (s.splitLogFile(logfile, null)) {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>          finishSplitLogFile(rootDir, oldLogDir, logfile.getPath(), conf);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>          if (s.outputSink.splits != null) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>            splits.addAll(s.outputSink.splits);<a name="line.259"></a>
+<span class="sourceLineNo">260</span>          }<a name="line.260"></a>
+<span class="sourceLineNo">261</span>        }<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      }<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    }<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    if (!fs.delete(logDir, true)) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      throw new IOException("Unable to delete src dir: " + logDir);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    }<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    return splits;<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  }<a name="line.268"></a>
+<span class="sourceLineNo">269</span><a name="line.269"></a>
+<span class="sourceLineNo">270</span>  /**<a name="line.270"></a>
+<span class="sourceLineNo">271</span>   * log splitting implementation, splits one log file.<a name="line.271"></a>
+<span class="sourceLineNo">272</span>   * @param logfile should be an actual log file.<a name="line.272"></a>
+<span class="sourceLineNo">273</span>   */<a name="line.273"></a>
+<span class="sourceLineNo">274</span>  @VisibleForTesting<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  boolean splitLogFile(FileStatus logfile, CancelableProgressable reporter) throws IOException {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    Preconditions.checkState(status == null);<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    Preconditions.checkArgument(logfile.isFile(),<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        "passed in file status is for something other than a regular file.");<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    boolean isCorrupted = false;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    boolean skipErrors = conf.getBoolean("hbase.hlog.split.skip.errors",<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      SPLIT_SKIP_ERRORS_DEFAULT);<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    int interval = conf.getInt("hbase.splitlog.report.interval.loglines", 1024);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    Path logPath = logfile.getPath();<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    boolean outputSinkStarted = false;<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    boolean progress_failed = false;<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    int editsCount = 0;<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    int editsSkipped = 0;<a name="line.287"></a>
+<span class="sourceLineNo">288</span><a name="line.288"></a>
+<span class="sourceLineNo">289</span>    status =<a name="line.289"></a>
+<span class="sourceLineNo">290</span>        TaskMonitor.get().createStatus(<a name="line.290"></a>
+<span class="sourceLineNo">291</span>          "Splitting log file " + logfile.getPath() + "into a temporary staging area.");<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    Reader in = null;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    this.fileBeingSplit = logfile;<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    try {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      long logLength = logfile.getLen();<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      LOG.info("Splitting wal: " + logPath + ", length=" + logLength);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      LOG.info("DistributedLogReplay = " + this.distributedLogReplay);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      status.setStatus("Opening log file");<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>        progress_failed = true;<a name="line.300"></a>
+<span class="sourceLineNo">301</span>        return false;<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      }<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      try {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>        in = getReader(logfile, skipErrors, reporter);<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      } catch (CorruptedLogFileException e) {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>        LOG.warn("Could not get reader, corrupted log file " + logPath, e);<a name="line.306"></a>
+<span class="sourceLineNo">307</span>        ZKSplitLog.markCorrupted(rootDir, logfile.getPath().getName(), fs);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>        isCorrupted = true;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      }<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      if (in == null) {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        LOG.warn("Nothing to split in log file " + logPath);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        return true;<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      }<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      int numOpenedFilesBeforeReporting = conf.getInt("hbase.splitlog.report.openedfiles", 3);<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      int numOpenedFilesLastCheck = 0;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      outputSink.setReporter(reporter);<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      outputSink.startWriterThreads();<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      outputSinkStarted = true;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      Entry entry;<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      Long lastFlushedSequenceId = -1L;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      ServerName serverName = DefaultWALProvider.getServerNameFromWALDirectoryName(logPath);<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      failedServerName = (serverName == null) ? "" : serverName.getServerName();<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      while ((entry = getNextLogLine(in, logPath, skipErrors)) != null) {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>        byte[] region = entry.getKey().getEncodedRegionName();<a name="line.324"></a>
+<span class="sourceLineNo">325</span>        String encodedRegionNameAsStr = Bytes.toString(region);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>        lastFlushedSequenceId = lastFlushedSequenceIds.get(encodedRegionNameAsStr);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>        if (lastFlushedSequenceId == null) {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>          if (this.distributedLogReplay) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>            RegionStoreSequenceIds ids =<a name="line.329"></a>
+<span class="sourceLineNo">330</span>                csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.330"></a>
+<span class="sourceLineNo">331</span>                  encodedRegionNameAsStr);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>            if (ids != null) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span>              lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.333"></a>
+<span class="sourceLineNo">334</span>              if (LOG.isDebugEnabled()) {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>                LOG.debug("DLR Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.335"></a>
+<span class="sourceLineNo">336</span>                  TextFormat.shortDebugString(ids));<a name="line.336"></a>
+<span class="sourceLineNo">337</span>              }<a name="line.337"></a>
+<span class="sourceLineNo">338</span>            }<a name="line.338"></a>
+<span class="sourceLineNo">339</span>          } else if (sequenceIdChecker != null) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>            RegionStoreSequenceIds ids = sequenceIdChecker.getLastSequenceId(region);<a name="line.340"></a>
+<span class="sourceLineNo">341</span>            Map&lt;byte[], Long&gt; maxSeqIdInStores = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.341"></a>
+<span class="sourceLineNo">342</span>            for (StoreSequenceId storeSeqId : ids.getStoreSequenceIdList()) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>              maxSeqIdInStores.put(storeSeqId.getFamilyName().toByteArray(),<a name="line.343"></a>
+<span class="sourceLineNo">344</span>                storeSeqId.getSequenceId());<a name="line.344"></a>
 <span class="sourceLineNo">345</span>            }<a name="line.345"></a>
-<span class="sourceLineNo">346</span>          }<a name="line.346"></a>
-<span class="sourceLineNo">347</span>          if (lastFlushedSequenceId == null) {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>            lastFlushedSequenceId = -1L;<a name="line.348"></a>
-<span class="sourceLineNo">349</span>          }<a name="line.349"></a>
-<span class="sourceLineNo">350</span>          lastFlushedSequenceIds.put(encodedRegionNameAsStr, lastFlushedSequenceId);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        }<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        if (lastFlushedSequenceId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>          editsSkipped++;<a name="line.353"></a>
-<span class="sourceLineNo">354</span>          continue;<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        }<a name="line.355"></a>
-<span class="sourceLineNo">356</span>        entryBuffers.appendEntry(entry);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        editsCount++;<a name="line.357"></a>
-<span class="sourceLineNo">358</span>        int moreWritersFromLastCheck = this.getNumOpenWriters() - numOpenedFilesLastCheck;<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        // If sufficient edits have passed, check if we should report progress.<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        if (editsCount % interval == 0<a name="line.360"></a>
-<span class="sourceLineNo">361</span>            || moreWritersFromLastCheck &gt; numOpenedFilesBeforeReporting) {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>          numOpenedFilesLastCheck = this.getNumOpenWriters();<a name="line.362"></a>
-<span class="sourceLineNo">363</span>          String countsStr = (editsCount - (editsSkipped + outputSink.getSkippedEdits()))<a name="line.363"></a>
-<span class="sourceLineNo">364</span>              + " edits, skipped " + editsSkipped + " edits.";<a name="line.364"></a>
-<span class="sourceLineNo">365</span>          status.setStatus("Split " + countsStr);<a name="line.365"></a>
-<span class="sourceLineNo">366</span>          if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>            progress_failed = true;<a name="line.367"></a>
-<span class="sourceLineNo">368</span>            return false;<a name="line.368"></a>
-<span class="sourceLineNo">369</span>          }<a name="line.369"></a>
-<span class="sourceLineNo">370</span>        }<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      }<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    } catch (InterruptedException ie) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      IOException iie = new InterruptedIOException();<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      iie.initCause(ie);<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      throw iie;<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    } catch (CorruptedLogFileException e) {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      LOG.warn("Could not parse, corrupted log file " + logPath, e);<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      csm.getSplitLogWorkerCoordination().markCorrupted(rootDir,<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        logfile.getPath().getName(), fs);<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      isCorrupted = true;<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    } catch (IOException e) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      throw e;<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    } finally {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      LOG.debug("Finishing writing output logs and closing down.");<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      try {<a name="line.386"></a>
-<span class="sourceLineNo">387</span>        if (null != in) {<a name="line.387"></a>
-<span class="sourceLineNo">388</span>          in.close();<a name="line.388"></a>
-<span class="sourceLineNo">389</span>        }<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      } catch (IOException exception) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        LOG.warn("Could not close wal reader: " + exception.getMessage());<a name="line.391"></a>
-<span class="sourceLineNo">392</span>        LOG.debug("exception details", exception);<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      }<a name="line.393"></a>
-<span class="sourceLineNo">394</span>      try {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        if (outputSinkStarted) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>          // Set progress_failed to true as the immediate following statement will reset its value<a name="line.396"></a>
-<span class="sourceLineNo">397</span>          // when finishWritingAndClose() throws exception, progress_failed has the right value<a name="line.397"></a>
-<span class="sourceLineNo">398</span>          progress_failed = true;<a name="line.398"></a>
-<span class="sourceLineNo">399</span>          progress_failed = outputSink.finishWritingAndClose() == null;<a name="line.399"></a>
-<span class="sourceLineNo">400</span>        }<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      } finally {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        String msg =<a name="line.402"></a>
-<span class="sourceLineNo">403</span>            "Processed " + editsCount + " edits across " + outputSink.getNumberOfRecoveredRegions()<a name="line.403"></a>
-<span class="sourceLineNo">404</span>                + " regions; edits skipped=" + editsSkipped + "; log file=" + logPath +<a name="line.404"></a>
-<span class="sourceLineNo">405</span>                ", length=" + logfile.getLen() + // See if length got updated post lease recovery<a name="line.405"></a>
-<span class="sourceLineNo">406</span>                ", corrupted=" + isCorrupted + ", progress failed=" + progress_failed;<a name="line.406"></a>
-<span class="sourceLineNo">407</span>        LOG.info(msg);<a name="line.407"></a>
-<span class="sourceLineNo">408</span>        status.markComplete(msg);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      }<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    }<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    return !progress_failed;<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>   * Completes the work done by splitLogFile by archiving logs<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   * &lt;p&gt;<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * It is invoked by SplitLogManager once it knows that one of the<a name="line.417"></a>
-<span class="sourceLineNo">418</span>   * SplitLogWorkers have completed the splitLogFile() part. If the master<a name="line.418"></a>
-<span class="sourceLineNo">419</span>   * crashes then this function might get called multiple times.<a name="line.419"></a>
-<span class="sourceLineNo">420</span>   * &lt;p&gt;<a name="line.420"></a>
-<span class="sourceLineNo">421</span>   * @param logfile<a name="line.421"></a>
-<span class="sourceLineNo">422</span>   * @param conf<a name="line.422"></a>
-<span class="sourceLineNo">423</span>   * @throws IOException<a name="line.423"></a>
-<span class="sourceLineNo">424</span>   */<a name="line.424"></a>
-<span class="sourceLineNo">425</span>  public static void finishSplitLogFile(String logfile,<a name="line.425"></a>
-<span class="sourceLineNo">426</span>      Configuration conf)  throws IOException {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    Path rootdir = FSUtils.getRootDir(conf);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    Path oldLogDir = new Path(rootdir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    Path logPath;<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    if (FSUtils.isStartingWithPath(rootdir, logfile)) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      logPath = new Path(logfile);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    } else {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      logPath = new Path(rootdir, logfile);<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    }<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    finishSplitLogFile(rootdir, oldLogDir, logPath, conf);<a name="line.435"></a>
-<span class="sourceLineNo">436</span>  }<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>  static void finishSplitLogFile(Path rootdir, Path oldLogDir,<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      Path logPath, Configuration conf) throws IOException {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    List&lt;Path&gt; processedLogs = new ArrayList&lt;Path&gt;();<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    List&lt;Path&gt; corruptedLogs = new ArrayList&lt;Path&gt;();<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    FileSystem fs;<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    fs = rootdir.getFileSystem(conf);<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    if (ZKSplitLog.isCorrupted(rootdir, logPath.getName(), fs)) {<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      corruptedLogs.add(logPath);<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    } else {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      processedLogs.add(logPath);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    }<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    archiveLogs(corruptedLogs, processedLogs, oldLogDir, fs, conf);<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    Path stagingDir = ZKSplitLog.getSplitLogDir(rootdir, logPath.getName());<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    fs.delete(stagingDir, true);<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  }<a name="line.452"></a>
-<span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span>  /**<a name="line.454"></a>
-<span class="sourceLineNo">455</span>   * Moves processed logs to a oldLogDir after successful processing Moves<a name="line.455"></a>
-<span class="sourceLineNo">456</span>   * corrupted logs (any log that couldn't be successfully parsed to corruptDir<a name="line.456"></a>
-<span class="sourceLineNo">457</span>   * (.corrupt) for later investigation<a name="line.457"></a>
-<span class="sourceLineNo">458</span>   *<a name="line.458"></a>
-<span class="sourceLineNo">459</span>   * @param corruptedLogs<a name="line.459"></a>
-<span class="sourceLineNo">460</span>   * @param processedLogs<a name="line.460"></a>
-<span class="sourceLineNo">461</span>   * @param oldLogDir<a name="line.461"></a>
-<span class="sourceLineNo">462</span>   * @param fs<a name="line.462"></a>
-<span class="sourceLineNo">463</span>   * @param conf<a name="line.463"></a>
-<span class="sourceLineNo">464</span>   * @throws IOException<a name="line.464"></a>
-<span class="sourceLineNo">465</span>   */<a name="line.465"></a>
-<span class="sourceLineNo">466</span>  private static void archiveLogs(<a name="line.466"></a>
-<span class="sourceLineNo">467</span>      final List&lt;Path&gt; corruptedLogs,<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      final List&lt;Path&gt; processedLogs, final Path oldLogDir,<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      final FileSystem fs, final Configuration conf) throws IOException {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    final Path corruptDir = new Path(FSUtils.getRootDir(conf), conf.get(<a name="line.470"></a>
-<span class="sourceLineNo">471</span>        "hbase.regionserver.hlog.splitlog.corrupt.dir",  HConstants.CORRUPT_DIR_NAME));<a name="line.471"></a>
-<span class="sourceLineNo">472</span><a name="line.472"></a>
-<span class="sourceLineNo">473</span>    if (!fs.mkdirs(corruptDir)) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      LOG.info("Unable to mkdir " + corruptDir);<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    }<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    fs.mkdirs(oldLogDir);<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>    // this method can get restarted or called multiple times for archiving<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    // the same log files.<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    for (Path corrupted : corruptedLogs) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      Path p = new Path(corruptDir, corrupted.getName());<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      if (fs.exists(corrupted)) {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        if (!fs.rename(corrupted, p)) {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>          LOG.warn("Unable to move corrupted log " + corrupted + " to " + p);<a name="line.484"></a>
-<span class="sourceLineNo">485</span>        } else {<a name="line.485"></a>
-<span class="sourceLineNo">486</span>          LOG.warn("Moved corrupted log " + corrupted + " to " + p);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>        }<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      }<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    }<a name="line.489"></a>
-<span class="sourceLineNo">490</span><a name="line.490"></a>
-<span class="sourceLineNo">491</span>    for (Path p : processedLogs) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      Path newPath = FSHLog.getWALArchivePath(oldLogDir, p);<a name="line.492"></a>
-<span class="sourceLineNo">493</span>      if (fs.exists(p)) {<a name="line.493"></a>
-<span class="sourceLineNo">494</span>        if (!FSUtils.renameAndSetModifyTime(fs, p, newPath)) {<a name="line.494"></a>
-<span class="sourceLineNo">495</span>          LOG.warn("Unable to move  " + p + " to " + newPath);<a name="line.495"></a>
-<span class="sourceLineNo">496</span>        } else {<a name="line.496"></a>
-<span class="sourceLineNo">497</span>          LOG.info("Archived processed log " + p + " to " + newPath);<a name="line.497"></a>
-<span class="sourceLineNo">498</span>        }<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      }<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><a name="line.502"></a>
-<span class="sourceLineNo">503</span>  /**<a name="line.503"></a>
-<span class="sourceLineNo">504</span>   * Path to a file under RECOVERED_EDITS_DIR directory of the region found in<a name="line.504"></a>
-<span class="sourceLineNo">505</span>   * &lt;code&gt;logEntry&lt;/code&gt; named for the sequenceid in the passed<a name="line.505"></a>
-<span class="sourceLineNo">506</span>   * &lt;code&gt;logEntry&lt;/code&gt;: e.g. /hbase/some_table/2323432434/recovered.edits/2332.<a name="line.506"></a>
-<span class="sourceLineNo">507</span>   * This method also ensures existence of RECOVERED_EDITS_DIR under the region<a name="line.507"></a>
-<span class="sourceLineNo">508</span>   * creating it if necessary.<a name="line.508"></a>
-<span class="sourceLineNo">509</span>   * @param fs<a name="line.509"></a>
-<span class="sourceLineNo">510</span>   * @param logEntry<a name="line.510"></a>
-<span class="sourceLineNo">511</span>   * @param rootDir HBase root dir.<a name="line.511"></a>
-<span class="sourceLineNo">512</span>   * @return Path to file into which to dump split log edits.<a name="line.512"></a>
-<span class="sourceLineNo">513</span>   * @throws IOException<a name="line.513"></a>
-<span class="sourceLineNo">514</span>   */<a name="line.514"></a>
-<span class="sourceLineNo">515</span>  @SuppressWarnings("deprecation")<a name="line.515"></a>
-<span class="sourceLineNo">516</span>  static Path getRegionSplitEditsPath(final FileSystem fs,<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      final Entry logEntry, final Path rootDir, boolean isCreate)<a name="line.517"></a>
-<span class="sourceLineNo">518</span>  throws IOException {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    Path tableDir = FSUtils.getTableDir(rootDir, logEntry.getKey().getTablename());<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    String encodedRegionName = Bytes.toString(logEntry.getKey().getEncodedRegionName());<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    Path regiondir = HRegion.getRegionDir(tableDir, encodedRegionName);<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    Path dir = getRegionDirRecoveredEditsDir(regiondir);<a name="line.522"></a>
-<span class="sourceLineNo">523</span><a name="line.523"></a>
-<span class="sourceLineNo">524</span>    if (!fs.exists(regiondir)) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      LOG.info("This region's directory doesn't exist: "<a name="line.525"></a>
-<span class="sourceLineNo">526</span>          + regiondir.toString() + ". It is very likely that it was" +<a name="line.526"></a>
-<span class="sourceLineNo">527</span>          " already split so it's safe to discard those edits.");<a name="line.527"></a>
-<span class="sourceLineNo">528</span>      return null;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    }<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    if (fs.exists(dir) &amp;&amp; fs.isFile(dir)) {<a name="line.530"></a>
-<span class="sourceLineNo">531</span>      Path tmp = new Path("/tmp");<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      if (!fs.exists(tmp)) {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>        fs.mkdirs(tmp);<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      }<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      tmp = new Path(tmp,<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        HConstants.RECOVERED_EDITS_DIR + "_" + encodedRegionName);<a name="line.536"></a>
-<span class="sourceLineNo">537</span>      LOG.warn("Found existing old file: " + dir + ". It could be some "<a name="line.537"></a>
-<span class="sourceLineNo">538</span>        + "leftover of an old installation. It should be a folder instead. "<a name="line.538"></a>
-<span class="sourceLineNo">539</span>        + "So moving it to " + tmp);<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      if (!fs.rename(dir, tmp)) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        LOG.warn("Failed to sideline old file " + dir);<a name="line.541"></a>
-<span class="sourceLineNo">542</span>      }<a name="line.542"></a>
-<span class="sourceLineNo">543</span>    }<a name="line.543"></a>
-<span class="sourceLineNo">544</span><a name="line.544"></a>
-<span class="sourceLineNo">545</span>    if (isCreate &amp;&amp; !fs.exists(dir)) {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>      if (!fs.mkdirs(dir)) LOG.warn("mkdir failed on " + dir);<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    }<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    // Append file name ends with RECOVERED_LOG_TMPFILE_SUFFIX to ensure<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    // region's replayRecoveredEdits will not delete it<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    String fileName = formatRecoveredEditsFileName(logEntry.getKey().getLogSeqNum());<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    fileName = getTmpRecoveredEditsFileName(fileName);<a name="line.551"></a>
-<span class="sourceLineNo">552</span>    return new Path(dir, fileName);<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>  static String getTmpRecoveredEditsFileName(String fileName) {<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    return fileName + RECOVERED_LOG_TMPFILE_SUFFIX;<a name="line.556"></a>
-<span class="sourceLineNo">557</span>  }<a name="line.557"></a>
-<span class="sourceLineNo">558</span><a name="line.558"></a>
-<span class="sourceLineNo">559</span>  /**<a name="line.559"></a>
-<span class="sourceLineNo">560</span>   * Get the completed recovered edits file path, renaming it to be by last edit<a name="line.560"></a>
-<span class="sourceLineNo">561</span>   * in the file from its first edit. Then we could use the name to skip<a name="line.561"></a>
-<span class="sourceLineNo">562</span>   * recovered edits when doing {@link HRegion#replayRecoveredEditsIfAny}.<a name="line.562"></a>
-<span class="sourceLineNo">563</span>   * @param srcPath<a name="line.563"></a>
-<span class="sourceLineNo">564</span>   * @param maximumEditLogSeqNum<a name="line.564"></a>
-<span class="sourceLineNo">565</span>   * @return dstPath take file's last edit log seq num as the name<a name="line.565"></a>
-<span class="sourceLineNo">566</span>   */<a name="line.566"></a>
-<span class="sourceLineNo">567</span>  static Path getCompletedRecoveredEditsFilePath(Path srcPath,<a name="line.567"></a>
-<span class="sourceLineNo">568</span>      Long maximumEditLogSeqNum) {<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    String fileName = formatRecoveredEditsFileName(maximumEditLogSeqNum);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    return new Path(srcPath.getParent(), fileName);<a name="line.570"></a>
-<span class="sourceLineNo">571</span>  }<a name="line.571"></a>
-<span class="sourceLineNo">572</span><a name="line.572"></a>
-<span class="sourceLineNo">573</span>  static String formatRecoveredEditsFileName(final long seqid) {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    return String.format("%019d", seqid);<a name="line.574"></a>
-<span class="sourceLineNo">575</span>  }<a name="line.575"></a>
-<span class="sourceLineNo">576</span><a name="line.576"></a>
-<span class="sourceLineNo">577</span>  private static final Pattern EDITFILES_NAME_PATTERN = Pattern.compile("-?[0-9]+");<a name="line.577"></a>
-<span class="sourceLineNo">578</span>  private static final String RECOVERED_LOG_TMPFILE_SUFFIX = ".temp";<a name="line.578"></a>
-<span class="sourceLineNo">579</span><a name="line.579"></a>
-<span class="sourceLineNo">580</span>  /**<a name="line.580"></a>
-<span class="sourceLineNo">581</span>   * @param regiondir<a name="line.581"></a>
-<span class="sourceLineNo">582</span>   *          This regions directory in the filesystem.<a name="line.582"></a>
-<span class="sourceLineNo">583</span>   * @return The directory that holds recovered edits files for the region<a name="line.583"></a>
-<span class="sourceLineNo">584</span>   *         &lt;code&gt;regiondir&lt;/code&gt;<a name="line.584"></a>
-<span class="sourceLineNo">585</span>   */<a name="line.585"></a>
-<span class="sourceLineNo">586</span>  public static Path getRegionDirRecoveredEditsDir(final Path regiondir) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    return new Path(regiondir, HConstants.RECOVERED_EDITS_DIR);<a name="line.587"></a>
-<span class="sourceLineNo">588</span>  }<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span>  /**<a name="line.590"></a>
-<span class="sourceLineNo">591</span>   * Returns sorted set of edit files made by splitter, excluding files<a name="line.591"></a>
-<span class="sourceLineNo">592</span>   * with '.temp' suffix.<a name="line.592"></a>
-<span class="sourceLineNo">593</span>   *<a name="line.593"></a>
-<span class="sourceLineNo">594</span>   * @param fs<a name="line.594"></a>
-<span class="sourceLineNo">595</span>   * @param regiondir<a name="line.595"></a>
-<span class="sourceLineNo">596</span>   * @return Files in passed &lt;code&gt;regiondir&lt;/code&gt; as a sorted set.<a name="line.596"></a>
-<span class="sourceLineNo">597</span>   * @throws IOException<a name="line.597"></a>
-<span class="sourceLineNo">598</span>   */<a name="line.598"></a>
-<span class="sourceLineNo">599</span>  public static NavigableSet&lt;Path&gt; getSplitEditFilesSorted(final FileSystem fs,<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      final Path regiondir) throws IOException {<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    NavigableSet&lt;Path&gt; filesSorted = new TreeSet&lt;Path&gt;();<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    Path editsdir = getRegionDirRecoveredEditsDir(regiondir);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    if (!fs.exists(editsdir))<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      return filesSorted;<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    FileStatus[] files = FSUtils.listStatus(fs, editsdir, new PathFilter() {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      @Override<a name="line.606"></a>
-<span class="sourceLineNo">607</span>      public boolean accept(Path p) {<a name="line.607"></a>
-<span class="sourceLineNo">608</span>        boolean result = false;<a name="line.608"></a>
-<span class="sourceLineNo">609</span>        try {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>          // Return files and only files that match the editfile names pattern.<a name="line.610"></a>
-<span class="sourceLineNo">611</span>          // There can be other files in this directory other than edit files.<a name="line.611"></a>
-<span class="sourceLineNo">612</span>          // In particular, on error, we'll move aside the bad edit file giving<a name="line.612"></a>
-<span class="sourceLineNo">613</span>          // it a timestamp suffix. See moveAsideBadEditsFile.<a name="line.613"></a>
-<span class="sourceLineNo">614</span>          Matcher m = EDITFILES_NAME_PATTERN.matcher(p.getName());<a name="line.614"></a>
-<span class="sourceLineNo">615</span>          result = fs.isFile(p) &amp;&amp; m.matches();<a name="line.615"></a>
-<span class="sourceLineNo">616</span>          // Skip the file whose name ends with RECOVERED_LOG_TMPFILE_SUFFIX,<a name="line.616"></a>
-<span class="sourceLineNo">617</span>          // because it means splitwal thread is writting this file.<a name="line.617"></a>
-<span class="sourceLineNo">618</span>          if (p.getName().endsWith(RECOVERED_LOG_TMPFILE_SUFFIX)) {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>            result = false;<a name="line.619"></a>
-<span class="sourceLineNo">620</span>          }<a name="line.620"></a>
-<span class="sourceLineNo">621</span>          // Skip SeqId Files<a name="line.621"></a>
-<span class="sourceLineNo">622</span>          if (isSequenceIdFile(p)) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span>            result = false;<a name="line.623"></a>
-<span class="sourceLineNo">624</span>          }<a name="line.624"></a>
-<span class="sourceLineNo">625</span>        } catch (IOException e) {<a name="line.625"></a>
-<span class="sourceLineNo">626</span>          LOG.warn("Failed isFile check on " + p);<a name="line.626"></a>
-<span class="sourceLineNo">627</span>        }<a name="line.627"></a>
-<span class="sourceLineNo">628</span>        return result;<a name="line.628"></a>
-<span class="sourceLineNo">629</span>      }<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    });<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    if (files == null) {<a name="line.631"></a>
-<span class="sourceLineNo">632</span>      return filesSorted;<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    }<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    for (FileStatus status : files) {<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      filesSorted.add(status.getPath());<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    }<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    return filesSorted;<a name="line.637"></a>
-<span class="sourceLineNo">638</span>  }<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>   * Move aside a bad edits file.<a name="line.641"></a>
-<span class="sourceLineNo">642</span>   *<a name="line.642"></a>
-<span class="sourceLineNo">643</span>   * @param fs<a name="line.643"></a>
-<span class="sourceLineNo">644</span>   * @param edits<a name="line.644"></a>
-<span class="sourceLineNo">645</span>   *          Edits file to move aside.<a name="line.645"></a>
-<span class="sourceLineNo">646</span>   * @return The name of the moved aside file.<a name="line.646"></a>
-<span class="sourceLineNo">647</span>   * @throws IOException<a name="line.647"></a>
-<span class="sourceLineNo">648</span>   */<a name="line.648"></a>
-<span class="sourceLineNo">649</span>  public static Path moveAsideBadEditsFile(final FileSystem fs, final Path edits)<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      throws IOException {<a name="line.650"></a>
-<span class="sourceLineNo">651</span>    Path moveAsideName = new Path(edits.getParent(), edits.getName() + "."<a name="line.651"></a>
-<span class="sourceLineNo">652</span>        + System.currentTimeMillis());<a name="line.652"></a>
-<span class="sourceLineNo">653</span>    if (!fs.rename(edits, moveAsideName)) {<a name="line.653"></a>
-<span class="sourceLineNo">654</span>      LOG.warn("Rename failed from " + edits + " to " + moveAsideName);<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    }<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    return moveAsideName;<a name="line.656"></a>
-<span class="sourceLineNo">657</span>  }<a name="line.657"></a>
-<span class="sourceLineNo">658</span><a name="line.658"></a>
-<span class="sourceLineNo">659</span>  private static final String SEQUENCE_ID_FILE_SUFFIX = ".seqid";<a name="line.659"></a>
-<span class="sourceLineNo">660</span>  private static final String OLD_SEQUENCE_ID_FILE_SUFFIX = "_seqid";<a name="line.660"></a>
-<span class="sourceLineNo">661</span>  private static final int SEQUENCE_ID_FILE_SUFFIX_LENGTH = SEQUENCE_ID_FILE_SUFFIX.length();<a name="line.661"></a>
-<span class="sourceLineNo">662</span><a name="line.662"></a>
-<span class="sourceLineNo">663</span>  /**<a name="line.663"></a>
-<span class="sourceLineNo">664</span>   * Is the given file a region open sequence id file.<a name="line.664"></a>
-<span class="sourceLineNo">665</span>   */<a name="line.665"></a>
-<span class="sourceLineNo">666</span>  @VisibleForTesting<a name="line.666"></a>
-<span class="sourceLineNo">667</span>  public static boolean isSequenceIdFile(final Path file) {<a name="line.667"></a>
-<span class="sourceLineNo">668</span>    return file.getName().endsWith(SEQUENCE_ID_FILE_SUFFIX)<a name="line.668"></a>
-<span class="sourceLineNo">669</span>        || file.getName().endsWith(OLD_SEQUENCE_ID_FILE_SUFFIX);<a name="line.669"></a>
-<span class="sourceLineNo">670</span>  }<a name="line.670"></a>
+<span class="sourceLineNo">346</span>            regionMaxSeqIdInStores.put(encodedRegionNameAsStr, maxSeqIdInStores);<a name="line.346"></a>
+<span class="sourceLineNo">347</span>            lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.347"></a>
+<span class="sourceLineNo">348</span>            if (LOG.isDebugEnabled()) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>              LOG.debug("DLS Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.349"></a>
+<span class="sourceLineNo">350</span>                  TextFormat.shortDebugString(ids));<a name="line.350"></a>
+<span class="sourceLineNo">351</span>            }<a name="line.351"></a>
+<span class="sourceLineNo">352</span>          }<a name="line.352"></a>
+<span class="sourceLineNo">353</span>          if (lastFlushedSequenceId == null) {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>            lastFlushedSequenceId = -1L;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>          }<a name="line.355"></a>
+<span class="sourceLineNo">356</span>          lastFlushedSequenceIds.put(encodedRegionNameAsStr, lastFlushedSequenceId);<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        }<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        if (lastFlushedSequenceId &gt;= entry.getKey().getSequenceId()) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>          editsSkipped++;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>          continue;<a name="line.360"></a>
+<span class="sourceLineNo">361</span>        }<a name="line.361"></a>
+<span class="sourceLineNo">362</span>        entryBuffers.appendEntry(entry);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        editsCount++;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>        int moreWritersFromLastCheck = this.getNumOpenWriters() - numOpenedFilesLastCheck;<a name="line.364"></a>
+<span class="sourceLineNo">365</span>        // If sufficient edits have passed, check if we should report progress.<a name="line.365"></a>
+<span class="sourceLineNo">366</span>        if (editsCount % interval == 0<a name="line.366"></a>
+<span class="sourceLineNo">367</span>            || moreWritersFromLastCheck &gt; numOpenedFilesBeforeReporting) {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>          numOpenedFilesLastCheck = this.getNumOpenWriters();<a name="line.368"></a>
+<span class="sourceLineNo">369</span>          String countsStr = (editsCount - (editsSkipped + outputSink.getSkippedEdits()))<a name="line.369"></a>
+<span class="sourceLineNo">370</span>              + " edits, skipped " + editsSkipped + " edits.";<a name="line.370"></a>
+<span class="sourceLineNo">371</span>          status.setStatus("Split " + countsStr);<a name="line.371"></a>
+<span class="sourceLineNo">372</span>          if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>            progress_failed = true;<a name="line.373"></a>
+<span class="sourceLineNo">374</span>            return false;<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>      }<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    } catch (InterruptedException ie) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      IOException iie = new InterruptedIOException();<a name="line.379"></a>
+<span class="sourceLineNo">380</span>      iie.initCause(ie);<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      throw iie;<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    } catch (CorruptedLogFileException e) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      LOG.warn("Could not parse, corrupted log file " + logPath, e);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      csm.getSplitLogWorkerCoordination().markCorrupted(rootDir,<a name="line.384"></a>
+<span class="sourceLineNo">385</span>        logfile.getPath().getName(), fs);<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      isCorrupted = true;<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    } catch (IOException e) {<a name="line.387"></a>
+<span class="sourceLineNo">388</span>      e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      throw e;<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    } finally {<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      LOG.debug("Finishing writing output logs and closing down.");<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      try {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>        if (null != in) {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>          in.close();<a name="line.394"></a>
+<span class="sourceLineNo">395</span>        }<a name="line.395"></a>
+<span class="sourceLineNo">396</span>      } catch (IOException exception) {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>        LOG.warn("Could not close wal reader: " + exception.getMessage());<a name="line.397"></a>
+<span class="sourceLineNo">398</span>        LOG.debug("exception details", exception);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      }<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      try {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>        if (outputSinkStarted) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>          // Set progress_failed to true as the immediate following statement will reset its value<a name="line.402"></a>
+<span class="sourceLineNo">403</span>          // when finishWritingAndClose() throws exception, progress_failed has the right value<a name="line.403"></a>
+<span class="sourceLineNo">404</span>          progress_failed = true;<a name="line.404"></a>
+<span class="sourceLineNo">405</span>          progress_failed = outputSink.finishWritingAndClose() == null;<a name="line.405"></a>
+<span class="sourceLineNo">406</span>        }<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      } finally {<a name="line.407"></a>
+<span class="sourceLineNo">408</span>        String msg =<a name="line.408"></a>
+<span class="sourceLineNo">409</span>            "Processed " + editsCount + " edits across " + outputSink.getNumberOfRecoveredRegions()<a name="line.409"></a>
+<span class="sourceLineNo">410</span>                + " regions; edits skipped=" + editsSkipped + "; log file=" + logPath +<a name="line.410"></a>
+<span class="sourceLineNo">411</span>                ", length=" + logfile.getLen() + // See if length got updated post lease recovery<a name="line.411"></a>
+<span class="sourceLineNo">412</span>                ", corrupted=" + isCorrupted + ", progress failed=" + progress_failed;<a name="line.412"></a>
+<span class="sourceLineNo">413</span>        LOG.info(msg);<a name="line.413"></a>
+<span class="sourceLineNo">414</span>        status.markComplete(msg);<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>    return !progress_failed;<a name="line.417"></a>
+<span class="sourceLineNo">418</span>  }<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>   * Completes the work done by splitLogFile by archiving logs<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   * &lt;p&gt;<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   * It is invoked by SplitLogManager once it knows that one of the<a name="line.423"></a>
+<span class="sourceLineNo">424</span>   * SplitLogWorkers have completed the splitLogFile() part. If the master<a name="line.424"></a>
+<span class="sourceLineNo">425</span>   * crashes then this function might get called multiple times.<a name="line.425"></a>
+<span class="sourceLineNo">426</span>   * &lt;p&gt;<a name="line.426"></a>
+<span class="sourceLineNo">427</span>   * @param logfile<a name="line.427"></a>
+<span class="sourceLineNo">428</span>   * @param conf<a name="line.428"></a>
+<span class="sourceLineNo">429</span>   * @throws IOException<a name="line.429"></a>
+<span class="sourceLineNo">430</span>   */<a name="line.430"></a>
+<span class="sourceLineNo">431</span>  public static void finishSplitLogFile(String logfile,<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      Configuration conf)  throws IOException {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    Path rootdir = FSUtils.getRootDir(conf);<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    Path oldLogDir = new Path(rootdir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.434"></a>
+<span class="sourceLineNo">435</span>    Path logPath;<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    if (FSUtils.isStartingWithPath(rootdir, logfile)) {<a name="line.436"></a>
+<span class="sourceLineNo">437</span>      logPath = new Path(logfile);<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    } else {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>      logPath = new Path(rootdir, logfile);<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    }<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    finishSplitLogFile(rootdir, oldLogDir, logPath, conf);<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>  private static void finishSplitLogFile(Path rootdir, Path oldLogDir,<a name="line.444"></a>
+<span class="sourceLineNo">445</span>      Path logPath, Configuration conf) throws IOException {<a name="line.445"></a>
+<span class="sourceLineNo">446</span>    List&lt;Path&gt; processedLogs = new ArrayList&lt;Path&gt;();<a name="line.446"></a>
+<span class="sourceLineNo">447</span>    List&lt;Path&gt; corruptedLogs = new ArrayList&lt;Path&gt;();<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    FileSystem fs;<a name="line.448"></a>
+<span class="sourceLineNo">449</span>    fs = rootdir.getFileSystem(conf);<a name="line.449"></a>
+<span class="sourceLineNo">450</span>    if (ZKSplitLog.isCorrupted(rootdir, logPath.getName(), fs)) {<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      corruptedLogs.add(logPath);<a name="line.451"></a>
+<span class="sourceLineNo">452</span>    } else {<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      processedLogs.add(logPath);<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    }<a name="line.454"></a>
+<span class="sourceLineNo">455</span>    archiveLogs(corruptedLogs, processedLogs, oldLogDir, fs, conf);<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    Path stagingDir = ZKSplitLog.getSplitLogDir(rootdir, logPath.getName());<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    fs.delete(stagingDir, true);<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>  /**<a name="line.460"></a>
+<span class="sourceLineNo">461</span>   * Moves processed logs to a oldLogDir after successful processing Moves<a name="line.461"></a>
+<span class="sourceLineNo">462</span>   * corrupted logs (any log that couldn't be successfully parsed to corruptDir<a name="line.462"></a>
+<span class="sourceLineNo">463</span>   * (.corrupt) for later investigation<a name="line.463"></a>
+<span class="sourceLineNo">464</span>   *<a name="line.464"></a>
+<span class="sourceLineNo">465</span>   * @param corruptedLogs<a name="line.465"></a>
+<span class="sourceLineNo">466</span>   * @param processedLogs<a name="line.466"></a>
+<span class="sourceLineNo">467</span>   * @param oldLogDir<a name="line.467"></a>
+<span class="sourceLineNo">468</span>   * @param fs<a name="line.468"></a>
+<span class="sourceLineNo">469</span>   * @param conf<a name="line.469"></a>
+<span class="sourceLineNo">470</span>   * @throws IOException<a name="line.470"></a>
+<span class="sourceLineNo">471</span>   */<a name="line.471"></a>
+<span class="sourceLineNo">472</span>  private static void archiveLogs(<a name="line.472"></a>
+<span class="sourceLineNo">473</span>      final List&lt;Path&gt; corruptedLogs,<a name="line.473"></a>
+<span class="sourceLineNo">474</span>      final List&lt;Path&gt; processedLogs, final Path oldLogDir,<a name="line.474"></a>
+<span class="sourceLineNo">475</span>      final FileSystem fs, final Configuration conf) throws IOException {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    final Path corruptDir = new Path(FSUtils.getRootDir(conf), conf.get(<a name="line.476"></a>
+<span class="sourceLineNo">477</span>        "hbase.regionserver.hlog.splitlog.corrupt.dir",  HConstants.CORRUPT_DIR_NAME));<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>    if (!fs.mkdirs(corruptDir)) {<a name="line.479"></a>
+<span class="sourceLineNo">480</span>      LOG.info("Unable to mkdir " + corruptDir);<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    }<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    fs.mkdirs(oldLogDir);<a name="line.482"></a>
+<span class="sourceLineNo">483</span><a name="line.483"></a>
+<span class="sourceLineNo">484</span>    // this method can get restarted or called multiple times for archiving<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    // the same log files.<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    for (Path corrupted : corruptedLogs) {<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      Path p = new Path(corruptDir, corrupted.getName());<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      if (fs.exists(corrupted)) {<a name="line.488"></a>
+<span class="sourceLineNo">489</span>        if (!fs.rename(corrupted, p)) {<a name="line.489"></a>
+<span class="sourceLineNo">490</span>          LOG.warn("Unable to move corrupted log " + corrupted + " to " + p);<a name="line.490"></a>
+<span class="sourceLineNo">491</span>        } else {<a name="line.491"></a>
+<span class="sourceLineNo">492</span>          LOG.warn("Moved corrupted log " + corrupted + " to " + p);<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>    }<a name="line.495"></a>
+<span class="sourceLineNo">496</span><a name="line.496"></a>
+<span class="sourceLineNo">497</span>    for (Path p : processedLogs) {<a name="line.497"></a>
+<span class="sourceLineNo">498</span>      Path newPath = FSHLog.getWALArchivePath(oldLogDir, p);<a name="line.498"></a>
+<span class="sourceLineNo">499</span>      if (fs.exists(p)) {<a name="line.499"></a>
+<span class="sourceLineNo">500</span>        if (!FSUtils.renameAndSetModifyTime(fs, p, newPath)) {<a name="line.500"></a>
+<span class="sourceLineNo">501</span>          LOG.warn("Unable to move  " + p + " to " + newPath);<a name="line.501"></a>
+<span class="sourceLineNo">502</span>        } else {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>          LOG.info("Archived processed log " + p + " to " + newPath);<a name="line.503"></a>
+<span class="sourceLineNo">504</span>        }<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      }<a name="line.505"></a>
+<span class="sourceLineNo">506</span>    }<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>  /**<a name="line.509"></a>
+<span class="sourceLineNo">510</span>   * Path to a file under RECOVERED_EDITS_DIR directory of the region found in<a name="line.510"></a>
+<span class="sourceLineNo">511</span>   * &lt;code&gt;logEntry&lt;/code&gt; named for the sequenceid in the passed<a name="line.511"></a>
+<span class="sourceLineNo">512</span>   * &lt;code&gt;logEntry&lt;/code&gt;: e.g. /hbase/some_table/2323432434/recovered.edits/2332.<a name="line.512"></a>
+<span class="sourceLineNo">513</span>   * This method also ensures existence of RECOVERED_EDITS_DIR under the region<a name="line.513"></a>
+<span class="sourceLineNo">514</span>   * creating it if necessary.<a name="line.514"></a>
+<span class="sourceLineNo">515</span>   * @param fs<a name="line.515"></a>
+<span class="sourceLineNo">516</span>   * @param logEntry<a name="line.516"></a>
+<span class="sourceLineNo">517</span>   * @param rootDir HBase root dir.<a name="line.517"></a>
+<span class="sourceLineNo">518</span>   * @param fileBeingSplit the file being split currently. Used to generate tmp file name.<a name="line.518"></a>
+<span class="sourceLineNo">519</span>   * @return Path to file into which to dump split log edits.<a name="line.519"></a>
+<span class="sourceLineNo">520</span>   * @throws IOException<a name="line.520"></a>
+<span class="sourceLineNo">521</span>   */<a name="line.521"></a>
+<span class="sourceLineNo">522</span>  @SuppressWarnings("deprecation")<a name="line.522"></a>
+<span class="sourceLineNo">523</span>  private static Path getRegionSplitEditsPath(final FileSystem fs,<a name="line.523"></a>
+<span class="sourceLineNo">524</span>      final Entry logEntry, final Path rootDir, FileStatus fileBeingSplit)<a name="line.524"></a>
+<span class="sourceLineNo">525</span>  throws IOException {<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    Path tableDir = FSUtils.getTableDir(rootDir, logEntry.getKey().getTablename());<a name="line.526"></a>
+<span class="sourceLineNo">527</span>    String encodedRegionName = Bytes.toString(logEntry.getKey().getEncodedRegionName());<a name="line.527"></a>
+<span class="sourceLineNo">528</span>    Path regiondir = HRegion.getRegionDir(tableDir, encodedRegionName);<a name="line.528"></a>
+<span class="sourceLineNo">529</span>    Path dir = getRegionDirRecoveredEditsDir(regiondir);<a name="line.529"></a>
+<span class="sourceLineNo">530</span><a name="line.530"></a>
+<span class="sourceLineNo">531</span>    if (!fs.exists(regiondir)) {<a name="line.531"></a>
+<span class="sourceLineNo">532</span>      LOG.info("This region's directory doesn't exist: "<a name="line.532"></a>
+<span class="sourceLineNo">533</span>          + regiondir.toString() + ". It is very likely that it was" +<a name="line.533"></a>
+<span class="sourceLineNo">534</span>          " already split so it's safe to discard those edits.");<a name="line.534"></a>
+<span class="sourceLineNo">535</span>      return null;<a name="line.535"></a>
+<span class="sourceLineNo">536</span>    }<a name="line.536"></a>
+<span class="sourceLineNo">537</span>    if (fs.exists(dir) &amp;&amp; fs.isFile(dir)) {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      Path tmp = new Path("/tmp");<a name="line.538"></a>
+<span class="sourceLineNo">539</span>      if (!fs.exists(tmp)) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span>        fs.mkdirs(tmp);<a name="line.540"></a>
+<span class="sourceLineNo">541</span>      }<a name="line.541"></a>
+<span class="sourceLineNo">542</span>      tmp = new Path(tmp,<a name="line.542"></a>
+<span class="sourceLineNo">543</span>        HConstants.RECOVERED_EDITS_DIR + "_" + encodedRegionName);<a name="line.543"></a>
+<span class="sourceLineNo">544</span>      LOG.warn("Found existing old file: " + dir + ". It could be some "<a name="line.544"></a>
+<span class="sourceLineNo">545</span>        + "leftover of an old installation. It should be a folder instead. "<a name="line.545"></a>
+<span class="sourceLineNo">546</span>        + "So moving it to " + tmp);<a name="line.546"></a>
+<span class="sourceLineNo">547</span>      if (!fs.rename(dir, tmp)) {<a name="line.547"></a>
+<span class="sourceLineNo">548</span>        LOG.warn("Failed to sideline old file " + dir);<a name="line.548"></a>
+<span class="sourceLineNo">549</span>      }<a name="line.549"></a>
+<span class="sourceLineNo">550</span>    }<a name="line.550"></a>
+<span class="sourceLineNo">551</span><a name="line.551"></a>
+<span class="sourceLineNo">552</span>    if (!fs.exists(dir) &amp;&amp; !fs.mkdirs(dir)) {<a nam

<TRUNCATED>

[29/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/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 1d64963..a232cc8 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
@@ -6980,880 +6980,882 @@
 <span class="sourceLineNo">6972</span>      lock(this.updatesLock.readLock());<a name="line.6972"></a>
 <span class="sourceLineNo">6973</span>      try {<a name="line.6973"></a>
 <span class="sourceLineNo">6974</span>        Result cpResult = doCoprocessorPreCall(op, mutation);<a name="line.6974"></a>
-<span class="sourceLineNo">6975</span>        if (cpResult != null) return cpResult;<a name="line.6975"></a>
-<span class="sourceLineNo">6976</span>        Durability effectiveDurability = getEffectiveDurability(mutation.getDurability());<a name="line.6976"></a>
-<span class="sourceLineNo">6977</span>        Map&lt;Store, List&lt;Cell&gt;&gt; forMemStore =<a name="line.6977"></a>
-<span class="sourceLineNo">6978</span>            new HashMap&lt;Store, List&lt;Cell&gt;&gt;(mutation.getFamilyCellMap().size());<a name="line.6978"></a>
-<span class="sourceLineNo">6979</span>        // Reckon Cells to apply to WAL --  in returned walEdit -- and what to add to memstore and<a name="line.6979"></a>
-<span class="sourceLineNo">6980</span>        // what to return back to the client (in 'forMemStore' and 'results' respectively).<a name="line.6980"></a>
-<span class="sourceLineNo">6981</span>        WALEdit walEdit = reckonDeltas(op, mutation, effectiveDurability, forMemStore, results);<a name="line.6981"></a>
-<span class="sourceLineNo">6982</span>        // Actually write to WAL now if a walEdit to apply.<a name="line.6982"></a>
-<span class="sourceLineNo">6983</span>        if (walEdit != null &amp;&amp; !walEdit.isEmpty()) {<a name="line.6983"></a>
-<span class="sourceLineNo">6984</span>          writeEntry = doWALAppend(walEdit, durability, nonceGroup, nonce);<a name="line.6984"></a>
-<span class="sourceLineNo">6985</span>        } else {<a name="line.6985"></a>
-<span class="sourceLineNo">6986</span>          // If walEdits is empty, it means we skipped the WAL; update counters and start an mvcc<a name="line.6986"></a>
-<span class="sourceLineNo">6987</span>          // transaction.<a name="line.6987"></a>
-<span class="sourceLineNo">6988</span>          recordMutationWithoutWal(mutation.getFamilyCellMap());<a name="line.6988"></a>
-<span class="sourceLineNo">6989</span>          writeEntry = mvcc.begin();<a name="line.6989"></a>
-<span class="sourceLineNo">6990</span>        }<a name="line.6990"></a>
-<span class="sourceLineNo">6991</span>        // Now write to MemStore. Do it a column family at a time.<a name="line.6991"></a>
-<span class="sourceLineNo">6992</span>        long sequenceId = writeEntry.getWriteNumber();<a name="line.6992"></a>
-<span class="sourceLineNo">6993</span>        for (Map.Entry&lt;Store, List&lt;Cell&gt;&gt; e: forMemStore.entrySet()) {<a name="line.6993"></a>
-<span class="sourceLineNo">6994</span>          accumulatedResultSize +=<a name="line.6994"></a>
-<span class="sourceLineNo">6995</span>              applyToMemstore(e.getKey(), e.getValue(), true, false, sequenceId);<a name="line.6995"></a>
-<span class="sourceLineNo">6996</span>        }<a name="line.6996"></a>
-<span class="sourceLineNo">6997</span>        mvcc.completeAndWait(writeEntry);<a name="line.6997"></a>
-<span class="sourceLineNo">6998</span>        writeEntry = null;<a name="line.6998"></a>
-<span class="sourceLineNo">6999</span>      } finally {<a name="line.6999"></a>
-<span class="sourceLineNo">7000</span>        this.updatesLock.readLock().unlock();<a name="line.7000"></a>
-<span class="sourceLineNo">7001</span>      }<a name="line.7001"></a>
-<span class="sourceLineNo">7002</span>      // If results is null, then client asked that we not return the calculated results.<a name="line.7002"></a>
-<span class="sourceLineNo">7003</span>      return results !=  null? Result.create(results): null;<a name="line.7003"></a>
-<span class="sourceLineNo">7004</span>    } finally {<a name="line.7004"></a>
-<span class="sourceLineNo">7005</span>      // Call complete always, even on success. doDelta is doing a Get READ_UNCOMMITTED when it goes<a name="line.7005"></a>
-<span class="sourceLineNo">7006</span>      // to get current value under an exclusive lock so no need so no need to wait to return to<a name="line.7006"></a>
-<span class="sourceLineNo">7007</span>      // the client. Means only way to read-your-own-increment or append is to come in with an<a name="line.7007"></a>
-<span class="sourceLineNo">7008</span>      // a 0 increment.<a name="line.7008"></a>
-<span class="sourceLineNo">7009</span>      if (writeEntry != null) mvcc.complete(writeEntry);<a name="line.7009"></a>
-<span class="sourceLineNo">7010</span>      rowLock.release();<a name="line.7010"></a>
-<span class="sourceLineNo">7011</span>      // Request a cache flush if over the limit.  Do it outside update lock.<a name="line.7011"></a>
-<span class="sourceLineNo">7012</span>      if (isFlushSize(this.addAndGetGlobalMemstoreSize(accumulatedResultSize))) requestFlush();<a name="line.7012"></a>
-<span class="sourceLineNo">7013</span>      closeRegionOperation(op);<a name="line.7013"></a>
-<span class="sourceLineNo">7014</span>      if (this.metricsRegion != null) {<a name="line.7014"></a>
-<span class="sourceLineNo">7015</span>        switch (op) {<a name="line.7015"></a>
-<span class="sourceLineNo">7016</span>          case INCREMENT:<a name="line.7016"></a>
-<span class="sourceLineNo">7017</span>            this.metricsRegion.updateIncrement();<a name="line.7017"></a>
-<span class="sourceLineNo">7018</span>            break;<a name="line.7018"></a>
-<span class="sourceLineNo">7019</span>          case APPEND:<a name="line.7019"></a>
-<span class="sourceLineNo">7020</span>            this.metricsRegion.updateAppend();<a name="line.7020"></a>
-<span class="sourceLineNo">7021</span>            break;<a name="line.7021"></a>
-<span class="sourceLineNo">7022</span>          default:<a name="line.7022"></a>
+<span class="sourceLineNo">6975</span>        if (cpResult != null) {<a name="line.6975"></a>
+<span class="sourceLineNo">6976</span>          return returnResults? cpResult: null;<a name="line.6976"></a>
+<span class="sourceLineNo">6977</span>        }<a name="line.6977"></a>
+<span class="sourceLineNo">6978</span>        Durability effectiveDurability = getEffectiveDurability(mutation.getDurability());<a name="line.6978"></a>
+<span class="sourceLineNo">6979</span>        Map&lt;Store, List&lt;Cell&gt;&gt; forMemStore =<a name="line.6979"></a>
+<span class="sourceLineNo">6980</span>            new HashMap&lt;Store, List&lt;Cell&gt;&gt;(mutation.getFamilyCellMap().size());<a name="line.6980"></a>
+<span class="sourceLineNo">6981</span>        // Reckon Cells to apply to WAL --  in returned walEdit -- and what to add to memstore and<a name="line.6981"></a>
+<span class="sourceLineNo">6982</span>        // what to return back to the client (in 'forMemStore' and 'results' respectively).<a name="line.6982"></a>
+<span class="sourceLineNo">6983</span>        WALEdit walEdit = reckonDeltas(op, mutation, effectiveDurability, forMemStore, results);<a name="line.6983"></a>
+<span class="sourceLineNo">6984</span>        // Actually write to WAL now if a walEdit to apply.<a name="line.6984"></a>
+<span class="sourceLineNo">6985</span>        if (walEdit != null &amp;&amp; !walEdit.isEmpty()) {<a name="line.6985"></a>
+<span class="sourceLineNo">6986</span>          writeEntry = doWALAppend(walEdit, durability, nonceGroup, nonce);<a name="line.6986"></a>
+<span class="sourceLineNo">6987</span>        } else {<a name="line.6987"></a>
+<span class="sourceLineNo">6988</span>          // If walEdits is empty, it means we skipped the WAL; update counters and start an mvcc<a name="line.6988"></a>
+<span class="sourceLineNo">6989</span>          // transaction.<a name="line.6989"></a>
+<span class="sourceLineNo">6990</span>          recordMutationWithoutWal(mutation.getFamilyCellMap());<a name="line.6990"></a>
+<span class="sourceLineNo">6991</span>          writeEntry = mvcc.begin();<a name="line.6991"></a>
+<span class="sourceLineNo">6992</span>        }<a name="line.6992"></a>
+<span class="sourceLineNo">6993</span>        // Now write to MemStore. Do it a column family at a time.<a name="line.6993"></a>
+<span class="sourceLineNo">6994</span>        long sequenceId = writeEntry.getWriteNumber();<a name="line.6994"></a>
+<span class="sourceLineNo">6995</span>        for (Map.Entry&lt;Store, List&lt;Cell&gt;&gt; e: forMemStore.entrySet()) {<a name="line.6995"></a>
+<span class="sourceLineNo">6996</span>          accumulatedResultSize +=<a name="line.6996"></a>
+<span class="sourceLineNo">6997</span>              applyToMemstore(e.getKey(), e.getValue(), true, false, sequenceId);<a name="line.6997"></a>
+<span class="sourceLineNo">6998</span>        }<a name="line.6998"></a>
+<span class="sourceLineNo">6999</span>        mvcc.completeAndWait(writeEntry);<a name="line.6999"></a>
+<span class="sourceLineNo">7000</span>        writeEntry = null;<a name="line.7000"></a>
+<span class="sourceLineNo">7001</span>      } finally {<a name="line.7001"></a>
+<span class="sourceLineNo">7002</span>        this.updatesLock.readLock().unlock();<a name="line.7002"></a>
+<span class="sourceLineNo">7003</span>      }<a name="line.7003"></a>
+<span class="sourceLineNo">7004</span>      // If results is null, then client asked that we not return the calculated results.<a name="line.7004"></a>
+<span class="sourceLineNo">7005</span>      return results != null &amp;&amp; returnResults? Result.create(results): null;<a name="line.7005"></a>
+<span class="sourceLineNo">7006</span>    } finally {<a name="line.7006"></a>
+<span class="sourceLineNo">7007</span>      // Call complete always, even on success. doDelta is doing a Get READ_UNCOMMITTED when it goes<a name="line.7007"></a>
+<span class="sourceLineNo">7008</span>      // to get current value under an exclusive lock so no need so no need to wait to return to<a name="line.7008"></a>
+<span class="sourceLineNo">7009</span>      // the client. Means only way to read-your-own-increment or append is to come in with an<a name="line.7009"></a>
+<span class="sourceLineNo">7010</span>      // a 0 increment.<a name="line.7010"></a>
+<span class="sourceLineNo">7011</span>      if (writeEntry != null) mvcc.complete(writeEntry);<a name="line.7011"></a>
+<span class="sourceLineNo">7012</span>      rowLock.release();<a name="line.7012"></a>
+<span class="sourceLineNo">7013</span>      // Request a cache flush if over the limit.  Do it outside update lock.<a name="line.7013"></a>
+<span class="sourceLineNo">7014</span>      if (isFlushSize(this.addAndGetGlobalMemstoreSize(accumulatedResultSize))) requestFlush();<a name="line.7014"></a>
+<span class="sourceLineNo">7015</span>      closeRegionOperation(op);<a name="line.7015"></a>
+<span class="sourceLineNo">7016</span>      if (this.metricsRegion != null) {<a name="line.7016"></a>
+<span class="sourceLineNo">7017</span>        switch (op) {<a name="line.7017"></a>
+<span class="sourceLineNo">7018</span>          case INCREMENT:<a name="line.7018"></a>
+<span class="sourceLineNo">7019</span>            this.metricsRegion.updateIncrement();<a name="line.7019"></a>
+<span class="sourceLineNo">7020</span>            break;<a name="line.7020"></a>
+<span class="sourceLineNo">7021</span>          case APPEND:<a name="line.7021"></a>
+<span class="sourceLineNo">7022</span>            this.metricsRegion.updateAppend();<a name="line.7022"></a>
 <span class="sourceLineNo">7023</span>            break;<a name="line.7023"></a>
-<span class="sourceLineNo">7024</span>        }<a name="line.7024"></a>
-<span class="sourceLineNo">7025</span>      }<a name="line.7025"></a>
-<span class="sourceLineNo">7026</span>    }<a name="line.7026"></a>
-<span class="sourceLineNo">7027</span>  }<a name="line.7027"></a>
-<span class="sourceLineNo">7028</span><a name="line.7028"></a>
-<span class="sourceLineNo">7029</span>  private WriteEntry doWALAppend(WALEdit walEdit, Durability durability, long nonceGroup,<a name="line.7029"></a>
-<span class="sourceLineNo">7030</span>      long nonce)<a name="line.7030"></a>
-<span class="sourceLineNo">7031</span>  throws IOException {<a name="line.7031"></a>
-<span class="sourceLineNo">7032</span>    return doWALAppend(walEdit, durability, WALKey.EMPTY_UUIDS, System.currentTimeMillis(),<a name="line.7032"></a>
-<span class="sourceLineNo">7033</span>      nonceGroup, nonce);<a name="line.7033"></a>
-<span class="sourceLineNo">7034</span>  }<a name="line.7034"></a>
-<span class="sourceLineNo">7035</span><a name="line.7035"></a>
-<span class="sourceLineNo">7036</span>  /**<a name="line.7036"></a>
-<span class="sourceLineNo">7037</span>   * @return writeEntry associated with this append<a name="line.7037"></a>
-<span class="sourceLineNo">7038</span>   */<a name="line.7038"></a>
-<span class="sourceLineNo">7039</span>  private WriteEntry doWALAppend(WALEdit walEdit, Durability durability, List&lt;UUID&gt; clusterIds,<a name="line.7039"></a>
-<span class="sourceLineNo">7040</span>      long now, long nonceGroup, long nonce)<a name="line.7040"></a>
-<span class="sourceLineNo">7041</span>  throws IOException {<a name="line.7041"></a>
-<span class="sourceLineNo">7042</span>    WriteEntry writeEntry = null;<a name="line.7042"></a>
-<span class="sourceLineNo">7043</span>    // Using default cluster id, as this can only happen in the originating cluster.<a name="line.7043"></a>
-<span class="sourceLineNo">7044</span>    // A slave cluster receives the final value (not the delta) as a Put. We use HLogKey<a name="line.7044"></a>
-<span class="sourceLineNo">7045</span>    // here instead of WALKey directly to support legacy coprocessors.<a name="line.7045"></a>
-<span class="sourceLineNo">7046</span>    WALKey walKey = new WALKey(this.getRegionInfo().getEncodedNameAsBytes(),<a name="line.7046"></a>
-<span class="sourceLineNo">7047</span>      this.htableDescriptor.getTableName(), WALKey.NO_SEQUENCE_ID, now, clusterIds,<a name="line.7047"></a>
-<span class="sourceLineNo">7048</span>      nonceGroup, nonce, mvcc);<a name="line.7048"></a>
-<span class="sourceLineNo">7049</span>    try {<a name="line.7049"></a>
-<span class="sourceLineNo">7050</span>      long txid =<a name="line.7050"></a>
-<span class="sourceLineNo">7051</span>        this.wal.append(this.htableDescriptor, this.getRegionInfo(), walKey, walEdit, true);<a name="line.7051"></a>
-<span class="sourceLineNo">7052</span>      // Call sync on our edit.<a name="line.7052"></a>
-<span class="sourceLineNo">7053</span>      if (txid != 0) sync(txid, durability);<a name="line.7053"></a>
-<span class="sourceLineNo">7054</span>      writeEntry = walKey.getWriteEntry();<a name="line.7054"></a>
-<span class="sourceLineNo">7055</span>    } catch (IOException ioe) {<a name="line.7055"></a>
-<span class="sourceLineNo">7056</span>      if (walKey != null) mvcc.complete(walKey.getWriteEntry());<a name="line.7056"></a>
-<span class="sourceLineNo">7057</span>      throw ioe;<a name="line.7057"></a>
-<span class="sourceLineNo">7058</span>    }<a name="line.7058"></a>
-<span class="sourceLineNo">7059</span>    return writeEntry;<a name="line.7059"></a>
-<span class="sourceLineNo">7060</span>  }<a name="line.7060"></a>
-<span class="sourceLineNo">7061</span><a name="line.7061"></a>
-<span class="sourceLineNo">7062</span>  /**<a name="line.7062"></a>
-<span class="sourceLineNo">7063</span>   * Do coprocessor pre-increment or pre-append call.<a name="line.7063"></a>
-<span class="sourceLineNo">7064</span>   * @return Result returned out of the coprocessor, which means bypass all further processing and<a name="line.7064"></a>
-<span class="sourceLineNo">7065</span>   *  return the proffered Result instead, or null which means proceed.<a name="line.7065"></a>
-<span class="sourceLineNo">7066</span>   */<a name="line.7066"></a>
-<span class="sourceLineNo">7067</span>  private Result doCoprocessorPreCall(final Operation op, final Mutation mutation)<a name="line.7067"></a>
-<span class="sourceLineNo">7068</span>  throws IOException {<a name="line.7068"></a>
-<span class="sourceLineNo">7069</span>    Result result = null;<a name="line.7069"></a>
-<span class="sourceLineNo">7070</span>    if (this.coprocessorHost != null) {<a name="line.7070"></a>
-<span class="sourceLineNo">7071</span>      switch(op) {<a name="line.7071"></a>
-<span class="sourceLineNo">7072</span>        case INCREMENT:<a name="line.7072"></a>
-<span class="sourceLineNo">7073</span>          result = this.coprocessorHost.preIncrementAfterRowLock((Increment)mutation);<a name="line.7073"></a>
-<span class="sourceLineNo">7074</span>          break;<a name="line.7074"></a>
-<span class="sourceLineNo">7075</span>        case APPEND:<a name="line.7075"></a>
-<span class="sourceLineNo">7076</span>          result = this.coprocessorHost.preAppendAfterRowLock((Append)mutation);<a name="line.7076"></a>
-<span class="sourceLineNo">7077</span>          break;<a name="line.7077"></a>
-<span class="sourceLineNo">7078</span>        default: throw new UnsupportedOperationException(op.toString());<a name="line.7078"></a>
-<span class="sourceLineNo">7079</span>      }<a name="line.7079"></a>
-<span class="sourceLineNo">7080</span>    }<a name="line.7080"></a>
-<span class="sourceLineNo">7081</span>    return result;<a name="line.7081"></a>
-<span class="sourceLineNo">7082</span>  }<a name="line.7082"></a>
-<span class="sourceLineNo">7083</span><a name="line.7083"></a>
-<span class="sourceLineNo">7084</span>  /**<a name="line.7084"></a>
-<span class="sourceLineNo">7085</span>   * Reckon the Cells to apply to WAL, memstore, and to return to the Client; these Sets are not<a name="line.7085"></a>
-<span class="sourceLineNo">7086</span>   * always the same dependent on whether to write WAL or if the amount to increment is zero (in<a name="line.7086"></a>
-<span class="sourceLineNo">7087</span>   * this case we write back nothing, just return latest Cell value to the client).<a name="line.7087"></a>
-<span class="sourceLineNo">7088</span>   *<a name="line.7088"></a>
-<span class="sourceLineNo">7089</span>   * @param results Fill in here what goes back to the Client if it is non-null (if null, client<a name="line.7089"></a>
-<span class="sourceLineNo">7090</span>   *  doesn't want results).<a name="line.7090"></a>
-<span class="sourceLineNo">7091</span>   * @param forMemStore Fill in here what to apply to the MemStore (by Store).<a name="line.7091"></a>
-<span class="sourceLineNo">7092</span>   * @return A WALEdit to apply to WAL or null if we are to skip the WAL.<a name="line.7092"></a>
-<span class="sourceLineNo">7093</span>   */<a name="line.7093"></a>
-<span class="sourceLineNo">7094</span>  private WALEdit reckonDeltas(final Operation op, final Mutation mutation,<a name="line.7094"></a>
-<span class="sourceLineNo">7095</span>      final Durability effectiveDurability, final Map&lt;Store, List&lt;Cell&gt;&gt; forMemStore,<a name="line.7095"></a>
-<span class="sourceLineNo">7096</span>      final List&lt;Cell&gt; results)<a name="line.7096"></a>
-<span class="sourceLineNo">7097</span>  throws IOException {<a name="line.7097"></a>
-<span class="sourceLineNo">7098</span>    WALEdit walEdit = null;<a name="line.7098"></a>
-<span class="sourceLineNo">7099</span>    long now = EnvironmentEdgeManager.currentTime();<a name="line.7099"></a>
-<span class="sourceLineNo">7100</span>    final boolean writeToWAL = effectiveDurability != Durability.SKIP_WAL;<a name="line.7100"></a>
-<span class="sourceLineNo">7101</span>    // Process a Store/family at a time.<a name="line.7101"></a>
-<span class="sourceLineNo">7102</span>    for (Map.Entry&lt;byte [], List&lt;Cell&gt;&gt; entry: mutation.getFamilyCellMap().entrySet()) {<a name="line.7102"></a>
-<span class="sourceLineNo">7103</span>      final byte [] columnFamilyName = entry.getKey();<a name="line.7103"></a>
-<span class="sourceLineNo">7104</span>      List&lt;Cell&gt; deltas = entry.getValue();<a name="line.7104"></a>
-<span class="sourceLineNo">7105</span>      Store store = this.stores.get(columnFamilyName);<a name="line.7105"></a>
-<span class="sourceLineNo">7106</span>      // Reckon for the Store what to apply to WAL and MemStore.<a name="line.7106"></a>
-<span class="sourceLineNo">7107</span>      List&lt;Cell&gt; toApply =<a name="line.7107"></a>
-<span class="sourceLineNo">7108</span>        reckonDeltasByStore(store, op, mutation, effectiveDurability, now, deltas, results);<a name="line.7108"></a>
-<span class="sourceLineNo">7109</span>      if (!toApply.isEmpty()) {<a name="line.7109"></a>
-<span class="sourceLineNo">7110</span>        forMemStore.put(store, toApply);<a name="line.7110"></a>
-<span class="sourceLineNo">7111</span>        if (writeToWAL) {<a name="line.7111"></a>
-<span class="sourceLineNo">7112</span>          if (walEdit == null) {<a name="line.7112"></a>
-<span class="sourceLineNo">7113</span>            walEdit = new WALEdit();<a name="line.7113"></a>
-<span class="sourceLineNo">7114</span>          }<a name="line.7114"></a>
-<span class="sourceLineNo">7115</span>          walEdit.getCells().addAll(toApply);<a name="line.7115"></a>
-<span class="sourceLineNo">7116</span>        }<a name="line.7116"></a>
-<span class="sourceLineNo">7117</span>      }<a name="line.7117"></a>
-<span class="sourceLineNo">7118</span>    }<a name="line.7118"></a>
-<span class="sourceLineNo">7119</span>    return walEdit;<a name="line.7119"></a>
-<span class="sourceLineNo">7120</span>  }<a name="line.7120"></a>
-<span class="sourceLineNo">7121</span><a name="line.7121"></a>
-<span class="sourceLineNo">7122</span>  /**<a name="line.7122"></a>
-<span class="sourceLineNo">7123</span>   * Reckon the Cells to apply to WAL, memstore, and to return to the Client in passed<a name="line.7123"></a>
-<span class="sourceLineNo">7124</span>   * column family/Store.<a name="line.7124"></a>
-<span class="sourceLineNo">7125</span>   *<a name="line.7125"></a>
-<span class="sourceLineNo">7126</span>   * Does Get of current value and then adds passed in deltas for this Store returning the result.<a name="line.7126"></a>
+<span class="sourceLineNo">7024</span>          default:<a name="line.7024"></a>
+<span class="sourceLineNo">7025</span>            break;<a name="line.7025"></a>
+<span class="sourceLineNo">7026</span>        }<a name="line.7026"></a>
+<span class="sourceLineNo">7027</span>      }<a name="line.7027"></a>
+<span class="sourceLineNo">7028</span>    }<a name="line.7028"></a>
+<span class="sourceLineNo">7029</span>  }<a name="line.7029"></a>
+<span class="sourceLineNo">7030</span><a name="line.7030"></a>
+<span class="sourceLineNo">7031</span>  private WriteEntry doWALAppend(WALEdit walEdit, Durability durability, long nonceGroup,<a name="line.7031"></a>
+<span class="sourceLineNo">7032</span>      long nonce)<a name="line.7032"></a>
+<span class="sourceLineNo">7033</span>  throws IOException {<a name="line.7033"></a>
+<span class="sourceLineNo">7034</span>    return doWALAppend(walEdit, durability, WALKey.EMPTY_UUIDS, System.currentTimeMillis(),<a name="line.7034"></a>
+<span class="sourceLineNo">7035</span>      nonceGroup, nonce);<a name="line.7035"></a>
+<span class="sourceLineNo">7036</span>  }<a name="line.7036"></a>
+<span class="sourceLineNo">7037</span><a name="line.7037"></a>
+<span class="sourceLineNo">7038</span>  /**<a name="line.7038"></a>
+<span class="sourceLineNo">7039</span>   * @return writeEntry associated with this append<a name="line.7039"></a>
+<span class="sourceLineNo">7040</span>   */<a name="line.7040"></a>
+<span class="sourceLineNo">7041</span>  private WriteEntry doWALAppend(WALEdit walEdit, Durability durability, List&lt;UUID&gt; clusterIds,<a name="line.7041"></a>
+<span class="sourceLineNo">7042</span>      long now, long nonceGroup, long nonce)<a name="line.7042"></a>
+<span class="sourceLineNo">7043</span>  throws IOException {<a name="line.7043"></a>
+<span class="sourceLineNo">7044</span>    WriteEntry writeEntry = null;<a name="line.7044"></a>
+<span class="sourceLineNo">7045</span>    // Using default cluster id, as this can only happen in the originating cluster.<a name="line.7045"></a>
+<span class="sourceLineNo">7046</span>    // A slave cluster receives the final value (not the delta) as a Put. We use HLogKey<a name="line.7046"></a>
+<span class="sourceLineNo">7047</span>    // here instead of WALKey directly to support legacy coprocessors.<a name="line.7047"></a>
+<span class="sourceLineNo">7048</span>    WALKey walKey = new WALKey(this.getRegionInfo().getEncodedNameAsBytes(),<a name="line.7048"></a>
+<span class="sourceLineNo">7049</span>      this.htableDescriptor.getTableName(), WALKey.NO_SEQUENCE_ID, now, clusterIds,<a name="line.7049"></a>
+<span class="sourceLineNo">7050</span>      nonceGroup, nonce, mvcc);<a name="line.7050"></a>
+<span class="sourceLineNo">7051</span>    try {<a name="line.7051"></a>
+<span class="sourceLineNo">7052</span>      long txid =<a name="line.7052"></a>
+<span class="sourceLineNo">7053</span>        this.wal.append(this.htableDescriptor, this.getRegionInfo(), walKey, walEdit, true);<a name="line.7053"></a>
+<span class="sourceLineNo">7054</span>      // Call sync on our edit.<a name="line.7054"></a>
+<span class="sourceLineNo">7055</span>      if (txid != 0) sync(txid, durability);<a name="line.7055"></a>
+<span class="sourceLineNo">7056</span>      writeEntry = walKey.getWriteEntry();<a name="line.7056"></a>
+<span class="sourceLineNo">7057</span>    } catch (IOException ioe) {<a name="line.7057"></a>
+<span class="sourceLineNo">7058</span>      if (walKey != null) mvcc.complete(walKey.getWriteEntry());<a name="line.7058"></a>
+<span class="sourceLineNo">7059</span>      throw ioe;<a name="line.7059"></a>
+<span class="sourceLineNo">7060</span>    }<a name="line.7060"></a>
+<span class="sourceLineNo">7061</span>    return writeEntry;<a name="line.7061"></a>
+<span class="sourceLineNo">7062</span>  }<a name="line.7062"></a>
+<span class="sourceLineNo">7063</span><a name="line.7063"></a>
+<span class="sourceLineNo">7064</span>  /**<a name="line.7064"></a>
+<span class="sourceLineNo">7065</span>   * Do coprocessor pre-increment or pre-append call.<a name="line.7065"></a>
+<span class="sourceLineNo">7066</span>   * @return Result returned out of the coprocessor, which means bypass all further processing and<a name="line.7066"></a>
+<span class="sourceLineNo">7067</span>   *  return the proffered Result instead, or null which means proceed.<a name="line.7067"></a>
+<span class="sourceLineNo">7068</span>   */<a name="line.7068"></a>
+<span class="sourceLineNo">7069</span>  private Result doCoprocessorPreCall(final Operation op, final Mutation mutation)<a name="line.7069"></a>
+<span class="sourceLineNo">7070</span>  throws IOException {<a name="line.7070"></a>
+<span class="sourceLineNo">7071</span>    Result result = null;<a name="line.7071"></a>
+<span class="sourceLineNo">7072</span>    if (this.coprocessorHost != null) {<a name="line.7072"></a>
+<span class="sourceLineNo">7073</span>      switch(op) {<a name="line.7073"></a>
+<span class="sourceLineNo">7074</span>        case INCREMENT:<a name="line.7074"></a>
+<span class="sourceLineNo">7075</span>          result = this.coprocessorHost.preIncrementAfterRowLock((Increment)mutation);<a name="line.7075"></a>
+<span class="sourceLineNo">7076</span>          break;<a name="line.7076"></a>
+<span class="sourceLineNo">7077</span>        case APPEND:<a name="line.7077"></a>
+<span class="sourceLineNo">7078</span>          result = this.coprocessorHost.preAppendAfterRowLock((Append)mutation);<a name="line.7078"></a>
+<span class="sourceLineNo">7079</span>          break;<a name="line.7079"></a>
+<span class="sourceLineNo">7080</span>        default: throw new UnsupportedOperationException(op.toString());<a name="line.7080"></a>
+<span class="sourceLineNo">7081</span>      }<a name="line.7081"></a>
+<span class="sourceLineNo">7082</span>    }<a name="line.7082"></a>
+<span class="sourceLineNo">7083</span>    return result;<a name="line.7083"></a>
+<span class="sourceLineNo">7084</span>  }<a name="line.7084"></a>
+<span class="sourceLineNo">7085</span><a name="line.7085"></a>
+<span class="sourceLineNo">7086</span>  /**<a name="line.7086"></a>
+<span class="sourceLineNo">7087</span>   * Reckon the Cells to apply to WAL, memstore, and to return to the Client; these Sets are not<a name="line.7087"></a>
+<span class="sourceLineNo">7088</span>   * always the same dependent on whether to write WAL or if the amount to increment is zero (in<a name="line.7088"></a>
+<span class="sourceLineNo">7089</span>   * this case we write back nothing, just return latest Cell value to the client).<a name="line.7089"></a>
+<span class="sourceLineNo">7090</span>   *<a name="line.7090"></a>
+<span class="sourceLineNo">7091</span>   * @param results Fill in here what goes back to the Client if it is non-null (if null, client<a name="line.7091"></a>
+<span class="sourceLineNo">7092</span>   *  doesn't want results).<a name="line.7092"></a>
+<span class="sourceLineNo">7093</span>   * @param forMemStore Fill in here what to apply to the MemStore (by Store).<a name="line.7093"></a>
+<span class="sourceLineNo">7094</span>   * @return A WALEdit to apply to WAL or null if we are to skip the WAL.<a name="line.7094"></a>
+<span class="sourceLineNo">7095</span>   */<a name="line.7095"></a>
+<span class="sourceLineNo">7096</span>  private WALEdit reckonDeltas(final Operation op, final Mutation mutation,<a name="line.7096"></a>
+<span class="sourceLineNo">7097</span>      final Durability effectiveDurability, final Map&lt;Store, List&lt;Cell&gt;&gt; forMemStore,<a name="line.7097"></a>
+<span class="sourceLineNo">7098</span>      final List&lt;Cell&gt; results)<a name="line.7098"></a>
+<span class="sourceLineNo">7099</span>  throws IOException {<a name="line.7099"></a>
+<span class="sourceLineNo">7100</span>    WALEdit walEdit = null;<a name="line.7100"></a>
+<span class="sourceLineNo">7101</span>    long now = EnvironmentEdgeManager.currentTime();<a name="line.7101"></a>
+<span class="sourceLineNo">7102</span>    final boolean writeToWAL = effectiveDurability != Durability.SKIP_WAL;<a name="line.7102"></a>
+<span class="sourceLineNo">7103</span>    // Process a Store/family at a time.<a name="line.7103"></a>
+<span class="sourceLineNo">7104</span>    for (Map.Entry&lt;byte [], List&lt;Cell&gt;&gt; entry: mutation.getFamilyCellMap().entrySet()) {<a name="line.7104"></a>
+<span class="sourceLineNo">7105</span>      final byte [] columnFamilyName = entry.getKey();<a name="line.7105"></a>
+<span class="sourceLineNo">7106</span>      List&lt;Cell&gt; deltas = entry.getValue();<a name="line.7106"></a>
+<span class="sourceLineNo">7107</span>      Store store = this.stores.get(columnFamilyName);<a name="line.7107"></a>
+<span class="sourceLineNo">7108</span>      // Reckon for the Store what to apply to WAL and MemStore.<a name="line.7108"></a>
+<span class="sourceLineNo">7109</span>      List&lt;Cell&gt; toApply =<a name="line.7109"></a>
+<span class="sourceLineNo">7110</span>        reckonDeltasByStore(store, op, mutation, effectiveDurability, now, deltas, results);<a name="line.7110"></a>
+<span class="sourceLineNo">7111</span>      if (!toApply.isEmpty()) {<a name="line.7111"></a>
+<span class="sourceLineNo">7112</span>        forMemStore.put(store, toApply);<a name="line.7112"></a>
+<span class="sourceLineNo">7113</span>        if (writeToWAL) {<a name="line.7113"></a>
+<span class="sourceLineNo">7114</span>          if (walEdit == null) {<a name="line.7114"></a>
+<span class="sourceLineNo">7115</span>            walEdit = new WALEdit();<a name="line.7115"></a>
+<span class="sourceLineNo">7116</span>          }<a name="line.7116"></a>
+<span class="sourceLineNo">7117</span>          walEdit.getCells().addAll(toApply);<a name="line.7117"></a>
+<span class="sourceLineNo">7118</span>        }<a name="line.7118"></a>
+<span class="sourceLineNo">7119</span>      }<a name="line.7119"></a>
+<span class="sourceLineNo">7120</span>    }<a name="line.7120"></a>
+<span class="sourceLineNo">7121</span>    return walEdit;<a name="line.7121"></a>
+<span class="sourceLineNo">7122</span>  }<a name="line.7122"></a>
+<span class="sourceLineNo">7123</span><a name="line.7123"></a>
+<span class="sourceLineNo">7124</span>  /**<a name="line.7124"></a>
+<span class="sourceLineNo">7125</span>   * Reckon the Cells to apply to WAL, memstore, and to return to the Client in passed<a name="line.7125"></a>
+<span class="sourceLineNo">7126</span>   * column family/Store.<a name="line.7126"></a>
 <span class="sourceLineNo">7127</span>   *<a name="line.7127"></a>
-<span class="sourceLineNo">7128</span>   * @param op Whether Increment or Append<a name="line.7128"></a>
-<span class="sourceLineNo">7129</span>   * @param mutation The encompassing Mutation object<a name="line.7129"></a>
-<span class="sourceLineNo">7130</span>   * @param deltas Changes to apply to this Store; either increment amount or data to append<a name="line.7130"></a>
-<span class="sourceLineNo">7131</span>   * @param results In here we accumulate all the Cells we are to return to the client; this List<a name="line.7131"></a>
-<span class="sourceLineNo">7132</span>   *  can be larger than what we return in case where delta is zero; i.e. don't write<a name="line.7132"></a>
-<span class="sourceLineNo">7133</span>   *  out new values, just return current value. If null, client doesn't want results returned.<a name="line.7133"></a>
-<span class="sourceLineNo">7134</span>   * @return Resulting Cells after &lt;code&gt;deltas&lt;/code&gt; have been applied to current<a name="line.7134"></a>
-<span class="sourceLineNo">7135</span>   *  values. Side effect is our filling out of the &lt;code&gt;results&lt;/code&gt; List.<a name="line.7135"></a>
-<span class="sourceLineNo">7136</span>   */<a name="line.7136"></a>
-<span class="sourceLineNo">7137</span>  private List&lt;Cell&gt; reckonDeltasByStore(final Store store, final Operation op,<a name="line.7137"></a>
-<span class="sourceLineNo">7138</span>      final Mutation mutation, final Durability effectiveDurability, final long now,<a name="line.7138"></a>
-<span class="sourceLineNo">7139</span>      final List&lt;Cell&gt; deltas, final List&lt;Cell&gt; results)<a name="line.7139"></a>
-<span class="sourceLineNo">7140</span>  throws IOException {<a name="line.7140"></a>
-<span class="sourceLineNo">7141</span>    byte [] columnFamily = store.getFamily().getName();<a name="line.7141"></a>
-<span class="sourceLineNo">7142</span>    List&lt;Cell&gt; toApply = new ArrayList&lt;Cell&gt;(deltas.size());<a name="line.7142"></a>
-<span class="sourceLineNo">7143</span>    // Get previous values for all columns in this family.<a name="line.7143"></a>
-<span class="sourceLineNo">7144</span>    List&lt;Cell&gt; currentValues = get(mutation, store, deltas,<a name="line.7144"></a>
-<span class="sourceLineNo">7145</span>        null/*Default IsolationLevel*/,<a name="line.7145"></a>
-<span class="sourceLineNo">7146</span>        op == Operation.INCREMENT? ((Increment)mutation).getTimeRange(): null);<a name="line.7146"></a>
-<span class="sourceLineNo">7147</span>    // Iterate the input columns and update existing values if they were found, otherwise<a name="line.7147"></a>
-<span class="sourceLineNo">7148</span>    // add new column initialized to the delta amount<a name="line.7148"></a>
-<span class="sourceLineNo">7149</span>    int currentValuesIndex = 0;<a name="line.7149"></a>
-<span class="sourceLineNo">7150</span>    for (int i = 0; i &lt; deltas.size(); i++) {<a name="line.7150"></a>
-<span class="sourceLineNo">7151</span>      Cell delta = deltas.get(i);<a name="line.7151"></a>
-<span class="sourceLineNo">7152</span>      Cell currentValue = null;<a name="line.7152"></a>
-<span class="sourceLineNo">7153</span>      if (currentValuesIndex &lt; currentValues.size() &amp;&amp;<a name="line.7153"></a>
-<span class="sourceLineNo">7154</span>          CellUtil.matchingQualifier(currentValues.get(currentValuesIndex), delta)) {<a name="line.7154"></a>
-<span class="sourceLineNo">7155</span>        currentValue = currentValues.get(currentValuesIndex);<a name="line.7155"></a>
-<span class="sourceLineNo">7156</span>        if (i &lt; (deltas.size() - 1) &amp;&amp; !CellUtil.matchingQualifier(delta, deltas.get(i + 1))) {<a name="line.7156"></a>
-<span class="sourceLineNo">7157</span>          currentValuesIndex++;<a name="line.7157"></a>
-<span class="sourceLineNo">7158</span>        }<a name="line.7158"></a>
-<span class="sourceLineNo">7159</span>      }<a name="line.7159"></a>
-<span class="sourceLineNo">7160</span>      // Switch on whether this an increment or an append building the new Cell to apply.<a name="line.7160"></a>
-<span class="sourceLineNo">7161</span>      Cell newCell = null;<a name="line.7161"></a>
-<span class="sourceLineNo">7162</span>      MutationType mutationType = null;<a name="line.7162"></a>
-<span class="sourceLineNo">7163</span>      boolean apply = true;<a name="line.7163"></a>
-<span class="sourceLineNo">7164</span>      switch (op) {<a name="line.7164"></a>
-<span class="sourceLineNo">7165</span>        case INCREMENT:<a name="line.7165"></a>
-<span class="sourceLineNo">7166</span>          mutationType = MutationType.INCREMENT;<a name="line.7166"></a>
-<span class="sourceLineNo">7167</span>          // If delta amount to apply is 0, don't write WAL or MemStore.<a name="line.7167"></a>
-<span class="sourceLineNo">7168</span>          long deltaAmount = getLongValue(delta);<a name="line.7168"></a>
-<span class="sourceLineNo">7169</span>          apply = deltaAmount != 0;<a name="line.7169"></a>
-<span class="sourceLineNo">7170</span>          newCell = reckonIncrement(delta, deltaAmount, currentValue, columnFamily, now,<a name="line.7170"></a>
-<span class="sourceLineNo">7171</span>            (Increment)mutation);<a name="line.7171"></a>
-<span class="sourceLineNo">7172</span>          break;<a name="line.7172"></a>
-<span class="sourceLineNo">7173</span>        case APPEND:<a name="line.7173"></a>
-<span class="sourceLineNo">7174</span>          mutationType = MutationType.APPEND;<a name="line.7174"></a>
-<span class="sourceLineNo">7175</span>          // Always apply Append. TODO: Does empty delta value mean reset Cell? It seems to.<a name="line.7175"></a>
-<span class="sourceLineNo">7176</span>          newCell = reckonAppend(delta, currentValue, now, (Append)mutation);<a name="line.7176"></a>
-<span class="sourceLineNo">7177</span>          break;<a name="line.7177"></a>
-<span class="sourceLineNo">7178</span>        default: throw new UnsupportedOperationException(op.toString());<a name="line.7178"></a>
-<span class="sourceLineNo">7179</span>      }<a name="line.7179"></a>
-<span class="sourceLineNo">7180</span><a name="line.7180"></a>
-<span class="sourceLineNo">7181</span>      // Give coprocessors a chance to update the new cell<a name="line.7181"></a>
-<span class="sourceLineNo">7182</span>      if (coprocessorHost != null) {<a name="line.7182"></a>
-<span class="sourceLineNo">7183</span>        newCell =<a name="line.7183"></a>
-<span class="sourceLineNo">7184</span>            coprocessorHost.postMutationBeforeWAL(mutationType, mutation, currentValue, newCell);<a name="line.7184"></a>
-<span class="sourceLineNo">7185</span>      }<a name="line.7185"></a>
-<span class="sourceLineNo">7186</span>      // If apply, we need to update memstore/WAL with new value; add it toApply.<a name="line.7186"></a>
-<span class="sourceLineNo">7187</span>      if (apply) {<a name="line.7187"></a>
-<span class="sourceLineNo">7188</span>        toApply.add(newCell);<a name="line.7188"></a>
-<span class="sourceLineNo">7189</span>      }<a name="line.7189"></a>
-<span class="sourceLineNo">7190</span>      // Add to results to get returned to the Client. If null, cilent does not want results.<a name="line.7190"></a>
-<span class="sourceLineNo">7191</span>      if (results != null) {<a name="line.7191"></a>
-<span class="sourceLineNo">7192</span>        results.add(newCell);<a name="line.7192"></a>
-<span class="sourceLineNo">7193</span>      }<a name="line.7193"></a>
-<span class="sourceLineNo">7194</span>    }<a name="line.7194"></a>
-<span class="sourceLineNo">7195</span>    return toApply;<a name="line.7195"></a>
-<span class="sourceLineNo">7196</span>  }<a name="line.7196"></a>
-<span class="sourceLineNo">7197</span><a name="line.7197"></a>
-<span class="sourceLineNo">7198</span>  /**<a name="line.7198"></a>
-<span class="sourceLineNo">7199</span>   * Calculate new Increment Cell.<a name="line.7199"></a>
-<span class="sourceLineNo">7200</span>   * @return New Increment Cell with delta applied to currentValue if currentValue is not null;<a name="line.7200"></a>
-<span class="sourceLineNo">7201</span>   *  otherwise, a new Cell with the delta set as its value.<a name="line.7201"></a>
-<span class="sourceLineNo">7202</span>   */<a name="line.7202"></a>
-<span class="sourceLineNo">7203</span>  private Cell reckonIncrement(final Cell delta, final long deltaAmount, final Cell currentValue,<a name="line.7203"></a>
-<span class="sourceLineNo">7204</span>      byte [] columnFamily, final long now, Mutation mutation)<a name="line.7204"></a>
-<span class="sourceLineNo">7205</span>  throws IOException {<a name="line.7205"></a>
-<span class="sourceLineNo">7206</span>    // Forward any tags found on the delta.<a name="line.7206"></a>
-<span class="sourceLineNo">7207</span>    List&lt;Tag&gt; tags = TagUtil.carryForwardTags(delta);<a name="line.7207"></a>
-<span class="sourceLineNo">7208</span>    long newValue = deltaAmount;<a name="line.7208"></a>
-<span class="sourceLineNo">7209</span>    long ts = now;<a name="line.7209"></a>
-<span class="sourceLineNo">7210</span>    if (currentValue != null) {<a name="line.7210"></a>
-<span class="sourceLineNo">7211</span>      tags = TagUtil.carryForwardTags(tags, currentValue);<a name="line.7211"></a>
-<span class="sourceLineNo">7212</span>      ts = Math.max(now, currentValue.getTimestamp());<a name="line.7212"></a>
-<span class="sourceLineNo">7213</span>      newValue += getLongValue(currentValue);<a name="line.7213"></a>
-<span class="sourceLineNo">7214</span>    }<a name="line.7214"></a>
-<span class="sourceLineNo">7215</span>    // Now make up the new Cell. TODO: FIX. This is carnel knowledge of how KeyValues are made...<a name="line.7215"></a>
-<span class="sourceLineNo">7216</span>    // doesn't work well with offheaping or if we are doing a different Cell type.<a name="line.7216"></a>
-<span class="sourceLineNo">7217</span>    byte [] incrementAmountInBytes = Bytes.toBytes(newValue);<a name="line.7217"></a>
-<span class="sourceLineNo">7218</span>    tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7218"></a>
-<span class="sourceLineNo">7219</span>    byte [] row = mutation.getRow();<a name="line.7219"></a>
-<span class="sourceLineNo">7220</span>    return new KeyValue(row, 0, row.length,<a name="line.7220"></a>
-<span class="sourceLineNo">7221</span>      columnFamily, 0, columnFamily.length,<a name="line.7221"></a>
-<span class="sourceLineNo">7222</span>      delta.getQualifierArray(), delta.getQualifierOffset(), delta.getQualifierLength(),<a name="line.7222"></a>
-<span class="sourceLineNo">7223</span>      ts, KeyValue.Type.Put,<a name="line.7223"></a>
-<span class="sourceLineNo">7224</span>      incrementAmountInBytes, 0, incrementAmountInBytes.length,<a name="line.7224"></a>
-<span class="sourceLineNo">7225</span>      tags);<a name="line.7225"></a>
-<span class="sourceLineNo">7226</span>  }<a name="line.7226"></a>
-<span class="sourceLineNo">7227</span><a name="line.7227"></a>
-<span class="sourceLineNo">7228</span>  private Cell reckonAppend(final Cell delta, final Cell currentValue, final long now,<a name="line.7228"></a>
-<span class="sourceLineNo">7229</span>      Append mutation)<a name="line.7229"></a>
-<span class="sourceLineNo">7230</span>  throws IOException {<a name="line.7230"></a>
-<span class="sourceLineNo">7231</span>    // Forward any tags found on the delta.<a name="line.7231"></a>
-<span class="sourceLineNo">7232</span>    List&lt;Tag&gt; tags = TagUtil.carryForwardTags(delta);<a name="line.7232"></a>
-<span class="sourceLineNo">7233</span>    long ts = now;<a name="line.7233"></a>
-<span class="sourceLineNo">7234</span>    Cell newCell = null;<a name="line.7234"></a>
-<span class="sourceLineNo">7235</span>    byte [] row = mutation.getRow();<a name="line.7235"></a>
-<span class="sourceLineNo">7236</span>    if (currentValue != null) {<a name="line.7236"></a>
-<span class="sourceLineNo">7237</span>      tags = TagUtil.carryForwardTags(tags, currentValue);<a name="line.7237"></a>
-<span class="sourceLineNo">7238</span>      ts = Math.max(now, currentValue.getTimestamp());<a name="line.7238"></a>
-<span class="sourceLineNo">7239</span>      tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7239"></a>
-<span class="sourceLineNo">7240</span>      byte[] tagBytes = TagUtil.fromList(tags);<a name="line.7240"></a>
-<span class="sourceLineNo">7241</span>      // Allocate an empty cell and copy in all parts.<a name="line.7241"></a>
-<span class="sourceLineNo">7242</span>      // TODO: This is intimate knowledge of how a KeyValue is made. Undo!!! Prevents our doing<a name="line.7242"></a>
-<span class="sourceLineNo">7243</span>      // other Cell types. Copying on-heap too if an off-heap Cell.<a name="line.7243"></a>
-<span class="sourceLineNo">7244</span>      newCell = new KeyValue(row.length, delta.getFamilyLength(),<a name="line.7244"></a>
-<span class="sourceLineNo">7245</span>        delta.getQualifierLength(), ts, KeyValue.Type.Put,<a name="line.7245"></a>
-<span class="sourceLineNo">7246</span>        delta.getValueLength() + currentValue.getValueLength(),<a name="line.7246"></a>
-<span class="sourceLineNo">7247</span>        tagBytes == null? 0: tagBytes.length);<a name="line.7247"></a>
-<span class="sourceLineNo">7248</span>      // Copy in row, family, and qualifier<a name="line.7248"></a>
-<span class="sourceLineNo">7249</span>      System.arraycopy(row, 0, newCell.getRowArray(), newCell.getRowOffset(), row.length);<a name="line.7249"></a>
-<span class="sourceLineNo">7250</span>      System.arraycopy(delta.getFamilyArray(), delta.getFamilyOffset(),<a name="line.7250"></a>
-<span class="sourceLineNo">7251</span>          newCell.getFamilyArray(), newCell.getFamilyOffset(), delta.getFamilyLength());<a name="line.7251"></a>
-<span class="sourceLineNo">7252</span>      System.arraycopy(delta.getQualifierArray(), delta.getQualifierOffset(),<a name="line.7252"></a>
-<span class="sourceLineNo">7253</span>          newCell.getQualifierArray(), newCell.getQualifierOffset(), delta.getQualifierLength());<a name="line.7253"></a>
-<span class="sourceLineNo">7254</span>      // Copy in the value<a name="line.7254"></a>
-<span class="sourceLineNo">7255</span>      CellUtil.copyValueTo(currentValue, newCell.getValueArray(), newCell.getValueOffset());<a name="line.7255"></a>
-<span class="sourceLineNo">7256</span>      System.arraycopy(delta.getValueArray(), delta.getValueOffset(),<a name="line.7256"></a>
-<span class="sourceLineNo">7257</span>          newCell.getValueArray(), newCell.getValueOffset() + currentValue.getValueLength(),<a name="line.7257"></a>
-<span class="sourceLineNo">7258</span>          delta.getValueLength());<a name="line.7258"></a>
-<span class="sourceLineNo">7259</span>      // Copy in tag data<a name="line.7259"></a>
-<span class="sourceLineNo">7260</span>      if (tagBytes != null) {<a name="line.7260"></a>
-<span class="sourceLineNo">7261</span>        System.arraycopy(tagBytes, 0,<a name="line.7261"></a>
-<span class="sourceLineNo">7262</span>            newCell.getTagsArray(), newCell.getTagsOffset(), tagBytes.length);<a name="line.7262"></a>
-<span class="sourceLineNo">7263</span>      }<a name="line.7263"></a>
-<span class="sourceLineNo">7264</span>    } else {<a name="line.7264"></a>
-<span class="sourceLineNo">7265</span>      // Append's KeyValue.Type==Put and ts==HConstants.LATEST_TIMESTAMP<a name="line.7265"></a>
-<span class="sourceLineNo">7266</span>      CellUtil.updateLatestStamp(delta, now);<a name="line.7266"></a>
-<span class="sourceLineNo">7267</span>      newCell = delta;<a name="line.7267"></a>
-<span class="sourceLineNo">7268</span>      tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7268"></a>
-<span class="sourceLineNo">7269</span>      if (tags != null) {<a name="line.7269"></a>
-<span class="sourceLineNo">7270</span>        newCell = new TagRewriteCell(delta, TagUtil.fromList(tags));<a name="line.7270"></a>
-<span class="sourceLineNo">7271</span>      }<a name="line.7271"></a>
-<span class="sourceLineNo">7272</span>    }<a name="line.7272"></a>
-<span class="sourceLineNo">7273</span>    return newCell;<a name="line.7273"></a>
-<span class="sourceLineNo">7274</span>  }<a name="line.7274"></a>
-<span class="sourceLineNo">7275</span><a name="line.7275"></a>
-<span class="sourceLineNo">7276</span>  /**<a name="line.7276"></a>
-<span class="sourceLineNo">7277</span>   * @return Get the long out of the passed in Cell<a name="line.7277"></a>
-<span class="sourceLineNo">7278</span>   */<a name="line.7278"></a>
-<span class="sourceLineNo">7279</span>  private static long getLongValue(final Cell cell) throws DoNotRetryIOException {<a name="line.7279"></a>
-<span class="sourceLineNo">7280</span>    int len = cell.getValueLength();<a name="line.7280"></a>
-<span class="sourceLineNo">7281</span>    if (len != Bytes.SIZEOF_LONG) {<a name="line.7281"></a>
-<span class="sourceLineNo">7282</span>      // throw DoNotRetryIOException instead of IllegalArgumentException<a name="line.7282"></a>
-<span class="sourceLineNo">7283</span>      throw new DoNotRetryIOException("Field is not a long, it's " + len + " bytes wide");<a name="line.7283"></a>
-<span class="sourceLineNo">7284</span>    }<a name="line.7284"></a>
-<span class="sourceLineNo">7285</span>    return Bytes.toLong(cell.getValueArray(), cell.getValueOffset(), len);<a name="line.7285"></a>
-<span class="sourceLineNo">7286</span>  }<a name="line.7286"></a>
-<span class="sourceLineNo">7287</span><a name="line.7287"></a>
-<span class="sourceLineNo">7288</span>  /**<a name="line.7288"></a>
-<span class="sourceLineNo">7289</span>   * Do a specific Get on passed &lt;code&gt;columnFamily&lt;/code&gt; and column qualifiers.<a name="line.7289"></a>
-<span class="sourceLineNo">7290</span>   * @param mutation Mutation we are doing this Get for.<a name="line.7290"></a>
-<span class="sourceLineNo">7291</span>   * @param columnFamily Which column family on row (TODO: Go all Gets in one go)<a name="line.7291"></a>
-<span class="sourceLineNo">7292</span>   * @param coordinates Cells from &lt;code&gt;mutation&lt;/code&gt; used as coordinates applied to Get.<a name="line.7292"></a>
-<span class="sourceLineNo">7293</span>   * @return Return list of Cells found.<a name="line.7293"></a>
-<span class="sourceLineNo">7294</span>   */<a name="line.7294"></a>
-<span class="sourceLineNo">7295</span>  private List&lt;Cell&gt; get(final Mutation mutation, final Store store,<a name="line.7295"></a>
-<span class="sourceLineNo">7296</span>          final List&lt;Cell&gt; coordinates, final IsolationLevel isolation, final TimeRange tr)<a name="line.7296"></a>
-<span class="sourceLineNo">7297</span>  throws IOException {<a name="line.7297"></a>
-<span class="sourceLineNo">7298</span>    // Sort the cells so that they match the order that they appear in the Get results. Otherwise,<a name="line.7298"></a>
-<span class="sourceLineNo">7299</span>    // we won't be able to find the existing values if the cells are not specified in order by the<a name="line.7299"></a>
-<span class="sourceLineNo">7300</span>    // client since cells are in an array list.<a name="line.7300"></a>
-<span class="sourceLineNo">7301</span>    // TODO: I don't get why we are sorting. St.Ack 20150107<a name="line.7301"></a>
-<span class="sourceLineNo">7302</span>    sort(coordinates, store.getComparator());<a name="line.7302"></a>
-<span class="sourceLineNo">7303</span>    Get get = new Get(mutation.getRow());<a name="line.7303"></a>
-<span class="sourceLineNo">7304</span>    if (isolation != null) {<a name="line.7304"></a>
-<span class="sourceLineNo">7305</span>      get.setIsolationLevel(isolation);<a name="line.7305"></a>
-<span class="sourceLineNo">7306</span>    }<a name="line.7306"></a>
-<span class="sourceLineNo">7307</span>    for (Cell cell: coordinates) {<a name="line.7307"></a>
-<span class="sourceLineNo">7308</span>      get.addColumn(store.getFamily().getName(), CellUtil.cloneQualifier(cell));<a name="line.7308"></a>
-<span class="sourceLineNo">7309</span>    }<a name="line.7309"></a>
-<span class="sourceLineNo">7310</span>    // Increments carry time range. If an Increment instance, put it on the Get.<a name="line.7310"></a>
-<span class="sourceLineNo">7311</span>    if (tr != null) {<a name="line.7311"></a>
-<span class="sourceLineNo">7312</span>      get.setTimeRange(tr.getMin(), tr.getMax());<a name="line.7312"></a>
-<span class="sourceLineNo">7313</span>    }<a name="line.7313"></a>
-<span class="sourceLineNo">7314</span>    return get(get, false);<a name="line.7314"></a>
-<span class="sourceLineNo">7315</span>  }<a name="line.7315"></a>
-<span class="sourceLineNo">7316</span><a name="line.7316"></a>
-<span class="sourceLineNo">7317</span>  /**<a name="line.7317"></a>
-<span class="sourceLineNo">7318</span>   * @return Sorted list of &lt;code&gt;cells&lt;/code&gt; using &lt;code&gt;comparator&lt;/code&gt;<a name="line.7318"></a>
-<span class="sourceLineNo">7319</span>   */<a name="line.7319"></a>
-<span class="sourceLineNo">7320</span>  private static List&lt;Cell&gt; sort(List&lt;Cell&gt; cells, final Comparator&lt;Cell&gt; comparator) {<a name="line.7320"></a>
-<span class="sourceLineNo">7321</span>    Collections.sort(cells, comparator);<a name="line.7321"></a>
-<span class="sourceLineNo">7322</span>    return cells;<a name="line.7322"></a>
-<span class="sourceLineNo">7323</span>  }<a name="line.7323"></a>
-<span class="sourceLineNo">7324</span><a name="line.7324"></a>
-<span class="sourceLineNo">7325</span>  //<a name="line.7325"></a>
-<span class="sourceLineNo">7326</span>  // New HBASE-880 Helpers<a name="line.7326"></a>
+<span class="sourceLineNo">7128</span>   * Does Get of current value and then adds passed in deltas for this Store returning the result.<a name="line.7128"></a>
+<span class="sourceLineNo">7129</span>   *<a name="line.7129"></a>
+<span class="sourceLineNo">7130</span>   * @param op Whether Increment or Append<a name="line.7130"></a>
+<span class="sourceLineNo">7131</span>   * @param mutation The encompassing Mutation object<a name="line.7131"></a>
+<span class="sourceLineNo">7132</span>   * @param deltas Changes to apply to this Store; either increment amount or data to append<a name="line.7132"></a>
+<span class="sourceLineNo">7133</span>   * @param results In here we accumulate all the Cells we are to return to the client; this List<a name="line.7133"></a>
+<span class="sourceLineNo">7134</span>   *  can be larger than what we return in case where delta is zero; i.e. don't write<a name="line.7134"></a>
+<span class="sourceLineNo">7135</span>   *  out new values, just return current value. If null, client doesn't want results returned.<a name="line.7135"></a>
+<span class="sourceLineNo">7136</span>   * @return Resulting Cells after &lt;code&gt;deltas&lt;/code&gt; have been applied to current<a name="line.7136"></a>
+<span class="sourceLineNo">7137</span>   *  values. Side effect is our filling out of the &lt;code&gt;results&lt;/code&gt; List.<a name="line.7137"></a>
+<span class="sourceLineNo">7138</span>   */<a name="line.7138"></a>
+<span class="sourceLineNo">7139</span>  private List&lt;Cell&gt; reckonDeltasByStore(final Store store, final Operation op,<a name="line.7139"></a>
+<span class="sourceLineNo">7140</span>      final Mutation mutation, final Durability effectiveDurability, final long now,<a name="line.7140"></a>
+<span class="sourceLineNo">7141</span>      final List&lt;Cell&gt; deltas, final List&lt;Cell&gt; results)<a name="line.7141"></a>
+<span class="sourceLineNo">7142</span>  throws IOException {<a name="line.7142"></a>
+<span class="sourceLineNo">7143</span>    byte [] columnFamily = store.getFamily().getName();<a name="line.7143"></a>
+<span class="sourceLineNo">7144</span>    List&lt;Cell&gt; toApply = new ArrayList&lt;Cell&gt;(deltas.size());<a name="line.7144"></a>
+<span class="sourceLineNo">7145</span>    // Get previous values for all columns in this family.<a name="line.7145"></a>
+<span class="sourceLineNo">7146</span>    List&lt;Cell&gt; currentValues = get(mutation, store, deltas,<a name="line.7146"></a>
+<span class="sourceLineNo">7147</span>        null/*Default IsolationLevel*/,<a name="line.7147"></a>
+<span class="sourceLineNo">7148</span>        op == Operation.INCREMENT? ((Increment)mutation).getTimeRange(): null);<a name="line.7148"></a>
+<span class="sourceLineNo">7149</span>    // Iterate the input columns and update existing values if they were found, otherwise<a name="line.7149"></a>
+<span class="sourceLineNo">7150</span>    // add new column initialized to the delta amount<a name="line.7150"></a>
+<span class="sourceLineNo">7151</span>    int currentValuesIndex = 0;<a name="line.7151"></a>
+<span class="sourceLineNo">7152</span>    for (int i = 0; i &lt; deltas.size(); i++) {<a name="line.7152"></a>
+<span class="sourceLineNo">7153</span>      Cell delta = deltas.get(i);<a name="line.7153"></a>
+<span class="sourceLineNo">7154</span>      Cell currentValue = null;<a name="line.7154"></a>
+<span class="sourceLineNo">7155</span>      if (currentValuesIndex &lt; currentValues.size() &amp;&amp;<a name="line.7155"></a>
+<span class="sourceLineNo">7156</span>          CellUtil.matchingQualifier(currentValues.get(currentValuesIndex), delta)) {<a name="line.7156"></a>
+<span class="sourceLineNo">7157</span>        currentValue = currentValues.get(currentValuesIndex);<a name="line.7157"></a>
+<span class="sourceLineNo">7158</span>        if (i &lt; (deltas.size() - 1) &amp;&amp; !CellUtil.matchingQualifier(delta, deltas.get(i + 1))) {<a name="line.7158"></a>
+<span class="sourceLineNo">7159</span>          currentValuesIndex++;<a name="line.7159"></a>
+<span class="sourceLineNo">7160</span>        }<a name="line.7160"></a>
+<span class="sourceLineNo">7161</span>      }<a name="line.7161"></a>
+<span class="sourceLineNo">7162</span>      // Switch on whether this an increment or an append building the new Cell to apply.<a name="line.7162"></a>
+<span class="sourceLineNo">7163</span>      Cell newCell = null;<a name="line.7163"></a>
+<span class="sourceLineNo">7164</span>      MutationType mutationType = null;<a name="line.7164"></a>
+<span class="sourceLineNo">7165</span>      boolean apply = true;<a name="line.7165"></a>
+<span class="sourceLineNo">7166</span>      switch (op) {<a name="line.7166"></a>
+<span class="sourceLineNo">7167</span>        case INCREMENT:<a name="line.7167"></a>
+<span class="sourceLineNo">7168</span>          mutationType = MutationType.INCREMENT;<a name="line.7168"></a>
+<span class="sourceLineNo">7169</span>          // If delta amount to apply is 0, don't write WAL or MemStore.<a name="line.7169"></a>
+<span class="sourceLineNo">7170</span>          long deltaAmount = getLongValue(delta);<a name="line.7170"></a>
+<span class="sourceLineNo">7171</span>          apply = deltaAmount != 0;<a name="line.7171"></a>
+<span class="sourceLineNo">7172</span>          newCell = reckonIncrement(delta, deltaAmount, currentValue, columnFamily, now,<a name="line.7172"></a>
+<span class="sourceLineNo">7173</span>            (Increment)mutation);<a name="line.7173"></a>
+<span class="sourceLineNo">7174</span>          break;<a name="line.7174"></a>
+<span class="sourceLineNo">7175</span>        case APPEND:<a name="line.7175"></a>
+<span class="sourceLineNo">7176</span>          mutationType = MutationType.APPEND;<a name="line.7176"></a>
+<span class="sourceLineNo">7177</span>          // Always apply Append. TODO: Does empty delta value mean reset Cell? It seems to.<a name="line.7177"></a>
+<span class="sourceLineNo">7178</span>          newCell = reckonAppend(delta, currentValue, now, (Append)mutation);<a name="line.7178"></a>
+<span class="sourceLineNo">7179</span>          break;<a name="line.7179"></a>
+<span class="sourceLineNo">7180</span>        default: throw new UnsupportedOperationException(op.toString());<a name="line.7180"></a>
+<span class="sourceLineNo">7181</span>      }<a name="line.7181"></a>
+<span class="sourceLineNo">7182</span><a name="line.7182"></a>
+<span class="sourceLineNo">7183</span>      // Give coprocessors a chance to update the new cell<a name="line.7183"></a>
+<span class="sourceLineNo">7184</span>      if (coprocessorHost != null) {<a name="line.7184"></a>
+<span class="sourceLineNo">7185</span>        newCell =<a name="line.7185"></a>
+<span class="sourceLineNo">7186</span>            coprocessorHost.postMutationBeforeWAL(mutationType, mutation, currentValue, newCell);<a name="line.7186"></a>
+<span class="sourceLineNo">7187</span>      }<a name="line.7187"></a>
+<span class="sourceLineNo">7188</span>      // If apply, we need to update memstore/WAL with new value; add it toApply.<a name="line.7188"></a>
+<span class="sourceLineNo">7189</span>      if (apply) {<a name="line.7189"></a>
+<span class="sourceLineNo">7190</span>        toApply.add(newCell);<a name="line.7190"></a>
+<span class="sourceLineNo">7191</span>      }<a name="line.7191"></a>
+<span class="sourceLineNo">7192</span>      // Add to results to get returned to the Client. If null, cilent does not want results.<a name="line.7192"></a>
+<span class="sourceLineNo">7193</span>      if (results != null) {<a name="line.7193"></a>
+<span class="sourceLineNo">7194</span>        results.add(newCell);<a name="line.7194"></a>
+<span class="sourceLineNo">7195</span>      }<a name="line.7195"></a>
+<span class="sourceLineNo">7196</span>    }<a name="line.7196"></a>
+<span class="sourceLineNo">7197</span>    return toApply;<a name="line.7197"></a>
+<span class="sourceLineNo">7198</span>  }<a name="line.7198"></a>
+<span class="sourceLineNo">7199</span><a name="line.7199"></a>
+<span class="sourceLineNo">7200</span>  /**<a name="line.7200"></a>
+<span class="sourceLineNo">7201</span>   * Calculate new Increment Cell.<a name="line.7201"></a>
+<span class="sourceLineNo">7202</span>   * @return New Increment Cell with delta applied to currentValue if currentValue is not null;<a name="line.7202"></a>
+<span class="sourceLineNo">7203</span>   *  otherwise, a new Cell with the delta set as its value.<a name="line.7203"></a>
+<span class="sourceLineNo">7204</span>   */<a name="line.7204"></a>
+<span class="sourceLineNo">7205</span>  private Cell reckonIncrement(final Cell delta, final long deltaAmount, final Cell currentValue,<a name="line.7205"></a>
+<span class="sourceLineNo">7206</span>      byte [] columnFamily, final long now, Mutation mutation)<a name="line.7206"></a>
+<span class="sourceLineNo">7207</span>  throws IOException {<a name="line.7207"></a>
+<span class="sourceLineNo">7208</span>    // Forward any tags found on the delta.<a name="line.7208"></a>
+<span class="sourceLineNo">7209</span>    List&lt;Tag&gt; tags = TagUtil.carryForwardTags(delta);<a name="line.7209"></a>
+<span class="sourceLineNo">7210</span>    long newValue = deltaAmount;<a name="line.7210"></a>
+<span class="sourceLineNo">7211</span>    long ts = now;<a name="line.7211"></a>
+<span class="sourceLineNo">7212</span>    if (currentValue != null) {<a name="line.7212"></a>
+<span class="sourceLineNo">7213</span>      tags = TagUtil.carryForwardTags(tags, currentValue);<a name="line.7213"></a>
+<span class="sourceLineNo">7214</span>      ts = Math.max(now, currentValue.getTimestamp());<a name="line.7214"></a>
+<span class="sourceLineNo">7215</span>      newValue += getLongValue(currentValue);<a name="line.7215"></a>
+<span class="sourceLineNo">7216</span>    }<a name="line.7216"></a>
+<span class="sourceLineNo">7217</span>    // Now make up the new Cell. TODO: FIX. This is carnel knowledge of how KeyValues are made...<a name="line.7217"></a>
+<span class="sourceLineNo">7218</span>    // doesn't work well with offheaping or if we are doing a different Cell type.<a name="line.7218"></a>
+<span class="sourceLineNo">7219</span>    byte [] incrementAmountInBytes = Bytes.toBytes(newValue);<a name="line.7219"></a>
+<span class="sourceLineNo">7220</span>    tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7220"></a>
+<span class="sourceLineNo">7221</span>    byte [] row = mutation.getRow();<a name="line.7221"></a>
+<span class="sourceLineNo">7222</span>    return new KeyValue(row, 0, row.length,<a name="line.7222"></a>
+<span class="sourceLineNo">7223</span>      columnFamily, 0, columnFamily.length,<a name="line.7223"></a>
+<span class="sourceLineNo">7224</span>      delta.getQualifierArray(), delta.getQualifierOffset(), delta.getQualifierLength(),<a name="line.7224"></a>
+<span class="sourceLineNo">7225</span>      ts, KeyValue.Type.Put,<a name="line.7225"></a>
+<span class="sourceLineNo">7226</span>      incrementAmountInBytes, 0, incrementAmountInBytes.length,<a name="line.7226"></a>
+<span class="sourceLineNo">7227</span>      tags);<a name="line.7227"></a>
+<span class="sourceLineNo">7228</span>  }<a name="line.7228"></a>
+<span class="sourceLineNo">7229</span><a name="line.7229"></a>
+<span class="sourceLineNo">7230</span>  private Cell reckonAppend(final Cell delta, final Cell currentValue, final long now,<a name="line.7230"></a>
+<span class="sourceLineNo">7231</span>      Append mutation)<a name="line.7231"></a>
+<span class="sourceLineNo">7232</span>  throws IOException {<a name="line.7232"></a>
+<span class="sourceLineNo">7233</span>    // Forward any tags found on the delta.<a name="line.7233"></a>
+<span class="sourceLineNo">7234</span>    List&lt;Tag&gt; tags = TagUtil.carryForwardTags(delta);<a name="line.7234"></a>
+<span class="sourceLineNo">7235</span>    long ts = now;<a name="line.7235"></a>
+<span class="sourceLineNo">7236</span>    Cell newCell = null;<a name="line.7236"></a>
+<span class="sourceLineNo">7237</span>    byte [] row = mutation.getRow();<a name="line.7237"></a>
+<span class="sourceLineNo">7238</span>    if (currentValue != null) {<a name="line.7238"></a>
+<span class="sourceLineNo">7239</span>      tags = TagUtil.carryForwardTags(tags, currentValue);<a name="line.7239"></a>
+<span class="sourceLineNo">7240</span>      ts = Math.max(now, currentValue.getTimestamp());<a name="line.7240"></a>
+<span class="sourceLineNo">7241</span>      tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7241"></a>
+<span class="sourceLineNo">7242</span>      byte[] tagBytes = TagUtil.fromList(tags);<a name="line.7242"></a>
+<span class="sourceLineNo">7243</span>      // Allocate an empty cell and copy in all parts.<a name="line.7243"></a>
+<span class="sourceLineNo">7244</span>      // TODO: This is intimate knowledge of how a KeyValue is made. Undo!!! Prevents our doing<a name="line.7244"></a>
+<span class="sourceLineNo">7245</span>      // other Cell types. Copying on-heap too if an off-heap Cell.<a name="line.7245"></a>
+<span class="sourceLineNo">7246</span>      newCell = new KeyValue(row.length, delta.getFamilyLength(),<a name="line.7246"></a>
+<span class="sourceLineNo">7247</span>        delta.getQualifierLength(), ts, KeyValue.Type.Put,<a name="line.7247"></a>
+<span class="sourceLineNo">7248</span>        delta.getValueLength() + currentValue.getValueLength(),<a name="line.7248"></a>
+<span class="sourceLineNo">7249</span>        tagBytes == null? 0: tagBytes.length);<a name="line.7249"></a>
+<span class="sourceLineNo">7250</span>      // Copy in row, family, and qualifier<a name="line.7250"></a>
+<span class="sourceLineNo">7251</span>      System.arraycopy(row, 0, newCell.getRowArray(), newCell.getRowOffset(), row.length);<a name="line.7251"></a>
+<span class="sourceLineNo">7252</span>      System.arraycopy(delta.getFamilyArray(), delta.getFamilyOffset(),<a name="line.7252"></a>
+<span class="sourceLineNo">7253</span>          newCell.getFamilyArray(), newCell.getFamilyOffset(), delta.getFamilyLength());<a name="line.7253"></a>
+<span class="sourceLineNo">7254</span>      System.arraycopy(delta.getQualifierArray(), delta.getQualifierOffset(),<a name="line.7254"></a>
+<span class="sourceLineNo">7255</span>          newCell.getQualifierArray(), newCell.getQualifierOffset(), delta.getQualifierLength());<a name="line.7255"></a>
+<span class="sourceLineNo">7256</span>      // Copy in the value<a name="line.7256"></a>
+<span class="sourceLineNo">7257</span>      CellUtil.copyValueTo(currentValue, newCell.getValueArray(), newCell.getValueOffset());<a name="line.7257"></a>
+<span class="sourceLineNo">7258</span>      System.arraycopy(delta.getValueArray(), delta.getValueOffset(),<a name="line.7258"></a>
+<span class="sourceLineNo">7259</span>          newCell.getValueArray(), newCell.getValueOffset() + currentValue.getValueLength(),<a name="line.7259"></a>
+<span class="sourceLineNo">7260</span>          delta.getValueLength());<a name="line.7260"></a>
+<span class="sourceLineNo">7261</span>      // Copy in tag data<a name="line.7261"></a>
+<span class="sourceLineNo">7262</span>      if (tagBytes != null) {<a name="line.7262"></a>
+<span class="sourceLineNo">7263</span>        System.arraycopy(tagBytes, 0,<a name="line.7263"></a>
+<span class="sourceLineNo">7264</span>            newCell.getTagsArray(), newCell.getTagsOffset(), tagBytes.length);<a name="line.7264"></a>
+<span class="sourceLineNo">7265</span>      }<a name="line.7265"></a>
+<span class="sourceLineNo">7266</span>    } else {<a name="line.7266"></a>
+<span class="sourceLineNo">7267</span>      // Append's KeyValue.Type==Put and ts==HConstants.LATEST_TIMESTAMP<a name="line.7267"></a>
+<span class="sourceLineNo">7268</span>      CellUtil.updateLatestStamp(delta, now);<a name="line.7268"></a>
+<span class="sourceLineNo">7269</span>      newCell = delta;<a name="line.7269"></a>
+<span class="sourceLineNo">7270</span>      tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7270"></a>
+<span class="sourceLineNo">7271</span>      if (tags != null) {<a name="line.7271"></a>
+<span class="sourceLineNo">7272</span>        newCell = new TagRewriteCell(delta, TagUtil.fromList(tags));<a name="line.7272"></a>
+<span class="sourceLineNo">7273</span>      }<a name="line.7273"></a>
+<span class="sourceLineNo">7274</span>    }<a name="line.7274"></a>
+<span class="sourceLineNo">7275</span>    return newCell;<a name="line.7275"></a>
+<span class="sourceLineNo">7276</span>  }<a name="line.7276"></a>
+<span class="sourceLineNo">7277</span><a name="line.7277"></a>
+<span class="sourceLineNo">7278</span>  /**<a name="line.7278"></a>
+<span class="sourceLineNo">7279</span>   * @return Get the long out of the passed in Cell<a name="line.7279"></a>
+<span class="sourceLineNo">7280</span>   */<a name="line.7280"></a>
+<span class="sourceLineNo">7281</span>  private static long getLongValue(final Cell cell) throws DoNotRetryIOException {<a name="line.7281"></a>
+<span class="sourceLineNo">7282</span>    int len = cell.getValueLength();<a name="line.7282"></a>
+<span class="sourceLineNo">7283</span>    if (len != Bytes.SIZEOF_LONG) {<a name="line.7283"></a>
+<span class="sourceLineNo">7284</span>      // throw DoNotRetryIOException instead of IllegalArgumentException<a name="line.7284"></a>
+<span class="sourceLineNo">7285</span>      throw new DoNotRetryIOException("Field is not a long, it's " + len + " bytes wide");<a name="line.7285"></a>
+<span class="sourceLineNo">7286</span>    }<a name="line.7286"></a>
+<span class="sourceLineNo">7287</span>    return Bytes.toLong(cell.getValueArray(), cell.getValueOffset(), len);<a name="line.7287"></a>
+<span class="sourceLineNo">7288</span>  }<a name="line.7288"></a>
+<span class="sourceLineNo">7289</span><a name="line.7289"></a>
+<span class="sourceLineNo">7290</span>  /**<a name="line.7290"></a>
+<span class="sourceLineNo">7291</span>   * Do a specific Get on passed &lt;code&gt;columnFamily&lt;/code&gt; and column qualifiers.<a name="line.7291"></a>
+<span class="sourceLineNo">7292</span>   * @param mutation Mutation we are doing this Get for.<a name="line.7292"></a>
+<span class="sourceLineNo">7293</span>   * @param columnFamily Which column family on row (TODO: Go all Gets in one go)<a name="line.7293"></a>
+<span class="sourceLineNo">7294</span>   * @param coordinates Cells from &lt;code&gt;mutation&lt;/code&gt; used as coordinates applied to Get.<a name="line.7294"></a>
+<span class="sourceLineNo">7295</span>   * @return Return list of Cells found.<a name="line.7295"></a>
+<span class="sourceLineNo">7296</span>   */<a name="line.7296"></a>
+<span class="sourceLineNo">7297</span>  private List&lt;Cell&gt; get(final Mutation mutation, final Store store,<a name="line.7297"></a>
+<span class="sourceLineNo">7298</span>          final List&lt;Cell&gt; coordinates, final IsolationLevel isolation, final TimeRange tr)<a name="line.7298"></a>
+<span class="sourceLineNo">7299</span>  throws IOException {<a name="line.7299"></a>
+<span class="sourceLineNo">7300</span>    // Sort the cells so that they match the order that they appear in the Get results. Otherwise,<a name="line.7300"></a>
+<span class="sourceLineNo">7301</span>    // we won't be able to find the existing values if the cells are not specified in order by the<a name="line.7301"></a>
+<span class="sourceLineNo">7302</span>    // client since cells are in an array list.<a name="line.7302"></a>
+<span class="sourceLineNo">7303</span>    // TODO: I don't get why we are sorting. St.Ack 20150107<a name="line.7303"></a>
+<span class="sourceLineNo">7304</span>    sort(coordinates, store.getComparator());<a name="line.7304"></a>
+<span class="sourceLineNo">7305</span>    Get get = new Get(mutation.getRow());<a name="line.7305"></a>
+<span class="sourceLineNo">7306</span>    if (isolation != null) {<a name="line.7306"></a>
+<span class="sourceLineNo">7307</span>      get.setIsolationLevel(isolation);<a name="line.7307"></a>
+<span class="sourceLineNo">7308</span>    }<a name="line.7308"></a>
+<span class="sourceLineNo">7309</span>    for (Cell cell: coordinates) {<a name="line.7309"></a>
+<span class="sourceLineNo">7310</span>      get.addColumn(store.getFamily().getName(), CellUtil.cloneQualifier(cell));<a name="line.7310"></a>
+<span class="sourceLineNo">7311</span>    }<a name="line.7311"></a>
+<span class="sourceLineNo">7312</span>    // Increments carry time range. If an Increment instance, put it on the Get.<a name="line.7312"></a>
+<span class="sourceLineNo">7313</span>    if (tr != null) {<a name="line.7313"></a>
+<span class="sourceLineNo">7314</span>      get.setTimeRange(tr.getMin(), tr.getMax());<a name="line.7314"></a>
+<span class="sourceLineNo">7315</span>    }<a name="line.7315"></a>
+<span class="sourceLineNo">7316</span>    return get(get, false);<a name="line.7316"></a>
+<span class="sourceLineNo">7317</span>  }<a name="line.7317"></a>
+<span class="sourceLineNo">7318</span><a name="line.7318"></a>
+<span class="sourceLineNo">7319</span>  /**<a name="line.7319"></a>
+<span class="sourceLineNo">7320</span>   * @return Sorted list of &lt;code&gt;cells&lt;/code&gt; using &lt;code&gt;comparator&lt;/code&gt;<a name="line.7320"></a>
+<span class="sourceLineNo">7321</span>   */<a name="line.7321"></a>
+<span class="sourceLineNo">7322</span>  private static List&lt;Cell&gt; sort(List&lt;Cell&gt; cells, final Comparator&lt;Cell&gt; comparator) {<a name="line.7322"></a>
+<span class="sourceLineNo">7323</span>    Collections.sort(cells, comparator);<a name="line.7323"></a>
+<span class="sourceLineNo">7324</span>    return cells;<a name="line.7324"></a>
+<span class="sourceLineNo">7325</span>  }<a name="line.7325"></a>
+<span class="sourceLineNo">7326</span><a name="line.7326"></a>
 <span class="sourceLineNo">7327</span>  //<a name="line.7327"></a>
-<span class="sourceLineNo">7328</span><a name="line.7328"></a>
-<span class="sourceLineNo">7329</span>  void checkFamily(final byte [] family)<a name="line.7329"></a>
-<span class="sourceLineNo">7330</span>  throws NoSuchColumnFamilyException {<a name="line.7330"></a>
-<span class="sourceLineNo">7331</span>    if (!this.htableDescriptor.hasFamily(family)) {<a name="line.7331"></a>
-<span class="sourceLineNo">7332</span>      throw new NoSuchColumnFamilyException("Column family " +<a name="line.7332"></a>
-<span class="sourceLineNo">7333</span>          Bytes.toString(family) + " does not exist in region " + this<a name="line.7333"></a>
-<span class="sourceLineNo">7334</span>          + " in table " + this.htableDescriptor);<a name="line.7334"></a>
-<span class="sourceLineNo">7335</span>    }<a name="line.7335"></a>
-<span class="sourceLineNo">7336</span>  }<a name="line.7336"></a>
-<span class="sourceLineNo">7337</span><a name="line.7337"></a>
-<span class="sourceLineNo">7338</span>  public static final long FIXED_OVERHEAD = ClassSize.align(<a name="line.7338"></a>
-<span class="sourceLineNo">7339</span>      ClassSize.OBJECT +<a name="line.7339"></a>
-<span class="sourceLineNo">7340</span>      ClassSize.ARRAY +<a name="line.7340"></a>
-<span class="sourceLineNo">7341</span>      45 * ClassSize.REFERENCE + 2 * Bytes.SIZEOF_INT +<a name="line.7341"></a>
-<span class="sourceLineNo">7342</span>      (14 * Bytes.SIZEOF_LONG) +<a name="line.7342"></a>
-<span class="sourceLineNo">7343</span>      5 * Bytes.SIZEOF_BOOLEAN);<a name="line.7343"></a>
-<span class="sourceLineNo">7344</span><a name="line.7344"></a>
-<span class="sourceLineNo">7345</span>  // woefully out of date - currently missing:<a name="line.7345"></a>
-<span class="sourceLineNo">7346</span>  // 1 x HashMap - coprocessorServiceHandlers<a name="line.7346"></a>
-<span class="sourceLineNo">7347</span>  // 6 x Counter - numMutationsWithoutWAL, dataInMemoryWithoutWAL,<a name="line.7347"></a>
-<span class="sourceLineNo">7348</span>  //   checkAndMutateChecksPassed, checkAndMutateChecksFailed, readRequestsCount,<a name="line.7348"></a>
-<span class="sourceLineNo">7349</span>  //   writeRequestsCount<a name="line.7349"></a>
-<span class="sourceLineNo">7350</span>  // 1 x HRegion$WriteState - writestate<a name="line.7350"></a>
-<span class="sourceLineNo">7351</span>  // 1 x RegionCoprocessorHost - coprocessorHost<a name="line.7351"></a>
-<span class="sourceLineNo">7352</span>  // 1 x RegionSplitPolicy - splitPolicy<a name="line.7352"></a>
-<span class="sourceLineNo">7353</span>  // 1 x MetricsRegion - metricsRegion<a name="line.7353"></a>
-<span class="sourceLineNo">7354</span>  // 1 x MetricsRegionWrapperImpl - metricsRegionWrapper<a name="line.7354"></a>
-<span class="sourceLineNo">7355</span>  public static final long DEEP_OVERHEAD = FIXED_OVERHEAD +<a name="line.7355"></a>
-<span class="sourceLineNo">7356</span>      ClassSize.OBJECT + // closeLock<a name="line.7356"></a>
-<span class="sourceLineNo">7357</span>      (2 * ClassSize.ATOMIC_BOOLEAN) + // closed, closing<a name="line.7357"></a>
-<span class="sourceLineNo">7358</span>      (3 * ClassSize.ATOMIC_LONG) + // memStoreSize, numPutsWithoutWAL, dataInMemoryWithoutWAL<a name="line.7358"></a>
-<span class="sourceLineNo">7359</span>      (2 * ClassSize.CONCURRENT_HASHMAP) +  // lockedRows, scannerReadPoints<a name="line.7359"></a>
-<span class="sourceLineNo">7360</span>      WriteState.HEAP_SIZE + // writestate<a name="line.7360"></a>
-<span class="sourceLineNo">7361</span>      ClassSize.CONCURRENT_SKIPLISTMAP + ClassSize.CONCURRENT_SKIPLISTMAP_ENTRY + // stores<a name="line.7361"></a>
-<span class="sourceLineNo">7362</span>      (2 * ClassSize.REENTRANT_LOCK) + // lock, updatesLock<a name="line.7362"></a>
-<span class="sourceLineNo">7363</span>      MultiVersionConcurrencyControl.FIXED_SIZE // mvcc<a name="line.7363"></a>
-<span class="sourceLineNo">7364</span>      + ClassSize.TREEMAP // maxSeqIdInStores<a name="line.7364"></a>
-<span class="sourceLineNo">7365</span>      + 2 * ClassSize.ATOMIC_INTEGER // majorInProgress, minorInProgress<a name="line.7365"></a>
-<span class="sourceLineNo">7366</span>      ;<a name="line.7366"></a>
-<span class="sourceLineNo">7367</span><a name="line.7367"></a>
-<span class="sourceLineNo">7368</span>  @Override<a name="line.7368"></a>
-<span class="sourceLineNo">7369</span>  public long heapSize() {<a name="line.7369"></a>
-<span class="sourceLineNo">7370</span>    long heapSize = DEEP_OVERHEAD;<a name="line.7370"></a>
-<span class="sourceLineNo">7371</span>    for (Store store : this.stores.values()) {<a name="line.7371"></a>
-<span class="sourceLineNo">7372</span>      heapSize += store.heapSize();<a name="line.7372"></a>
-<span class="sourceLineNo">7373</span>    }<a name="line.7373"></a>
-<span class="sourceLineNo">7374</span>    // this does not take into account row locks, recent flushes, mvcc entries, and more<a name="line.7374"></a>
-<span class="sourceLineNo">7375</span>    return heapSize;<a name="line.7375"></a>
-<span class="sourceLineNo">7376</span>  }<a name="line.7376"></a>
-<span class="sourceLineNo">7377</span><a name="line.7377"></a>
-<span class="sourceLineNo">7378</span>  @Override<a name="line.7378"></a>
-<span class="sourceLineNo">7379</span>  public boolean registerService(Service instance) {<a name="line.7379"></a>
-<span class="sourceLineNo">7380</span>    /*<a name="line.7380"></a>
-<span class="sourceLineNo">7381</span>     * No stacking of instances is allowed for a single service name<a name="line.7381"></a>
-<span class="sourceLineNo">7382</span>     */<a name="line.7382"></a>
-<span class="sourceLineNo">7383</span>    Descriptors.ServiceDescriptor serviceDesc = instance.getDescriptorForType();<a name="line.7383"></a>
-<span class="sourceLineNo">7384</span>    if (coprocessorServiceHandlers.containsKey(serviceDesc.getFullName())) {<a name="line.7384"></a>
-<span class="sourceLineNo">7385</span>      LOG.error("Coprocessor service " + serviceDesc.getFullName() +<a name="line.7385"></a>
-<span class="sourceLineNo">7386</span>              " already registered, rejecting request from " + instance<a name="line.7386"></a>
-<span class="sourceLineNo">7387</span>      );<a name="line.7387"></a>
-<span class="sourceLineNo">7388</span>      return false;<a name="line.7388"></a>
-<span class="sourceLineNo">7389</span>    }<a name="line.7389"></a>
-<span class="sourceLineNo">7390</span><a name="line.7390"></a>
-<span class="sourceLineNo">7391</span>    coprocessorServiceHandlers.put(serviceDesc.getFullName(), instance);<a name="line.7391"></a>
-<span class="sourceLineNo">7392</span>    if (LOG.isDebugEnabled()) {<a name="line.7392"></a>
-<span class="sourceLineNo">7393</span>      LOG.debug("Registered coprocessor service: region=" +<a name="line.7393"></a>
-<span class="sourceLineNo">7394</span>          Bytes.toStringBinary(getRegionInfo().getRegionName()) +<a name="line.7394"></a>
-<span class="sourceLineNo">7395</span>          " service=" + serviceDesc.getFullName());<a name="line.7395"></a>
-<span class="sourceLineNo">7396</span>    }<a name="line.7396"></a>
-<span class="sourceLineNo">7397</span>    return true;<a name="line.7397"></a>
-<span class="sourceLineNo">7398</span>  }<a name="line.7398"></a>
-<span class="sourceLineNo">7399</span><a name="line.7399"></a>
-<span class="sourceLineNo">7400</span>  @Override<a name="line.7400"></a>
-<span class="sourceLineNo">7401</span>  public Message execService(RpcController controller, CoprocessorServiceCall call)<a name="line.7401"></a>
-<span class="sourceLineNo">7402</span>      throws IOException {<a name="line.7402"></a>
-<span class="sourceLineNo">7403</span>    String serviceName = call.getServiceName();<a name="line.7403"></a>
-<span class="sourceLineNo">7404</span>    String methodName = call.getMethodName();<a name="line.7404"></a>
-<span class="sourceLineNo">7405</span>    if (!coprocessorServiceHandlers.containsKey(serviceName)) {<a name="line.7405"></a>
-<span class="sourceLineNo">7406</span>      throw new UnknownProtocolException(null,<a name="line.7406"></a>
-<span class="sourceLineNo">7407</span>          "No registered coprocessor service found for name "+serviceName+<a name="line.7407"></a>
-<span class="sourceLineNo">7408</span>          " in region "+Bytes.toStringBinary(getRegionInfo().getRegionName()));<a name="line.7408"></a>
-<span class="sourceLineNo">7409</span>    }<a name="line.7409"></a>
-<span class="sourceLineNo">7410</span><a name="line.7410"></a>
-<span class="sourceLineNo">7411</span>    Service service = coprocessorServiceHandlers.get(serviceName);<a name="line.7411"></a>
-<span class="sourceLineNo">7412</span>    Descriptors.ServiceDescriptor serviceDesc = service.getDescriptorForType();<a name="line.7412"></a>
-<span class="sourceLineNo">7413</span>    Descriptors.MethodDescriptor methodDesc = serviceDesc.findMethodByName(methodName);<a name="line.7413"></a>
-<span class="sourceLineNo">7414</span>    if (methodDesc == null) {<a name="line.7414"></a>
-<span class="sourceLineNo">7415</span>      throw new UnknownProtocolException(service.getClass(),<a name="line.7415"></a>
-<span class="sourceLineNo">7416</span>          "Unknown method "+methodName+" called on service "+serviceName+<a name="line.7416"></a>
-<span class="sourceLineNo">7417</span>              " in region "+Bytes.toStringBinary(getRegionInfo().getRegionName()));<a name="line.7417"></a>
-<span class="sourceLineNo">7418</span>    }<a name="line.7418"></a>
-<span class="sourceLineNo">7419</span><a name="line.7419"></a>
-<span class="sourceLineNo">7420</span>    Message.Builder builder = service.getRequestPrototype(methodDesc).newBuilderForType();<a name="line.7420"></a>
-<span class="sourceLineNo">7421</span>    ProtobufUtil.mergeFrom(builder, call.getRequest());<a name="line.7421"></a>
-<span class="sourceLineNo">7422</span>    Message request = builder.build();<a name="line.7422"></a>
-<span class="sourceLineNo">7423</span><a name="line.7423"></a>
-<span class="sourceLineNo">7424</span>    if (coprocessorHost != null) {<a name="line.7424"></a>
-<span class="sourceLineNo">7425</span>      request = coprocessorHost.preEndpointInvocation(service, methodName, request);<a name="line.7425"></a>
-<span class="sourceLineNo">7426</span>    }<a name="line.7426"></a>
-<span class="sourceLineNo">7427</span><a name="line.7427"></a>
-<span class="sourceLineNo">7428</span>    final Message.Builder responseBuilder =<a name="line.7428"></a>
-<span class="sourceLineNo">7429</span>        service.getResponsePrototype(methodDesc).newBuilderForType();<a name="line.7429"></a>
-<span class="sourceLineNo">7430</span>    service.callMethod(methodDesc, controller, request, new RpcCallback&lt;Message&gt;() {<a name="line.7430"></a>
-<span class="sourceLineNo">7431</span>      @Override<a name="line.7431"></a>
-<span class="sourceLineNo">7432</span>      public void run(Message message) {<a name="line.7432"></a>
-<span class="sourceLineNo">7433</span>        if (message != null) {<a name="line.7433"></a>
-<span class="sourceLineNo">7434</span>          responseBuilder.mergeFrom(message);<a name="line.7434"></a>
-<span class="sourceLineNo">7435</span>        }<a name="line.7435"></a>
-<span class="sourceLineNo">7436</span>      }<a name="line.7436"></a>
-<span class="sourceLineNo">7437</span>    });<a name="line.7437"></a>
-<span class="sourceLineNo">7438</span><a name="line.7438"></a>
-<span class="sourceLineNo">7439</span>    if (coprocessorHost != null) {<a name="line.7439"></a>
-<span class="sourceLineNo">7440</span>      coprocessorHost.postEndpointInvocation(service, methodName, request, responseBuilder);<a name="line.7440"></a>
-<span class="sourceLineNo">7441</span>    }<a name="line.7441"></a>
-<span class="sourceLineNo">7442</span><a name="line.7442"></a>
-<span class="sourceLineNo">7443</span>    IOException exception = ResponseConverter.getControllerException(controller);<a name="line.7443"></a>
-<span class="sourceLineNo">7444</span>    if (exception != null) {<a name="line.7444"></a>
-<span class="sourceLineNo">7445</span>      throw exception;<a name="line.7445"></a>
-<span class="sourceLineNo">7446</span>    

<TRUNCATED>

[45/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/checkstyle.rss
----------------------------------------------------------------------
diff --git a/checkstyle.rss b/checkstyle.rss
index 3acde3f..0fe27ea 100644
--- a/checkstyle.rss
+++ b/checkstyle.rss
@@ -26,7 +26,7 @@ under the License.
     <copyright>&#169;2007 - 2016 The Apache Software Foundation</copyright>
     <item>
       <title>File: 1683,
-             Errors: 12749,
+             Errors: 12747,
              Warnings: 0,
              Infos: 0
       </title>
@@ -1427,7 +1427,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  211
+                  210
                 </td>
               </tr>
                           <tr>
@@ -19193,7 +19193,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  70
+                  69
                 </td>
               </tr>
                           <tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/coc.html
----------------------------------------------------------------------
diff --git a/coc.html b/coc.html
index 2b7410c..ca221f8 100644
--- a/coc.html
+++ b/coc.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Code of Conduct Policy
@@ -331,7 +331,7 @@ For flagrant violations requiring a firm response the PMC may opt to skip early
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/cygwin.html
----------------------------------------------------------------------
diff --git a/cygwin.html b/cygwin.html
index 30f262e..fed6d1d 100644
--- a/cygwin.html
+++ b/cygwin.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Installing Apache HBase (TM) on Windows using Cygwin</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -673,7 +673,7 @@ Now your <b>HBase </b>server is running, <b>start coding</b> and build that next
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/dependencies.html
----------------------------------------------------------------------
diff --git a/dependencies.html b/dependencies.html
index 5dd3bea..9a0eca9 100644
--- a/dependencies.html
+++ b/dependencies.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Dependencies</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -518,7 +518,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/dependency-convergence.html b/dependency-convergence.html
index 85f774b..90517a5 100644
--- a/dependency-convergence.html
+++ b/dependency-convergence.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Reactor Dependency Convergence</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -1617,7 +1617,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/dependency-info.html
----------------------------------------------------------------------
diff --git a/dependency-info.html b/dependency-info.html
index 540d6b5..2ec3e4e 100644
--- a/dependency-info.html
+++ b/dependency-info.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Dependency Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -312,7 +312,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/dependency-management.html
----------------------------------------------------------------------
diff --git a/dependency-management.html b/dependency-management.html
index 46b4482..df30824 100644
--- a/dependency-management.html
+++ b/dependency-management.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Dependency Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -786,7 +786,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/constant-values.html
----------------------------------------------------------------------
diff --git a/devapidocs/constant-values.html b/devapidocs/constant-values.html
index 2e6a852..4bbd418 100644
--- a/devapidocs/constant-values.html
+++ b/devapidocs/constant-values.html
@@ -3668,25 +3668,6 @@
 <ul class="blockList">
 <li class="blockList">
 <table border="0" cellpadding="3" cellspacing="0" summary="Constant Field Values table, listing constant fields, and values">
-<caption><span>org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th scope="col">Constant Field</th>
-<th class="colLast" scope="col">Value</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><a name="org.apache.hadoop.hbase.client.Append.RETURN_RESULTS">
-<!--   -->
-</a><code>private&nbsp;static&nbsp;final&nbsp;<a href="http://docs.oracle.com/javase/7/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/client/Append.html#RETURN_RESULTS">RETURN_RESULTS</a></code></td>
-<td class="colLast"><code>"_rr_"</code></td>
-</tr>
-</tbody>
-</table>
-</li>
-<li class="blockList">
-<table border="0" cellpadding="3" cellspacing="0" summary="Constant Field Values table, listing constant fields, and values">
 <caption><span>org.apache.hadoop.hbase.client.org.apache.hadoop.hbase.client.AsyncProcess</span><span class="tabEnd">&nbsp;</span></caption>
 <tr>
 <th class="colFirst" scope="col">Modifier and Type</th>
@@ -3914,25 +3895,6 @@
 </li>
 <li class="blockList">
 <table border="0" cellpadding="3" cellspacing="0" summary="Constant Field Values table, listing constant fields, and values">
-<caption><span>org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th scope="col">Constant Field</th>
-<th class="colLast" scope="col">Value</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><a name="org.apache.hadoop.hbase.client.Increment.RETURN_RESULTS">
-<!--   -->
-</a><code>private&nbsp;static&nbsp;final&nbsp;<a href="http://docs.oracle.com/javase/7/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/client/Increment.html#RETURN_RESULTS">RETURN_RESULTS</a></code></td>
-<td class="colLast"><code>"_rr_"</code></td>
-</tr>
-</tbody>
-</table>
-</li>
-<li class="blockList">
-<table border="0" cellpadding="3" cellspacing="0" summary="Constant Field Values table, listing constant fields, and values">
 <caption><span>org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/MetricsConnection.html" title="class in org.apache.hadoop.hbase.client">MetricsConnection</a></span><span class="tabEnd">&nbsp;</span></caption>
 <tr>
 <th class="colFirst" scope="col">Modifier and Type</th>
@@ -4029,6 +3991,13 @@
 <td><code><a href="org/apache/hadoop/hbase/client/Mutation.html#OP_ATTRIBUTE_TTL">OP_ATTRIBUTE_TTL</a></code></td>
 <td class="colLast"><code>"_ttl"</code></td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.client.Mutation.RETURN_RESULTS">
+<!--   -->
+</a><code>private&nbsp;static&nbsp;final&nbsp;<a href="http://docs.oracle.com/javase/7/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/client/Mutation.html#RETURN_RESULTS">RETURN_RESULTS</a></code></td>
+<td class="colLast"><code>"_rr_"</code></td>
+</tr>
 </tbody>
 </table>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/devapidocs/index-all.html b/devapidocs/index-all.html
index 97a0ca6..38ffbaf 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -18244,6 +18244,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/ScanDeleteTracker.html#deleteOffset">deleteOffset</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/ScanDeleteTracker.html" title="class in org.apache.hadoop.hbase.regionserver">ScanDeleteTracker</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html#deleteOneWithFewerEntries(org.apache.hadoop.hbase.wal.WALSplitter.WriterAndPath,%20org.apache.hadoop.fs.Path)">deleteOneWithFewerEntries(WALSplitter.WriterAndPath, Path)</a></span> - Method in class org.apache.hadoop.hbase.wal.<a href="./org/apache/hadoop/hbase/wal/WALSplitter.LogRecoveredEditsOutputSink.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.LogRecoveredEditsOutputSink</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/mob/compactions/PartitionedMobCompactor.html#deletePath(org.apache.hadoop.fs.Path)">deletePath(Path)</a></span> - Method in class org.apache.hadoop.hbase.mob.compactions.<a href="./org/apache/hadoop/hbase/mob/compactions/PartitionedMobCompactor.html" title="class in org.apache.hadoop.hbase.mob.compactions">PartitionedMobCompactor</a></dt>
 <dd>
 <div class="block">Deletes a file.</div>
@@ -22645,6 +22647,8 @@
 <dd>
 <div class="block">Current version of file system.</div>
 </dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/wal/WALSplitter.html#fileBeingSplit">fileBeingSplit</a></span> - Variable in class org.apache.hadoop.hbase.wal.<a href="./org/apache/hadoop/hbase/wal/WALSplitter.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#fileChannel">fileChannel</a></span> - Variable in class org.apache.hadoop.hbase.io.hfile.bucket.<a href="./org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">FileIOEngine</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="./org/apache/hadoop/hbase/master/cleaner/FileCleanerDelegate.html" title="interface in org.apache.hadoop.hbase.master.cleaner"><span class="strong">FileCleanerDelegate</span></a> - Interface in <a href="./org/apache/hadoop/hbase/master/cleaner/package-summary.html">org.apache.hadoop.hbase.master.cleaner</a></dt>
@@ -27142,7 +27146,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/FixedFileTrailer.html#getComparatorClassName()">getComparatorClassName()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/FixedFileTrailer.html" title="class in org.apache.hadoop.hbase.io.hfile">FixedFileTrailer</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/wal/WALSplitter.html#getCompletedRecoveredEditsFilePath(org.apache.hadoop.fs.Path,%20java.lang.Long)">getCompletedRecoveredEditsFilePath(Path, Long)</a></span> - Static method in class org.apache.hadoop.hbase.wal.<a href="./org/apache/hadoop/hbase/wal/WALSplitter.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter</a></dt>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/wal/WALSplitter.html#getCompletedRecoveredEditsFilePath(org.apache.hadoop.fs.Path,%20long)">getCompletedRecoveredEditsFilePath(Path, long)</a></span> - Static method in class org.apache.hadoop.hbase.wal.<a href="./org/apache/hadoop/hbase/wal/WALSplitter.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter</a></dt>
 <dd>
 <div class="block">Get the completed recovered edits file path, renaming it to be by last edit
  in the file from its first edit.</div>
@@ -34483,7 +34487,7 @@
 <dd>
 <div class="block">Gets the online regions of the specified table.</div>
 </dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/wal/WALSplitter.html#getRegionSplitEditsPath(org.apache.hadoop.fs.FileSystem,%20org.apache.hadoop.hbase.wal.WAL.Entry,%20org.apache.hadoop.fs.Path,%20boolean)">getRegionSplitEditsPath(FileSystem, WAL.Entry, Path, boolean)</a></span> - Static method in class org.apache.hadoop.hbase.wal.<a href="./org/apache/hadoop/hbase/wal/WALSplitter.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter</a></dt>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/wal/WALSplitter.html#getRegionSplitEditsPath(org.apache.hadoop.fs.FileSystem,%20org.apache.hadoop.hbase.wal.WAL.Entry,%20org.apache.hadoop.fs.Path,%20org.apache.hadoop.fs.FileStatus)">getRegionSplitEditsPath(FileSystem, WAL.Entry, Path, FileStatus)</a></span> - Static method in class org.apache.hadoop.hbase.wal.<a href="./org/apache/hadoop/hbase/wal/WALSplitter.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter</a></dt>
 <dd>
 <div class="block">Path to a file under RECOVERED_EDITS_DIR directory of the region found in
  <code>logEntry</code> named for the sequenceid in the passed
@@ -46332,6 +46336,11 @@
 <div class="block">Return true when the next encoded value in <code>src</code> uses fixed-width
  Float64 encoding, false otherwise.</div>
 </dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/OrderedBytes.html#isFixedInt16(org.apache.hadoop.hbase.util.PositionedByteRange)">isFixedInt16(PositionedByteRange)</a></span> - Static method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/OrderedBytes.html" title="class in org.apache.hadoop.hbase.util">OrderedBytes</a></dt>
+<dd>
+<div class="block">Return true when the next encoded value in <code>src</code> uses fixed-width
+ Int16 encoding, false otherwise.</div>
+</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/OrderedBytes.html#isFixedInt32(org.apache.hadoop.hbase.util.PositionedByteRange)">isFixedInt32(PositionedByteRange)</a></span> - Static method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/OrderedBytes.html" title="class in org.apache.hadoop.hbase.util">OrderedBytes</a></dt>
 <dd>
 <div class="block">Return true when the next encoded value in <code>src</code> uses fixed-width
@@ -46342,6 +46351,11 @@
 <div class="block">Return true when the next encoded value in <code>src</code> uses fixed-width
  Int64 encoding, false otherwise.</div>
 </dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/OrderedBytes.html#isFixedInt8(org.apache.hadoop.hbase.util.PositionedByteRange)">isFixedInt8(PositionedByteRange)</a></span> - Static method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/OrderedBytes.html" title="class in org.apache.hadoop.hbase.util">OrderedBytes</a></dt>
+<dd>
+<div class="block">Return true when the next encoded value in <code>src</code> uses fixed-width
+ Int8 encoding, false otherwise.</div>
+</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/StripeStoreFileManager.CompactionOrFlushMergeCopy.html#isFlush">isFlush</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/StripeStoreFileManager.CompactionOrFlushMergeCopy.html" title="class in org.apache.hadoop.hbase.regionserver">StripeStoreFileManager.CompactionOrFlushMergeCopy</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/HRegion.WriteState.html#isFlushRequested()">isFlushRequested()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/HRegion.WriteState.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.WriteState</a></dt>
@@ -47251,6 +47265,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/Increment.html#isReturnResults()">isReturnResults()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/Mutation.html#isReturnResults()">isReturnResults()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/Scan.html#isReversed()">isReversed()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></dt>
 <dd>
 <div class="block">Get whether this scan is a reversed one.</div>
@@ -55583,6 +55599,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/compactions/CompactionConfiguration.html#minLocalityToForceCompact">minLocalityToForceCompact</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.compactions.<a href="./org/apache/hadoop/hbase/regionserver/compactions/CompactionConfiguration.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionConfiguration</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html#minLogSeqNum">minLogSeqNum</a></span> - Variable in class org.apache.hadoop.hbase.wal.<a href="./org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.WriterAndPath</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/codec/prefixtree/PrefixTreeBlockMeta.html#minMvccVersion">minMvccVersion</a></span> - Variable in class org.apache.hadoop.hbase.codec.prefixtree.<a href="./org/apache/hadoop/hbase/codec/prefixtree/PrefixTreeBlockMeta.html" title="class in org.apache.hadoop.hbase.codec.prefixtree">PrefixTreeBlockMeta</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.html#MINOR_VERSION_NO_CHECKSUM">MINOR_VERSION_NO_CHECKSUM</a></span> - Static variable in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileReaderImpl</a></dt>
@@ -72445,9 +72463,7 @@ service.</div>
 <div class="block">At master failover, for pending_open region, make sure
  sendRegionOpen RPC call is sent to the target regionserver</div>
 </dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/Append.html#RETURN_RESULTS">RETURN_RESULTS</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/Increment.html#RETURN_RESULTS">RETURN_RESULTS</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a></dt>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/Mutation.html#RETURN_RESULTS">RETURN_RESULTS</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/BlockCache.html#returnBlock(org.apache.hadoop.hbase.io.hfile.BlockCacheKey,%20org.apache.hadoop.hbase.io.hfile.Cacheable)">returnBlock(BlockCacheKey, Cacheable)</a></span> - Method in interface org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a></dt>
 <dd>
@@ -78599,6 +78615,8 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/Increment.html#setReturnResults(boolean)">setReturnResults(boolean)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/Mutation.html#setReturnResults(boolean)">setReturnResults(boolean)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/Scan.html#setReversed(boolean)">setReversed(boolean)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></dt>
 <dd>
 <div class="block">Set whether this scan is a reversed one</div>
@@ -93015,7 +93033,7 @@ the order they are declared.</div>
 <div class="block">Private data structure that wraps a Writer and its Path, also collecting statistics about the
  data written to this output.</div>
 </dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html#WALSplitter.WriterAndPath(org.apache.hadoop.fs.Path,%20org.apache.hadoop.hbase.wal.WALProvider.Writer)">WALSplitter.WriterAndPath(Path, WALProvider.Writer)</a></span> - Constructor for class org.apache.hadoop.hbase.wal.<a href="./org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.WriterAndPath</a></dt>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html#WALSplitter.WriterAndPath(org.apache.hadoop.fs.Path,%20org.apache.hadoop.hbase.wal.WALProvider.Writer,%20long)">WALSplitter.WriterAndPath(Path, WALProvider.Writer, long)</a></span> - Constructor for class org.apache.hadoop.hbase.wal.<a href="./org/apache/hadoop/hbase/wal/WALSplitter.WriterAndPath.html" title="class in org.apache.hadoop.hbase.wal">WALSplitter.WriterAndPath</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="./org/apache/hadoop/hbase/wal/WALSplitter.WriterThread.html" title="class in org.apache.hadoop.hbase.wal"><span class="strong">WALSplitter.WriterThread</span></a> - Class in <a href="./org/apache/hadoop/hbase/wal/package-summary.html">org.apache.hadoop.hbase.wal</a></dt>
 <dd>&nbsp;</dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/org/apache/hadoop/hbase/ProcedureInfo.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/ProcedureInfo.html b/devapidocs/org/apache/hadoop/hbase/ProcedureInfo.html
index 0faeeed..b00a700 100644
--- a/devapidocs/org/apache/hadoop/hbase/ProcedureInfo.html
+++ b/devapidocs/org/apache/hadoop/hbase/ProcedureInfo.html
@@ -448,16 +448,17 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Cloneable
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ProcedureInfo</h4>
-<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.52">ProcedureInfo</a>(long&nbsp;procId,
-             <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;procName,
-             <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;procOwner,
-             org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureState&nbsp;procState,
-             long&nbsp;parentId,
-             <a href="../../../../org/apache/hadoop/hbase/util/NonceKey.html" title="class in org.apache.hadoop.hbase.util">NonceKey</a>&nbsp;nonceKey,
-             org.apache.hadoop.hbase.protobuf.generated.ErrorHandlingProtos.ForeignExceptionMessage&nbsp;exception,
-             long&nbsp;lastUpdate,
-             long&nbsp;startTime,
-             byte[]&nbsp;result)</pre>
+<pre><a href="../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
+public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.53">ProcedureInfo</a>(long&nbsp;procId,
+                                       <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;procName,
+                                       <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;procOwner,
+                                       org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureState&nbsp;procState,
+                                       long&nbsp;parentId,
+                                       <a href="../../../../org/apache/hadoop/hbase/util/NonceKey.html" title="class in org.apache.hadoop.hbase.util">NonceKey</a>&nbsp;nonceKey,
+                                       org.apache.hadoop.hbase.protobuf.generated.ErrorHandlingProtos.ForeignExceptionMessage&nbsp;exception,
+                                       long&nbsp;lastUpdate,
+                                       long&nbsp;startTime,
+                                       byte[]&nbsp;result)</pre>
 </li>
 </ul>
 </li>
@@ -474,7 +475,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Cloneable
 <ul class="blockList">
 <li class="blockList">
 <h4>clone</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/ProcedureInfo.html" title="class in org.apache.hadoop.hbase">ProcedureInfo</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.79">clone</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/ProcedureInfo.html" title="class in org.apache.hadoop.hbase">ProcedureInfo</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.80">clone</a>()</pre>
 <dl>
 <dt><strong>Overrides:</strong></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</a></code>&nbsp;in class&nbsp;<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
@@ -487,7 +488,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Cloneable
 <ul class="blockList">
 <li class="blockList">
 <h4>getProcId</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.84">getProcId</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.85">getProcId</a>()</pre>
 </li>
 </ul>
 <a name="getProcName()">
@@ -496,7 +497,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Cloneable
 <ul class="blockList">
 <li class="blockList">
 <h4>getProcName</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/ProcedureInfo.html#line.88">getProcName</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/ProcedureInfo.html#line.89">getProcName</a>()</pre>
 </li>
 </ul>
 <a name="getProcOwner()">
@@ -505,7 +506,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Cloneable
 <ul class="blockList">
 <li class="blockList">
 <h4>getProcOwner</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/ProcedureInfo.html#line.92">getProcOwner</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/ProcedureInfo.html#line.93">getProcOwner</a>()</pre>
 </li>
 </ul>
 <a name="getProcState()">
@@ -514,7 +515,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Cloneable
 <ul class="blockList">
 <li class="blockList">
 <h4>getProcState</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureState&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.96">getProcState</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureState&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.97">getProcState</a>()</pre>
 </li>
 </ul>
 <a name="hasParentId()">
@@ -523,7 +524,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Cloneable
 <ul class="blockList">
 <li class="blockList">
 <h4>hasParentId</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.100">hasParentId</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.101">hasParentId</a>()</pre>
 </li>
 </ul>
 <a name="getParentId()">
@@ -532,7 +533,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Cloneable
 <ul class="blockList">
 <li class="blockList">
 <h4>getParentId</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.104">getParentId</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.105">getParentId</a>()</pre>
 </li>
 </ul>
 <a name="getNonceKey()">
@@ -541,7 +542,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Cloneable
 <ul class="blockList">
 <li class="blockList">
 <h4>getNonceKey</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/util/NonceKey.html" title="class in org.apache.hadoop.hbase.util">NonceKey</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.108">getNonceKey</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/util/NonceKey.html" title="class in org.apache.hadoop.hbase.util">NonceKey</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.109">getNonceKey</a>()</pre>
 </li>
 </ul>
 <a name="isFailed()">
@@ -550,7 +551,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Cloneable
 <ul class="blockList">
 <li class="blockList">
 <h4>isFailed</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.112">isFailed</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.113">isFailed</a>()</pre>
 </li>
 </ul>
 <a name="getException()">
@@ -559,7 +560,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Cloneable
 <ul class="blockList">
 <li class="blockList">
 <h4>getException</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.116">getException</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.117">getException</a>()</pre>
 </li>
 </ul>
 <a name="getForeignExceptionMessage()">
@@ -569,7 +570,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Cloneable
 <li class="blockList">
 <h4>getForeignExceptionMessage</h4>
 <pre><a href="../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-public&nbsp;org.apache.hadoop.hbase.protobuf.generated.ErrorHandlingProtos.ForeignExceptionMessage&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.124">getForeignExceptionMessage</a>()</pre>
+public&nbsp;org.apache.hadoop.hbase.protobuf.generated.ErrorHandlingProtos.ForeignExceptionMessage&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.125">getForeignExceptionMessage</a>()</pre>
 </li>
 </ul>
 <a name="getExceptionCause()">
@@ -578,7 +579,7 @@ public&nbsp;org.apache.hadoop.hbase.protobuf.generated.ErrorHandlingProtos.Forei
 <ul class="blockList">
 <li class="blockList">
 <h4>getExceptionCause</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/ProcedureInfo.html#line.128">getExceptionCause</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/ProcedureInfo.html#line.129">getExceptionCause</a>()</pre>
 </li>
 </ul>
 <a name="getExceptionMessage()">
@@ -587,7 +588,7 @@ public&nbsp;org.apache.hadoop.hbase.protobuf.generated.ErrorHandlingProtos.Forei
 <ul class="blockList">
 <li class="blockList">
 <h4>getExceptionMessage</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/ProcedureInfo.html#line.133">getExceptionMessage</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/ProcedureInfo.html#line.134">getExceptionMessage</a>()</pre>
 </li>
 </ul>
 <a name="getExceptionFullMessage()">
@@ -596,7 +597,7 @@ public&nbsp;org.apache.hadoop.hbase.protobuf.generated.ErrorHandlingProtos.Forei
 <ul class="blockList">
 <li class="blockList">
 <h4>getExceptionFullMessage</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/ProcedureInfo.html#line.138">getExceptionFullMessage</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/ProcedureInfo.html#line.139">getExceptionFullMessage</a>()</pre>
 </li>
 </ul>
 <a name="hasResultData()">
@@ -605,7 +606,7 @@ public&nbsp;org.apache.hadoop.hbase.protobuf.generated.ErrorHandlingProtos.Forei
 <ul class="blockList">
 <li class="blockList">
 <h4>hasResultData</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.143">hasResultData</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.144">hasResultData</a>()</pre>
 </li>
 </ul>
 <a name="getResult()">
@@ -614,7 +615,7 @@ public&nbsp;org.apache.hadoop.hbase.protobuf.generated.ErrorHandlingProtos.Forei
 <ul class="blockList">
 <li class="blockList">
 <h4>getResult</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.147">getResult</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.148">getResult</a>()</pre>
 </li>
 </ul>
 <a name="getStartTime()">
@@ -623,7 +624,7 @@ public&nbsp;org.apache.hadoop.hbase.protobuf.generated.ErrorHandlingProtos.Forei
 <ul class="blockList">
 <li class="blockList">
 <h4>getStartTime</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.151">getStartTime</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.152">getStartTime</a>()</pre>
 </li>
 </ul>
 <a name="getLastUpdate()">
@@ -632,7 +633,7 @@ public&nbsp;org.apache.hadoop.hbase.protobuf.generated.ErrorHandlingProtos.Forei
 <ul class="blockList">
 <li class="blockList">
 <h4>getLastUpdate</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.155">getLastUpdate</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.156">getLastUpdate</a>()</pre>
 </li>
 </ul>
 <a name="executionTime()">
@@ -641,7 +642,7 @@ public&nbsp;org.apache.hadoop.hbase.protobuf.generated.ErrorHandlingProtos.Forei
 <ul class="blockList">
 <li class="blockList">
 <h4>executionTime</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.159">executionTime</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.160">executionTime</a>()</pre>
 </li>
 </ul>
 <a name="hasClientAckTime()">
@@ -651,7 +652,7 @@ public&nbsp;org.apache.hadoop.hbase.protobuf.generated.ErrorHandlingProtos.Forei
 <li class="blockList">
 <h4>hasClientAckTime</h4>
 <pre><a href="../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.164">hasClientAckTime</a>()</pre>
+public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.165">hasClientAckTime</a>()</pre>
 </li>
 </ul>
 <a name="getClientAckTime()">
@@ -661,7 +662,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/P
 <li class="blockList">
 <h4>getClientAckTime</h4>
 <pre><a href="../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-public&nbsp;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.169">getClientAckTime</a>()</pre>
+public&nbsp;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.170">getClientAckTime</a>()</pre>
 </li>
 </ul>
 <a name="setClientAckTime(long)">
@@ -671,7 +672,7 @@ public&nbsp;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/Proc
 <li class="blockList">
 <h4>setClientAckTime</h4>
 <pre><a href="../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.174">setClientAckTime</a>(long&nbsp;timestamp)</pre>
+public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.175">setClientAckTime</a>(long&nbsp;timestamp)</pre>
 </li>
 </ul>
 <a name="convertToProcedureProto(org.apache.hadoop.hbase.ProcedureInfo)">
@@ -681,7 +682,7 @@ public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/Proc
 <li class="blockList">
 <h4>convertToProcedureProto</h4>
 <pre><a href="../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-public static&nbsp;org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.Procedure&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.183">convertToProcedureProto</a>(<a href="../../../../org/apache/hadoop/hbase/ProcedureInfo.html" title="class in org.apache.hadoop.hbase">ProcedureInfo</a>&nbsp;procInfo)</pre>
+public static&nbsp;org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.Procedure&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.184">convertToProcedureProto</a>(<a href="../../../../org/apache/hadoop/hbase/ProcedureInfo.html" title="class in org.apache.hadoop.hbase">ProcedureInfo</a>&nbsp;procInfo)</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>Convert the current <a href="../../../../org/apache/hadoop/hbase/ProcedureInfo.html" title="class in org.apache.hadoop.hbase"><code>ProcedureInfo</code></a> into a Protocol Buffers Procedure
  instance.</dd></dl>
 </li>
@@ -693,7 +694,7 @@ public static&nbsp;org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.Pr
 <li class="blockList">
 <h4>convert</h4>
 <pre><a href="../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-public static&nbsp;<a href="../../../../org/apache/hadoop/hbase/ProcedureInfo.html" title="class in org.apache.hadoop.hbase">ProcedureInfo</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.218">convert</a>(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.Procedure&nbsp;procProto)</pre>
+public static&nbsp;<a href="../../../../org/apache/hadoop/hbase/ProcedureInfo.html" title="class in org.apache.hadoop.hbase">ProcedureInfo</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.219">convert</a>(org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.Procedure&nbsp;procProto)</pre>
 <div class="block">Helper to convert the protobuf object.</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>Convert the current Protocol Buffers Procedure to <a href="../../../../org/apache/hadoop/hbase/ProcedureInfo.html" title="class in org.apache.hadoop.hbase"><code>ProcedureInfo</code></a>
  instance.</dd></dl>
@@ -706,7 +707,7 @@ public static&nbsp;<a href="../../../../org/apache/hadoop/hbase/ProcedureInfo.ht
 <li class="blockList">
 <h4>isProcedureOwner</h4>
 <pre><a href="../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-public static&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.245">isProcedureOwner</a>(<a href="../../../../org/apache/hadoop/hbase/ProcedureInfo.html" title="class in org.apache.hadoop.hbase">ProcedureInfo</a>&nbsp;procInfo,
+public static&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.246">isProcedureOwner</a>(<a href="../../../../org/apache/hadoop/hbase/ProcedureInfo.html" title="class in org.apache.hadoop.hbase">ProcedureInfo</a>&nbsp;procInfo,
                                                  <a href="../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user)</pre>
 <div class="block">Check if the user is this procedure's owner</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>procInfo</code> - the procedure to check</dd><dd><code>user</code> - the user</dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/org/apache/hadoop/hbase/classification/class-use/InterfaceAudience.Private.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/classification/class-use/InterfaceAudience.Private.html b/devapidocs/org/apache/hadoop/hbase/classification/class-use/InterfaceAudience.Private.html
index 52fa4c4..752bb87 100644
--- a/devapidocs/org/apache/hadoop/hbase/classification/class-use/InterfaceAudience.Private.html
+++ b/devapidocs/org/apache/hadoop/hbase/classification/class-use/InterfaceAudience.Private.html
@@ -994,6 +994,18 @@ service.</div>
  catalog tables, <code>hbase:meta</code> and <code>-ROOT-</code>.</div>
 </td>
 </tr>
+<tr class="rowColor">
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/ProcedureInfo.html#ProcedureInfo(long,%20java.lang.String,%20java.lang.String,%20org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureState,%20long,%20org.apache.hadoop.hbase.util.NonceKey,%20org.apache.hadoop.hbase.protobuf.generated.ErrorHandlingProtos.ForeignExceptionMessage,%20long,%20long,%20byte[])">ProcedureInfo</a></strong>(long&nbsp;procId,
+                          <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;procName,
+                          <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;procOwner,
+                          org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureState&nbsp;procState,
+                          long&nbsp;parentId,
+                          <a href="../../../../../../org/apache/hadoop/hbase/util/NonceKey.html" title="class in org.apache.hadoop.hbase.util">NonceKey</a>&nbsp;nonceKey,
+                          org.apache.hadoop.hbase.protobuf.generated.ErrorHandlingProtos.ForeignExceptionMessage&nbsp;exception,
+                          long&nbsp;lastUpdate,
+                          long&nbsp;startTime,
+                          byte[]&nbsp;result)</code>&nbsp;</td>
+</tr>
 </tbody>
 </table>
 </li>
@@ -1521,6 +1533,14 @@ service.</div>
                                     int&nbsp;nbRows)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>protected boolean</code></td>
+<td class="colLast"><span class="strong">Mutation.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/client/Mutation.html#isReturnResults()">isReturnResults</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a></code></td>
+<td class="colLast"><span class="strong">Mutation.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/client/Mutation.html#setReturnResults(boolean)">setReturnResults</a></strong>(boolean&nbsp;returnResults)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">Result.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/client/Result.html#setStatistics(org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionLoadStats)">setStatistics</a></strong>(org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionLoadStats&nbsp;loadStats)</code>
 <div class="block">Set load information about the region to the information about the result</div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/org/apache/hadoop/hbase/classification/class-use/InterfaceStability.Unstable.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/classification/class-use/InterfaceStability.Unstable.html b/devapidocs/org/apache/hadoop/hbase/classification/class-use/InterfaceStability.Unstable.html
index 20f2daa..1a288a4 100644
--- a/devapidocs/org/apache/hadoop/hbase/classification/class-use/InterfaceStability.Unstable.html
+++ b/devapidocs/org/apache/hadoop/hbase/classification/class-use/InterfaceStability.Unstable.html
@@ -136,19 +136,19 @@
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/http/package-summary.html">org.apache.hadoop.hbase.http</a></td>
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/http/lib/package-summary.html">org.apache.hadoop.hbase.http.lib</a></td>
 <td class="colLast">
 <div class="block">
- Copied from hadoop source code.<br>
- See https://issues.apache.org/jira/browse/HADOOP-10232 to know why.</div>
+ This package provides user-selectable (via configuration) classes that add
+ functionality to the web UI.</div>
 </td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/http/lib/package-summary.html">org.apache.hadoop.hbase.http.lib</a></td>
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/http/package-summary.html">org.apache.hadoop.hbase.http</a></td>
 <td class="colLast">
 <div class="block">
- This package provides user-selectable (via configuration) classes that add
- functionality to the web UI.</div>
+ Copied from hadoop source code.<br>
+ See https://issues.apache.org/jira/browse/HADOOP-10232 to know why.</div>
 </td>
 </tr>
 </tbody>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/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 ccc01bb..72b5264 100644
--- a/devapidocs/org/apache/hadoop/hbase/classification/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/classification/package-tree.html
@@ -81,10 +81,10 @@
 <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="strong">InterfaceStability.Evolving</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/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="strong">InterfaceStability.Stable</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/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="strong">InterfaceAudience.Private</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/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="strong">InterfaceAudience.LimitedPrivate</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/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="strong">InterfaceStability.Stable</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/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="strong">InterfaceAudience.Public</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/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="strong">InterfaceAudience.Private</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/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="strong">InterfaceStability.Unstable</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
 </ul>
 </div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/org/apache/hadoop/hbase/client/Append.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/Append.html b/devapidocs/org/apache/hadoop/hbase/client/Append.html
index 693324f..dcf91a1 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/Append.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/Append.html
@@ -61,13 +61,13 @@
 <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="#fields_inherited_from_class_org.apache.hadoop.hbase.client.Mutation">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>Field&nbsp;|&nbsp;</li>
 <li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
 <li><a href="#method_detail">Method</a></li>
 </ul>
@@ -140,17 +140,6 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" ti
 <!--   -->
 </a>
 <h3>Field Summary</h3>
-<table class="overviewSummary" 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 <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/Append.html#RETURN_RESULTS">RETURN_RESULTS</a></strong></code>&nbsp;</td>
-</tr>
-</table>
 <ul class="blockList">
 <li class="blockList"><a name="fields_inherited_from_class_org.apache.hadoop.hbase.client.Mutation">
 <!--   -->
@@ -321,24 +310,6 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" ti
 <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="RETURN_RESULTS">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>RETURN_RESULTS</h4>
-<pre>private static final&nbsp;<a href="http://docs.oracle.com/javase/7/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/client/Append.html#line.50">RETURN_RESULTS</a></pre>
-<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.client.Append.RETURN_RESULTS">Constant Field Values</a></dd></dl>
-</li>
-</ul>
-</li>
-</ul>
 <!-- ========= CONSTRUCTOR DETAIL ======== -->
 <ul class="blockList">
 <li class="blockList"><a name="constructor_detail">
@@ -351,7 +322,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>Append</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.76">Append</a>(byte[]&nbsp;row)</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.75">Append</a>(byte[]&nbsp;row)</pre>
 <div class="block">Create a Append operation for the specified row.
  <p>
  At least one column must be appended to.</div>
@@ -364,7 +335,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>Append</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.83">Append</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;a)</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.82">Append</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;a)</pre>
 <div class="block">Copy constructor</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>a</code> - </dd></dl>
 </li>
@@ -375,7 +346,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" ti
 <ul class="blockListLast">
 <li class="blockList">
 <h4>Append</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.99">Append</a>(byte[]&nbsp;rowArray,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.98">Append</a>(byte[]&nbsp;rowArray,
       int&nbsp;rowOffset,
       int&nbsp;rowLength)</pre>
 <div class="block">Create a Append operation for the specified row.
@@ -398,8 +369,11 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>setReturnResults</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.57">setReturnResults</a>(boolean&nbsp;returnResults)</pre>
-<dl><dt><span class="strong">Parameters:</span></dt><dd><code>returnResults</code> - True (default) if the append operation should return the results.
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.56">setReturnResults</a>(boolean&nbsp;returnResults)</pre>
+<dl>
+<dt><strong>Overrides:</strong></dt>
+<dd><code><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#setReturnResults(boolean)">setReturnResults</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a></code></dd>
+<dt><span class="strong">Parameters:</span></dt><dd><code>returnResults</code> - True (default) if the append operation should return the results.
           A client that is not interested in the result can save network
           bandwidth setting this to false.</dd></dl>
 </li>
@@ -411,7 +385,10 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" ti
 <li class="blockList">
 <h4>isReturnResults</h4>
 <pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.65">isReturnResults</a>()</pre>
-<dl><dt><span class="strong">Returns:</span></dt><dd>current setting for returnResults</dd></dl>
+<dl>
+<dt><strong>Overrides:</strong></dt>
+<dd><code><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#isReturnResults()">isReturnResults</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a></code></dd>
+<dt><span class="strong">Returns:</span></dt><dd>current setting for returnResults</dd></dl>
 </li>
 </ul>
 <a name="add(byte[], byte[], byte[])">
@@ -420,7 +397,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>add</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.111">add</a>(byte[]&nbsp;family,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.110">add</a>(byte[]&nbsp;family,
          byte[]&nbsp;qualifier,
          byte[]&nbsp;value)</pre>
 <div class="block">Add the specified column and value to this Append operation.</div>
@@ -434,7 +411,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>add</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.122">add</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.121">add</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)</pre>
 <div class="block">Add column and value to this Append operation.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>cell</code> - </dd>
 <dt><span class="strong">Returns:</span></dt><dd>This instance</dd></dl>
@@ -446,7 +423,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>setAttribute</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.136">setAttribute</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.135">setAttribute</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
                   byte[]&nbsp;value)</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Attributes.html#setAttribute(java.lang.String,%20byte[])">Attributes</a></code></strong></div>
 <div class="block">Sets an attribute.
@@ -466,7 +443,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>setId</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.141">setId</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;id)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.140">setId</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;id)</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/OperationWithAttributes.html#setId(java.lang.String)">OperationWithAttributes</a></code></strong></div>
 <div class="block">This method allows you to set an identifier on an operation. The original
  motivation for this was to allow the identifier to be used in slow query
@@ -485,7 +462,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>setDurability</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.146">setDurability</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;d)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.145">setDurability</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;d)</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#setDurability(org.apache.hadoop.hbase.client.Durability)">Mutation</a></code></strong></div>
 <div class="block">Set the durability for this mutation</div>
 <dl>
@@ -500,7 +477,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>setFamilyCellMap</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.151">setFamilyCellMap</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a>&lt;byte[],<a href="http://docs.oracle.com/javase/7/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;map)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.150">setFamilyCellMap</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a>&lt;byte[],<a href="http://docs.oracle.com/javase/7/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;map)</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#setFamilyCellMap(java.util.NavigableMap)">Mutation</a></code></strong></div>
 <div class="block">Method for setting the put's familyMap</div>
 <dl>
@@ -515,7 +492,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>setClusterIds</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.156">setClusterIds</a>(<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a>&gt;&nbsp;clusterIds)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.155">setClusterIds</a>(<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a>&gt;&nbsp;clusterIds)</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#setClusterIds(java.util.List)">Mutation</a></code></strong></div>
 <div class="block">Marks that the clusters with the given clusterIds have consumed the mutation</div>
 <dl>
@@ -530,7 +507,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>setCellVisibility</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.161">setCellVisibility</a>(<a href="../../../../../org/apache/hadoop/hbase/security/visibility/CellVisibility.html" title="class in org.apache.hadoop.hbase.security.visibility">CellVisibility</a>&nbsp;expression)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.160">setCellVisibility</a>(<a href="../../../../../org/apache/hadoop/hbase/security/visibility/CellVisibility.html" title="class in org.apache.hadoop.hbase.security.visibility">CellVisibility</a>&nbsp;expression)</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#setCellVisibility(org.apache.hadoop.hbase.security.visibility.CellVisibility)">Mutation</a></code></strong></div>
 <div class="block">Sets the visibility expression associated with cells in this Mutation.
  It is illegal to set <code>CellVisibility</code> on <code>Delete</code> mutation.</div>
@@ -546,7 +523,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>setACL</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.166">setACL</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.165">setACL</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
             <a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&nbsp;perms)</pre>
 <dl>
 <dt><strong>Overrides:</strong></dt>
@@ -560,7 +537,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>setACL</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.171">setACL</a>(<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;&nbsp;perms)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.170">setACL</a>(<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/security/access/Permission.html" title="class in org.apache.hadoop.hbase.security.access">Permission</a>&gt;&nbsp;perms)</pre>
 <dl>
 <dt><strong>Overrides:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#setACL(java.util.Map)">setACL</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a></code></dd>
@@ -573,7 +550,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" ti
 <ul class="blockListLast">
 <li class="blockList">
 <h4>setTTL</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.176">setTTL</a>(long&nbsp;ttl)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.175">setTTL</a>(long&nbsp;ttl)</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#setTTL(long)">Mutation</a></code></strong></div>
 <div class="block">Set the TTL desired for the result of the mutation, in milliseconds.</div>
 <dl>
@@ -635,13 +612,13 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" ti
 <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="#fields_inherited_from_class_org.apache.hadoop.hbase.client.Mutation">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>Field&nbsp;|&nbsp;</li>
 <li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
 <li><a href="#method_detail">Method</a></li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/org/apache/hadoop/hbase/client/Delete.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/Delete.html b/devapidocs/org/apache/hadoop/hbase/client/Delete.html
index 0424c3d..3da3bf5 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/Delete.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/Delete.html
@@ -362,7 +362,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#cellScanner()">cellScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#checkRow(byte[])">checkRow</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#checkRow(byte[],%20int,%20int)">checkRow</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#checkRow(java.nio.ByteBuffer)">checkRow</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#compareTo(org.apache.hadoop.hbase.client.Row)">compareTo</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#createPutKeyValue(byte[],%20byte[],%20long,%20byte[])">createPutKeyValue</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#createPutKeyValue(byte[],%20byte[],%20long,%20byte[],%20org.apache.hadoop.hbase.Tag[])">createPutKeyValue</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#createPutKeyValue(byte[],%20java.
 nio.ByteBuffer,%20long,%20java.nio.ByteBuffer,%20org.apache.hadoop.hbase.Tag[])">createPutKeyValue</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#extraHeapSize()">extraHeapSize</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#getACL()">getACL</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#getCellList(byte[])">getCellList</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#getCellVisibility()">getCellVisibility</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#getClusterIds()">getClusterIds</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#getDurability()">getDurability</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#getFamilyCellMap()">getFamilyCellMap</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#getFingerprint()">getFingerprint</a>, <a href="../../../../../org/apache/hadoop/hbase/c
 lient/Mutation.html#getRow()">getRow</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#getTimeStamp()">getTimeStamp</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#getTTL()">getTTL</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#heapSize()">heapSize</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#isEmpty()">isEmpty</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#numFamilies()">numFamilies</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#size()">size</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#cellScanner()">cellScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#checkRow(byte[])">checkRow</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#checkRow(byte[],%20int,%20int)">checkRow</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#checkRow(java.nio.ByteBuffer)">checkRow</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#compareTo(org.apache.hadoop.hbase.client.Row)">compareTo</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#createPutKeyValue(byte[],%20byte[],%20long,%20byte[])">createPutKeyValue</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#createPutKeyValue(byte[],%20byte[],%20long,%20byte[],%20org.apache.hadoop.hbase.Tag[])">createPutKeyValue</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#createPutKeyValue(byte[],%20java.
 nio.ByteBuffer,%20long,%20java.nio.ByteBuffer,%20org.apache.hadoop.hbase.Tag[])">createPutKeyValue</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#extraHeapSize()">extraHeapSize</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#getACL()">getACL</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#getCellList(byte[])">getCellList</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#getCellVisibility()">getCellVisibility</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#getClusterIds()">getClusterIds</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#getDurability()">getDurability</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#getFamilyCellMap()">getFamilyCellMap</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#getFingerprint()">getFingerprint</a>, <a href="../../../../../org/apache/hadoop/hbase/c
 lient/Mutation.html#getRow()">getRow</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#getTimeStamp()">getTimeStamp</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#getTTL()">getTTL</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#heapSize()">heapSize</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#isEmpty()">isEmpty</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#isReturnResults()">isReturnResults</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#numFamilies()">numFamilies</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#setReturnResults(boolean)">setReturnResults</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#size()">size</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_org.apache.hadoop.hbase.client.OperationWithAttributes">


[04/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.TestFlusher.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.TestFlusher.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.TestFlusher.html
index aa5da14..b06a764 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.TestFlusher.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.TestFlusher.html
@@ -41,1157 +41,1234 @@
 <span class="sourceLineNo">033</span>import java.lang.reflect.Field;<a name="line.33"></a>
 <span class="sourceLineNo">034</span>import java.security.PrivilegedExceptionAction;<a name="line.34"></a>
 <span class="sourceLineNo">035</span>import java.util.ArrayList;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.Collection;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.HashSet;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import java.util.List;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import java.util.Set;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.41"></a>
-<span class="sourceLineNo">042</span><a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.commons.logging.Log;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.commons.logging.LogFactory;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.conf.Configuration;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.fs.FSDataInputStream;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.fs.FileStatus;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.fs.FileSystem;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.fs.Path;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.fs.PathFilter;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.Cell;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.HConstants;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.MiniHBaseCluster;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.ServerName;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.TableName;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.client.Get;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.client.Put;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.client.Result;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.client.Table;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.master.HMaster;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.monitoring.MonitoredTask;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.protobuf.generated.ZooKeeperProtos.SplitLogTask.RecoveryMode;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.regionserver.DefaultStoreEngine;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.regionserver.DefaultStoreFlusher;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.regionserver.FlushRequestListener;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.regionserver.FlushRequester;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.regionserver.MemStoreSnapshot;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.regionserver.MultiVersionConcurrencyControl;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.regionserver.Region;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.regionserver.RegionScanner;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.regionserver.RegionServerServices;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.regionserver.Store;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.regionserver.throttle.ThroughputController;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.security.User;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.testclassification.RegionServerTests;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.util.EnvironmentEdge;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.util.HFileTestUtil;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.wal.DefaultWALProvider;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.wal.WALKey;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hdfs.DFSInputStream;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.junit.After;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.junit.AfterClass;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.junit.Before;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.junit.BeforeClass;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.junit.Rule;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.junit.Test;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.junit.experimental.categories.Category;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.junit.rules.TestName;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.mockito.Mockito;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.mockito.invocation.InvocationOnMock;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.mockito.stubbing.Answer;<a name="line.112"></a>
-<span class="sourceLineNo">113</span><a name="line.113"></a>
-<span class="sourceLineNo">114</span>/**<a name="line.114"></a>
-<span class="sourceLineNo">115</span> * Test replay of edits out of a WAL split.<a name="line.115"></a>
-<span class="sourceLineNo">116</span> */<a name="line.116"></a>
-<span class="sourceLineNo">117</span>@Category({RegionServerTests.class, MediumTests.class})<a name="line.117"></a>
-<span class="sourceLineNo">118</span>public class TestWALReplay {<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  private static final Log LOG = LogFactory.getLog(TestWALReplay.class);<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  static final HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.120"></a>
-<span class="sourceLineNo">121</span>  private final EnvironmentEdge ee = EnvironmentEdgeManager.getDelegate();<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  private Path hbaseRootDir = null;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>  private String logName;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  private Path oldLogDir;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  private Path logDir;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>  private FileSystem fs;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>  private Configuration conf;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  private RecoveryMode mode;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>  private WALFactory wals;<a name="line.129"></a>
-<span class="sourceLineNo">130</span><a name="line.130"></a>
-<span class="sourceLineNo">131</span>  @Rule<a name="line.131"></a>
-<span class="sourceLineNo">132</span>  public final TestName currentTest = new TestName();<a name="line.132"></a>
-<span class="sourceLineNo">133</span><a name="line.133"></a>
+<span class="sourceLineNo">036</span>import java.util.Arrays;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import java.util.Collection;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import java.util.HashSet;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import java.util.List;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import java.util.Set;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.42"></a>
+<span class="sourceLineNo">043</span><a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.commons.logging.Log;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.commons.logging.LogFactory;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.conf.Configuration;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.fs.FSDataInputStream;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.fs.FileStatus;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.fs.FileSystem;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.fs.Path;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.fs.PathFilter;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.Cell;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.HConstants;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.MiniHBaseCluster;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.ServerName;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.TableName;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.client.Get;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.client.Put;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.client.Result;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.client.Table;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.master.HMaster;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.monitoring.MonitoredTask;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.protobuf.generated.ZooKeeperProtos.SplitLogTask.RecoveryMode;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.regionserver.DefaultStoreEngine;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.regionserver.DefaultStoreFlusher;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.regionserver.FlushRequestListener;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.regionserver.FlushRequester;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.regionserver.MemStoreSnapshot;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.regionserver.MultiVersionConcurrencyControl;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.regionserver.Region;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.regionserver.RegionScanner;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.regionserver.RegionServerServices;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.regionserver.Store;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.regionserver.throttle.ThroughputController;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.security.User;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.testclassification.RegionServerTests;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.util.EnvironmentEdge;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.util.HFileTestUtil;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.wal.DefaultWALProvider;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.wal.WALKey;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hdfs.DFSInputStream;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.junit.After;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.junit.AfterClass;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.junit.Before;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.junit.BeforeClass;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.junit.Rule;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.junit.Test;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.junit.experimental.categories.Category;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.junit.rules.TestName;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.mockito.Mockito;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.mockito.invocation.InvocationOnMock;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.mockito.stubbing.Answer;<a name="line.113"></a>
+<span class="sourceLineNo">114</span><a name="line.114"></a>
+<span class="sourceLineNo">115</span>/**<a name="line.115"></a>
+<span class="sourceLineNo">116</span> * Test replay of edits out of a WAL split.<a name="line.116"></a>
+<span class="sourceLineNo">117</span> */<a name="line.117"></a>
+<span class="sourceLineNo">118</span>@Category({RegionServerTests.class, MediumTests.class})<a name="line.118"></a>
+<span class="sourceLineNo">119</span>public class TestWALReplay {<a name="line.119"></a>
+<span class="sourceLineNo">120</span>  private static final Log LOG = LogFactory.getLog(TestWALReplay.class);<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  static final HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.121"></a>
+<span class="sourceLineNo">122</span>  private final EnvironmentEdge ee = EnvironmentEdgeManager.getDelegate();<a name="line.122"></a>
+<span class="sourceLineNo">123</span>  private Path hbaseRootDir = null;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  private String logName;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>  private Path oldLogDir;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  private Path logDir;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>  private FileSystem fs;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>  private Configuration conf;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>  private RecoveryMode mode;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>  private WALFactory wals;<a name="line.130"></a>
+<span class="sourceLineNo">131</span><a name="line.131"></a>
+<span class="sourceLineNo">132</span>  @Rule<a name="line.132"></a>
+<span class="sourceLineNo">133</span>  public final TestName currentTest = new TestName();<a name="line.133"></a>
 <span class="sourceLineNo">134</span><a name="line.134"></a>
-<span class="sourceLineNo">135</span>  @BeforeClass<a name="line.135"></a>
-<span class="sourceLineNo">136</span>  public static void setUpBeforeClass() throws Exception {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    conf.setBoolean("dfs.support.append", true);<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    // The below config supported by 0.20-append and CDH3b2<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    conf.setInt("dfs.client.block.recovery.retries", 2);<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    TEST_UTIL.startMiniCluster(3);<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    Path hbaseRootDir =<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      TEST_UTIL.getDFSCluster().getFileSystem().makeQualified(new Path("/hbase"));<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    LOG.info("hbase.rootdir=" + hbaseRootDir);<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    FSUtils.setRootDir(conf, hbaseRootDir);<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>  @AfterClass<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  public static void tearDownAfterClass() throws Exception {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    TEST_UTIL.shutdownMiniCluster();<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  }<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>  @Before<a name="line.153"></a>
-<span class="sourceLineNo">154</span>  public void setUp() throws Exception {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    this.conf = HBaseConfiguration.create(TEST_UTIL.getConfiguration());<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    this.fs = TEST_UTIL.getDFSCluster().getFileSystem();<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    this.hbaseRootDir = FSUtils.getRootDir(this.conf);<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    this.oldLogDir = new Path(this.hbaseRootDir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    this.logName = DefaultWALProvider.getWALDirectoryName(currentTest.getMethodName() + "-manual");<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    this.logDir = new Path(this.hbaseRootDir, logName);<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    if (TEST_UTIL.getDFSCluster().getFileSystem().exists(this.hbaseRootDir)) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      TEST_UTIL.getDFSCluster().getFileSystem().delete(this.hbaseRootDir, true);<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    }<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    this.mode = (conf.getBoolean(HConstants.DISTRIBUTED_LOG_REPLAY_KEY, false) ?<a name="line.164"></a>
-<span class="sourceLineNo">165</span>        RecoveryMode.LOG_REPLAY : RecoveryMode.LOG_SPLITTING);<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    this.wals = new WALFactory(conf, null, currentTest.getMethodName());<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>  @After<a name="line.169"></a>
-<span class="sourceLineNo">170</span>  public void tearDown() throws Exception {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    this.wals.close();<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    TEST_UTIL.getDFSCluster().getFileSystem().delete(this.hbaseRootDir, true);<a name="line.172"></a>
-<span class="sourceLineNo">173</span>  }<a name="line.173"></a>
-<span class="sourceLineNo">174</span><a name="line.174"></a>
-<span class="sourceLineNo">175</span>  /*<a name="line.175"></a>
-<span class="sourceLineNo">176</span>   * @param p Directory to cleanup<a name="line.176"></a>
-<span class="sourceLineNo">177</span>   */<a name="line.177"></a>
-<span class="sourceLineNo">178</span>  private void deleteDir(final Path p) throws IOException {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    if (this.fs.exists(p)) {<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      if (!this.fs.delete(p, true)) {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>        throw new IOException("Failed remove of " + p);<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      }<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>   *<a name="line.187"></a>
-<span class="sourceLineNo">188</span>   * @throws Exception<a name="line.188"></a>
-<span class="sourceLineNo">189</span>   */<a name="line.189"></a>
-<span class="sourceLineNo">190</span>  @Test<a name="line.190"></a>
-<span class="sourceLineNo">191</span>  public void testReplayEditsAfterRegionMovedWithMultiCF() throws Exception {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    final TableName tableName =<a name="line.192"></a>
-<span class="sourceLineNo">193</span>        TableName.valueOf("testReplayEditsAfterRegionMovedWithMultiCF");<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    byte[] family1 = Bytes.toBytes("cf1");<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    byte[] family2 = Bytes.toBytes("cf2");<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    byte[] qualifier = Bytes.toBytes("q");<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    byte[] value = Bytes.toBytes("testV");<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    byte[][] familys = { family1, family2 };<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    TEST_UTIL.createTable(tableName, familys);<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    Table htable = TEST_UTIL.getConnection().getTable(tableName);<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    Put put = new Put(Bytes.toBytes("r1"));<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    put.addColumn(family1, qualifier, value);<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    htable.put(put);<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    ResultScanner resultScanner = htable.getScanner(new Scan());<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    int count = 0;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    while (resultScanner.next() != null) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      count++;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    }<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    resultScanner.close();<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    assertEquals(1, count);<a name="line.210"></a>
-<span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span>    MiniHBaseCluster hbaseCluster = TEST_UTIL.getMiniHBaseCluster();<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    List&lt;HRegion&gt; regions = hbaseCluster.getRegions(tableName);<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    assertEquals(1, regions.size());<a name="line.214"></a>
-<span class="sourceLineNo">215</span><a name="line.215"></a>
-<span class="sourceLineNo">216</span>    // move region to another regionserver<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    Region destRegion = regions.get(0);<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    int originServerNum = hbaseCluster<a name="line.218"></a>
-<span class="sourceLineNo">219</span>        .getServerWith(destRegion.getRegionInfo().getRegionName());<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    assertTrue("Please start more than 1 regionserver", hbaseCluster<a name="line.220"></a>
-<span class="sourceLineNo">221</span>        .getRegionServerThreads().size() &gt; 1);<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    int destServerNum = 0;<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    while (destServerNum == originServerNum) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      destServerNum++;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    }<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    HRegionServer originServer = hbaseCluster.getRegionServer(originServerNum);<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    HRegionServer destServer = hbaseCluster.getRegionServer(destServerNum);<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    // move region to destination regionserver<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    moveRegionAndWait(destRegion, destServer);<a name="line.229"></a>
-<span class="sourceLineNo">230</span><a name="line.230"></a>
-<span class="sourceLineNo">231</span>    // delete the row<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    Delete del = new Delete(Bytes.toBytes("r1"));<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    htable.delete(del);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    resultScanner = htable.getScanner(new Scan());<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    count = 0;<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    while (resultScanner.next() != null) {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      count++;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    }<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    resultScanner.close();<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    assertEquals(0, count);<a name="line.240"></a>
-<span class="sourceLineNo">241</span><a name="line.241"></a>
-<span class="sourceLineNo">242</span>    // flush region and make major compaction<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    Region region =  destServer.getOnlineRegion(destRegion.getRegionInfo().getRegionName());<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    region.flush(true);<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    // wait to complete major compaction<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    for (Store store : region.getStores()) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      store.triggerMajorCompaction();<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    }<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    region.compact(true);<a name="line.249"></a>
-<span class="sourceLineNo">250</span><a name="line.250"></a>
-<span class="sourceLineNo">251</span>    // move region to origin regionserver<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    moveRegionAndWait(destRegion, originServer);<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    // abort the origin regionserver<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    originServer.abort("testing");<a name="line.254"></a>
-<span class="sourceLineNo">255</span><a name="line.255"></a>
-<span class="sourceLineNo">256</span>    // see what we get<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    Result result = htable.get(new Get(Bytes.toBytes("r1")));<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    if (result != null) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      assertTrue("Row is deleted, but we get" + result.toString(),<a name="line.259"></a>
-<span class="sourceLineNo">260</span>          (result == null) || result.isEmpty());<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    }<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    resultScanner.close();<a name="line.262"></a>
-<span class="sourceLineNo">263</span>  }<a name="line.263"></a>
-<span class="sourceLineNo">264</span><a name="line.264"></a>
-<span class="sourceLineNo">265</span>  private void moveRegionAndWait(Region destRegion, HRegionServer destServer)<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      throws InterruptedException, MasterNotRunningException,<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      ZooKeeperConnectionException, IOException {<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    HMaster master = TEST_UTIL.getMiniHBaseCluster().getMaster();<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    TEST_UTIL.getHBaseAdmin().move(<a name="line.269"></a>
-<span class="sourceLineNo">270</span>        destRegion.getRegionInfo().getEncodedNameAsBytes(),<a name="line.270"></a>
-<span class="sourceLineNo">271</span>        Bytes.toBytes(destServer.getServerName().getServerName()));<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    while (true) {<a name="line.272"></a>
-<span class="sourceLineNo">273</span>      ServerName serverName = master.getAssignmentManager()<a name="line.273"></a>
-<span class="sourceLineNo">274</span>        .getRegionStates().getRegionServerOfRegion(destRegion.getRegionInfo());<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      if (serverName != null &amp;&amp; serverName.equals(destServer.getServerName())) {<a name="line.275"></a>
-<span class="sourceLineNo">276</span>        TEST_UTIL.assertRegionOnServer(<a name="line.276"></a>
-<span class="sourceLineNo">277</span>          destRegion.getRegionInfo(), serverName, 200);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>        break;<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      }<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      Thread.sleep(10);<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><a name="line.283"></a>
-<span class="sourceLineNo">284</span>  /**<a name="line.284"></a>
-<span class="sourceLineNo">285</span>   * Tests for hbase-2727.<a name="line.285"></a>
-<span class="sourceLineNo">286</span>   * @throws Exception<a name="line.286"></a>
-<span class="sourceLineNo">287</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-2727"&gt;HBASE-2727&lt;/a&gt;<a name="line.287"></a>
-<span class="sourceLineNo">288</span>   */<a name="line.288"></a>
-<span class="sourceLineNo">289</span>  @Test<a name="line.289"></a>
-<span class="sourceLineNo">290</span>  public void test2727() throws Exception {<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    // Test being able to have &gt; 1 set of edits in the recovered.edits directory.<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    // Ensure edits are replayed properly.<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    final TableName tableName =<a name="line.293"></a>
-<span class="sourceLineNo">294</span>        TableName.valueOf("test2727");<a name="line.294"></a>
-<span class="sourceLineNo">295</span><a name="line.295"></a>
-<span class="sourceLineNo">296</span>    MultiVersionConcurrencyControl mvcc = new MultiVersionConcurrencyControl();<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    HRegionInfo hri = createBasic3FamilyHRegionInfo(tableName);<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    Path basedir = FSUtils.getTableDir(hbaseRootDir, tableName);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    deleteDir(basedir);<a name="line.299"></a>
-<span class="sourceLineNo">300</span><a name="line.300"></a>
-<span class="sourceLineNo">301</span>    HTableDescriptor htd = createBasic3FamilyHTD(tableName);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    Region region2 = HBaseTestingUtility.createRegionAndWAL(hri, hbaseRootDir, this.conf, htd);<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    HBaseTestingUtility.closeRegionAndWAL(region2);<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    final byte [] rowName = tableName.getName();<a name="line.304"></a>
-<span class="sourceLineNo">305</span><a name="line.305"></a>
-<span class="sourceLineNo">306</span>    WAL wal1 = createWAL(this.conf);<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    // Add 1k to each family.<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    final int countPerFamily = 1000;<a name="line.308"></a>
-<span class="sourceLineNo">309</span><a name="line.309"></a>
-<span class="sourceLineNo">310</span>    for (HColumnDescriptor hcd: htd.getFamilies()) {<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      addWALEdits(tableName, hri, rowName, hcd.getName(), countPerFamily, ee,<a name="line.311"></a>
-<span class="sourceLineNo">312</span>          wal1, htd, mvcc);<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    }<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    wal1.shutdown();<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    runWALSplit(this.conf);<a name="line.315"></a>
-<span class="sourceLineNo">316</span><a name="line.316"></a>
-<span class="sourceLineNo">317</span>    WAL wal2 = createWAL(this.conf);<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    // Add 1k to each family.<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    for (HColumnDescriptor hcd: htd.getFamilies()) {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      addWALEdits(tableName, hri, rowName, hcd.getName(), countPerFamily,<a name="line.320"></a>
-<span class="sourceLineNo">321</span>          ee, wal2, htd, mvcc);<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    }<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    wal2.shutdown();<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    runWALSplit(this.conf);<a name="line.324"></a>
-<span class="sourceLineNo">325</span><a name="line.325"></a>
-<span class="sourceLineNo">326</span>    WAL wal3 = createWAL(this.conf);<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    try {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      HRegion region = HRegion.openHRegion(this.conf, this.fs, hbaseRootDir, hri, htd, wal3);<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      long seqid = region.getOpenSeqNum();<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      // The regions opens with sequenceId as 1. With 6k edits, its sequence number reaches 6k + 1.<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      // When opened, this region would apply 6k edits, and increment the sequenceId by 1<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      assertTrue(seqid &gt; mvcc.getWritePoint());<a name="line.332"></a>
-<span class="sourceLineNo">333</span>      assertEquals(seqid - 1, mvcc.getWritePoint());<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      LOG.debug("region.getOpenSeqNum(): " + region.getOpenSeqNum() + ", wal3.id: "<a name="line.334"></a>
-<span class="sourceLineNo">335</span>          + mvcc.getReadPoint());<a name="line.335"></a>
-<span class="sourceLineNo">336</span><a name="line.336"></a>
-<span class="sourceLineNo">337</span>      // TODO: Scan all.<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      region.close();<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    } finally {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      wal3.close();<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    }<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>  /**<a name="line.344"></a>
-<span class="sourceLineNo">345</span>   * Test case of HRegion that is only made out of bulk loaded files.  Assert<a name="line.345"></a>
-<span class="sourceLineNo">346</span>   * that we don't 'crash'.<a name="line.346"></a>
-<span class="sourceLineNo">347</span>   * @throws IOException<a name="line.347"></a>
-<span class="sourceLineNo">348</span>   * @throws IllegalAccessException<a name="line.348"></a>
-<span class="sourceLineNo">349</span>   * @throws NoSuchFieldException<a name="line.349"></a>
-<span class="sourceLineNo">350</span>   * @throws IllegalArgumentException<a name="line.350"></a>
-<span class="sourceLineNo">351</span>   * @throws SecurityException<a name="line.351"></a>
-<span class="sourceLineNo">352</span>   */<a name="line.352"></a>
-<span class="sourceLineNo">353</span>  @Test<a name="line.353"></a>
-<span class="sourceLineNo">354</span>  public void testRegionMadeOfBulkLoadedFilesOnly()<a name="line.354"></a>
-<span class="sourceLineNo">355</span>  throws IOException, SecurityException, IllegalArgumentException,<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      NoSuchFieldException, IllegalAccessException, InterruptedException {<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    final TableName tableName =<a name="line.357"></a>
-<span class="sourceLineNo">358</span>        TableName.valueOf("testRegionMadeOfBulkLoadedFilesOnly");<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    final HRegionInfo hri = createBasic3FamilyHRegionInfo(tableName);<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    final Path basedir = new Path(this.hbaseRootDir, tableName.getNameAsString());<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    deleteDir(basedir);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    final HTableDescriptor htd = createBasic3FamilyHTD(tableName);<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    Region region2 = HBaseTestingUtility.createRegionAndWAL(hri, hbaseRootDir, this.conf, htd);<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    HBaseTestingUtility.closeRegionAndWAL(region2);<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    WAL wal = createWAL(this.conf);<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    Region region = HRegion.openHRegion(hri, htd, wal, this.conf);<a name="line.366"></a>
-<span class="sourceLineNo">367</span><a name="line.367"></a>
-<span class="sourceLineNo">368</span>    byte [] family = htd.getFamilies().iterator().next().getName();<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    Path f =  new Path(basedir, "hfile");<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    HFileTestUtil.createHFile(this.conf, fs, f, family, family, Bytes.toBytes(""),<a name="line.370"></a>
-<span class="sourceLineNo">371</span>        Bytes.toBytes("z"), 10);<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    List &lt;Pair&lt;byte[],String&gt;&gt;  hfs= new ArrayList&lt;Pair&lt;byte[],String&gt;&gt;(1);<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    hfs.add(Pair.newPair(family, f.toString()));<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    region.bulkLoadHFiles(hfs, true, null);<a name="line.374"></a>
-<span class="sourceLineNo">375</span><a name="line.375"></a>
-<span class="sourceLineNo">376</span>    // Add an edit so something in the WAL<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    byte [] row = tableName.getName();<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    region.put((new Put(row)).addColumn(family, family, family));<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    wal.sync();<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    final int rowsInsertedCount = 11;<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span>    assertEquals(rowsInsertedCount, getScannedCount(region.getScanner(new Scan())));<a name="line.382"></a>
-<span class="sourceLineNo">383</span><a name="line.383"></a>
-<span class="sourceLineNo">384</span>    // Now 'crash' the region by stealing its wal<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    final Configuration newConf = HBaseConfiguration.create(this.conf);<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    User user = HBaseTestingUtility.getDifferentUser(newConf,<a name="line.386"></a>
-<span class="sourceLineNo">387</span>        tableName.getNameAsString());<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    user.runAs(new PrivilegedExceptionAction() {<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      @Override<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      public Object run() throws Exception {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        runWALSplit(newConf);<a name="line.391"></a>
-<span class="sourceLineNo">392</span>        WAL wal2 = createWAL(newConf);<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span>        HRegion region2 = HRegion.openHRegion(newConf, FileSystem.get(newConf),<a name="line.394"></a>
-<span class="sourceLineNo">395</span>          hbaseRootDir, hri, htd, wal2);<a name="line.395"></a>
-<span class="sourceLineNo">396</span>        long seqid2 = region2.getOpenSeqNum();<a name="line.396"></a>
-<span class="sourceLineNo">397</span>        assertTrue(seqid2 &gt; -1);<a name="line.397"></a>
-<span class="sourceLineNo">398</span>        assertEquals(rowsInsertedCount, getScannedCount(region2.getScanner(new Scan())));<a name="line.398"></a>
-<span class="sourceLineNo">399</span><a name="line.399"></a>
-<span class="sourceLineNo">400</span>        // I can't close wal1.  Its been appropriated when we split.<a name="line.400"></a>
-<span class="sourceLineNo">401</span>        region2.close();<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        wal2.close();<a name="line.402"></a>
-<span class="sourceLineNo">403</span>        return null;<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      }<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>  /**<a name="line.408"></a>
-<span class="sourceLineNo">409</span>   * HRegion test case that is made of a major compacted HFile (created with three bulk loaded<a name="line.409"></a>
-<span class="sourceLineNo">410</span>   * files) and an edit in the memstore.<a name="line.410"></a>
-<span class="sourceLineNo">411</span>   * This is for HBASE-10958 "[dataloss] Bulk loading with seqids can prevent some log entries<a name="line.411"></a>
-<span class="sourceLineNo">412</span>   * from being replayed"<a name="line.412"></a>
-<span class="sourceLineNo">413</span>   * @throws IOException<a name="line.413"></a>
-<span class="sourceLineNo">414</span>   * @throws IllegalAccessException<a name="line.414"></a>
-<span class="sourceLineNo">415</span>   * @throws NoSuchFieldException<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   * @throws IllegalArgumentException<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * @throws SecurityException<a name="line.417"></a>
-<span class="sourceLineNo">418</span>   */<a name="line.418"></a>
-<span class="sourceLineNo">419</span>  @Test<a name="line.419"></a>
-<span class="sourceLineNo">420</span>  public void testCompactedBulkLoadedFiles()<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      throws IOException, SecurityException, IllegalArgumentException,<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      NoSuchFieldException, IllegalAccessException, InterruptedException {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    final TableName tableName =<a name="line.423"></a>
-<span class="sourceLineNo">424</span>        TableName.valueOf("testCompactedBulkLoadedFiles");<a name="line.424"></a>
-<span class="sourceLineNo">425</span>    final HRegionInfo hri = createBasic3FamilyHRegionInfo(tableName);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    final Path basedir = new Path(this.hbaseRootDir, tableName.getNameAsString());<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    deleteDir(basedir);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    final HTableDescriptor htd = createBasic3FamilyHTD(tableName);<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    HRegion region2 = HBaseTestingUtility.createRegionAndWAL(hri, hbaseRootDir, this.conf, htd);<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    HBaseTestingUtility.closeRegionAndWAL(region2);<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    WAL wal = createWAL(this.conf);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    HRegion region = HRegion.openHRegion(hri, htd, wal, this.conf);<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>    // Add an edit so something in the WAL<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    byte [] row = tableName.getName();<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    byte [] family = htd.getFamilies().iterator().next().getName();<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    region.put((new Put(row)).addColumn(family, family, family));<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    wal.sync();<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>    List &lt;Pair&lt;byte[],String&gt;&gt;  hfs= new ArrayList&lt;Pair&lt;byte[],String&gt;&gt;(1);<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    for (int i = 0; i &lt; 3; i++) {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>      Path f = new Path(basedir, "hfile"+i);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      HFileTestUtil.createHFile(this.conf, fs, f, family, family, Bytes.toBytes(i + "00"),<a name="line.443"></a>
-<span class="sourceLineNo">444</span>          Bytes.toBytes(i + "50"), 10);<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      hfs.add(Pair.newPair(family, f.toString()));<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    }<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    region.bulkLoadHFiles(hfs, true, null);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    final int rowsInsertedCount = 31;<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    assertEquals(rowsInsertedCount, getScannedCount(region.getScanner(new Scan())));<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>    // major compact to turn all the bulk loaded files into one normal file<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    region.compact(true);<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    assertEquals(rowsInsertedCount, getScannedCount(region.getScanner(new Scan())));<a name="line.453"></a>
-<span class="sourceLineNo">454</span><a name="line.454"></a>
-<span class="sourceLineNo">455</span>    // Now 'crash' the region by stealing its wal<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    final Configuration newConf = HBaseConfiguration.create(this.conf);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    User user = HBaseTestingUtility.getDifferentUser(newConf,<a name="line.457"></a>
-<span class="sourceLineNo">458</span>        tableName.getNameAsString());<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    user.runAs(new PrivilegedExceptionAction() {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      @Override<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      public Object run() throws Exception {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        runWALSplit(newConf);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>        WAL wal2 = createWAL(newConf);<a name="line.463"></a>
-<span class="sourceLineNo">464</span><a name="line.464"></a>
-<span class="sourceLineNo">465</span>        HRegion region2 = HRegion.openHRegion(newConf, FileSystem.get(newConf),<a name="line.465"></a>
-<span class="sourceLineNo">466</span>            hbaseRootDir, hri, htd, wal2);<a name="line.466"></a>
-<span class="sourceLineNo">467</span>        long seqid2 = region2.getOpenSeqNum();<a name="line.467"></a>
-<span class="sourceLineNo">468</span>        assertTrue(seqid2 &gt; -1);<a name="line.468"></a>
-<span class="sourceLineNo">469</span>        assertEquals(rowsInsertedCount, getScannedCount(region2.getScanner(new Scan())));<a name="line.469"></a>
-<span class="sourceLineNo">470</span><a name="line.470"></a>
-<span class="sourceLineNo">471</span>        // I can't close wal1.  Its been appropriated when we split.<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        region2.close();<a name="line.472"></a>
-<span class="sourceLineNo">473</span>        wal2.close();<a name="line.473"></a>
-<span class="sourceLineNo">474</span>        return null;<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>  }<a name="line.477"></a>
-<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">135</span><a name="line.135"></a>
+<span class="sourceLineNo">136</span>  @BeforeClass<a name="line.136"></a>
+<span class="sourceLineNo">137</span>  public static void setUpBeforeClass() throws Exception {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    conf.setBoolean("dfs.support.append", true);<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    // The below config supported by 0.20-append and CDH3b2<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    conf.setInt("dfs.client.block.recovery.retries", 2);<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    TEST_UTIL.startMiniCluster(3);<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    Path hbaseRootDir =<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      TEST_UTIL.getDFSCluster().getFileSystem().makeQualified(new Path("/hbase"));<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    LOG.info("hbase.rootdir=" + hbaseRootDir);<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    FSUtils.setRootDir(conf, hbaseRootDir);<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>  @AfterClass<a name="line.149"></a>
+<span class="sourceLineNo">150</span>  public static void tearDownAfterClass() throws Exception {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    TEST_UTIL.shutdownMiniCluster();<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>  @Before<a name="line.154"></a>
+<span class="sourceLineNo">155</span>  public void setUp() throws Exception {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    this.conf = HBaseConfiguration.create(TEST_UTIL.getConfiguration());<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    this.fs = TEST_UTIL.getDFSCluster().getFileSystem();<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    this.hbaseRootDir = FSUtils.getRootDir(this.conf);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    this.oldLogDir = new Path(this.hbaseRootDir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    this.logName = DefaultWALProvider.getWALDirectoryName(currentTest.getMethodName() + "-manual");<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    this.logDir = new Path(this.hbaseRootDir, logName);<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    if (TEST_UTIL.getDFSCluster().getFileSystem().exists(this.hbaseRootDir)) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      TEST_UTIL.getDFSCluster().getFileSystem().delete(this.hbaseRootDir, true);<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    }<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    this.mode = (conf.getBoolean(HConstants.DISTRIBUTED_LOG_REPLAY_KEY, false) ?<a name="line.165"></a>
+<span class="sourceLineNo">166</span>        RecoveryMode.LOG_REPLAY : RecoveryMode.LOG_SPLITTING);<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    this.wals = new WALFactory(conf, null, currentTest.getMethodName());<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  }<a name="line.168"></a>
+<span class="sourceLineNo">169</span><a name="line.169"></a>
+<span class="sourceLineNo">170</span>  @After<a name="line.170"></a>
+<span class="sourceLineNo">171</span>  public void tearDown() throws Exception {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    this.wals.close();<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    TEST_UTIL.getDFSCluster().getFileSystem().delete(this.hbaseRootDir, true);<a name="line.173"></a>
+<span class="sourceLineNo">174</span>  }<a name="line.174"></a>
+<span class="sourceLineNo">175</span><a name="line.175"></a>
+<span class="sourceLineNo">176</span>  /*<a name="line.176"></a>
+<span class="sourceLineNo">177</span>   * @param p Directory to cleanup<a name="line.177"></a>
+<span class="sourceLineNo">178</span>   */<a name="line.178"></a>
+<span class="sourceLineNo">179</span>  private void deleteDir(final Path p) throws IOException {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    if (this.fs.exists(p)) {<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      if (!this.fs.delete(p, true)) {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>        throw new IOException("Failed remove of " + p);<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>  /**<a name="line.187"></a>
+<span class="sourceLineNo">188</span>   *<a name="line.188"></a>
+<span class="sourceLineNo">189</span>   * @throws Exception<a name="line.189"></a>
+<span class="sourceLineNo">190</span>   */<a name="line.190"></a>
+<span class="sourceLineNo">191</span>  @Test<a name="line.191"></a>
+<span class="sourceLineNo">192</span>  public void testReplayEditsAfterRegionMovedWithMultiCF() throws Exception {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    final TableName tableName =<a name="line.193"></a>
+<span class="sourceLineNo">194</span>        TableName.valueOf("testReplayEditsAfterRegionMovedWithMultiCF");<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    byte[] family1 = Bytes.toBytes("cf1");<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    byte[] family2 = Bytes.toBytes("cf2");<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    byte[] qualifier = Bytes.toBytes("q");<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    byte[] value = Bytes.toBytes("testV");<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    byte[][] familys = { family1, family2 };<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    TEST_UTIL.createTable(tableName, familys);<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    Table htable = TEST_UTIL.getConnection().getTable(tableName);<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    Put put = new Put(Bytes.toBytes("r1"));<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    put.addColumn(family1, qualifier, value);<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    htable.put(put);<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    ResultScanner resultScanner = htable.getScanner(new Scan());<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    int count = 0;<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    while (resultScanner.next() != null) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      count++;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    }<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    resultScanner.close();<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    assertEquals(1, count);<a name="line.211"></a>
+<span class="sourceLineNo">212</span><a name="line.212"></a>
+<span class="sourceLineNo">213</span>    MiniHBaseCluster hbaseCluster = TEST_UTIL.getMiniHBaseCluster();<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    List&lt;HRegion&gt; regions = hbaseCluster.getRegions(tableName);<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    assertEquals(1, regions.size());<a name="line.215"></a>
+<span class="sourceLineNo">216</span><a name="line.216"></a>
+<span class="sourceLineNo">217</span>    // move region to another regionserver<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    Region destRegion = regions.get(0);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    int originServerNum = hbaseCluster<a name="line.219"></a>
+<span class="sourceLineNo">220</span>        .getServerWith(destRegion.getRegionInfo().getRegionName());<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    assertTrue("Please start more than 1 regionserver", hbaseCluster<a name="line.221"></a>
+<span class="sourceLineNo">222</span>        .getRegionServerThreads().size() &gt; 1);<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    int destServerNum = 0;<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    while (destServerNum == originServerNum) {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>      destServerNum++;<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    }<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    HRegionServer originServer = hbaseCluster.getRegionServer(originServerNum);<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    HRegionServer destServer = hbaseCluster.getRegionServer(destServerNum);<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    // move region to destination regionserver<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    moveRegionAndWait(destRegion, destServer);<a name="line.230"></a>
+<span class="sourceLineNo">231</span><a name="line.231"></a>
+<span class="sourceLineNo">232</span>    // delete the row<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    Delete del = new Delete(Bytes.toBytes("r1"));<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    htable.delete(del);<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    resultScanner = htable.getScanner(new Scan());<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    count = 0;<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    while (resultScanner.next() != null) {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      count++;<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    }<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    resultScanner.close();<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    assertEquals(0, count);<a name="line.241"></a>
+<span class="sourceLineNo">242</span><a name="line.242"></a>
+<span class="sourceLineNo">243</span>    // flush region and make major compaction<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    Region region =  destServer.getOnlineRegion(destRegion.getRegionInfo().getRegionName());<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    region.flush(true);<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    // wait to complete major compaction<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    for (Store store : region.getStores()) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      store.triggerMajorCompaction();<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    }<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    region.compact(true);<a name="line.250"></a>
+<span class="sourceLineNo">251</span><a name="line.251"></a>
+<span class="sourceLineNo">252</span>    // move region to origin regionserver<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    moveRegionAndWait(destRegion, originServer);<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    // abort the origin regionserver<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    originServer.abort("testing");<a name="line.255"></a>
+<span class="sourceLineNo">256</span><a name="line.256"></a>
+<span class="sourceLineNo">257</span>    // see what we get<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    Result result = htable.get(new Get(Bytes.toBytes("r1")));<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    if (result != null) {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      assertTrue("Row is deleted, but we get" + result.toString(),<a name="line.260"></a>
+<span class="sourceLineNo">261</span>          (result == null) || result.isEmpty());<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    }<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    resultScanner.close();<a name="line.263"></a>
+<span class="sourceLineNo">264</span>  }<a name="line.264"></a>
+<span class="sourceLineNo">265</span><a name="line.265"></a>
+<span class="sourceLineNo">266</span>  private void moveRegionAndWait(Region destRegion, HRegionServer destServer)<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      throws InterruptedException, MasterNotRunningException,<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      ZooKeeperConnectionException, IOException {<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    HMaster master = TEST_UTIL.getMiniHBaseCluster().getMaster();<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    TEST_UTIL.getHBaseAdmin().move(<a name="line.270"></a>
+<span class="sourceLineNo">271</span>        destRegion.getRegionInfo().getEncodedNameAsBytes(),<a name="line.271"></a>
+<span class="sourceLineNo">272</span>        Bytes.toBytes(destServer.getServerName().getServerName()));<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    while (true) {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      ServerName serverName = master.getAssignmentManager()<a name="line.274"></a>
+<span class="sourceLineNo">275</span>        .getRegionStates().getRegionServerOfRegion(destRegion.getRegionInfo());<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      if (serverName != null &amp;&amp; serverName.equals(destServer.getServerName())) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>        TEST_UTIL.assertRegionOnServer(<a name="line.277"></a>
+<span class="sourceLineNo">278</span>          destRegion.getRegionInfo(), serverName, 200);<a name="line.278"></a>
+<span class="sourceLineNo">279</span>        break;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      }<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      Thread.sleep(10);<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    }<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  }<a name="line.283"></a>
+<span class="sourceLineNo">284</span><a name="line.284"></a>
+<span class="sourceLineNo">285</span>  /**<a name="line.285"></a>
+<span class="sourceLineNo">286</span>   * Tests for hbase-2727.<a name="line.286"></a>
+<span class="sourceLineNo">287</span>   * @throws Exception<a name="line.287"></a>
+<span class="sourceLineNo">288</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-2727"&gt;HBASE-2727&lt;/a&gt;<a name="line.288"></a>
+<span class="sourceLineNo">289</span>   */<a name="line.289"></a>
+<span class="sourceLineNo">290</span>  @Test<a name="line.290"></a>
+<span class="sourceLineNo">291</span>  public void test2727() throws Exception {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    // Test being able to have &gt; 1 set of edits in the recovered.edits directory.<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    // Ensure edits are replayed properly.<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    final TableName tableName =<a name="line.294"></a>
+<span class="sourceLineNo">295</span>        TableName.valueOf("test2727");<a name="line.295"></a>
+<span class="sourceLineNo">296</span><a name="line.296"></a>
+<span class="sourceLineNo">297</span>    MultiVersionConcurrencyControl mvcc = new MultiVersionConcurrencyControl();<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    HRegionInfo hri = createBasic3FamilyHRegionInfo(tableName);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    Path basedir = FSUtils.getTableDir(hbaseRootDir, tableName);<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    deleteDir(basedir);<a name="line.300"></a>
+<span class="sourceLineNo">301</span><a name="line.301"></a>
+<span class="sourceLineNo">302</span>    HTableDescriptor htd = createBasic3FamilyHTD(tableName);<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    Region region2 = HBaseTestingUtility.createRegionAndWAL(hri, hbaseRootDir, this.conf, htd);<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    HBaseTestingUtility.closeRegionAndWAL(region2);<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    final byte [] rowName = tableName.getName();<a name="line.305"></a>
+<span class="sourceLineNo">306</span><a name="line.306"></a>
+<span class="sourceLineNo">307</span>    WAL wal1 = createWAL(this.conf);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    // Add 1k to each family.<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    final int countPerFamily = 1000;<a name="line.309"></a>
+<span class="sourceLineNo">310</span><a name="line.310"></a>
+<span class="sourceLineNo">311</span>    for (HColumnDescriptor hcd: htd.getFamilies()) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      addWALEdits(tableName, hri, rowName, hcd.getName(), countPerFamily, ee,<a name="line.312"></a>
+<span class="sourceLineNo">313</span>          wal1, htd, mvcc);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    wal1.shutdown();<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    runWALSplit(this.conf);<a name="line.316"></a>
+<span class="sourceLineNo">317</span><a name="line.317"></a>
+<span class="sourceLineNo">318</span>    WAL wal2 = createWAL(this.conf);<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    // Add 1k to each family.<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    for (HColumnDescriptor hcd: htd.getFamilies()) {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      addWALEdits(tableName, hri, rowName, hcd.getName(), countPerFamily,<a name="line.321"></a>
+<span class="sourceLineNo">322</span>          ee, wal2, htd, mvcc);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    }<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    wal2.shutdown();<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    runWALSplit(this.conf);<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>    WAL wal3 = createWAL(this.conf);<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    try {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      HRegion region = HRegion.openHRegion(this.conf, this.fs, hbaseRootDir, hri, htd, wal3);<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      long seqid = region.getOpenSeqNum();<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      // The regions opens with sequenceId as 1. With 6k edits, its sequence number reaches 6k + 1.<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      // When opened, this region would apply 6k edits, and increment the sequenceId by 1<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      assertTrue(seqid &gt; mvcc.getWritePoint());<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      assertEquals(seqid - 1, mvcc.getWritePoint());<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      LOG.debug("region.getOpenSeqNum(): " + region.getOpenSeqNum() + ", wal3.id: "<a name="line.335"></a>
+<span class="sourceLineNo">336</span>          + mvcc.getReadPoint());<a name="line.336"></a>
+<span class="sourceLineNo">337</span><a name="line.337"></a>
+<span class="sourceLineNo">338</span>      // TODO: Scan all.<a name="line.338"></a>
+<span class="sourceLineNo">339</span>      region.close();<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    } finally {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      wal3.close();<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><a name="line.344"></a>
+<span class="sourceLineNo">345</span>  /**<a name="line.345"></a>
+<span class="sourceLineNo">346</span>   * Test case of HRegion that is only made out of bulk loaded files.  Assert<a name="line.346"></a>
+<span class="sourceLineNo">347</span>   * that we don't 'crash'.<a name="line.347"></a>
+<span class="sourceLineNo">348</span>   * @throws IOException<a name="line.348"></a>
+<span class="sourceLineNo">349</span>   * @throws IllegalAccessException<a name="line.349"></a>
+<span class="sourceLineNo">350</span>   * @throws NoSuchFieldException<a name="line.350"></a>
+<span class="sourceLineNo">351</span>   * @throws IllegalArgumentException<a name="line.351"></a>
+<span class="sourceLineNo">352</span>   * @throws SecurityException<a name="line.352"></a>
+<span class="sourceLineNo">353</span>   */<a name="line.353"></a>
+<span class="sourceLineNo">354</span>  @Test<a name="line.354"></a>
+<span class="sourceLineNo">355</span>  public void testRegionMadeOfBulkLoadedFilesOnly()<a name="line.355"></a>
+<span class="sourceLineNo">356</span>  throws IOException, SecurityException, IllegalArgumentException,<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      NoSuchFieldException, IllegalAccessException, InterruptedException {<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    final TableName tableName =<a name="line.358"></a>
+<span class="sourceLineNo">359</span>        TableName.valueOf("testRegionMadeOfBulkLoadedFilesOnly");<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    final HRegionInfo hri = createBasic3FamilyHRegionInfo(tableName);<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    final Path basedir = new Path(this.hbaseRootDir, tableName.getNameAsString());<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    deleteDir(basedir);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    final HTableDescriptor htd = createBasic3FamilyHTD(tableName);<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    Region region2 = HBaseTestingUtility.createRegionAndWAL(hri, hbaseRootDir, this.conf, htd);<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    HBaseTestingUtility.closeRegionAndWAL(region2);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    WAL wal = createWAL(this.conf);<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    Region region = HRegion.openHRegion(hri, htd, wal, this.conf);<a name="line.367"></a>
+<span class="sourceLineNo">368</span><a name="line.368"></a>
+<span class="sourceLineNo">369</span>    byte [] family = htd.getFamilies().iterator().next().getName();<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    Path f =  new Path(basedir, "hfile");<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    HFileTestUtil.createHFile(this.conf, fs, f, family, family, Bytes.toBytes(""),<a name="line.371"></a>
+<span class="sourceLineNo">372</span>        Bytes.toBytes("z"), 10);<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    List &lt;Pair&lt;byte[],String&gt;&gt;  hfs= new ArrayList&lt;Pair&lt;byte[],String&gt;&gt;(1);<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    hfs.add(Pair.newPair(family, f.toString()));<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    region.bulkLoadHFiles(hfs, true, null);<a name="line.375"></a>
+<span class="sourceLineNo">376</span><a name="line.376"></a>
+<span class="sourceLineNo">377</span>    // Add an edit so something in the WAL<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    byte [] row = tableName.getName();<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    region.put((new Put(row)).addColumn(family, family, family));<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    wal.sync();<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    final int rowsInsertedCount = 11;<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span>    assertEquals(rowsInsertedCount, getScannedCount(region.getScanner(new Scan())));<a name="line.383"></a>
+<span class="sourceLineNo">384</span><a name="line.384"></a>
+<span class="sourceLineNo">385</span>    // Now 'crash' the region by stealing its wal<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    final Configuration newConf = HBaseConfiguration.create(this.conf);<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    User user = HBaseTestingUtility.getDifferentUser(newConf,<a name="line.387"></a>
+<span class="sourceLineNo">388</span>        tableName.getNameAsString());<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    user.runAs(new PrivilegedExceptionAction() {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>      @Override<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      public Object run() throws Exception {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>        runWALSplit(newConf);<a name="line.392"></a>
+<span class="sourceLineNo">393</span>        WAL wal2 = createWAL(newConf);<a name="line.393"></a>
+<span class="sourceLineNo">394</span><a name="line.394"></a>
+<span class="sourceLineNo">395</span>        HRegion region2 = HRegion.openHRegion(newConf, FileSystem.get(newConf),<a name="line.395"></a>
+<span class="sourceLineNo">396</span>          hbaseRootDir, hri, htd, wal2);<a name="line.396"></a>
+<span class="sourceLineNo">397</span>        long seqid2 = region2.getOpenSeqNum();<a name="line.397"></a>
+<span class="sourceLineNo">398</span>        assertTrue(seqid2 &gt; -1);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>        assertEquals(rowsInsertedCount, getScannedCount(region2.getScanner(new Scan())));<a name="line.399"></a>
+<span class="sourceLineNo">400</span><a name="line.400"></a>
+<span class="sourceLineNo">401</span>        // I can't close wal1.  Its been appropriated when we split.<a name="line.401"></a>
+<span class="sourceLineNo">402</span>        region2.close();<a name="line.402"></a>
+<span class="sourceLineNo">403</span>        wal2.close();<a name="line.403"></a>
+<span class="sourceLineNo">404</span>        return null;<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><a name="line.408"></a>
+<span class="sourceLineNo">409</span>  /**<a name="line.409"></a>
+<span class="sourceLineNo">410</span>   * HRegion test case that is made of a major compacted HFile (created with three bulk loaded<a name="line.410"></a>
+<span class="sourceLineNo">411</span>   * files) and an edit in the memstore.<a name="line.411"></a>
+<span class="sourceLineNo">412</span>   * This is for HBASE-10958 "[dataloss] Bulk loading with seqids can prevent some log entries<a name="line.412"></a>
+<span class="sourceLineNo">413</span>   * from being replayed"<a name="line.413"></a>
+<span class="sourceLineNo">414</span>   * @throws IOException<a name="line.414"></a>
+<span class="sourceLineNo">415</span>   * @throws IllegalAccessException<a name="line.415"></a>
+<span class="sourceLineNo">416</span>   * @throws NoSuchFieldException<a name="line.416"></a>
+<span class="sourceLineNo">417</span>   * @throws IllegalArgumentException<a name="line.417"></a>
+<span class="sourceLineNo">418</span>   * @throws SecurityException<a name="line.418"></a>
+<span class="sourceLineNo">419</span>   */<a name="line.419"></a>
+<span class="sourceLineNo">420</span>  @Test<a name="line.420"></a>
+<span class="sourceLineNo">421</span>  public void testCompactedBulkLoadedFiles()<a name="line.421"></a>
+<span class="sourceLineNo">422</span>      throws IOException, SecurityException, IllegalArgumentException,<a name="line.422"></a>
+<span class="sourceLineNo">423</span>      NoSuchFieldException, IllegalAccessException, InterruptedException {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>    final TableName tableName =<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        TableName.valueOf("testCompactedBulkLoadedFiles");<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    final HRegionInfo hri = createBasic3FamilyHRegionInfo(tableName);<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    final Path basedir = new Path(this.hbaseRootDir, tableName.getNameAsString());<a name="line.427"></a>
+<span class="sourceLineNo">428</span>    deleteDir(basedir);<a name="line.428"></a>
+<span class="sourceLineNo">429</span>    final HTableDescriptor htd = createBasic3FamilyHTD(tableName);<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    HRegion region2 = HBaseTestingUtility.createRegionAndWAL(hri, hbaseRootDir, this.conf, htd);<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    HBaseTestingUtility.closeRegionAndWAL(region2);<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    WAL wal = createWAL(this.conf);<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    HRegion region = HRegion.openHRegion(hri, htd, wal, this.conf);<a name="line.433"></a>
+<span class="sourceLineNo">434</span><a name="line.434"></a>
+<span class="sourceLineNo">435</span>    // Add an edit so something in the WAL<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    byte [] row = tableName.getName();<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    byte [] family = htd.getFamilies().iterator().next().getName();<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    region.put((new Put(row)).addColumn(family, family, family));<a name="line.438"></a>
+<span class="sourceLineNo">439</span>    wal.sync();<a name="line.439"></a>
+<span class="sourceLineNo">440</span><a name="line.440"></a>
+<span class="sourceLineNo">441</span>    List &lt;Pair&lt;byte[],String&gt;&gt;  hfs= new ArrayList&lt;Pair&lt;byte[],String&gt;&gt;(1);<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    for (int i = 0; i &lt; 3; i++) {<a name="line.442"></a>
+<span class="sourceLineNo">443</span>      Path f = new Path(basedir, "hfile"+i);<a name="line.443"></a>
+<span class="sourceLineNo">444</span>      HFileTestUtil.createHFile(this.conf, fs, f, family, family, Bytes.toBytes(i + "00"),<a name="line.444"></a>
+<span class="sourceLineNo">445</span>          Bytes.toBytes(i + "50"), 10);<a name="line.445"></a>
+<span class="sourceLineNo">446</span>      hfs.add(Pair.newPair(family, f.toString()));<a name="line.446"></a>
+<span class="sourceLineNo">447</span>    }<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    region.bulkLoadHFiles(hfs, true, null);<a name="line.448"></a>
+<span class="sourceLineNo">449</span>    final int rowsInsertedCount = 31;<a name="line.449"></a>
+<span class="sourceLineNo">450</span>    assertEquals(rowsInsertedCount, getScannedCount(region.getScanner(new Scan())));<a name="line.450"></a>
+<span class="sourceLineNo">451</span><a name="line.451"></a>
+<span class="sourceLineNo">452</span>    // major compact to turn all the bulk loaded files into one normal file<a name="line.452"></a>
+<span class="sourceLineNo">453</span>    region.compact(true);<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    assertEquals(rowsInsertedCount, getScannedCount(region.getScanner(new Scan())));<a name="line.454"></a>
+<span class="sourceLineNo">455</span><a name="line.455"></a>
+<span class="sourceLineNo">456</span>    // Now 'crash' the region by stealing its wal<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    final Configuration newConf = HBaseConfiguration.create(this.conf);<a name="line.457"></a>
+<span class="sourceLineNo">458</span>    User user = HBaseTestingUtility.getDifferentUser(newConf,<a name="line.458"></a>
+<span class="sourceLineNo">459</span>        tableName.getNameAsString());<a name="line.459"></a>
+<span class="sourceLineNo">460</span>    user.runAs(new PrivilegedExceptionAction() {<a name="line.460"></a>
+<span class="sourceLineNo">461</span>      @Override<a name="line.461"></a>
+<span class="sourceLineNo">462</span>      public Object run() throws Exception {<a name="line.462"></a>
+<span class="sourceLineNo">463</span>        runWALSplit(newConf);<a name="line.463"></a>
+<span class="sourceLineNo">464</span>        WAL wal2 = createWAL(newConf);<a name="line.464"></a>
+<span class="sourceLineNo">465</span><a name="line.465"></a>
+<span class="sourceLineNo">466</span>        HRegion region2 = HRegion.openHRegion(newConf, FileSystem.get(newConf),<a name="line.466"></a>
+<span class="sourceLineNo">467</span>            hbaseRootDir, hri, htd, wal2);<a name="line.467"></a>
+<span class="sourceLineNo">468</span>        long seqid2 = region2.getOpenSeqNum();<a name="line.468"></a>
+<span class="sourceLineNo">469</span>        assertTrue(seqid2 &gt; -1);<a name="line.469"></a>
+<span class="sourceLineNo">470</span>        assertEquals(rowsInsertedCount, getScannedCount(region2.getScanner(new Scan())));<a name="line.470"></a>
+<span class="sourceLineNo">471</span><a name="line.471"></a>
+<span class="sourceLine

<TRUNCATED>

[05/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.MockWAL.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.MockWAL.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.MockWAL.html
index aa5da14..b06a764 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.MockWAL.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.MockWAL.html
@@ -41,1157 +41,1234 @@
 <span class="sourceLineNo">033</span>import java.lang.reflect.Field;<a name="line.33"></a>
 <span class="sourceLineNo">034</span>import java.security.PrivilegedExceptionAction;<a name="line.34"></a>
 <span class="sourceLineNo">035</span>import java.util.ArrayList;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.Collection;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.HashSet;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import java.util.List;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import java.util.Set;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.41"></a>
-<span class="sourceLineNo">042</span><a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.commons.logging.Log;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.commons.logging.LogFactory;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.conf.Configuration;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.fs.FSDataInputStream;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.fs.FileStatus;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.fs.FileSystem;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.fs.Path;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.fs.PathFilter;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.Cell;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.HConstants;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.MiniHBaseCluster;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.ServerName;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.TableName;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.client.Get;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.client.Put;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.client.Result;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.client.Table;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.master.HMaster;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.monitoring.MonitoredTask;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.protobuf.generated.ZooKeeperProtos.SplitLogTask.RecoveryMode;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.regionserver.DefaultStoreEngine;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.regionserver.DefaultStoreFlusher;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.regionserver.FlushRequestListener;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.regionserver.FlushRequester;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.regionserver.MemStoreSnapshot;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.regionserver.MultiVersionConcurrencyControl;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.regionserver.Region;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.regionserver.RegionScanner;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.regionserver.RegionServerServices;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.regionserver.Store;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.regionserver.throttle.ThroughputController;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.security.User;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.testclassification.RegionServerTests;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.util.EnvironmentEdge;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.util.HFileTestUtil;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.wal.DefaultWALProvider;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.wal.WALKey;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>import org.apache.hadoop.hdfs.DFSInputStream;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>import org.junit.After;<a name="line.102"></a>
-<span class="sourceLineNo">103</span>import org.junit.AfterClass;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>import org.junit.Before;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>import org.junit.BeforeClass;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>import org.junit.Rule;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>import org.junit.Test;<a name="line.107"></a>
-<span class="sourceLineNo">108</span>import org.junit.experimental.categories.Category;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>import org.junit.rules.TestName;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>import org.mockito.Mockito;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>import org.mockito.invocation.InvocationOnMock;<a name="line.111"></a>
-<span class="sourceLineNo">112</span>import org.mockito.stubbing.Answer;<a name="line.112"></a>
-<span class="sourceLineNo">113</span><a name="line.113"></a>
-<span class="sourceLineNo">114</span>/**<a name="line.114"></a>
-<span class="sourceLineNo">115</span> * Test replay of edits out of a WAL split.<a name="line.115"></a>
-<span class="sourceLineNo">116</span> */<a name="line.116"></a>
-<span class="sourceLineNo">117</span>@Category({RegionServerTests.class, MediumTests.class})<a name="line.117"></a>
-<span class="sourceLineNo">118</span>public class TestWALReplay {<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  private static final Log LOG = LogFactory.getLog(TestWALReplay.class);<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  static final HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.120"></a>
-<span class="sourceLineNo">121</span>  private final EnvironmentEdge ee = EnvironmentEdgeManager.getDelegate();<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  private Path hbaseRootDir = null;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>  private String logName;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  private Path oldLogDir;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  private Path logDir;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>  private FileSystem fs;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>  private Configuration conf;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  private RecoveryMode mode;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>  private WALFactory wals;<a name="line.129"></a>
-<span class="sourceLineNo">130</span><a name="line.130"></a>
-<span class="sourceLineNo">131</span>  @Rule<a name="line.131"></a>
-<span class="sourceLineNo">132</span>  public final TestName currentTest = new TestName();<a name="line.132"></a>
-<span class="sourceLineNo">133</span><a name="line.133"></a>
+<span class="sourceLineNo">036</span>import java.util.Arrays;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import java.util.Collection;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import java.util.HashSet;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import java.util.List;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import java.util.Set;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.42"></a>
+<span class="sourceLineNo">043</span><a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.commons.logging.Log;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.commons.logging.LogFactory;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.conf.Configuration;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.fs.FSDataInputStream;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.fs.FileStatus;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.fs.FileSystem;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.fs.Path;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.fs.PathFilter;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.Cell;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.HConstants;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.MasterNotRunningException;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.MiniHBaseCluster;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.ServerName;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.TableName;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.ZooKeeperConnectionException;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.client.Get;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.client.Put;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.client.Result;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.client.Table;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.master.HMaster;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.monitoring.MonitoredTask;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.protobuf.generated.ZooKeeperProtos.SplitLogTask.RecoveryMode;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.regionserver.DefaultStoreEngine;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.regionserver.DefaultStoreFlusher;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.regionserver.FlushRequestListener;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.regionserver.FlushRequester;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.regionserver.MemStoreSnapshot;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.regionserver.MultiVersionConcurrencyControl;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.regionserver.Region;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.regionserver.RegionScanner;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.regionserver.RegionServerServices;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.regionserver.Store;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.regionserver.throttle.ThroughputController;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.security.User;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.testclassification.RegionServerTests;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.util.EnvironmentEdge;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.util.HFileTestUtil;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.wal.DefaultWALProvider;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>import org.apache.hadoop.hbase.wal.WALKey;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>import org.apache.hadoop.hdfs.DFSInputStream;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>import org.junit.After;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>import org.junit.AfterClass;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>import org.junit.Before;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>import org.junit.BeforeClass;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>import org.junit.Rule;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>import org.junit.Test;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>import org.junit.experimental.categories.Category;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>import org.junit.rules.TestName;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>import org.mockito.Mockito;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>import org.mockito.invocation.InvocationOnMock;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>import org.mockito.stubbing.Answer;<a name="line.113"></a>
+<span class="sourceLineNo">114</span><a name="line.114"></a>
+<span class="sourceLineNo">115</span>/**<a name="line.115"></a>
+<span class="sourceLineNo">116</span> * Test replay of edits out of a WAL split.<a name="line.116"></a>
+<span class="sourceLineNo">117</span> */<a name="line.117"></a>
+<span class="sourceLineNo">118</span>@Category({RegionServerTests.class, MediumTests.class})<a name="line.118"></a>
+<span class="sourceLineNo">119</span>public class TestWALReplay {<a name="line.119"></a>
+<span class="sourceLineNo">120</span>  private static final Log LOG = LogFactory.getLog(TestWALReplay.class);<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  static final HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.121"></a>
+<span class="sourceLineNo">122</span>  private final EnvironmentEdge ee = EnvironmentEdgeManager.getDelegate();<a name="line.122"></a>
+<span class="sourceLineNo">123</span>  private Path hbaseRootDir = null;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  private String logName;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>  private Path oldLogDir;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  private Path logDir;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>  private FileSystem fs;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>  private Configuration conf;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>  private RecoveryMode mode;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>  private WALFactory wals;<a name="line.130"></a>
+<span class="sourceLineNo">131</span><a name="line.131"></a>
+<span class="sourceLineNo">132</span>  @Rule<a name="line.132"></a>
+<span class="sourceLineNo">133</span>  public final TestName currentTest = new TestName();<a name="line.133"></a>
 <span class="sourceLineNo">134</span><a name="line.134"></a>
-<span class="sourceLineNo">135</span>  @BeforeClass<a name="line.135"></a>
-<span class="sourceLineNo">136</span>  public static void setUpBeforeClass() throws Exception {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    conf.setBoolean("dfs.support.append", true);<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    // The below config supported by 0.20-append and CDH3b2<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    conf.setInt("dfs.client.block.recovery.retries", 2);<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    TEST_UTIL.startMiniCluster(3);<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    Path hbaseRootDir =<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      TEST_UTIL.getDFSCluster().getFileSystem().makeQualified(new Path("/hbase"));<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    LOG.info("hbase.rootdir=" + hbaseRootDir);<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    FSUtils.setRootDir(conf, hbaseRootDir);<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>  @AfterClass<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  public static void tearDownAfterClass() throws Exception {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    TEST_UTIL.shutdownMiniCluster();<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  }<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>  @Before<a name="line.153"></a>
-<span class="sourceLineNo">154</span>  public void setUp() throws Exception {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    this.conf = HBaseConfiguration.create(TEST_UTIL.getConfiguration());<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    this.fs = TEST_UTIL.getDFSCluster().getFileSystem();<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    this.hbaseRootDir = FSUtils.getRootDir(this.conf);<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    this.oldLogDir = new Path(this.hbaseRootDir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    this.logName = DefaultWALProvider.getWALDirectoryName(currentTest.getMethodName() + "-manual");<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    this.logDir = new Path(this.hbaseRootDir, logName);<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    if (TEST_UTIL.getDFSCluster().getFileSystem().exists(this.hbaseRootDir)) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      TEST_UTIL.getDFSCluster().getFileSystem().delete(this.hbaseRootDir, true);<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    }<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    this.mode = (conf.getBoolean(HConstants.DISTRIBUTED_LOG_REPLAY_KEY, false) ?<a name="line.164"></a>
-<span class="sourceLineNo">165</span>        RecoveryMode.LOG_REPLAY : RecoveryMode.LOG_SPLITTING);<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    this.wals = new WALFactory(conf, null, currentTest.getMethodName());<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>  @After<a name="line.169"></a>
-<span class="sourceLineNo">170</span>  public void tearDown() throws Exception {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    this.wals.close();<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    TEST_UTIL.getDFSCluster().getFileSystem().delete(this.hbaseRootDir, true);<a name="line.172"></a>
-<span class="sourceLineNo">173</span>  }<a name="line.173"></a>
-<span class="sourceLineNo">174</span><a name="line.174"></a>
-<span class="sourceLineNo">175</span>  /*<a name="line.175"></a>
-<span class="sourceLineNo">176</span>   * @param p Directory to cleanup<a name="line.176"></a>
-<span class="sourceLineNo">177</span>   */<a name="line.177"></a>
-<span class="sourceLineNo">178</span>  private void deleteDir(final Path p) throws IOException {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    if (this.fs.exists(p)) {<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      if (!this.fs.delete(p, true)) {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>        throw new IOException("Failed remove of " + p);<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      }<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>   *<a name="line.187"></a>
-<span class="sourceLineNo">188</span>   * @throws Exception<a name="line.188"></a>
-<span class="sourceLineNo">189</span>   */<a name="line.189"></a>
-<span class="sourceLineNo">190</span>  @Test<a name="line.190"></a>
-<span class="sourceLineNo">191</span>  public void testReplayEditsAfterRegionMovedWithMultiCF() throws Exception {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    final TableName tableName =<a name="line.192"></a>
-<span class="sourceLineNo">193</span>        TableName.valueOf("testReplayEditsAfterRegionMovedWithMultiCF");<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    byte[] family1 = Bytes.toBytes("cf1");<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    byte[] family2 = Bytes.toBytes("cf2");<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    byte[] qualifier = Bytes.toBytes("q");<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    byte[] value = Bytes.toBytes("testV");<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    byte[][] familys = { family1, family2 };<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    TEST_UTIL.createTable(tableName, familys);<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    Table htable = TEST_UTIL.getConnection().getTable(tableName);<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    Put put = new Put(Bytes.toBytes("r1"));<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    put.addColumn(family1, qualifier, value);<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    htable.put(put);<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    ResultScanner resultScanner = htable.getScanner(new Scan());<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    int count = 0;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    while (resultScanner.next() != null) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      count++;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    }<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    resultScanner.close();<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    assertEquals(1, count);<a name="line.210"></a>
-<span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span>    MiniHBaseCluster hbaseCluster = TEST_UTIL.getMiniHBaseCluster();<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    List&lt;HRegion&gt; regions = hbaseCluster.getRegions(tableName);<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    assertEquals(1, regions.size());<a name="line.214"></a>
-<span class="sourceLineNo">215</span><a name="line.215"></a>
-<span class="sourceLineNo">216</span>    // move region to another regionserver<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    Region destRegion = regions.get(0);<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    int originServerNum = hbaseCluster<a name="line.218"></a>
-<span class="sourceLineNo">219</span>        .getServerWith(destRegion.getRegionInfo().getRegionName());<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    assertTrue("Please start more than 1 regionserver", hbaseCluster<a name="line.220"></a>
-<span class="sourceLineNo">221</span>        .getRegionServerThreads().size() &gt; 1);<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    int destServerNum = 0;<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    while (destServerNum == originServerNum) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      destServerNum++;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    }<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    HRegionServer originServer = hbaseCluster.getRegionServer(originServerNum);<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    HRegionServer destServer = hbaseCluster.getRegionServer(destServerNum);<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    // move region to destination regionserver<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    moveRegionAndWait(destRegion, destServer);<a name="line.229"></a>
-<span class="sourceLineNo">230</span><a name="line.230"></a>
-<span class="sourceLineNo">231</span>    // delete the row<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    Delete del = new Delete(Bytes.toBytes("r1"));<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    htable.delete(del);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    resultScanner = htable.getScanner(new Scan());<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    count = 0;<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    while (resultScanner.next() != null) {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      count++;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    }<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    resultScanner.close();<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    assertEquals(0, count);<a name="line.240"></a>
-<span class="sourceLineNo">241</span><a name="line.241"></a>
-<span class="sourceLineNo">242</span>    // flush region and make major compaction<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    Region region =  destServer.getOnlineRegion(destRegion.getRegionInfo().getRegionName());<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    region.flush(true);<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    // wait to complete major compaction<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    for (Store store : region.getStores()) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      store.triggerMajorCompaction();<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    }<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    region.compact(true);<a name="line.249"></a>
-<span class="sourceLineNo">250</span><a name="line.250"></a>
-<span class="sourceLineNo">251</span>    // move region to origin regionserver<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    moveRegionAndWait(destRegion, originServer);<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    // abort the origin regionserver<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    originServer.abort("testing");<a name="line.254"></a>
-<span class="sourceLineNo">255</span><a name="line.255"></a>
-<span class="sourceLineNo">256</span>    // see what we get<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    Result result = htable.get(new Get(Bytes.toBytes("r1")));<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    if (result != null) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      assertTrue("Row is deleted, but we get" + result.toString(),<a name="line.259"></a>
-<span class="sourceLineNo">260</span>          (result == null) || result.isEmpty());<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    }<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    resultScanner.close();<a name="line.262"></a>
-<span class="sourceLineNo">263</span>  }<a name="line.263"></a>
-<span class="sourceLineNo">264</span><a name="line.264"></a>
-<span class="sourceLineNo">265</span>  private void moveRegionAndWait(Region destRegion, HRegionServer destServer)<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      throws InterruptedException, MasterNotRunningException,<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      ZooKeeperConnectionException, IOException {<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    HMaster master = TEST_UTIL.getMiniHBaseCluster().getMaster();<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    TEST_UTIL.getHBaseAdmin().move(<a name="line.269"></a>
-<span class="sourceLineNo">270</span>        destRegion.getRegionInfo().getEncodedNameAsBytes(),<a name="line.270"></a>
-<span class="sourceLineNo">271</span>        Bytes.toBytes(destServer.getServerName().getServerName()));<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    while (true) {<a name="line.272"></a>
-<span class="sourceLineNo">273</span>      ServerName serverName = master.getAssignmentManager()<a name="line.273"></a>
-<span class="sourceLineNo">274</span>        .getRegionStates().getRegionServerOfRegion(destRegion.getRegionInfo());<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      if (serverName != null &amp;&amp; serverName.equals(destServer.getServerName())) {<a name="line.275"></a>
-<span class="sourceLineNo">276</span>        TEST_UTIL.assertRegionOnServer(<a name="line.276"></a>
-<span class="sourceLineNo">277</span>          destRegion.getRegionInfo(), serverName, 200);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>        break;<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      }<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      Thread.sleep(10);<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><a name="line.283"></a>
-<span class="sourceLineNo">284</span>  /**<a name="line.284"></a>
-<span class="sourceLineNo">285</span>   * Tests for hbase-2727.<a name="line.285"></a>
-<span class="sourceLineNo">286</span>   * @throws Exception<a name="line.286"></a>
-<span class="sourceLineNo">287</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-2727"&gt;HBASE-2727&lt;/a&gt;<a name="line.287"></a>
-<span class="sourceLineNo">288</span>   */<a name="line.288"></a>
-<span class="sourceLineNo">289</span>  @Test<a name="line.289"></a>
-<span class="sourceLineNo">290</span>  public void test2727() throws Exception {<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    // Test being able to have &gt; 1 set of edits in the recovered.edits directory.<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    // Ensure edits are replayed properly.<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    final TableName tableName =<a name="line.293"></a>
-<span class="sourceLineNo">294</span>        TableName.valueOf("test2727");<a name="line.294"></a>
-<span class="sourceLineNo">295</span><a name="line.295"></a>
-<span class="sourceLineNo">296</span>    MultiVersionConcurrencyControl mvcc = new MultiVersionConcurrencyControl();<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    HRegionInfo hri = createBasic3FamilyHRegionInfo(tableName);<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    Path basedir = FSUtils.getTableDir(hbaseRootDir, tableName);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    deleteDir(basedir);<a name="line.299"></a>
-<span class="sourceLineNo">300</span><a name="line.300"></a>
-<span class="sourceLineNo">301</span>    HTableDescriptor htd = createBasic3FamilyHTD(tableName);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    Region region2 = HBaseTestingUtility.createRegionAndWAL(hri, hbaseRootDir, this.conf, htd);<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    HBaseTestingUtility.closeRegionAndWAL(region2);<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    final byte [] rowName = tableName.getName();<a name="line.304"></a>
-<span class="sourceLineNo">305</span><a name="line.305"></a>
-<span class="sourceLineNo">306</span>    WAL wal1 = createWAL(this.conf);<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    // Add 1k to each family.<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    final int countPerFamily = 1000;<a name="line.308"></a>
-<span class="sourceLineNo">309</span><a name="line.309"></a>
-<span class="sourceLineNo">310</span>    for (HColumnDescriptor hcd: htd.getFamilies()) {<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      addWALEdits(tableName, hri, rowName, hcd.getName(), countPerFamily, ee,<a name="line.311"></a>
-<span class="sourceLineNo">312</span>          wal1, htd, mvcc);<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    }<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    wal1.shutdown();<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    runWALSplit(this.conf);<a name="line.315"></a>
-<span class="sourceLineNo">316</span><a name="line.316"></a>
-<span class="sourceLineNo">317</span>    WAL wal2 = createWAL(this.conf);<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    // Add 1k to each family.<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    for (HColumnDescriptor hcd: htd.getFamilies()) {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      addWALEdits(tableName, hri, rowName, hcd.getName(), countPerFamily,<a name="line.320"></a>
-<span class="sourceLineNo">321</span>          ee, wal2, htd, mvcc);<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    }<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    wal2.shutdown();<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    runWALSplit(this.conf);<a name="line.324"></a>
-<span class="sourceLineNo">325</span><a name="line.325"></a>
-<span class="sourceLineNo">326</span>    WAL wal3 = createWAL(this.conf);<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    try {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      HRegion region = HRegion.openHRegion(this.conf, this.fs, hbaseRootDir, hri, htd, wal3);<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      long seqid = region.getOpenSeqNum();<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      // The regions opens with sequenceId as 1. With 6k edits, its sequence number reaches 6k + 1.<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      // When opened, this region would apply 6k edits, and increment the sequenceId by 1<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      assertTrue(seqid &gt; mvcc.getWritePoint());<a name="line.332"></a>
-<span class="sourceLineNo">333</span>      assertEquals(seqid - 1, mvcc.getWritePoint());<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      LOG.debug("region.getOpenSeqNum(): " + region.getOpenSeqNum() + ", wal3.id: "<a name="line.334"></a>
-<span class="sourceLineNo">335</span>          + mvcc.getReadPoint());<a name="line.335"></a>
-<span class="sourceLineNo">336</span><a name="line.336"></a>
-<span class="sourceLineNo">337</span>      // TODO: Scan all.<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      region.close();<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    } finally {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      wal3.close();<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    }<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>  /**<a name="line.344"></a>
-<span class="sourceLineNo">345</span>   * Test case of HRegion that is only made out of bulk loaded files.  Assert<a name="line.345"></a>
-<span class="sourceLineNo">346</span>   * that we don't 'crash'.<a name="line.346"></a>
-<span class="sourceLineNo">347</span>   * @throws IOException<a name="line.347"></a>
-<span class="sourceLineNo">348</span>   * @throws IllegalAccessException<a name="line.348"></a>
-<span class="sourceLineNo">349</span>   * @throws NoSuchFieldException<a name="line.349"></a>
-<span class="sourceLineNo">350</span>   * @throws IllegalArgumentException<a name="line.350"></a>
-<span class="sourceLineNo">351</span>   * @throws SecurityException<a name="line.351"></a>
-<span class="sourceLineNo">352</span>   */<a name="line.352"></a>
-<span class="sourceLineNo">353</span>  @Test<a name="line.353"></a>
-<span class="sourceLineNo">354</span>  public void testRegionMadeOfBulkLoadedFilesOnly()<a name="line.354"></a>
-<span class="sourceLineNo">355</span>  throws IOException, SecurityException, IllegalArgumentException,<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      NoSuchFieldException, IllegalAccessException, InterruptedException {<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    final TableName tableName =<a name="line.357"></a>
-<span class="sourceLineNo">358</span>        TableName.valueOf("testRegionMadeOfBulkLoadedFilesOnly");<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    final HRegionInfo hri = createBasic3FamilyHRegionInfo(tableName);<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    final Path basedir = new Path(this.hbaseRootDir, tableName.getNameAsString());<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    deleteDir(basedir);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    final HTableDescriptor htd = createBasic3FamilyHTD(tableName);<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    Region region2 = HBaseTestingUtility.createRegionAndWAL(hri, hbaseRootDir, this.conf, htd);<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    HBaseTestingUtility.closeRegionAndWAL(region2);<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    WAL wal = createWAL(this.conf);<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    Region region = HRegion.openHRegion(hri, htd, wal, this.conf);<a name="line.366"></a>
-<span class="sourceLineNo">367</span><a name="line.367"></a>
-<span class="sourceLineNo">368</span>    byte [] family = htd.getFamilies().iterator().next().getName();<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    Path f =  new Path(basedir, "hfile");<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    HFileTestUtil.createHFile(this.conf, fs, f, family, family, Bytes.toBytes(""),<a name="line.370"></a>
-<span class="sourceLineNo">371</span>        Bytes.toBytes("z"), 10);<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    List &lt;Pair&lt;byte[],String&gt;&gt;  hfs= new ArrayList&lt;Pair&lt;byte[],String&gt;&gt;(1);<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    hfs.add(Pair.newPair(family, f.toString()));<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    region.bulkLoadHFiles(hfs, true, null);<a name="line.374"></a>
-<span class="sourceLineNo">375</span><a name="line.375"></a>
-<span class="sourceLineNo">376</span>    // Add an edit so something in the WAL<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    byte [] row = tableName.getName();<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    region.put((new Put(row)).addColumn(family, family, family));<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    wal.sync();<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    final int rowsInsertedCount = 11;<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span>    assertEquals(rowsInsertedCount, getScannedCount(region.getScanner(new Scan())));<a name="line.382"></a>
-<span class="sourceLineNo">383</span><a name="line.383"></a>
-<span class="sourceLineNo">384</span>    // Now 'crash' the region by stealing its wal<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    final Configuration newConf = HBaseConfiguration.create(this.conf);<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    User user = HBaseTestingUtility.getDifferentUser(newConf,<a name="line.386"></a>
-<span class="sourceLineNo">387</span>        tableName.getNameAsString());<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    user.runAs(new PrivilegedExceptionAction() {<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      @Override<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      public Object run() throws Exception {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        runWALSplit(newConf);<a name="line.391"></a>
-<span class="sourceLineNo">392</span>        WAL wal2 = createWAL(newConf);<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span>        HRegion region2 = HRegion.openHRegion(newConf, FileSystem.get(newConf),<a name="line.394"></a>
-<span class="sourceLineNo">395</span>          hbaseRootDir, hri, htd, wal2);<a name="line.395"></a>
-<span class="sourceLineNo">396</span>        long seqid2 = region2.getOpenSeqNum();<a name="line.396"></a>
-<span class="sourceLineNo">397</span>        assertTrue(seqid2 &gt; -1);<a name="line.397"></a>
-<span class="sourceLineNo">398</span>        assertEquals(rowsInsertedCount, getScannedCount(region2.getScanner(new Scan())));<a name="line.398"></a>
-<span class="sourceLineNo">399</span><a name="line.399"></a>
-<span class="sourceLineNo">400</span>        // I can't close wal1.  Its been appropriated when we split.<a name="line.400"></a>
-<span class="sourceLineNo">401</span>        region2.close();<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        wal2.close();<a name="line.402"></a>
-<span class="sourceLineNo">403</span>        return null;<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      }<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>  /**<a name="line.408"></a>
-<span class="sourceLineNo">409</span>   * HRegion test case that is made of a major compacted HFile (created with three bulk loaded<a name="line.409"></a>
-<span class="sourceLineNo">410</span>   * files) and an edit in the memstore.<a name="line.410"></a>
-<span class="sourceLineNo">411</span>   * This is for HBASE-10958 "[dataloss] Bulk loading with seqids can prevent some log entries<a name="line.411"></a>
-<span class="sourceLineNo">412</span>   * from being replayed"<a name="line.412"></a>
-<span class="sourceLineNo">413</span>   * @throws IOException<a name="line.413"></a>
-<span class="sourceLineNo">414</span>   * @throws IllegalAccessException<a name="line.414"></a>
-<span class="sourceLineNo">415</span>   * @throws NoSuchFieldException<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   * @throws IllegalArgumentException<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * @throws SecurityException<a name="line.417"></a>
-<span class="sourceLineNo">418</span>   */<a name="line.418"></a>
-<span class="sourceLineNo">419</span>  @Test<a name="line.419"></a>
-<span class="sourceLineNo">420</span>  public void testCompactedBulkLoadedFiles()<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      throws IOException, SecurityException, IllegalArgumentException,<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      NoSuchFieldException, IllegalAccessException, InterruptedException {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    final TableName tableName =<a name="line.423"></a>
-<span class="sourceLineNo">424</span>        TableName.valueOf("testCompactedBulkLoadedFiles");<a name="line.424"></a>
-<span class="sourceLineNo">425</span>    final HRegionInfo hri = createBasic3FamilyHRegionInfo(tableName);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    final Path basedir = new Path(this.hbaseRootDir, tableName.getNameAsString());<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    deleteDir(basedir);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    final HTableDescriptor htd = createBasic3FamilyHTD(tableName);<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    HRegion region2 = HBaseTestingUtility.createRegionAndWAL(hri, hbaseRootDir, this.conf, htd);<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    HBaseTestingUtility.closeRegionAndWAL(region2);<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    WAL wal = createWAL(this.conf);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    HRegion region = HRegion.openHRegion(hri, htd, wal, this.conf);<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>    // Add an edit so something in the WAL<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    byte [] row = tableName.getName();<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    byte [] family = htd.getFamilies().iterator().next().getName();<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    region.put((new Put(row)).addColumn(family, family, family));<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    wal.sync();<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>    List &lt;Pair&lt;byte[],String&gt;&gt;  hfs= new ArrayList&lt;Pair&lt;byte[],String&gt;&gt;(1);<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    for (int i = 0; i &lt; 3; i++) {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>      Path f = new Path(basedir, "hfile"+i);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      HFileTestUtil.createHFile(this.conf, fs, f, family, family, Bytes.toBytes(i + "00"),<a name="line.443"></a>
-<span class="sourceLineNo">444</span>          Bytes.toBytes(i + "50"), 10);<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      hfs.add(Pair.newPair(family, f.toString()));<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    }<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    region.bulkLoadHFiles(hfs, true, null);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    final int rowsInsertedCount = 31;<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    assertEquals(rowsInsertedCount, getScannedCount(region.getScanner(new Scan())));<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>    // major compact to turn all the bulk loaded files into one normal file<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    region.compact(true);<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    assertEquals(rowsInsertedCount, getScannedCount(region.getScanner(new Scan())));<a name="line.453"></a>
-<span class="sourceLineNo">454</span><a name="line.454"></a>
-<span class="sourceLineNo">455</span>    // Now 'crash' the region by stealing its wal<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    final Configuration newConf = HBaseConfiguration.create(this.conf);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    User user = HBaseTestingUtility.getDifferentUser(newConf,<a name="line.457"></a>
-<span class="sourceLineNo">458</span>        tableName.getNameAsString());<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    user.runAs(new PrivilegedExceptionAction() {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      @Override<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      public Object run() throws Exception {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        runWALSplit(newConf);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>        WAL wal2 = createWAL(newConf);<a name="line.463"></a>
-<span class="sourceLineNo">464</span><a name="line.464"></a>
-<span class="sourceLineNo">465</span>        HRegion region2 = HRegion.openHRegion(newConf, FileSystem.get(newConf),<a name="line.465"></a>
-<span class="sourceLineNo">466</span>            hbaseRootDir, hri, htd, wal2);<a name="line.466"></a>
-<span class="sourceLineNo">467</span>        long seqid2 = region2.getOpenSeqNum();<a name="line.467"></a>
-<span class="sourceLineNo">468</span>        assertTrue(seqid2 &gt; -1);<a name="line.468"></a>
-<span class="sourceLineNo">469</span>        assertEquals(rowsInsertedCount, getScannedCount(region2.getScanner(new Scan())));<a name="line.469"></a>
-<span class="sourceLineNo">470</span><a name="line.470"></a>
-<span class="sourceLineNo">471</span>        // I can't close wal1.  Its been appropriated when we split.<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        region2.close();<a name="line.472"></a>
-<span class="sourceLineNo">473</span>        wal2.close();<a name="line.473"></a>
-<span class="sourceLineNo">474</span>        return null;<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>  }<a name="line.477"></a>
-<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">135</span><a name="line.135"></a>
+<span class="sourceLineNo">136</span>  @BeforeClass<a name="line.136"></a>
+<span class="sourceLineNo">137</span>  public static void setUpBeforeClass() throws Exception {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    Configuration conf = TEST_UTIL.getConfiguration();<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    conf.setBoolean("dfs.support.append", true);<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    // The below config supported by 0.20-append and CDH3b2<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    conf.setInt("dfs.client.block.recovery.retries", 2);<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    TEST_UTIL.startMiniCluster(3);<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    Path hbaseRootDir =<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      TEST_UTIL.getDFSCluster().getFileSystem().makeQualified(new Path("/hbase"));<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    LOG.info("hbase.rootdir=" + hbaseRootDir);<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    FSUtils.setRootDir(conf, hbaseRootDir);<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>  @AfterClass<a name="line.149"></a>
+<span class="sourceLineNo">150</span>  public static void tearDownAfterClass() throws Exception {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    TEST_UTIL.shutdownMiniCluster();<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>  @Before<a name="line.154"></a>
+<span class="sourceLineNo">155</span>  public void setUp() throws Exception {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    this.conf = HBaseConfiguration.create(TEST_UTIL.getConfiguration());<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    this.fs = TEST_UTIL.getDFSCluster().getFileSystem();<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    this.hbaseRootDir = FSUtils.getRootDir(this.conf);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    this.oldLogDir = new Path(this.hbaseRootDir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    this.logName = DefaultWALProvider.getWALDirectoryName(currentTest.getMethodName() + "-manual");<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    this.logDir = new Path(this.hbaseRootDir, logName);<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    if (TEST_UTIL.getDFSCluster().getFileSystem().exists(this.hbaseRootDir)) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      TEST_UTIL.getDFSCluster().getFileSystem().delete(this.hbaseRootDir, true);<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    }<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    this.mode = (conf.getBoolean(HConstants.DISTRIBUTED_LOG_REPLAY_KEY, false) ?<a name="line.165"></a>
+<span class="sourceLineNo">166</span>        RecoveryMode.LOG_REPLAY : RecoveryMode.LOG_SPLITTING);<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    this.wals = new WALFactory(conf, null, currentTest.getMethodName());<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  }<a name="line.168"></a>
+<span class="sourceLineNo">169</span><a name="line.169"></a>
+<span class="sourceLineNo">170</span>  @After<a name="line.170"></a>
+<span class="sourceLineNo">171</span>  public void tearDown() throws Exception {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    this.wals.close();<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    TEST_UTIL.getDFSCluster().getFileSystem().delete(this.hbaseRootDir, true);<a name="line.173"></a>
+<span class="sourceLineNo">174</span>  }<a name="line.174"></a>
+<span class="sourceLineNo">175</span><a name="line.175"></a>
+<span class="sourceLineNo">176</span>  /*<a name="line.176"></a>
+<span class="sourceLineNo">177</span>   * @param p Directory to cleanup<a name="line.177"></a>
+<span class="sourceLineNo">178</span>   */<a name="line.178"></a>
+<span class="sourceLineNo">179</span>  private void deleteDir(final Path p) throws IOException {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    if (this.fs.exists(p)) {<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      if (!this.fs.delete(p, true)) {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>        throw new IOException("Failed remove of " + p);<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>  /**<a name="line.187"></a>
+<span class="sourceLineNo">188</span>   *<a name="line.188"></a>
+<span class="sourceLineNo">189</span>   * @throws Exception<a name="line.189"></a>
+<span class="sourceLineNo">190</span>   */<a name="line.190"></a>
+<span class="sourceLineNo">191</span>  @Test<a name="line.191"></a>
+<span class="sourceLineNo">192</span>  public void testReplayEditsAfterRegionMovedWithMultiCF() throws Exception {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    final TableName tableName =<a name="line.193"></a>
+<span class="sourceLineNo">194</span>        TableName.valueOf("testReplayEditsAfterRegionMovedWithMultiCF");<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    byte[] family1 = Bytes.toBytes("cf1");<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    byte[] family2 = Bytes.toBytes("cf2");<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    byte[] qualifier = Bytes.toBytes("q");<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    byte[] value = Bytes.toBytes("testV");<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    byte[][] familys = { family1, family2 };<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    TEST_UTIL.createTable(tableName, familys);<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    Table htable = TEST_UTIL.getConnection().getTable(tableName);<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    Put put = new Put(Bytes.toBytes("r1"));<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    put.addColumn(family1, qualifier, value);<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    htable.put(put);<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    ResultScanner resultScanner = htable.getScanner(new Scan());<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    int count = 0;<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    while (resultScanner.next() != null) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      count++;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    }<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    resultScanner.close();<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    assertEquals(1, count);<a name="line.211"></a>
+<span class="sourceLineNo">212</span><a name="line.212"></a>
+<span class="sourceLineNo">213</span>    MiniHBaseCluster hbaseCluster = TEST_UTIL.getMiniHBaseCluster();<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    List&lt;HRegion&gt; regions = hbaseCluster.getRegions(tableName);<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    assertEquals(1, regions.size());<a name="line.215"></a>
+<span class="sourceLineNo">216</span><a name="line.216"></a>
+<span class="sourceLineNo">217</span>    // move region to another regionserver<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    Region destRegion = regions.get(0);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    int originServerNum = hbaseCluster<a name="line.219"></a>
+<span class="sourceLineNo">220</span>        .getServerWith(destRegion.getRegionInfo().getRegionName());<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    assertTrue("Please start more than 1 regionserver", hbaseCluster<a name="line.221"></a>
+<span class="sourceLineNo">222</span>        .getRegionServerThreads().size() &gt; 1);<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    int destServerNum = 0;<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    while (destServerNum == originServerNum) {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>      destServerNum++;<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    }<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    HRegionServer originServer = hbaseCluster.getRegionServer(originServerNum);<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    HRegionServer destServer = hbaseCluster.getRegionServer(destServerNum);<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    // move region to destination regionserver<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    moveRegionAndWait(destRegion, destServer);<a name="line.230"></a>
+<span class="sourceLineNo">231</span><a name="line.231"></a>
+<span class="sourceLineNo">232</span>    // delete the row<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    Delete del = new Delete(Bytes.toBytes("r1"));<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    htable.delete(del);<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    resultScanner = htable.getScanner(new Scan());<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    count = 0;<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    while (resultScanner.next() != null) {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      count++;<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    }<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    resultScanner.close();<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    assertEquals(0, count);<a name="line.241"></a>
+<span class="sourceLineNo">242</span><a name="line.242"></a>
+<span class="sourceLineNo">243</span>    // flush region and make major compaction<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    Region region =  destServer.getOnlineRegion(destRegion.getRegionInfo().getRegionName());<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    region.flush(true);<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    // wait to complete major compaction<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    for (Store store : region.getStores()) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      store.triggerMajorCompaction();<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    }<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    region.compact(true);<a name="line.250"></a>
+<span class="sourceLineNo">251</span><a name="line.251"></a>
+<span class="sourceLineNo">252</span>    // move region to origin regionserver<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    moveRegionAndWait(destRegion, originServer);<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    // abort the origin regionserver<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    originServer.abort("testing");<a name="line.255"></a>
+<span class="sourceLineNo">256</span><a name="line.256"></a>
+<span class="sourceLineNo">257</span>    // see what we get<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    Result result = htable.get(new Get(Bytes.toBytes("r1")));<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    if (result != null) {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      assertTrue("Row is deleted, but we get" + result.toString(),<a name="line.260"></a>
+<span class="sourceLineNo">261</span>          (result == null) || result.isEmpty());<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    }<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    resultScanner.close();<a name="line.263"></a>
+<span class="sourceLineNo">264</span>  }<a name="line.264"></a>
+<span class="sourceLineNo">265</span><a name="line.265"></a>
+<span class="sourceLineNo">266</span>  private void moveRegionAndWait(Region destRegion, HRegionServer destServer)<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      throws InterruptedException, MasterNotRunningException,<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      ZooKeeperConnectionException, IOException {<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    HMaster master = TEST_UTIL.getMiniHBaseCluster().getMaster();<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    TEST_UTIL.getHBaseAdmin().move(<a name="line.270"></a>
+<span class="sourceLineNo">271</span>        destRegion.getRegionInfo().getEncodedNameAsBytes(),<a name="line.271"></a>
+<span class="sourceLineNo">272</span>        Bytes.toBytes(destServer.getServerName().getServerName()));<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    while (true) {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      ServerName serverName = master.getAssignmentManager()<a name="line.274"></a>
+<span class="sourceLineNo">275</span>        .getRegionStates().getRegionServerOfRegion(destRegion.getRegionInfo());<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      if (serverName != null &amp;&amp; serverName.equals(destServer.getServerName())) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>        TEST_UTIL.assertRegionOnServer(<a name="line.277"></a>
+<span class="sourceLineNo">278</span>          destRegion.getRegionInfo(), serverName, 200);<a name="line.278"></a>
+<span class="sourceLineNo">279</span>        break;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      }<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      Thread.sleep(10);<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    }<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  }<a name="line.283"></a>
+<span class="sourceLineNo">284</span><a name="line.284"></a>
+<span class="sourceLineNo">285</span>  /**<a name="line.285"></a>
+<span class="sourceLineNo">286</span>   * Tests for hbase-2727.<a name="line.286"></a>
+<span class="sourceLineNo">287</span>   * @throws Exception<a name="line.287"></a>
+<span class="sourceLineNo">288</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-2727"&gt;HBASE-2727&lt;/a&gt;<a name="line.288"></a>
+<span class="sourceLineNo">289</span>   */<a name="line.289"></a>
+<span class="sourceLineNo">290</span>  @Test<a name="line.290"></a>
+<span class="sourceLineNo">291</span>  public void test2727() throws Exception {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    // Test being able to have &gt; 1 set of edits in the recovered.edits directory.<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    // Ensure edits are replayed properly.<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    final TableName tableName =<a name="line.294"></a>
+<span class="sourceLineNo">295</span>        TableName.valueOf("test2727");<a name="line.295"></a>
+<span class="sourceLineNo">296</span><a name="line.296"></a>
+<span class="sourceLineNo">297</span>    MultiVersionConcurrencyControl mvcc = new MultiVersionConcurrencyControl();<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    HRegionInfo hri = createBasic3FamilyHRegionInfo(tableName);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    Path basedir = FSUtils.getTableDir(hbaseRootDir, tableName);<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    deleteDir(basedir);<a name="line.300"></a>
+<span class="sourceLineNo">301</span><a name="line.301"></a>
+<span class="sourceLineNo">302</span>    HTableDescriptor htd = createBasic3FamilyHTD(tableName);<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    Region region2 = HBaseTestingUtility.createRegionAndWAL(hri, hbaseRootDir, this.conf, htd);<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    HBaseTestingUtility.closeRegionAndWAL(region2);<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    final byte [] rowName = tableName.getName();<a name="line.305"></a>
+<span class="sourceLineNo">306</span><a name="line.306"></a>
+<span class="sourceLineNo">307</span>    WAL wal1 = createWAL(this.conf);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    // Add 1k to each family.<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    final int countPerFamily = 1000;<a name="line.309"></a>
+<span class="sourceLineNo">310</span><a name="line.310"></a>
+<span class="sourceLineNo">311</span>    for (HColumnDescriptor hcd: htd.getFamilies()) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      addWALEdits(tableName, hri, rowName, hcd.getName(), countPerFamily, ee,<a name="line.312"></a>
+<span class="sourceLineNo">313</span>          wal1, htd, mvcc);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    wal1.shutdown();<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    runWALSplit(this.conf);<a name="line.316"></a>
+<span class="sourceLineNo">317</span><a name="line.317"></a>
+<span class="sourceLineNo">318</span>    WAL wal2 = createWAL(this.conf);<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    // Add 1k to each family.<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    for (HColumnDescriptor hcd: htd.getFamilies()) {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      addWALEdits(tableName, hri, rowName, hcd.getName(), countPerFamily,<a name="line.321"></a>
+<span class="sourceLineNo">322</span>          ee, wal2, htd, mvcc);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    }<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    wal2.shutdown();<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    runWALSplit(this.conf);<a name="line.325"></a>
+<span class="sourceLineNo">326</span><a name="line.326"></a>
+<span class="sourceLineNo">327</span>    WAL wal3 = createWAL(this.conf);<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    try {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      HRegion region = HRegion.openHRegion(this.conf, this.fs, hbaseRootDir, hri, htd, wal3);<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      long seqid = region.getOpenSeqNum();<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      // The regions opens with sequenceId as 1. With 6k edits, its sequence number reaches 6k + 1.<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      // When opened, this region would apply 6k edits, and increment the sequenceId by 1<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      assertTrue(seqid &gt; mvcc.getWritePoint());<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      assertEquals(seqid - 1, mvcc.getWritePoint());<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      LOG.debug("region.getOpenSeqNum(): " + region.getOpenSeqNum() + ", wal3.id: "<a name="line.335"></a>
+<span class="sourceLineNo">336</span>          + mvcc.getReadPoint());<a name="line.336"></a>
+<span class="sourceLineNo">337</span><a name="line.337"></a>
+<span class="sourceLineNo">338</span>      // TODO: Scan all.<a name="line.338"></a>
+<span class="sourceLineNo">339</span>      region.close();<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    } finally {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      wal3.close();<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><a name="line.344"></a>
+<span class="sourceLineNo">345</span>  /**<a name="line.345"></a>
+<span class="sourceLineNo">346</span>   * Test case of HRegion that is only made out of bulk loaded files.  Assert<a name="line.346"></a>
+<span class="sourceLineNo">347</span>   * that we don't 'crash'.<a name="line.347"></a>
+<span class="sourceLineNo">348</span>   * @throws IOException<a name="line.348"></a>
+<span class="sourceLineNo">349</span>   * @throws IllegalAccessException<a name="line.349"></a>
+<span class="sourceLineNo">350</span>   * @throws NoSuchFieldException<a name="line.350"></a>
+<span class="sourceLineNo">351</span>   * @throws IllegalArgumentException<a name="line.351"></a>
+<span class="sourceLineNo">352</span>   * @throws SecurityException<a name="line.352"></a>
+<span class="sourceLineNo">353</span>   */<a name="line.353"></a>
+<span class="sourceLineNo">354</span>  @Test<a name="line.354"></a>
+<span class="sourceLineNo">355</span>  public void testRegionMadeOfBulkLoadedFilesOnly()<a name="line.355"></a>
+<span class="sourceLineNo">356</span>  throws IOException, SecurityException, IllegalArgumentException,<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      NoSuchFieldException, IllegalAccessException, InterruptedException {<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    final TableName tableName =<a name="line.358"></a>
+<span class="sourceLineNo">359</span>        TableName.valueOf("testRegionMadeOfBulkLoadedFilesOnly");<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    final HRegionInfo hri = createBasic3FamilyHRegionInfo(tableName);<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    final Path basedir = new Path(this.hbaseRootDir, tableName.getNameAsString());<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    deleteDir(basedir);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    final HTableDescriptor htd = createBasic3FamilyHTD(tableName);<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    Region region2 = HBaseTestingUtility.createRegionAndWAL(hri, hbaseRootDir, this.conf, htd);<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    HBaseTestingUtility.closeRegionAndWAL(region2);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    WAL wal = createWAL(this.conf);<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    Region region = HRegion.openHRegion(hri, htd, wal, this.conf);<a name="line.367"></a>
+<span class="sourceLineNo">368</span><a name="line.368"></a>
+<span class="sourceLineNo">369</span>    byte [] family = htd.getFamilies().iterator().next().getName();<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    Path f =  new Path(basedir, "hfile");<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    HFileTestUtil.createHFile(this.conf, fs, f, family, family, Bytes.toBytes(""),<a name="line.371"></a>
+<span class="sourceLineNo">372</span>        Bytes.toBytes("z"), 10);<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    List &lt;Pair&lt;byte[],String&gt;&gt;  hfs= new ArrayList&lt;Pair&lt;byte[],String&gt;&gt;(1);<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    hfs.add(Pair.newPair(family, f.toString()));<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    region.bulkLoadHFiles(hfs, true, null);<a name="line.375"></a>
+<span class="sourceLineNo">376</span><a name="line.376"></a>
+<span class="sourceLineNo">377</span>    // Add an edit so something in the WAL<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    byte [] row = tableName.getName();<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    region.put((new Put(row)).addColumn(family, family, family));<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    wal.sync();<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    final int rowsInsertedCount = 11;<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span>    assertEquals(rowsInsertedCount, getScannedCount(region.getScanner(new Scan())));<a name="line.383"></a>
+<span class="sourceLineNo">384</span><a name="line.384"></a>
+<span class="sourceLineNo">385</span>    // Now 'crash' the region by stealing its wal<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    final Configuration newConf = HBaseConfiguration.create(this.conf);<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    User user = HBaseTestingUtility.getDifferentUser(newConf,<a name="line.387"></a>
+<span class="sourceLineNo">388</span>        tableName.getNameAsString());<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    user.runAs(new PrivilegedExceptionAction() {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>      @Override<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      public Object run() throws Exception {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>        runWALSplit(newConf);<a name="line.392"></a>
+<span class="sourceLineNo">393</span>        WAL wal2 = createWAL(newConf);<a name="line.393"></a>
+<span class="sourceLineNo">394</span><a name="line.394"></a>
+<span class="sourceLineNo">395</span>        HRegion region2 = HRegion.openHRegion(newConf, FileSystem.get(newConf),<a name="line.395"></a>
+<span class="sourceLineNo">396</span>          hbaseRootDir, hri, htd, wal2);<a name="line.396"></a>
+<span class="sourceLineNo">397</span>        long seqid2 = region2.getOpenSeqNum();<a name="line.397"></a>
+<span class="sourceLineNo">398</span>        assertTrue(seqid2 &gt; -1);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>        assertEquals(rowsInsertedCount, getScannedCount(region2.getScanner(new Scan())));<a name="line.399"></a>
+<span class="sourceLineNo">400</span><a name="line.400"></a>
+<span class="sourceLineNo">401</span>        // I can't close wal1.  Its been appropriated when we split.<a name="line.401"></a>
+<span class="sourceLineNo">402</span>        region2.close();<a name="line.402"></a>
+<span class="sourceLineNo">403</span>        wal2.close();<a name="line.403"></a>
+<span class="sourceLineNo">404</span>        return null;<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><a name="line.408"></a>
+<span class="sourceLineNo">409</span>  /**<a name="line.409"></a>
+<span class="sourceLineNo">410</span>   * HRegion test case that is made of a major compacted HFile (created with three bulk loaded<a name="line.410"></a>
+<span class="sourceLineNo">411</span>   * files) and an edit in the memstore.<a name="line.411"></a>
+<span class="sourceLineNo">412</span>   * This is for HBASE-10958 "[dataloss] Bulk loading with seqids can prevent some log entries<a name="line.412"></a>
+<span class="sourceLineNo">413</span>   * from being replayed"<a name="line.413"></a>
+<span class="sourceLineNo">414</span>   * @throws IOException<a name="line.414"></a>
+<span class="sourceLineNo">415</span>   * @throws IllegalAccessException<a name="line.415"></a>
+<span class="sourceLineNo">416</span>   * @throws NoSuchFieldException<a name="line.416"></a>
+<span class="sourceLineNo">417</span>   * @throws IllegalArgumentException<a name="line.417"></a>
+<span class="sourceLineNo">418</span>   * @throws SecurityException<a name="line.418"></a>
+<span class="sourceLineNo">419</span>   */<a name="line.419"></a>
+<span class="sourceLineNo">420</span>  @Test<a name="line.420"></a>
+<span class="sourceLineNo">421</span>  public void testCompactedBulkLoadedFiles()<a name="line.421"></a>
+<span class="sourceLineNo">422</span>      throws IOException, SecurityException, IllegalArgumentException,<a name="line.422"></a>
+<span class="sourceLineNo">423</span>      NoSuchFieldException, IllegalAccessException, InterruptedException {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>    final TableName tableName =<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        TableName.valueOf("testCompactedBulkLoadedFiles");<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    final HRegionInfo hri = createBasic3FamilyHRegionInfo(tableName);<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    final Path basedir = new Path(this.hbaseRootDir, tableName.getNameAsString());<a name="line.427"></a>
+<span class="sourceLineNo">428</span>    deleteDir(basedir);<a name="line.428"></a>
+<span class="sourceLineNo">429</span>    final HTableDescriptor htd = createBasic3FamilyHTD(tableName);<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    HRegion region2 = HBaseTestingUtility.createRegionAndWAL(hri, hbaseRootDir, this.conf, htd);<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    HBaseTestingUtility.closeRegionAndWAL(region2);<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    WAL wal = createWAL(this.conf);<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    HRegion region = HRegion.openHRegion(hri, htd, wal, this.conf);<a name="line.433"></a>
+<span class="sourceLineNo">434</span><a name="line.434"></a>
+<span class="sourceLineNo">435</span>    // Add an edit so something in the WAL<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    byte [] row = tableName.getName();<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    byte [] family = htd.getFamilies().iterator().next().getName();<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    region.put((new Put(row)).addColumn(family, family, family));<a name="line.438"></a>
+<span class="sourceLineNo">439</span>    wal.sync();<a name="line.439"></a>
+<span class="sourceLineNo">440</span><a name="line.440"></a>
+<span class="sourceLineNo">441</span>    List &lt;Pair&lt;byte[],String&gt;&gt;  hfs= new ArrayList&lt;Pair&lt;byte[],String&gt;&gt;(1);<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    for (int i = 0; i &lt; 3; i++) {<a name="line.442"></a>
+<span class="sourceLineNo">443</span>      Path f = new Path(basedir, "hfile"+i);<a name="line.443"></a>
+<span class="sourceLineNo">444</span>      HFileTestUtil.createHFile(this.conf, fs, f, family, family, Bytes.toBytes(i + "00"),<a name="line.444"></a>
+<span class="sourceLineNo">445</span>          Bytes.toBytes(i + "50"), 10);<a name="line.445"></a>
+<span class="sourceLineNo">446</span>      hfs.add(Pair.newPair(family, f.toString()));<a name="line.446"></a>
+<span class="sourceLineNo">447</span>    }<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    region.bulkLoadHFiles(hfs, true, null);<a name="line.448"></a>
+<span class="sourceLineNo">449</span>    final int rowsInsertedCount = 31;<a name="line.449"></a>
+<span class="sourceLineNo">450</span>    assertEquals(rowsInsertedCount, getScannedCount(region.getScanner(new Scan())));<a name="line.450"></a>
+<span class="sourceLineNo">451</span><a name="line.451"></a>
+<span class="sourceLineNo">452</span>    // major compact to turn all the bulk loaded files into one normal file<a name="line.452"></a>
+<span class="sourceLineNo">453</span>    region.compact(true);<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    assertEquals(rowsInsertedCount, getScannedCount(region.getScanner(new Scan())));<a name="line.454"></a>
+<span class="sourceLineNo">455</span><a name="line.455"></a>
+<span class="sourceLineNo">456</span>    // Now 'crash' the region by stealing its wal<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    final Configuration newConf = HBaseConfiguration.create(this.conf);<a name="line.457"></a>
+<span class="sourceLineNo">458</span>    User user = HBaseTestingUtility.getDifferentUser(newConf,<a name="line.458"></a>
+<span class="sourceLineNo">459</span>        tableName.getNameAsString());<a name="line.459"></a>
+<span class="sourceLineNo">460</span>    user.runAs(new PrivilegedExceptionAction() {<a name="line.460"></a>
+<span class="sourceLineNo">461</span>      @Override<a name="line.461"></a>
+<span class="sourceLineNo">462</span>      public Object run() throws Exception {<a name="line.462"></a>
+<span class="sourceLineNo">463</span>        runWALSplit(newConf);<a name="line.463"></a>
+<span class="sourceLineNo">464</span>        WAL wal2 = createWAL(newConf);<a name="line.464"></a>
+<span class="sourceLineNo">465</span><a name="line.465"></a>
+<span class="sourceLineNo">466</span>        HRegion region2 = HRegion.openHRegion(newConf, FileSystem.get(newConf),<a name="line.466"></a>
+<span class="sourceLineNo">467</span>            hbaseRootDir, hri, htd, wal2);<a name="line.467"></a>
+<span class="sourceLineNo">468</span>        long seqid2 = region2.getOpenSeqNum();<a name="line.468"></a>
+<span class="sourceLineNo">469</span>        assertTrue(seqid2 &gt; -1);<a name="line.469"></a>
+<span class="sourceLineNo">470</span>        assertEquals(rowsInsertedCount, getScannedCount(region2.getScanner(new Scan())));<a name="line.470"></a>
+<span class="sourceLineNo">471</span><a name="line.471"></a>
+<span class="sourceLineNo">472</span>      

<TRUNCATED>

[34/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/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 1d64963..a232cc8 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
@@ -6980,880 +6980,882 @@
 <span class="sourceLineNo">6972</span>      lock(this.updatesLock.readLock());<a name="line.6972"></a>
 <span class="sourceLineNo">6973</span>      try {<a name="line.6973"></a>
 <span class="sourceLineNo">6974</span>        Result cpResult = doCoprocessorPreCall(op, mutation);<a name="line.6974"></a>
-<span class="sourceLineNo">6975</span>        if (cpResult != null) return cpResult;<a name="line.6975"></a>
-<span class="sourceLineNo">6976</span>        Durability effectiveDurability = getEffectiveDurability(mutation.getDurability());<a name="line.6976"></a>
-<span class="sourceLineNo">6977</span>        Map&lt;Store, List&lt;Cell&gt;&gt; forMemStore =<a name="line.6977"></a>
-<span class="sourceLineNo">6978</span>            new HashMap&lt;Store, List&lt;Cell&gt;&gt;(mutation.getFamilyCellMap().size());<a name="line.6978"></a>
-<span class="sourceLineNo">6979</span>        // Reckon Cells to apply to WAL --  in returned walEdit -- and what to add to memstore and<a name="line.6979"></a>
-<span class="sourceLineNo">6980</span>        // what to return back to the client (in 'forMemStore' and 'results' respectively).<a name="line.6980"></a>
-<span class="sourceLineNo">6981</span>        WALEdit walEdit = reckonDeltas(op, mutation, effectiveDurability, forMemStore, results);<a name="line.6981"></a>
-<span class="sourceLineNo">6982</span>        // Actually write to WAL now if a walEdit to apply.<a name="line.6982"></a>
-<span class="sourceLineNo">6983</span>        if (walEdit != null &amp;&amp; !walEdit.isEmpty()) {<a name="line.6983"></a>
-<span class="sourceLineNo">6984</span>          writeEntry = doWALAppend(walEdit, durability, nonceGroup, nonce);<a name="line.6984"></a>
-<span class="sourceLineNo">6985</span>        } else {<a name="line.6985"></a>
-<span class="sourceLineNo">6986</span>          // If walEdits is empty, it means we skipped the WAL; update counters and start an mvcc<a name="line.6986"></a>
-<span class="sourceLineNo">6987</span>          // transaction.<a name="line.6987"></a>
-<span class="sourceLineNo">6988</span>          recordMutationWithoutWal(mutation.getFamilyCellMap());<a name="line.6988"></a>
-<span class="sourceLineNo">6989</span>          writeEntry = mvcc.begin();<a name="line.6989"></a>
-<span class="sourceLineNo">6990</span>        }<a name="line.6990"></a>
-<span class="sourceLineNo">6991</span>        // Now write to MemStore. Do it a column family at a time.<a name="line.6991"></a>
-<span class="sourceLineNo">6992</span>        long sequenceId = writeEntry.getWriteNumber();<a name="line.6992"></a>
-<span class="sourceLineNo">6993</span>        for (Map.Entry&lt;Store, List&lt;Cell&gt;&gt; e: forMemStore.entrySet()) {<a name="line.6993"></a>
-<span class="sourceLineNo">6994</span>          accumulatedResultSize +=<a name="line.6994"></a>
-<span class="sourceLineNo">6995</span>              applyToMemstore(e.getKey(), e.getValue(), true, false, sequenceId);<a name="line.6995"></a>
-<span class="sourceLineNo">6996</span>        }<a name="line.6996"></a>
-<span class="sourceLineNo">6997</span>        mvcc.completeAndWait(writeEntry);<a name="line.6997"></a>
-<span class="sourceLineNo">6998</span>        writeEntry = null;<a name="line.6998"></a>
-<span class="sourceLineNo">6999</span>      } finally {<a name="line.6999"></a>
-<span class="sourceLineNo">7000</span>        this.updatesLock.readLock().unlock();<a name="line.7000"></a>
-<span class="sourceLineNo">7001</span>      }<a name="line.7001"></a>
-<span class="sourceLineNo">7002</span>      // If results is null, then client asked that we not return the calculated results.<a name="line.7002"></a>
-<span class="sourceLineNo">7003</span>      return results !=  null? Result.create(results): null;<a name="line.7003"></a>
-<span class="sourceLineNo">7004</span>    } finally {<a name="line.7004"></a>
-<span class="sourceLineNo">7005</span>      // Call complete always, even on success. doDelta is doing a Get READ_UNCOMMITTED when it goes<a name="line.7005"></a>
-<span class="sourceLineNo">7006</span>      // to get current value under an exclusive lock so no need so no need to wait to return to<a name="line.7006"></a>
-<span class="sourceLineNo">7007</span>      // the client. Means only way to read-your-own-increment or append is to come in with an<a name="line.7007"></a>
-<span class="sourceLineNo">7008</span>      // a 0 increment.<a name="line.7008"></a>
-<span class="sourceLineNo">7009</span>      if (writeEntry != null) mvcc.complete(writeEntry);<a name="line.7009"></a>
-<span class="sourceLineNo">7010</span>      rowLock.release();<a name="line.7010"></a>
-<span class="sourceLineNo">7011</span>      // Request a cache flush if over the limit.  Do it outside update lock.<a name="line.7011"></a>
-<span class="sourceLineNo">7012</span>      if (isFlushSize(this.addAndGetGlobalMemstoreSize(accumulatedResultSize))) requestFlush();<a name="line.7012"></a>
-<span class="sourceLineNo">7013</span>      closeRegionOperation(op);<a name="line.7013"></a>
-<span class="sourceLineNo">7014</span>      if (this.metricsRegion != null) {<a name="line.7014"></a>
-<span class="sourceLineNo">7015</span>        switch (op) {<a name="line.7015"></a>
-<span class="sourceLineNo">7016</span>          case INCREMENT:<a name="line.7016"></a>
-<span class="sourceLineNo">7017</span>            this.metricsRegion.updateIncrement();<a name="line.7017"></a>
-<span class="sourceLineNo">7018</span>            break;<a name="line.7018"></a>
-<span class="sourceLineNo">7019</span>          case APPEND:<a name="line.7019"></a>
-<span class="sourceLineNo">7020</span>            this.metricsRegion.updateAppend();<a name="line.7020"></a>
-<span class="sourceLineNo">7021</span>            break;<a name="line.7021"></a>
-<span class="sourceLineNo">7022</span>          default:<a name="line.7022"></a>
+<span class="sourceLineNo">6975</span>        if (cpResult != null) {<a name="line.6975"></a>
+<span class="sourceLineNo">6976</span>          return returnResults? cpResult: null;<a name="line.6976"></a>
+<span class="sourceLineNo">6977</span>        }<a name="line.6977"></a>
+<span class="sourceLineNo">6978</span>        Durability effectiveDurability = getEffectiveDurability(mutation.getDurability());<a name="line.6978"></a>
+<span class="sourceLineNo">6979</span>        Map&lt;Store, List&lt;Cell&gt;&gt; forMemStore =<a name="line.6979"></a>
+<span class="sourceLineNo">6980</span>            new HashMap&lt;Store, List&lt;Cell&gt;&gt;(mutation.getFamilyCellMap().size());<a name="line.6980"></a>
+<span class="sourceLineNo">6981</span>        // Reckon Cells to apply to WAL --  in returned walEdit -- and what to add to memstore and<a name="line.6981"></a>
+<span class="sourceLineNo">6982</span>        // what to return back to the client (in 'forMemStore' and 'results' respectively).<a name="line.6982"></a>
+<span class="sourceLineNo">6983</span>        WALEdit walEdit = reckonDeltas(op, mutation, effectiveDurability, forMemStore, results);<a name="line.6983"></a>
+<span class="sourceLineNo">6984</span>        // Actually write to WAL now if a walEdit to apply.<a name="line.6984"></a>
+<span class="sourceLineNo">6985</span>        if (walEdit != null &amp;&amp; !walEdit.isEmpty()) {<a name="line.6985"></a>
+<span class="sourceLineNo">6986</span>          writeEntry = doWALAppend(walEdit, durability, nonceGroup, nonce);<a name="line.6986"></a>
+<span class="sourceLineNo">6987</span>        } else {<a name="line.6987"></a>
+<span class="sourceLineNo">6988</span>          // If walEdits is empty, it means we skipped the WAL; update counters and start an mvcc<a name="line.6988"></a>
+<span class="sourceLineNo">6989</span>          // transaction.<a name="line.6989"></a>
+<span class="sourceLineNo">6990</span>          recordMutationWithoutWal(mutation.getFamilyCellMap());<a name="line.6990"></a>
+<span class="sourceLineNo">6991</span>          writeEntry = mvcc.begin();<a name="line.6991"></a>
+<span class="sourceLineNo">6992</span>        }<a name="line.6992"></a>
+<span class="sourceLineNo">6993</span>        // Now write to MemStore. Do it a column family at a time.<a name="line.6993"></a>
+<span class="sourceLineNo">6994</span>        long sequenceId = writeEntry.getWriteNumber();<a name="line.6994"></a>
+<span class="sourceLineNo">6995</span>        for (Map.Entry&lt;Store, List&lt;Cell&gt;&gt; e: forMemStore.entrySet()) {<a name="line.6995"></a>
+<span class="sourceLineNo">6996</span>          accumulatedResultSize +=<a name="line.6996"></a>
+<span class="sourceLineNo">6997</span>              applyToMemstore(e.getKey(), e.getValue(), true, false, sequenceId);<a name="line.6997"></a>
+<span class="sourceLineNo">6998</span>        }<a name="line.6998"></a>
+<span class="sourceLineNo">6999</span>        mvcc.completeAndWait(writeEntry);<a name="line.6999"></a>
+<span class="sourceLineNo">7000</span>        writeEntry = null;<a name="line.7000"></a>
+<span class="sourceLineNo">7001</span>      } finally {<a name="line.7001"></a>
+<span class="sourceLineNo">7002</span>        this.updatesLock.readLock().unlock();<a name="line.7002"></a>
+<span class="sourceLineNo">7003</span>      }<a name="line.7003"></a>
+<span class="sourceLineNo">7004</span>      // If results is null, then client asked that we not return the calculated results.<a name="line.7004"></a>
+<span class="sourceLineNo">7005</span>      return results != null &amp;&amp; returnResults? Result.create(results): null;<a name="line.7005"></a>
+<span class="sourceLineNo">7006</span>    } finally {<a name="line.7006"></a>
+<span class="sourceLineNo">7007</span>      // Call complete always, even on success. doDelta is doing a Get READ_UNCOMMITTED when it goes<a name="line.7007"></a>
+<span class="sourceLineNo">7008</span>      // to get current value under an exclusive lock so no need so no need to wait to return to<a name="line.7008"></a>
+<span class="sourceLineNo">7009</span>      // the client. Means only way to read-your-own-increment or append is to come in with an<a name="line.7009"></a>
+<span class="sourceLineNo">7010</span>      // a 0 increment.<a name="line.7010"></a>
+<span class="sourceLineNo">7011</span>      if (writeEntry != null) mvcc.complete(writeEntry);<a name="line.7011"></a>
+<span class="sourceLineNo">7012</span>      rowLock.release();<a name="line.7012"></a>
+<span class="sourceLineNo">7013</span>      // Request a cache flush if over the limit.  Do it outside update lock.<a name="line.7013"></a>
+<span class="sourceLineNo">7014</span>      if (isFlushSize(this.addAndGetGlobalMemstoreSize(accumulatedResultSize))) requestFlush();<a name="line.7014"></a>
+<span class="sourceLineNo">7015</span>      closeRegionOperation(op);<a name="line.7015"></a>
+<span class="sourceLineNo">7016</span>      if (this.metricsRegion != null) {<a name="line.7016"></a>
+<span class="sourceLineNo">7017</span>        switch (op) {<a name="line.7017"></a>
+<span class="sourceLineNo">7018</span>          case INCREMENT:<a name="line.7018"></a>
+<span class="sourceLineNo">7019</span>            this.metricsRegion.updateIncrement();<a name="line.7019"></a>
+<span class="sourceLineNo">7020</span>            break;<a name="line.7020"></a>
+<span class="sourceLineNo">7021</span>          case APPEND:<a name="line.7021"></a>
+<span class="sourceLineNo">7022</span>            this.metricsRegion.updateAppend();<a name="line.7022"></a>
 <span class="sourceLineNo">7023</span>            break;<a name="line.7023"></a>
-<span class="sourceLineNo">7024</span>        }<a name="line.7024"></a>
-<span class="sourceLineNo">7025</span>      }<a name="line.7025"></a>
-<span class="sourceLineNo">7026</span>    }<a name="line.7026"></a>
-<span class="sourceLineNo">7027</span>  }<a name="line.7027"></a>
-<span class="sourceLineNo">7028</span><a name="line.7028"></a>
-<span class="sourceLineNo">7029</span>  private WriteEntry doWALAppend(WALEdit walEdit, Durability durability, long nonceGroup,<a name="line.7029"></a>
-<span class="sourceLineNo">7030</span>      long nonce)<a name="line.7030"></a>
-<span class="sourceLineNo">7031</span>  throws IOException {<a name="line.7031"></a>
-<span class="sourceLineNo">7032</span>    return doWALAppend(walEdit, durability, WALKey.EMPTY_UUIDS, System.currentTimeMillis(),<a name="line.7032"></a>
-<span class="sourceLineNo">7033</span>      nonceGroup, nonce);<a name="line.7033"></a>
-<span class="sourceLineNo">7034</span>  }<a name="line.7034"></a>
-<span class="sourceLineNo">7035</span><a name="line.7035"></a>
-<span class="sourceLineNo">7036</span>  /**<a name="line.7036"></a>
-<span class="sourceLineNo">7037</span>   * @return writeEntry associated with this append<a name="line.7037"></a>
-<span class="sourceLineNo">7038</span>   */<a name="line.7038"></a>
-<span class="sourceLineNo">7039</span>  private WriteEntry doWALAppend(WALEdit walEdit, Durability durability, List&lt;UUID&gt; clusterIds,<a name="line.7039"></a>
-<span class="sourceLineNo">7040</span>      long now, long nonceGroup, long nonce)<a name="line.7040"></a>
-<span class="sourceLineNo">7041</span>  throws IOException {<a name="line.7041"></a>
-<span class="sourceLineNo">7042</span>    WriteEntry writeEntry = null;<a name="line.7042"></a>
-<span class="sourceLineNo">7043</span>    // Using default cluster id, as this can only happen in the originating cluster.<a name="line.7043"></a>
-<span class="sourceLineNo">7044</span>    // A slave cluster receives the final value (not the delta) as a Put. We use HLogKey<a name="line.7044"></a>
-<span class="sourceLineNo">7045</span>    // here instead of WALKey directly to support legacy coprocessors.<a name="line.7045"></a>
-<span class="sourceLineNo">7046</span>    WALKey walKey = new WALKey(this.getRegionInfo().getEncodedNameAsBytes(),<a name="line.7046"></a>
-<span class="sourceLineNo">7047</span>      this.htableDescriptor.getTableName(), WALKey.NO_SEQUENCE_ID, now, clusterIds,<a name="line.7047"></a>
-<span class="sourceLineNo">7048</span>      nonceGroup, nonce, mvcc);<a name="line.7048"></a>
-<span class="sourceLineNo">7049</span>    try {<a name="line.7049"></a>
-<span class="sourceLineNo">7050</span>      long txid =<a name="line.7050"></a>
-<span class="sourceLineNo">7051</span>        this.wal.append(this.htableDescriptor, this.getRegionInfo(), walKey, walEdit, true);<a name="line.7051"></a>
-<span class="sourceLineNo">7052</span>      // Call sync on our edit.<a name="line.7052"></a>
-<span class="sourceLineNo">7053</span>      if (txid != 0) sync(txid, durability);<a name="line.7053"></a>
-<span class="sourceLineNo">7054</span>      writeEntry = walKey.getWriteEntry();<a name="line.7054"></a>
-<span class="sourceLineNo">7055</span>    } catch (IOException ioe) {<a name="line.7055"></a>
-<span class="sourceLineNo">7056</span>      if (walKey != null) mvcc.complete(walKey.getWriteEntry());<a name="line.7056"></a>
-<span class="sourceLineNo">7057</span>      throw ioe;<a name="line.7057"></a>
-<span class="sourceLineNo">7058</span>    }<a name="line.7058"></a>
-<span class="sourceLineNo">7059</span>    return writeEntry;<a name="line.7059"></a>
-<span class="sourceLineNo">7060</span>  }<a name="line.7060"></a>
-<span class="sourceLineNo">7061</span><a name="line.7061"></a>
-<span class="sourceLineNo">7062</span>  /**<a name="line.7062"></a>
-<span class="sourceLineNo">7063</span>   * Do coprocessor pre-increment or pre-append call.<a name="line.7063"></a>
-<span class="sourceLineNo">7064</span>   * @return Result returned out of the coprocessor, which means bypass all further processing and<a name="line.7064"></a>
-<span class="sourceLineNo">7065</span>   *  return the proffered Result instead, or null which means proceed.<a name="line.7065"></a>
-<span class="sourceLineNo">7066</span>   */<a name="line.7066"></a>
-<span class="sourceLineNo">7067</span>  private Result doCoprocessorPreCall(final Operation op, final Mutation mutation)<a name="line.7067"></a>
-<span class="sourceLineNo">7068</span>  throws IOException {<a name="line.7068"></a>
-<span class="sourceLineNo">7069</span>    Result result = null;<a name="line.7069"></a>
-<span class="sourceLineNo">7070</span>    if (this.coprocessorHost != null) {<a name="line.7070"></a>
-<span class="sourceLineNo">7071</span>      switch(op) {<a name="line.7071"></a>
-<span class="sourceLineNo">7072</span>        case INCREMENT:<a name="line.7072"></a>
-<span class="sourceLineNo">7073</span>          result = this.coprocessorHost.preIncrementAfterRowLock((Increment)mutation);<a name="line.7073"></a>
-<span class="sourceLineNo">7074</span>          break;<a name="line.7074"></a>
-<span class="sourceLineNo">7075</span>        case APPEND:<a name="line.7075"></a>
-<span class="sourceLineNo">7076</span>          result = this.coprocessorHost.preAppendAfterRowLock((Append)mutation);<a name="line.7076"></a>
-<span class="sourceLineNo">7077</span>          break;<a name="line.7077"></a>
-<span class="sourceLineNo">7078</span>        default: throw new UnsupportedOperationException(op.toString());<a name="line.7078"></a>
-<span class="sourceLineNo">7079</span>      }<a name="line.7079"></a>
-<span class="sourceLineNo">7080</span>    }<a name="line.7080"></a>
-<span class="sourceLineNo">7081</span>    return result;<a name="line.7081"></a>
-<span class="sourceLineNo">7082</span>  }<a name="line.7082"></a>
-<span class="sourceLineNo">7083</span><a name="line.7083"></a>
-<span class="sourceLineNo">7084</span>  /**<a name="line.7084"></a>
-<span class="sourceLineNo">7085</span>   * Reckon the Cells to apply to WAL, memstore, and to return to the Client; these Sets are not<a name="line.7085"></a>
-<span class="sourceLineNo">7086</span>   * always the same dependent on whether to write WAL or if the amount to increment is zero (in<a name="line.7086"></a>
-<span class="sourceLineNo">7087</span>   * this case we write back nothing, just return latest Cell value to the client).<a name="line.7087"></a>
-<span class="sourceLineNo">7088</span>   *<a name="line.7088"></a>
-<span class="sourceLineNo">7089</span>   * @param results Fill in here what goes back to the Client if it is non-null (if null, client<a name="line.7089"></a>
-<span class="sourceLineNo">7090</span>   *  doesn't want results).<a name="line.7090"></a>
-<span class="sourceLineNo">7091</span>   * @param forMemStore Fill in here what to apply to the MemStore (by Store).<a name="line.7091"></a>
-<span class="sourceLineNo">7092</span>   * @return A WALEdit to apply to WAL or null if we are to skip the WAL.<a name="line.7092"></a>
-<span class="sourceLineNo">7093</span>   */<a name="line.7093"></a>
-<span class="sourceLineNo">7094</span>  private WALEdit reckonDeltas(final Operation op, final Mutation mutation,<a name="line.7094"></a>
-<span class="sourceLineNo">7095</span>      final Durability effectiveDurability, final Map&lt;Store, List&lt;Cell&gt;&gt; forMemStore,<a name="line.7095"></a>
-<span class="sourceLineNo">7096</span>      final List&lt;Cell&gt; results)<a name="line.7096"></a>
-<span class="sourceLineNo">7097</span>  throws IOException {<a name="line.7097"></a>
-<span class="sourceLineNo">7098</span>    WALEdit walEdit = null;<a name="line.7098"></a>
-<span class="sourceLineNo">7099</span>    long now = EnvironmentEdgeManager.currentTime();<a name="line.7099"></a>
-<span class="sourceLineNo">7100</span>    final boolean writeToWAL = effectiveDurability != Durability.SKIP_WAL;<a name="line.7100"></a>
-<span class="sourceLineNo">7101</span>    // Process a Store/family at a time.<a name="line.7101"></a>
-<span class="sourceLineNo">7102</span>    for (Map.Entry&lt;byte [], List&lt;Cell&gt;&gt; entry: mutation.getFamilyCellMap().entrySet()) {<a name="line.7102"></a>
-<span class="sourceLineNo">7103</span>      final byte [] columnFamilyName = entry.getKey();<a name="line.7103"></a>
-<span class="sourceLineNo">7104</span>      List&lt;Cell&gt; deltas = entry.getValue();<a name="line.7104"></a>
-<span class="sourceLineNo">7105</span>      Store store = this.stores.get(columnFamilyName);<a name="line.7105"></a>
-<span class="sourceLineNo">7106</span>      // Reckon for the Store what to apply to WAL and MemStore.<a name="line.7106"></a>
-<span class="sourceLineNo">7107</span>      List&lt;Cell&gt; toApply =<a name="line.7107"></a>
-<span class="sourceLineNo">7108</span>        reckonDeltasByStore(store, op, mutation, effectiveDurability, now, deltas, results);<a name="line.7108"></a>
-<span class="sourceLineNo">7109</span>      if (!toApply.isEmpty()) {<a name="line.7109"></a>
-<span class="sourceLineNo">7110</span>        forMemStore.put(store, toApply);<a name="line.7110"></a>
-<span class="sourceLineNo">7111</span>        if (writeToWAL) {<a name="line.7111"></a>
-<span class="sourceLineNo">7112</span>          if (walEdit == null) {<a name="line.7112"></a>
-<span class="sourceLineNo">7113</span>            walEdit = new WALEdit();<a name="line.7113"></a>
-<span class="sourceLineNo">7114</span>          }<a name="line.7114"></a>
-<span class="sourceLineNo">7115</span>          walEdit.getCells().addAll(toApply);<a name="line.7115"></a>
-<span class="sourceLineNo">7116</span>        }<a name="line.7116"></a>
-<span class="sourceLineNo">7117</span>      }<a name="line.7117"></a>
-<span class="sourceLineNo">7118</span>    }<a name="line.7118"></a>
-<span class="sourceLineNo">7119</span>    return walEdit;<a name="line.7119"></a>
-<span class="sourceLineNo">7120</span>  }<a name="line.7120"></a>
-<span class="sourceLineNo">7121</span><a name="line.7121"></a>
-<span class="sourceLineNo">7122</span>  /**<a name="line.7122"></a>
-<span class="sourceLineNo">7123</span>   * Reckon the Cells to apply to WAL, memstore, and to return to the Client in passed<a name="line.7123"></a>
-<span class="sourceLineNo">7124</span>   * column family/Store.<a name="line.7124"></a>
-<span class="sourceLineNo">7125</span>   *<a name="line.7125"></a>
-<span class="sourceLineNo">7126</span>   * Does Get of current value and then adds passed in deltas for this Store returning the result.<a name="line.7126"></a>
+<span class="sourceLineNo">7024</span>          default:<a name="line.7024"></a>
+<span class="sourceLineNo">7025</span>            break;<a name="line.7025"></a>
+<span class="sourceLineNo">7026</span>        }<a name="line.7026"></a>
+<span class="sourceLineNo">7027</span>      }<a name="line.7027"></a>
+<span class="sourceLineNo">7028</span>    }<a name="line.7028"></a>
+<span class="sourceLineNo">7029</span>  }<a name="line.7029"></a>
+<span class="sourceLineNo">7030</span><a name="line.7030"></a>
+<span class="sourceLineNo">7031</span>  private WriteEntry doWALAppend(WALEdit walEdit, Durability durability, long nonceGroup,<a name="line.7031"></a>
+<span class="sourceLineNo">7032</span>      long nonce)<a name="line.7032"></a>
+<span class="sourceLineNo">7033</span>  throws IOException {<a name="line.7033"></a>
+<span class="sourceLineNo">7034</span>    return doWALAppend(walEdit, durability, WALKey.EMPTY_UUIDS, System.currentTimeMillis(),<a name="line.7034"></a>
+<span class="sourceLineNo">7035</span>      nonceGroup, nonce);<a name="line.7035"></a>
+<span class="sourceLineNo">7036</span>  }<a name="line.7036"></a>
+<span class="sourceLineNo">7037</span><a name="line.7037"></a>
+<span class="sourceLineNo">7038</span>  /**<a name="line.7038"></a>
+<span class="sourceLineNo">7039</span>   * @return writeEntry associated with this append<a name="line.7039"></a>
+<span class="sourceLineNo">7040</span>   */<a name="line.7040"></a>
+<span class="sourceLineNo">7041</span>  private WriteEntry doWALAppend(WALEdit walEdit, Durability durability, List&lt;UUID&gt; clusterIds,<a name="line.7041"></a>
+<span class="sourceLineNo">7042</span>      long now, long nonceGroup, long nonce)<a name="line.7042"></a>
+<span class="sourceLineNo">7043</span>  throws IOException {<a name="line.7043"></a>
+<span class="sourceLineNo">7044</span>    WriteEntry writeEntry = null;<a name="line.7044"></a>
+<span class="sourceLineNo">7045</span>    // Using default cluster id, as this can only happen in the originating cluster.<a name="line.7045"></a>
+<span class="sourceLineNo">7046</span>    // A slave cluster receives the final value (not the delta) as a Put. We use HLogKey<a name="line.7046"></a>
+<span class="sourceLineNo">7047</span>    // here instead of WALKey directly to support legacy coprocessors.<a name="line.7047"></a>
+<span class="sourceLineNo">7048</span>    WALKey walKey = new WALKey(this.getRegionInfo().getEncodedNameAsBytes(),<a name="line.7048"></a>
+<span class="sourceLineNo">7049</span>      this.htableDescriptor.getTableName(), WALKey.NO_SEQUENCE_ID, now, clusterIds,<a name="line.7049"></a>
+<span class="sourceLineNo">7050</span>      nonceGroup, nonce, mvcc);<a name="line.7050"></a>
+<span class="sourceLineNo">7051</span>    try {<a name="line.7051"></a>
+<span class="sourceLineNo">7052</span>      long txid =<a name="line.7052"></a>
+<span class="sourceLineNo">7053</span>        this.wal.append(this.htableDescriptor, this.getRegionInfo(), walKey, walEdit, true);<a name="line.7053"></a>
+<span class="sourceLineNo">7054</span>      // Call sync on our edit.<a name="line.7054"></a>
+<span class="sourceLineNo">7055</span>      if (txid != 0) sync(txid, durability);<a name="line.7055"></a>
+<span class="sourceLineNo">7056</span>      writeEntry = walKey.getWriteEntry();<a name="line.7056"></a>
+<span class="sourceLineNo">7057</span>    } catch (IOException ioe) {<a name="line.7057"></a>
+<span class="sourceLineNo">7058</span>      if (walKey != null) mvcc.complete(walKey.getWriteEntry());<a name="line.7058"></a>
+<span class="sourceLineNo">7059</span>      throw ioe;<a name="line.7059"></a>
+<span class="sourceLineNo">7060</span>    }<a name="line.7060"></a>
+<span class="sourceLineNo">7061</span>    return writeEntry;<a name="line.7061"></a>
+<span class="sourceLineNo">7062</span>  }<a name="line.7062"></a>
+<span class="sourceLineNo">7063</span><a name="line.7063"></a>
+<span class="sourceLineNo">7064</span>  /**<a name="line.7064"></a>
+<span class="sourceLineNo">7065</span>   * Do coprocessor pre-increment or pre-append call.<a name="line.7065"></a>
+<span class="sourceLineNo">7066</span>   * @return Result returned out of the coprocessor, which means bypass all further processing and<a name="line.7066"></a>
+<span class="sourceLineNo">7067</span>   *  return the proffered Result instead, or null which means proceed.<a name="line.7067"></a>
+<span class="sourceLineNo">7068</span>   */<a name="line.7068"></a>
+<span class="sourceLineNo">7069</span>  private Result doCoprocessorPreCall(final Operation op, final Mutation mutation)<a name="line.7069"></a>
+<span class="sourceLineNo">7070</span>  throws IOException {<a name="line.7070"></a>
+<span class="sourceLineNo">7071</span>    Result result = null;<a name="line.7071"></a>
+<span class="sourceLineNo">7072</span>    if (this.coprocessorHost != null) {<a name="line.7072"></a>
+<span class="sourceLineNo">7073</span>      switch(op) {<a name="line.7073"></a>
+<span class="sourceLineNo">7074</span>        case INCREMENT:<a name="line.7074"></a>
+<span class="sourceLineNo">7075</span>          result = this.coprocessorHost.preIncrementAfterRowLock((Increment)mutation);<a name="line.7075"></a>
+<span class="sourceLineNo">7076</span>          break;<a name="line.7076"></a>
+<span class="sourceLineNo">7077</span>        case APPEND:<a name="line.7077"></a>
+<span class="sourceLineNo">7078</span>          result = this.coprocessorHost.preAppendAfterRowLock((Append)mutation);<a name="line.7078"></a>
+<span class="sourceLineNo">7079</span>          break;<a name="line.7079"></a>
+<span class="sourceLineNo">7080</span>        default: throw new UnsupportedOperationException(op.toString());<a name="line.7080"></a>
+<span class="sourceLineNo">7081</span>      }<a name="line.7081"></a>
+<span class="sourceLineNo">7082</span>    }<a name="line.7082"></a>
+<span class="sourceLineNo">7083</span>    return result;<a name="line.7083"></a>
+<span class="sourceLineNo">7084</span>  }<a name="line.7084"></a>
+<span class="sourceLineNo">7085</span><a name="line.7085"></a>
+<span class="sourceLineNo">7086</span>  /**<a name="line.7086"></a>
+<span class="sourceLineNo">7087</span>   * Reckon the Cells to apply to WAL, memstore, and to return to the Client; these Sets are not<a name="line.7087"></a>
+<span class="sourceLineNo">7088</span>   * always the same dependent on whether to write WAL or if the amount to increment is zero (in<a name="line.7088"></a>
+<span class="sourceLineNo">7089</span>   * this case we write back nothing, just return latest Cell value to the client).<a name="line.7089"></a>
+<span class="sourceLineNo">7090</span>   *<a name="line.7090"></a>
+<span class="sourceLineNo">7091</span>   * @param results Fill in here what goes back to the Client if it is non-null (if null, client<a name="line.7091"></a>
+<span class="sourceLineNo">7092</span>   *  doesn't want results).<a name="line.7092"></a>
+<span class="sourceLineNo">7093</span>   * @param forMemStore Fill in here what to apply to the MemStore (by Store).<a name="line.7093"></a>
+<span class="sourceLineNo">7094</span>   * @return A WALEdit to apply to WAL or null if we are to skip the WAL.<a name="line.7094"></a>
+<span class="sourceLineNo">7095</span>   */<a name="line.7095"></a>
+<span class="sourceLineNo">7096</span>  private WALEdit reckonDeltas(final Operation op, final Mutation mutation,<a name="line.7096"></a>
+<span class="sourceLineNo">7097</span>      final Durability effectiveDurability, final Map&lt;Store, List&lt;Cell&gt;&gt; forMemStore,<a name="line.7097"></a>
+<span class="sourceLineNo">7098</span>      final List&lt;Cell&gt; results)<a name="line.7098"></a>
+<span class="sourceLineNo">7099</span>  throws IOException {<a name="line.7099"></a>
+<span class="sourceLineNo">7100</span>    WALEdit walEdit = null;<a name="line.7100"></a>
+<span class="sourceLineNo">7101</span>    long now = EnvironmentEdgeManager.currentTime();<a name="line.7101"></a>
+<span class="sourceLineNo">7102</span>    final boolean writeToWAL = effectiveDurability != Durability.SKIP_WAL;<a name="line.7102"></a>
+<span class="sourceLineNo">7103</span>    // Process a Store/family at a time.<a name="line.7103"></a>
+<span class="sourceLineNo">7104</span>    for (Map.Entry&lt;byte [], List&lt;Cell&gt;&gt; entry: mutation.getFamilyCellMap().entrySet()) {<a name="line.7104"></a>
+<span class="sourceLineNo">7105</span>      final byte [] columnFamilyName = entry.getKey();<a name="line.7105"></a>
+<span class="sourceLineNo">7106</span>      List&lt;Cell&gt; deltas = entry.getValue();<a name="line.7106"></a>
+<span class="sourceLineNo">7107</span>      Store store = this.stores.get(columnFamilyName);<a name="line.7107"></a>
+<span class="sourceLineNo">7108</span>      // Reckon for the Store what to apply to WAL and MemStore.<a name="line.7108"></a>
+<span class="sourceLineNo">7109</span>      List&lt;Cell&gt; toApply =<a name="line.7109"></a>
+<span class="sourceLineNo">7110</span>        reckonDeltasByStore(store, op, mutation, effectiveDurability, now, deltas, results);<a name="line.7110"></a>
+<span class="sourceLineNo">7111</span>      if (!toApply.isEmpty()) {<a name="line.7111"></a>
+<span class="sourceLineNo">7112</span>        forMemStore.put(store, toApply);<a name="line.7112"></a>
+<span class="sourceLineNo">7113</span>        if (writeToWAL) {<a name="line.7113"></a>
+<span class="sourceLineNo">7114</span>          if (walEdit == null) {<a name="line.7114"></a>
+<span class="sourceLineNo">7115</span>            walEdit = new WALEdit();<a name="line.7115"></a>
+<span class="sourceLineNo">7116</span>          }<a name="line.7116"></a>
+<span class="sourceLineNo">7117</span>          walEdit.getCells().addAll(toApply);<a name="line.7117"></a>
+<span class="sourceLineNo">7118</span>        }<a name="line.7118"></a>
+<span class="sourceLineNo">7119</span>      }<a name="line.7119"></a>
+<span class="sourceLineNo">7120</span>    }<a name="line.7120"></a>
+<span class="sourceLineNo">7121</span>    return walEdit;<a name="line.7121"></a>
+<span class="sourceLineNo">7122</span>  }<a name="line.7122"></a>
+<span class="sourceLineNo">7123</span><a name="line.7123"></a>
+<span class="sourceLineNo">7124</span>  /**<a name="line.7124"></a>
+<span class="sourceLineNo">7125</span>   * Reckon the Cells to apply to WAL, memstore, and to return to the Client in passed<a name="line.7125"></a>
+<span class="sourceLineNo">7126</span>   * column family/Store.<a name="line.7126"></a>
 <span class="sourceLineNo">7127</span>   *<a name="line.7127"></a>
-<span class="sourceLineNo">7128</span>   * @param op Whether Increment or Append<a name="line.7128"></a>
-<span class="sourceLineNo">7129</span>   * @param mutation The encompassing Mutation object<a name="line.7129"></a>
-<span class="sourceLineNo">7130</span>   * @param deltas Changes to apply to this Store; either increment amount or data to append<a name="line.7130"></a>
-<span class="sourceLineNo">7131</span>   * @param results In here we accumulate all the Cells we are to return to the client; this List<a name="line.7131"></a>
-<span class="sourceLineNo">7132</span>   *  can be larger than what we return in case where delta is zero; i.e. don't write<a name="line.7132"></a>
-<span class="sourceLineNo">7133</span>   *  out new values, just return current value. If null, client doesn't want results returned.<a name="line.7133"></a>
-<span class="sourceLineNo">7134</span>   * @return Resulting Cells after &lt;code&gt;deltas&lt;/code&gt; have been applied to current<a name="line.7134"></a>
-<span class="sourceLineNo">7135</span>   *  values. Side effect is our filling out of the &lt;code&gt;results&lt;/code&gt; List.<a name="line.7135"></a>
-<span class="sourceLineNo">7136</span>   */<a name="line.7136"></a>
-<span class="sourceLineNo">7137</span>  private List&lt;Cell&gt; reckonDeltasByStore(final Store store, final Operation op,<a name="line.7137"></a>
-<span class="sourceLineNo">7138</span>      final Mutation mutation, final Durability effectiveDurability, final long now,<a name="line.7138"></a>
-<span class="sourceLineNo">7139</span>      final List&lt;Cell&gt; deltas, final List&lt;Cell&gt; results)<a name="line.7139"></a>
-<span class="sourceLineNo">7140</span>  throws IOException {<a name="line.7140"></a>
-<span class="sourceLineNo">7141</span>    byte [] columnFamily = store.getFamily().getName();<a name="line.7141"></a>
-<span class="sourceLineNo">7142</span>    List&lt;Cell&gt; toApply = new ArrayList&lt;Cell&gt;(deltas.size());<a name="line.7142"></a>
-<span class="sourceLineNo">7143</span>    // Get previous values for all columns in this family.<a name="line.7143"></a>
-<span class="sourceLineNo">7144</span>    List&lt;Cell&gt; currentValues = get(mutation, store, deltas,<a name="line.7144"></a>
-<span class="sourceLineNo">7145</span>        null/*Default IsolationLevel*/,<a name="line.7145"></a>
-<span class="sourceLineNo">7146</span>        op == Operation.INCREMENT? ((Increment)mutation).getTimeRange(): null);<a name="line.7146"></a>
-<span class="sourceLineNo">7147</span>    // Iterate the input columns and update existing values if they were found, otherwise<a name="line.7147"></a>
-<span class="sourceLineNo">7148</span>    // add new column initialized to the delta amount<a name="line.7148"></a>
-<span class="sourceLineNo">7149</span>    int currentValuesIndex = 0;<a name="line.7149"></a>
-<span class="sourceLineNo">7150</span>    for (int i = 0; i &lt; deltas.size(); i++) {<a name="line.7150"></a>
-<span class="sourceLineNo">7151</span>      Cell delta = deltas.get(i);<a name="line.7151"></a>
-<span class="sourceLineNo">7152</span>      Cell currentValue = null;<a name="line.7152"></a>
-<span class="sourceLineNo">7153</span>      if (currentValuesIndex &lt; currentValues.size() &amp;&amp;<a name="line.7153"></a>
-<span class="sourceLineNo">7154</span>          CellUtil.matchingQualifier(currentValues.get(currentValuesIndex), delta)) {<a name="line.7154"></a>
-<span class="sourceLineNo">7155</span>        currentValue = currentValues.get(currentValuesIndex);<a name="line.7155"></a>
-<span class="sourceLineNo">7156</span>        if (i &lt; (deltas.size() - 1) &amp;&amp; !CellUtil.matchingQualifier(delta, deltas.get(i + 1))) {<a name="line.7156"></a>
-<span class="sourceLineNo">7157</span>          currentValuesIndex++;<a name="line.7157"></a>
-<span class="sourceLineNo">7158</span>        }<a name="line.7158"></a>
-<span class="sourceLineNo">7159</span>      }<a name="line.7159"></a>
-<span class="sourceLineNo">7160</span>      // Switch on whether this an increment or an append building the new Cell to apply.<a name="line.7160"></a>
-<span class="sourceLineNo">7161</span>      Cell newCell = null;<a name="line.7161"></a>
-<span class="sourceLineNo">7162</span>      MutationType mutationType = null;<a name="line.7162"></a>
-<span class="sourceLineNo">7163</span>      boolean apply = true;<a name="line.7163"></a>
-<span class="sourceLineNo">7164</span>      switch (op) {<a name="line.7164"></a>
-<span class="sourceLineNo">7165</span>        case INCREMENT:<a name="line.7165"></a>
-<span class="sourceLineNo">7166</span>          mutationType = MutationType.INCREMENT;<a name="line.7166"></a>
-<span class="sourceLineNo">7167</span>          // If delta amount to apply is 0, don't write WAL or MemStore.<a name="line.7167"></a>
-<span class="sourceLineNo">7168</span>          long deltaAmount = getLongValue(delta);<a name="line.7168"></a>
-<span class="sourceLineNo">7169</span>          apply = deltaAmount != 0;<a name="line.7169"></a>
-<span class="sourceLineNo">7170</span>          newCell = reckonIncrement(delta, deltaAmount, currentValue, columnFamily, now,<a name="line.7170"></a>
-<span class="sourceLineNo">7171</span>            (Increment)mutation);<a name="line.7171"></a>
-<span class="sourceLineNo">7172</span>          break;<a name="line.7172"></a>
-<span class="sourceLineNo">7173</span>        case APPEND:<a name="line.7173"></a>
-<span class="sourceLineNo">7174</span>          mutationType = MutationType.APPEND;<a name="line.7174"></a>
-<span class="sourceLineNo">7175</span>          // Always apply Append. TODO: Does empty delta value mean reset Cell? It seems to.<a name="line.7175"></a>
-<span class="sourceLineNo">7176</span>          newCell = reckonAppend(delta, currentValue, now, (Append)mutation);<a name="line.7176"></a>
-<span class="sourceLineNo">7177</span>          break;<a name="line.7177"></a>
-<span class="sourceLineNo">7178</span>        default: throw new UnsupportedOperationException(op.toString());<a name="line.7178"></a>
-<span class="sourceLineNo">7179</span>      }<a name="line.7179"></a>
-<span class="sourceLineNo">7180</span><a name="line.7180"></a>
-<span class="sourceLineNo">7181</span>      // Give coprocessors a chance to update the new cell<a name="line.7181"></a>
-<span class="sourceLineNo">7182</span>      if (coprocessorHost != null) {<a name="line.7182"></a>
-<span class="sourceLineNo">7183</span>        newCell =<a name="line.7183"></a>
-<span class="sourceLineNo">7184</span>            coprocessorHost.postMutationBeforeWAL(mutationType, mutation, currentValue, newCell);<a name="line.7184"></a>
-<span class="sourceLineNo">7185</span>      }<a name="line.7185"></a>
-<span class="sourceLineNo">7186</span>      // If apply, we need to update memstore/WAL with new value; add it toApply.<a name="line.7186"></a>
-<span class="sourceLineNo">7187</span>      if (apply) {<a name="line.7187"></a>
-<span class="sourceLineNo">7188</span>        toApply.add(newCell);<a name="line.7188"></a>
-<span class="sourceLineNo">7189</span>      }<a name="line.7189"></a>
-<span class="sourceLineNo">7190</span>      // Add to results to get returned to the Client. If null, cilent does not want results.<a name="line.7190"></a>
-<span class="sourceLineNo">7191</span>      if (results != null) {<a name="line.7191"></a>
-<span class="sourceLineNo">7192</span>        results.add(newCell);<a name="line.7192"></a>
-<span class="sourceLineNo">7193</span>      }<a name="line.7193"></a>
-<span class="sourceLineNo">7194</span>    }<a name="line.7194"></a>
-<span class="sourceLineNo">7195</span>    return toApply;<a name="line.7195"></a>
-<span class="sourceLineNo">7196</span>  }<a name="line.7196"></a>
-<span class="sourceLineNo">7197</span><a name="line.7197"></a>
-<span class="sourceLineNo">7198</span>  /**<a name="line.7198"></a>
-<span class="sourceLineNo">7199</span>   * Calculate new Increment Cell.<a name="line.7199"></a>
-<span class="sourceLineNo">7200</span>   * @return New Increment Cell with delta applied to currentValue if currentValue is not null;<a name="line.7200"></a>
-<span class="sourceLineNo">7201</span>   *  otherwise, a new Cell with the delta set as its value.<a name="line.7201"></a>
-<span class="sourceLineNo">7202</span>   */<a name="line.7202"></a>
-<span class="sourceLineNo">7203</span>  private Cell reckonIncrement(final Cell delta, final long deltaAmount, final Cell currentValue,<a name="line.7203"></a>
-<span class="sourceLineNo">7204</span>      byte [] columnFamily, final long now, Mutation mutation)<a name="line.7204"></a>
-<span class="sourceLineNo">7205</span>  throws IOException {<a name="line.7205"></a>
-<span class="sourceLineNo">7206</span>    // Forward any tags found on the delta.<a name="line.7206"></a>
-<span class="sourceLineNo">7207</span>    List&lt;Tag&gt; tags = TagUtil.carryForwardTags(delta);<a name="line.7207"></a>
-<span class="sourceLineNo">7208</span>    long newValue = deltaAmount;<a name="line.7208"></a>
-<span class="sourceLineNo">7209</span>    long ts = now;<a name="line.7209"></a>
-<span class="sourceLineNo">7210</span>    if (currentValue != null) {<a name="line.7210"></a>
-<span class="sourceLineNo">7211</span>      tags = TagUtil.carryForwardTags(tags, currentValue);<a name="line.7211"></a>
-<span class="sourceLineNo">7212</span>      ts = Math.max(now, currentValue.getTimestamp());<a name="line.7212"></a>
-<span class="sourceLineNo">7213</span>      newValue += getLongValue(currentValue);<a name="line.7213"></a>
-<span class="sourceLineNo">7214</span>    }<a name="line.7214"></a>
-<span class="sourceLineNo">7215</span>    // Now make up the new Cell. TODO: FIX. This is carnel knowledge of how KeyValues are made...<a name="line.7215"></a>
-<span class="sourceLineNo">7216</span>    // doesn't work well with offheaping or if we are doing a different Cell type.<a name="line.7216"></a>
-<span class="sourceLineNo">7217</span>    byte [] incrementAmountInBytes = Bytes.toBytes(newValue);<a name="line.7217"></a>
-<span class="sourceLineNo">7218</span>    tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7218"></a>
-<span class="sourceLineNo">7219</span>    byte [] row = mutation.getRow();<a name="line.7219"></a>
-<span class="sourceLineNo">7220</span>    return new KeyValue(row, 0, row.length,<a name="line.7220"></a>
-<span class="sourceLineNo">7221</span>      columnFamily, 0, columnFamily.length,<a name="line.7221"></a>
-<span class="sourceLineNo">7222</span>      delta.getQualifierArray(), delta.getQualifierOffset(), delta.getQualifierLength(),<a name="line.7222"></a>
-<span class="sourceLineNo">7223</span>      ts, KeyValue.Type.Put,<a name="line.7223"></a>
-<span class="sourceLineNo">7224</span>      incrementAmountInBytes, 0, incrementAmountInBytes.length,<a name="line.7224"></a>
-<span class="sourceLineNo">7225</span>      tags);<a name="line.7225"></a>
-<span class="sourceLineNo">7226</span>  }<a name="line.7226"></a>
-<span class="sourceLineNo">7227</span><a name="line.7227"></a>
-<span class="sourceLineNo">7228</span>  private Cell reckonAppend(final Cell delta, final Cell currentValue, final long now,<a name="line.7228"></a>
-<span class="sourceLineNo">7229</span>      Append mutation)<a name="line.7229"></a>
-<span class="sourceLineNo">7230</span>  throws IOException {<a name="line.7230"></a>
-<span class="sourceLineNo">7231</span>    // Forward any tags found on the delta.<a name="line.7231"></a>
-<span class="sourceLineNo">7232</span>    List&lt;Tag&gt; tags = TagUtil.carryForwardTags(delta);<a name="line.7232"></a>
-<span class="sourceLineNo">7233</span>    long ts = now;<a name="line.7233"></a>
-<span class="sourceLineNo">7234</span>    Cell newCell = null;<a name="line.7234"></a>
-<span class="sourceLineNo">7235</span>    byte [] row = mutation.getRow();<a name="line.7235"></a>
-<span class="sourceLineNo">7236</span>    if (currentValue != null) {<a name="line.7236"></a>
-<span class="sourceLineNo">7237</span>      tags = TagUtil.carryForwardTags(tags, currentValue);<a name="line.7237"></a>
-<span class="sourceLineNo">7238</span>      ts = Math.max(now, currentValue.getTimestamp());<a name="line.7238"></a>
-<span class="sourceLineNo">7239</span>      tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7239"></a>
-<span class="sourceLineNo">7240</span>      byte[] tagBytes = TagUtil.fromList(tags);<a name="line.7240"></a>
-<span class="sourceLineNo">7241</span>      // Allocate an empty cell and copy in all parts.<a name="line.7241"></a>
-<span class="sourceLineNo">7242</span>      // TODO: This is intimate knowledge of how a KeyValue is made. Undo!!! Prevents our doing<a name="line.7242"></a>
-<span class="sourceLineNo">7243</span>      // other Cell types. Copying on-heap too if an off-heap Cell.<a name="line.7243"></a>
-<span class="sourceLineNo">7244</span>      newCell = new KeyValue(row.length, delta.getFamilyLength(),<a name="line.7244"></a>
-<span class="sourceLineNo">7245</span>        delta.getQualifierLength(), ts, KeyValue.Type.Put,<a name="line.7245"></a>
-<span class="sourceLineNo">7246</span>        delta.getValueLength() + currentValue.getValueLength(),<a name="line.7246"></a>
-<span class="sourceLineNo">7247</span>        tagBytes == null? 0: tagBytes.length);<a name="line.7247"></a>
-<span class="sourceLineNo">7248</span>      // Copy in row, family, and qualifier<a name="line.7248"></a>
-<span class="sourceLineNo">7249</span>      System.arraycopy(row, 0, newCell.getRowArray(), newCell.getRowOffset(), row.length);<a name="line.7249"></a>
-<span class="sourceLineNo">7250</span>      System.arraycopy(delta.getFamilyArray(), delta.getFamilyOffset(),<a name="line.7250"></a>
-<span class="sourceLineNo">7251</span>          newCell.getFamilyArray(), newCell.getFamilyOffset(), delta.getFamilyLength());<a name="line.7251"></a>
-<span class="sourceLineNo">7252</span>      System.arraycopy(delta.getQualifierArray(), delta.getQualifierOffset(),<a name="line.7252"></a>
-<span class="sourceLineNo">7253</span>          newCell.getQualifierArray(), newCell.getQualifierOffset(), delta.getQualifierLength());<a name="line.7253"></a>
-<span class="sourceLineNo">7254</span>      // Copy in the value<a name="line.7254"></a>
-<span class="sourceLineNo">7255</span>      CellUtil.copyValueTo(currentValue, newCell.getValueArray(), newCell.getValueOffset());<a name="line.7255"></a>
-<span class="sourceLineNo">7256</span>      System.arraycopy(delta.getValueArray(), delta.getValueOffset(),<a name="line.7256"></a>
-<span class="sourceLineNo">7257</span>          newCell.getValueArray(), newCell.getValueOffset() + currentValue.getValueLength(),<a name="line.7257"></a>
-<span class="sourceLineNo">7258</span>          delta.getValueLength());<a name="line.7258"></a>
-<span class="sourceLineNo">7259</span>      // Copy in tag data<a name="line.7259"></a>
-<span class="sourceLineNo">7260</span>      if (tagBytes != null) {<a name="line.7260"></a>
-<span class="sourceLineNo">7261</span>        System.arraycopy(tagBytes, 0,<a name="line.7261"></a>
-<span class="sourceLineNo">7262</span>            newCell.getTagsArray(), newCell.getTagsOffset(), tagBytes.length);<a name="line.7262"></a>
-<span class="sourceLineNo">7263</span>      }<a name="line.7263"></a>
-<span class="sourceLineNo">7264</span>    } else {<a name="line.7264"></a>
-<span class="sourceLineNo">7265</span>      // Append's KeyValue.Type==Put and ts==HConstants.LATEST_TIMESTAMP<a name="line.7265"></a>
-<span class="sourceLineNo">7266</span>      CellUtil.updateLatestStamp(delta, now);<a name="line.7266"></a>
-<span class="sourceLineNo">7267</span>      newCell = delta;<a name="line.7267"></a>
-<span class="sourceLineNo">7268</span>      tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7268"></a>
-<span class="sourceLineNo">7269</span>      if (tags != null) {<a name="line.7269"></a>
-<span class="sourceLineNo">7270</span>        newCell = new TagRewriteCell(delta, TagUtil.fromList(tags));<a name="line.7270"></a>
-<span class="sourceLineNo">7271</span>      }<a name="line.7271"></a>
-<span class="sourceLineNo">7272</span>    }<a name="line.7272"></a>
-<span class="sourceLineNo">7273</span>    return newCell;<a name="line.7273"></a>
-<span class="sourceLineNo">7274</span>  }<a name="line.7274"></a>
-<span class="sourceLineNo">7275</span><a name="line.7275"></a>
-<span class="sourceLineNo">7276</span>  /**<a name="line.7276"></a>
-<span class="sourceLineNo">7277</span>   * @return Get the long out of the passed in Cell<a name="line.7277"></a>
-<span class="sourceLineNo">7278</span>   */<a name="line.7278"></a>
-<span class="sourceLineNo">7279</span>  private static long getLongValue(final Cell cell) throws DoNotRetryIOException {<a name="line.7279"></a>
-<span class="sourceLineNo">7280</span>    int len = cell.getValueLength();<a name="line.7280"></a>
-<span class="sourceLineNo">7281</span>    if (len != Bytes.SIZEOF_LONG) {<a name="line.7281"></a>
-<span class="sourceLineNo">7282</span>      // throw DoNotRetryIOException instead of IllegalArgumentException<a name="line.7282"></a>
-<span class="sourceLineNo">7283</span>      throw new DoNotRetryIOException("Field is not a long, it's " + len + " bytes wide");<a name="line.7283"></a>
-<span class="sourceLineNo">7284</span>    }<a name="line.7284"></a>
-<span class="sourceLineNo">7285</span>    return Bytes.toLong(cell.getValueArray(), cell.getValueOffset(), len);<a name="line.7285"></a>
-<span class="sourceLineNo">7286</span>  }<a name="line.7286"></a>
-<span class="sourceLineNo">7287</span><a name="line.7287"></a>
-<span class="sourceLineNo">7288</span>  /**<a name="line.7288"></a>
-<span class="sourceLineNo">7289</span>   * Do a specific Get on passed &lt;code&gt;columnFamily&lt;/code&gt; and column qualifiers.<a name="line.7289"></a>
-<span class="sourceLineNo">7290</span>   * @param mutation Mutation we are doing this Get for.<a name="line.7290"></a>
-<span class="sourceLineNo">7291</span>   * @param columnFamily Which column family on row (TODO: Go all Gets in one go)<a name="line.7291"></a>
-<span class="sourceLineNo">7292</span>   * @param coordinates Cells from &lt;code&gt;mutation&lt;/code&gt; used as coordinates applied to Get.<a name="line.7292"></a>
-<span class="sourceLineNo">7293</span>   * @return Return list of Cells found.<a name="line.7293"></a>
-<span class="sourceLineNo">7294</span>   */<a name="line.7294"></a>
-<span class="sourceLineNo">7295</span>  private List&lt;Cell&gt; get(final Mutation mutation, final Store store,<a name="line.7295"></a>
-<span class="sourceLineNo">7296</span>          final List&lt;Cell&gt; coordinates, final IsolationLevel isolation, final TimeRange tr)<a name="line.7296"></a>
-<span class="sourceLineNo">7297</span>  throws IOException {<a name="line.7297"></a>
-<span class="sourceLineNo">7298</span>    // Sort the cells so that they match the order that they appear in the Get results. Otherwise,<a name="line.7298"></a>
-<span class="sourceLineNo">7299</span>    // we won't be able to find the existing values if the cells are not specified in order by the<a name="line.7299"></a>
-<span class="sourceLineNo">7300</span>    // client since cells are in an array list.<a name="line.7300"></a>
-<span class="sourceLineNo">7301</span>    // TODO: I don't get why we are sorting. St.Ack 20150107<a name="line.7301"></a>
-<span class="sourceLineNo">7302</span>    sort(coordinates, store.getComparator());<a name="line.7302"></a>
-<span class="sourceLineNo">7303</span>    Get get = new Get(mutation.getRow());<a name="line.7303"></a>
-<span class="sourceLineNo">7304</span>    if (isolation != null) {<a name="line.7304"></a>
-<span class="sourceLineNo">7305</span>      get.setIsolationLevel(isolation);<a name="line.7305"></a>
-<span class="sourceLineNo">7306</span>    }<a name="line.7306"></a>
-<span class="sourceLineNo">7307</span>    for (Cell cell: coordinates) {<a name="line.7307"></a>
-<span class="sourceLineNo">7308</span>      get.addColumn(store.getFamily().getName(), CellUtil.cloneQualifier(cell));<a name="line.7308"></a>
-<span class="sourceLineNo">7309</span>    }<a name="line.7309"></a>
-<span class="sourceLineNo">7310</span>    // Increments carry time range. If an Increment instance, put it on the Get.<a name="line.7310"></a>
-<span class="sourceLineNo">7311</span>    if (tr != null) {<a name="line.7311"></a>
-<span class="sourceLineNo">7312</span>      get.setTimeRange(tr.getMin(), tr.getMax());<a name="line.7312"></a>
-<span class="sourceLineNo">7313</span>    }<a name="line.7313"></a>
-<span class="sourceLineNo">7314</span>    return get(get, false);<a name="line.7314"></a>
-<span class="sourceLineNo">7315</span>  }<a name="line.7315"></a>
-<span class="sourceLineNo">7316</span><a name="line.7316"></a>
-<span class="sourceLineNo">7317</span>  /**<a name="line.7317"></a>
-<span class="sourceLineNo">7318</span>   * @return Sorted list of &lt;code&gt;cells&lt;/code&gt; using &lt;code&gt;comparator&lt;/code&gt;<a name="line.7318"></a>
-<span class="sourceLineNo">7319</span>   */<a name="line.7319"></a>
-<span class="sourceLineNo">7320</span>  private static List&lt;Cell&gt; sort(List&lt;Cell&gt; cells, final Comparator&lt;Cell&gt; comparator) {<a name="line.7320"></a>
-<span class="sourceLineNo">7321</span>    Collections.sort(cells, comparator);<a name="line.7321"></a>
-<span class="sourceLineNo">7322</span>    return cells;<a name="line.7322"></a>
-<span class="sourceLineNo">7323</span>  }<a name="line.7323"></a>
-<span class="sourceLineNo">7324</span><a name="line.7324"></a>
-<span class="sourceLineNo">7325</span>  //<a name="line.7325"></a>
-<span class="sourceLineNo">7326</span>  // New HBASE-880 Helpers<a name="line.7326"></a>
+<span class="sourceLineNo">7128</span>   * Does Get of current value and then adds passed in deltas for this Store returning the result.<a name="line.7128"></a>
+<span class="sourceLineNo">7129</span>   *<a name="line.7129"></a>
+<span class="sourceLineNo">7130</span>   * @param op Whether Increment or Append<a name="line.7130"></a>
+<span class="sourceLineNo">7131</span>   * @param mutation The encompassing Mutation object<a name="line.7131"></a>
+<span class="sourceLineNo">7132</span>   * @param deltas Changes to apply to this Store; either increment amount or data to append<a name="line.7132"></a>
+<span class="sourceLineNo">7133</span>   * @param results In here we accumulate all the Cells we are to return to the client; this List<a name="line.7133"></a>
+<span class="sourceLineNo">7134</span>   *  can be larger than what we return in case where delta is zero; i.e. don't write<a name="line.7134"></a>
+<span class="sourceLineNo">7135</span>   *  out new values, just return current value. If null, client doesn't want results returned.<a name="line.7135"></a>
+<span class="sourceLineNo">7136</span>   * @return Resulting Cells after &lt;code&gt;deltas&lt;/code&gt; have been applied to current<a name="line.7136"></a>
+<span class="sourceLineNo">7137</span>   *  values. Side effect is our filling out of the &lt;code&gt;results&lt;/code&gt; List.<a name="line.7137"></a>
+<span class="sourceLineNo">7138</span>   */<a name="line.7138"></a>
+<span class="sourceLineNo">7139</span>  private List&lt;Cell&gt; reckonDeltasByStore(final Store store, final Operation op,<a name="line.7139"></a>
+<span class="sourceLineNo">7140</span>      final Mutation mutation, final Durability effectiveDurability, final long now,<a name="line.7140"></a>
+<span class="sourceLineNo">7141</span>      final List&lt;Cell&gt; deltas, final List&lt;Cell&gt; results)<a name="line.7141"></a>
+<span class="sourceLineNo">7142</span>  throws IOException {<a name="line.7142"></a>
+<span class="sourceLineNo">7143</span>    byte [] columnFamily = store.getFamily().getName();<a name="line.7143"></a>
+<span class="sourceLineNo">7144</span>    List&lt;Cell&gt; toApply = new ArrayList&lt;Cell&gt;(deltas.size());<a name="line.7144"></a>
+<span class="sourceLineNo">7145</span>    // Get previous values for all columns in this family.<a name="line.7145"></a>
+<span class="sourceLineNo">7146</span>    List&lt;Cell&gt; currentValues = get(mutation, store, deltas,<a name="line.7146"></a>
+<span class="sourceLineNo">7147</span>        null/*Default IsolationLevel*/,<a name="line.7147"></a>
+<span class="sourceLineNo">7148</span>        op == Operation.INCREMENT? ((Increment)mutation).getTimeRange(): null);<a name="line.7148"></a>
+<span class="sourceLineNo">7149</span>    // Iterate the input columns and update existing values if they were found, otherwise<a name="line.7149"></a>
+<span class="sourceLineNo">7150</span>    // add new column initialized to the delta amount<a name="line.7150"></a>
+<span class="sourceLineNo">7151</span>    int currentValuesIndex = 0;<a name="line.7151"></a>
+<span class="sourceLineNo">7152</span>    for (int i = 0; i &lt; deltas.size(); i++) {<a name="line.7152"></a>
+<span class="sourceLineNo">7153</span>      Cell delta = deltas.get(i);<a name="line.7153"></a>
+<span class="sourceLineNo">7154</span>      Cell currentValue = null;<a name="line.7154"></a>
+<span class="sourceLineNo">7155</span>      if (currentValuesIndex &lt; currentValues.size() &amp;&amp;<a name="line.7155"></a>
+<span class="sourceLineNo">7156</span>          CellUtil.matchingQualifier(currentValues.get(currentValuesIndex), delta)) {<a name="line.7156"></a>
+<span class="sourceLineNo">7157</span>        currentValue = currentValues.get(currentValuesIndex);<a name="line.7157"></a>
+<span class="sourceLineNo">7158</span>        if (i &lt; (deltas.size() - 1) &amp;&amp; !CellUtil.matchingQualifier(delta, deltas.get(i + 1))) {<a name="line.7158"></a>
+<span class="sourceLineNo">7159</span>          currentValuesIndex++;<a name="line.7159"></a>
+<span class="sourceLineNo">7160</span>        }<a name="line.7160"></a>
+<span class="sourceLineNo">7161</span>      }<a name="line.7161"></a>
+<span class="sourceLineNo">7162</span>      // Switch on whether this an increment or an append building the new Cell to apply.<a name="line.7162"></a>
+<span class="sourceLineNo">7163</span>      Cell newCell = null;<a name="line.7163"></a>
+<span class="sourceLineNo">7164</span>      MutationType mutationType = null;<a name="line.7164"></a>
+<span class="sourceLineNo">7165</span>      boolean apply = true;<a name="line.7165"></a>
+<span class="sourceLineNo">7166</span>      switch (op) {<a name="line.7166"></a>
+<span class="sourceLineNo">7167</span>        case INCREMENT:<a name="line.7167"></a>
+<span class="sourceLineNo">7168</span>          mutationType = MutationType.INCREMENT;<a name="line.7168"></a>
+<span class="sourceLineNo">7169</span>          // If delta amount to apply is 0, don't write WAL or MemStore.<a name="line.7169"></a>
+<span class="sourceLineNo">7170</span>          long deltaAmount = getLongValue(delta);<a name="line.7170"></a>
+<span class="sourceLineNo">7171</span>          apply = deltaAmount != 0;<a name="line.7171"></a>
+<span class="sourceLineNo">7172</span>          newCell = reckonIncrement(delta, deltaAmount, currentValue, columnFamily, now,<a name="line.7172"></a>
+<span class="sourceLineNo">7173</span>            (Increment)mutation);<a name="line.7173"></a>
+<span class="sourceLineNo">7174</span>          break;<a name="line.7174"></a>
+<span class="sourceLineNo">7175</span>        case APPEND:<a name="line.7175"></a>
+<span class="sourceLineNo">7176</span>          mutationType = MutationType.APPEND;<a name="line.7176"></a>
+<span class="sourceLineNo">7177</span>          // Always apply Append. TODO: Does empty delta value mean reset Cell? It seems to.<a name="line.7177"></a>
+<span class="sourceLineNo">7178</span>          newCell = reckonAppend(delta, currentValue, now, (Append)mutation);<a name="line.7178"></a>
+<span class="sourceLineNo">7179</span>          break;<a name="line.7179"></a>
+<span class="sourceLineNo">7180</span>        default: throw new UnsupportedOperationException(op.toString());<a name="line.7180"></a>
+<span class="sourceLineNo">7181</span>      }<a name="line.7181"></a>
+<span class="sourceLineNo">7182</span><a name="line.7182"></a>
+<span class="sourceLineNo">7183</span>      // Give coprocessors a chance to update the new cell<a name="line.7183"></a>
+<span class="sourceLineNo">7184</span>      if (coprocessorHost != null) {<a name="line.7184"></a>
+<span class="sourceLineNo">7185</span>        newCell =<a name="line.7185"></a>
+<span class="sourceLineNo">7186</span>            coprocessorHost.postMutationBeforeWAL(mutationType, mutation, currentValue, newCell);<a name="line.7186"></a>
+<span class="sourceLineNo">7187</span>      }<a name="line.7187"></a>
+<span class="sourceLineNo">7188</span>      // If apply, we need to update memstore/WAL with new value; add it toApply.<a name="line.7188"></a>
+<span class="sourceLineNo">7189</span>      if (apply) {<a name="line.7189"></a>
+<span class="sourceLineNo">7190</span>        toApply.add(newCell);<a name="line.7190"></a>
+<span class="sourceLineNo">7191</span>      }<a name="line.7191"></a>
+<span class="sourceLineNo">7192</span>      // Add to results to get returned to the Client. If null, cilent does not want results.<a name="line.7192"></a>
+<span class="sourceLineNo">7193</span>      if (results != null) {<a name="line.7193"></a>
+<span class="sourceLineNo">7194</span>        results.add(newCell);<a name="line.7194"></a>
+<span class="sourceLineNo">7195</span>      }<a name="line.7195"></a>
+<span class="sourceLineNo">7196</span>    }<a name="line.7196"></a>
+<span class="sourceLineNo">7197</span>    return toApply;<a name="line.7197"></a>
+<span class="sourceLineNo">7198</span>  }<a name="line.7198"></a>
+<span class="sourceLineNo">7199</span><a name="line.7199"></a>
+<span class="sourceLineNo">7200</span>  /**<a name="line.7200"></a>
+<span class="sourceLineNo">7201</span>   * Calculate new Increment Cell.<a name="line.7201"></a>
+<span class="sourceLineNo">7202</span>   * @return New Increment Cell with delta applied to currentValue if currentValue is not null;<a name="line.7202"></a>
+<span class="sourceLineNo">7203</span>   *  otherwise, a new Cell with the delta set as its value.<a name="line.7203"></a>
+<span class="sourceLineNo">7204</span>   */<a name="line.7204"></a>
+<span class="sourceLineNo">7205</span>  private Cell reckonIncrement(final Cell delta, final long deltaAmount, final Cell currentValue,<a name="line.7205"></a>
+<span class="sourceLineNo">7206</span>      byte [] columnFamily, final long now, Mutation mutation)<a name="line.7206"></a>
+<span class="sourceLineNo">7207</span>  throws IOException {<a name="line.7207"></a>
+<span class="sourceLineNo">7208</span>    // Forward any tags found on the delta.<a name="line.7208"></a>
+<span class="sourceLineNo">7209</span>    List&lt;Tag&gt; tags = TagUtil.carryForwardTags(delta);<a name="line.7209"></a>
+<span class="sourceLineNo">7210</span>    long newValue = deltaAmount;<a name="line.7210"></a>
+<span class="sourceLineNo">7211</span>    long ts = now;<a name="line.7211"></a>
+<span class="sourceLineNo">7212</span>    if (currentValue != null) {<a name="line.7212"></a>
+<span class="sourceLineNo">7213</span>      tags = TagUtil.carryForwardTags(tags, currentValue);<a name="line.7213"></a>
+<span class="sourceLineNo">7214</span>      ts = Math.max(now, currentValue.getTimestamp());<a name="line.7214"></a>
+<span class="sourceLineNo">7215</span>      newValue += getLongValue(currentValue);<a name="line.7215"></a>
+<span class="sourceLineNo">7216</span>    }<a name="line.7216"></a>
+<span class="sourceLineNo">7217</span>    // Now make up the new Cell. TODO: FIX. This is carnel knowledge of how KeyValues are made...<a name="line.7217"></a>
+<span class="sourceLineNo">7218</span>    // doesn't work well with offheaping or if we are doing a different Cell type.<a name="line.7218"></a>
+<span class="sourceLineNo">7219</span>    byte [] incrementAmountInBytes = Bytes.toBytes(newValue);<a name="line.7219"></a>
+<span class="sourceLineNo">7220</span>    tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7220"></a>
+<span class="sourceLineNo">7221</span>    byte [] row = mutation.getRow();<a name="line.7221"></a>
+<span class="sourceLineNo">7222</span>    return new KeyValue(row, 0, row.length,<a name="line.7222"></a>
+<span class="sourceLineNo">7223</span>      columnFamily, 0, columnFamily.length,<a name="line.7223"></a>
+<span class="sourceLineNo">7224</span>      delta.getQualifierArray(), delta.getQualifierOffset(), delta.getQualifierLength(),<a name="line.7224"></a>
+<span class="sourceLineNo">7225</span>      ts, KeyValue.Type.Put,<a name="line.7225"></a>
+<span class="sourceLineNo">7226</span>      incrementAmountInBytes, 0, incrementAmountInBytes.length,<a name="line.7226"></a>
+<span class="sourceLineNo">7227</span>      tags);<a name="line.7227"></a>
+<span class="sourceLineNo">7228</span>  }<a name="line.7228"></a>
+<span class="sourceLineNo">7229</span><a name="line.7229"></a>
+<span class="sourceLineNo">7230</span>  private Cell reckonAppend(final Cell delta, final Cell currentValue, final long now,<a name="line.7230"></a>
+<span class="sourceLineNo">7231</span>      Append mutation)<a name="line.7231"></a>
+<span class="sourceLineNo">7232</span>  throws IOException {<a name="line.7232"></a>
+<span class="sourceLineNo">7233</span>    // Forward any tags found on the delta.<a name="line.7233"></a>
+<span class="sourceLineNo">7234</span>    List&lt;Tag&gt; tags = TagUtil.carryForwardTags(delta);<a name="line.7234"></a>
+<span class="sourceLineNo">7235</span>    long ts = now;<a name="line.7235"></a>
+<span class="sourceLineNo">7236</span>    Cell newCell = null;<a name="line.7236"></a>
+<span class="sourceLineNo">7237</span>    byte [] row = mutation.getRow();<a name="line.7237"></a>
+<span class="sourceLineNo">7238</span>    if (currentValue != null) {<a name="line.7238"></a>
+<span class="sourceLineNo">7239</span>      tags = TagUtil.carryForwardTags(tags, currentValue);<a name="line.7239"></a>
+<span class="sourceLineNo">7240</span>      ts = Math.max(now, currentValue.getTimestamp());<a name="line.7240"></a>
+<span class="sourceLineNo">7241</span>      tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7241"></a>
+<span class="sourceLineNo">7242</span>      byte[] tagBytes = TagUtil.fromList(tags);<a name="line.7242"></a>
+<span class="sourceLineNo">7243</span>      // Allocate an empty cell and copy in all parts.<a name="line.7243"></a>
+<span class="sourceLineNo">7244</span>      // TODO: This is intimate knowledge of how a KeyValue is made. Undo!!! Prevents our doing<a name="line.7244"></a>
+<span class="sourceLineNo">7245</span>      // other Cell types. Copying on-heap too if an off-heap Cell.<a name="line.7245"></a>
+<span class="sourceLineNo">7246</span>      newCell = new KeyValue(row.length, delta.getFamilyLength(),<a name="line.7246"></a>
+<span class="sourceLineNo">7247</span>        delta.getQualifierLength(), ts, KeyValue.Type.Put,<a name="line.7247"></a>
+<span class="sourceLineNo">7248</span>        delta.getValueLength() + currentValue.getValueLength(),<a name="line.7248"></a>
+<span class="sourceLineNo">7249</span>        tagBytes == null? 0: tagBytes.length);<a name="line.7249"></a>
+<span class="sourceLineNo">7250</span>      // Copy in row, family, and qualifier<a name="line.7250"></a>
+<span class="sourceLineNo">7251</span>      System.arraycopy(row, 0, newCell.getRowArray(), newCell.getRowOffset(), row.length);<a name="line.7251"></a>
+<span class="sourceLineNo">7252</span>      System.arraycopy(delta.getFamilyArray(), delta.getFamilyOffset(),<a name="line.7252"></a>
+<span class="sourceLineNo">7253</span>          newCell.getFamilyArray(), newCell.getFamilyOffset(), delta.getFamilyLength());<a name="line.7253"></a>
+<span class="sourceLineNo">7254</span>      System.arraycopy(delta.getQualifierArray(), delta.getQualifierOffset(),<a name="line.7254"></a>
+<span class="sourceLineNo">7255</span>          newCell.getQualifierArray(), newCell.getQualifierOffset(), delta.getQualifierLength());<a name="line.7255"></a>
+<span class="sourceLineNo">7256</span>      // Copy in the value<a name="line.7256"></a>
+<span class="sourceLineNo">7257</span>      CellUtil.copyValueTo(currentValue, newCell.getValueArray(), newCell.getValueOffset());<a name="line.7257"></a>
+<span class="sourceLineNo">7258</span>      System.arraycopy(delta.getValueArray(), delta.getValueOffset(),<a name="line.7258"></a>
+<span class="sourceLineNo">7259</span>          newCell.getValueArray(), newCell.getValueOffset() + currentValue.getValueLength(),<a name="line.7259"></a>
+<span class="sourceLineNo">7260</span>          delta.getValueLength());<a name="line.7260"></a>
+<span class="sourceLineNo">7261</span>      // Copy in tag data<a name="line.7261"></a>
+<span class="sourceLineNo">7262</span>      if (tagBytes != null) {<a name="line.7262"></a>
+<span class="sourceLineNo">7263</span>        System.arraycopy(tagBytes, 0,<a name="line.7263"></a>
+<span class="sourceLineNo">7264</span>            newCell.getTagsArray(), newCell.getTagsOffset(), tagBytes.length);<a name="line.7264"></a>
+<span class="sourceLineNo">7265</span>      }<a name="line.7265"></a>
+<span class="sourceLineNo">7266</span>    } else {<a name="line.7266"></a>
+<span class="sourceLineNo">7267</span>      // Append's KeyValue.Type==Put and ts==HConstants.LATEST_TIMESTAMP<a name="line.7267"></a>
+<span class="sourceLineNo">7268</span>      CellUtil.updateLatestStamp(delta, now);<a name="line.7268"></a>
+<span class="sourceLineNo">7269</span>      newCell = delta;<a name="line.7269"></a>
+<span class="sourceLineNo">7270</span>      tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7270"></a>
+<span class="sourceLineNo">7271</span>      if (tags != null) {<a name="line.7271"></a>
+<span class="sourceLineNo">7272</span>        newCell = new TagRewriteCell(delta, TagUtil.fromList(tags));<a name="line.7272"></a>
+<span class="sourceLineNo">7273</span>      }<a name="line.7273"></a>
+<span class="sourceLineNo">7274</span>    }<a name="line.7274"></a>
+<span class="sourceLineNo">7275</span>    return newCell;<a name="line.7275"></a>
+<span class="sourceLineNo">7276</span>  }<a name="line.7276"></a>
+<span class="sourceLineNo">7277</span><a name="line.7277"></a>
+<span class="sourceLineNo">7278</span>  /**<a name="line.7278"></a>
+<span class="sourceLineNo">7279</span>   * @return Get the long out of the passed in Cell<a name="line.7279"></a>
+<span class="sourceLineNo">7280</span>   */<a name="line.7280"></a>
+<span class="sourceLineNo">7281</span>  private static long getLongValue(final Cell cell) throws DoNotRetryIOException {<a name="line.7281"></a>
+<span class="sourceLineNo">7282</span>    int len = cell.getValueLength();<a name="line.7282"></a>
+<span class="sourceLineNo">7283</span>    if (len != Bytes.SIZEOF_LONG) {<a name="line.7283"></a>
+<span class="sourceLineNo">7284</span>      // throw DoNotRetryIOException instead of IllegalArgumentException<a name="line.7284"></a>
+<span class="sourceLineNo">7285</span>      throw new DoNotRetryIOException("Field is not a long, it's " + len + " bytes wide");<a name="line.7285"></a>
+<span class="sourceLineNo">7286</span>    }<a name="line.7286"></a>
+<span class="sourceLineNo">7287</span>    return Bytes.toLong(cell.getValueArray(), cell.getValueOffset(), len);<a name="line.7287"></a>
+<span class="sourceLineNo">7288</span>  }<a name="line.7288"></a>
+<span class="sourceLineNo">7289</span><a name="line.7289"></a>
+<span class="sourceLineNo">7290</span>  /**<a name="line.7290"></a>
+<span class="sourceLineNo">7291</span>   * Do a specific Get on passed &lt;code&gt;columnFamily&lt;/code&gt; and column qualifiers.<a name="line.7291"></a>
+<span class="sourceLineNo">7292</span>   * @param mutation Mutation we are doing this Get for.<a name="line.7292"></a>
+<span class="sourceLineNo">7293</span>   * @param columnFamily Which column family on row (TODO: Go all Gets in one go)<a name="line.7293"></a>
+<span class="sourceLineNo">7294</span>   * @param coordinates Cells from &lt;code&gt;mutation&lt;/code&gt; used as coordinates applied to Get.<a name="line.7294"></a>
+<span class="sourceLineNo">7295</span>   * @return Return list of Cells found.<a name="line.7295"></a>
+<span class="sourceLineNo">7296</span>   */<a name="line.7296"></a>
+<span class="sourceLineNo">7297</span>  private List&lt;Cell&gt; get(final Mutation mutation, final Store store,<a name="line.7297"></a>
+<span class="sourceLineNo">7298</span>          final List&lt;Cell&gt; coordinates, final IsolationLevel isolation, final TimeRange tr)<a name="line.7298"></a>
+<span class="sourceLineNo">7299</span>  throws IOException {<a name="line.7299"></a>
+<span class="sourceLineNo">7300</span>    // Sort the cells so that they match the order that they appear in the Get results. Otherwise,<a name="line.7300"></a>
+<span class="sourceLineNo">7301</span>    // we won't be able to find the existing values if the cells are not specified in order by the<a name="line.7301"></a>
+<span class="sourceLineNo">7302</span>    // client since cells are in an array list.<a name="line.7302"></a>
+<span class="sourceLineNo">7303</span>    // TODO: I don't get why we are sorting. St.Ack 20150107<a name="line.7303"></a>
+<span class="sourceLineNo">7304</span>    sort(coordinates, store.getComparator());<a name="line.7304"></a>
+<span class="sourceLineNo">7305</span>    Get get = new Get(mutation.getRow());<a name="line.7305"></a>
+<span class="sourceLineNo">7306</span>    if (isolation != null) {<a name="line.7306"></a>
+<span class="sourceLineNo">7307</span>      get.setIsolationLevel(isolation);<a name="line.7307"></a>
+<span class="sourceLineNo">7308</span>    }<a name="line.7308"></a>
+<span class="sourceLineNo">7309</span>    for (Cell cell: coordinates) {<a name="line.7309"></a>
+<span class="sourceLineNo">7310</span>      get.addColumn(store.getFamily().getName(), CellUtil.cloneQualifier(cell));<a name="line.7310"></a>
+<span class="sourceLineNo">7311</span>    }<a name="line.7311"></a>
+<span class="sourceLineNo">7312</span>    // Increments carry time range. If an Increment instance, put it on the Get.<a name="line.7312"></a>
+<span class="sourceLineNo">7313</span>    if (tr != null) {<a name="line.7313"></a>
+<span class="sourceLineNo">7314</span>      get.setTimeRange(tr.getMin(), tr.getMax());<a name="line.7314"></a>
+<span class="sourceLineNo">7315</span>    }<a name="line.7315"></a>
+<span class="sourceLineNo">7316</span>    return get(get, false);<a name="line.7316"></a>
+<span class="sourceLineNo">7317</span>  }<a name="line.7317"></a>
+<span class="sourceLineNo">7318</span><a name="line.7318"></a>
+<span class="sourceLineNo">7319</span>  /**<a name="line.7319"></a>
+<span class="sourceLineNo">7320</span>   * @return Sorted list of &lt;code&gt;cells&lt;/code&gt; using &lt;code&gt;comparator&lt;/code&gt;<a name="line.7320"></a>
+<span class="sourceLineNo">7321</span>   */<a name="line.7321"></a>
+<span class="sourceLineNo">7322</span>  private static List&lt;Cell&gt; sort(List&lt;Cell&gt; cells, final Comparator&lt;Cell&gt; comparator) {<a name="line.7322"></a>
+<span class="sourceLineNo">7323</span>    Collections.sort(cells, comparator);<a name="line.7323"></a>
+<span class="sourceLineNo">7324</span>    return cells;<a name="line.7324"></a>
+<span class="sourceLineNo">7325</span>  }<a name="line.7325"></a>
+<span class="sourceLineNo">7326</span><a name="line.7326"></a>
 <span class="sourceLineNo">7327</span>  //<a name="line.7327"></a>
-<span class="sourceLineNo">7328</span><a name="line.7328"></a>
-<span class="sourceLineNo">7329</span>  void checkFamily(final byte [] family)<a name="line.7329"></a>
-<span class="sourceLineNo">7330</span>  throws NoSuchColumnFamilyException {<a name="line.7330"></a>
-<span class="sourceLineNo">7331</span>    if (!this.htableDescriptor.hasFamily(family)) {<a name="line.7331"></a>
-<span class="sourceLineNo">7332</span>      throw new NoSuchColumnFamilyException("Column family " +<a name="line.7332"></a>
-<span class="sourceLineNo">7333</span>          Bytes.toString(family) + " does not exist in region " + this<a name="line.7333"></a>
-<span class="sourceLineNo">7334</span>          + " in table " + this.htableDescriptor);<a name="line.7334"></a>
-<span class="sourceLineNo">7335</span>    }<a name="line.7335"></a>
-<span class="sourceLineNo">7336</span>  }<a name="line.7336"></a>
-<span class="sourceLineNo">7337</span><a name="line.7337"></a>
-<span class="sourceLineNo">7338</span>  public static final long FIXED_OVERHEAD = ClassSize.align(<a name="line.7338"></a>
-<span class="sourceLineNo">7339</span>      ClassSize.OBJECT +<a name="line.7339"></a>
-<span class="sourceLineNo">7340</span>      ClassSize.ARRAY +<a name="line.7340"></a>
-<span class="sourceLineNo">7341</span>      45 * ClassSize.REFERENCE + 2 * Bytes.SIZEOF_INT +<a name="line.7341"></a>
-<span class="sourceLineNo">7342</span>      (14 * Bytes.SIZEOF_LONG) +<a name="line.7342"></a>
-<span class="sourceLineNo">7343</span>      5 * Bytes.SIZEOF_BOOLEAN);<a name="line.7343"></a>
-<span class="sourceLineNo">7344</span><a name="line.7344"></a>
-<span class="sourceLineNo">7345</span>  // woefully out of date - currently missing:<a name="line.7345"></a>
-<span class="sourceLineNo">7346</span>  // 1 x HashMap - coprocessorServiceHandlers<a name="line.7346"></a>
-<span class="sourceLineNo">7347</span>  // 6 x Counter - numMutationsWithoutWAL, dataInMemoryWithoutWAL,<a name="line.7347"></a>
-<span class="sourceLineNo">7348</span>  //   checkAndMutateChecksPassed, checkAndMutateChecksFailed, readRequestsCount,<a name="line.7348"></a>
-<span class="sourceLineNo">7349</span>  //   writeRequestsCount<a name="line.7349"></a>
-<span class="sourceLineNo">7350</span>  // 1 x HRegion$WriteState - writestate<a name="line.7350"></a>
-<span class="sourceLineNo">7351</span>  // 1 x RegionCoprocessorHost - coprocessorHost<a name="line.7351"></a>
-<span class="sourceLineNo">7352</span>  // 1 x RegionSplitPolicy - splitPolicy<a name="line.7352"></a>
-<span class="sourceLineNo">7353</span>  // 1 x MetricsRegion - metricsRegion<a name="line.7353"></a>
-<span class="sourceLineNo">7354</span>  // 1 x MetricsRegionWrapperImpl - metricsRegionWrapper<a name="line.7354"></a>
-<span class="sourceLineNo">7355</span>  public static final long DEEP_OVERHEAD = FIXED_OVERHEAD +<a name="line.7355"></a>
-<span class="sourceLineNo">7356</span>      ClassSize.OBJECT + // closeLock<a name="line.7356"></a>
-<span class="sourceLineNo">7357</span>      (2 * ClassSize.ATOMIC_BOOLEAN) + // closed, closing<a name="line.7357"></a>
-<span class="sourceLineNo">7358</span>      (3 * ClassSize.ATOMIC_LONG) + // memStoreSize, numPutsWithoutWAL, dataInMemoryWithoutWAL<a name="line.7358"></a>
-<span class="sourceLineNo">7359</span>      (2 * ClassSize.CONCURRENT_HASHMAP) +  // lockedRows, scannerReadPoints<a name="line.7359"></a>
-<span class="sourceLineNo">7360</span>      WriteState.HEAP_SIZE + // writestate<a name="line.7360"></a>
-<span class="sourceLineNo">7361</span>      ClassSize.CONCURRENT_SKIPLISTMAP + ClassSize.CONCURRENT_SKIPLISTMAP_ENTRY + // stores<a name="line.7361"></a>
-<span class="sourceLineNo">7362</span>      (2 * ClassSize.REENTRANT_LOCK) + // lock, updatesLock<a name="line.7362"></a>
-<span class="sourceLineNo">7363</span>      MultiVersionConcurrencyControl.FIXED_SIZE // mvcc<a name="line.7363"></a>
-<span class="sourceLineNo">7364</span>      + ClassSize.TREEMAP // maxSeqIdInStores<a name="line.7364"></a>
-<span class="sourceLineNo">7365</span>      + 2 * ClassSize.ATOMIC_INTEGER // majorInProgress, minorInProgress<a name="line.7365"></a>
-<span class="sourceLineNo">7366</span>      ;<a name="line.7366"></a>
-<span class="sourceLineNo">7367</span><a name="line.7367"></a>
-<span class="sourceLineNo">7368</span>  @Override<a name="line.7368"></a>
-<span class="sourceLineNo">7369</span>  public long heapSize() {<a name="line.7369"></a>
-<span class="sourceLineNo">7370</span>    long heapSize = DEEP_OVERHEAD;<a name="line.7370"></a>
-<span class="sourceLineNo">7371</span>    for (Store store : this.stores.values()) {<a name="line.7371"></a>
-<span class="sourceLineNo">7372</span>      heapSize += store.heapSize();<a name="line.7372"></a>
-<span class="sourceLineNo">7373</span>    }<a name="line.7373"></a>
-<span class="sourceLineNo">7374</span>    // this does not take into account row locks, recent flushes, mvcc entries, and more<a name="line.7374"></a>
-<span class="sourceLineNo">7375</span>    return heapSize;<a name="line.7375"></a>
-<span class="sourceLineNo">7376</span>  }<a name="line.7376"></a>
-<span class="sourceLineNo">7377</span><a name="line.7377"></a>
-<span class="sourceLineNo">7378</span>  @Override<a name="line.7378"></a>
-<span class="sourceLineNo">7379</span>  public boolean registerService(Service instance) {<a name="line.7379"></a>
-<span class="sourceLineNo">7380</span>    /*<a name="line.7380"></a>
-<span class="sourceLineNo">7381</span>     * No stacking of instances is allowed for a single service name<a name="line.7381"></a>
-<span class="sourceLineNo">7382</span>     */<a name="line.7382"></a>
-<span class="sourceLineNo">7383</span>    Descriptors.ServiceDescriptor serviceDesc = instance.getDescriptorForType();<a name="line.7383"></a>
-<span class="sourceLineNo">7384</span>    if (coprocessorServiceHandlers.containsKey(serviceDesc.getFullName())) {<a name="line.7384"></a>
-<span class="sourceLineNo">7385</span>      LOG.error("Coprocessor service " + serviceDesc.getFullName() +<a name="line.7385"></a>
-<span class="sourceLineNo">7386</span>              " already registered, rejecting request from " + instance<a name="line.7386"></a>
-<span class="sourceLineNo">7387</span>      );<a name="line.7387"></a>
-<span class="sourceLineNo">7388</span>      return false;<a name="line.7388"></a>
-<span class="sourceLineNo">7389</span>    }<a name="line.7389"></a>
-<span class="sourceLineNo">7390</span><a name="line.7390"></a>
-<span class="sourceLineNo">7391</span>    coprocessorServiceHandlers.put(serviceDesc.getFullName(), instance);<a name="line.7391"></a>
-<span class="sourceLineNo">7392</span>    if (LOG.isDebugEnabled()) {<a name="line.7392"></a>
-<span class="sourceLineNo">7393</span>      LOG.debug("Registered coprocessor service: region=" +<a name="line.7393"></a>
-<span class="sourceLineNo">7394</span>          Bytes.toStringBinary(getRegionInfo().getRegionName()) +<a name="line.7394"></a>
-<span class="sourceLineNo">7395</span>          " service=" + serviceDesc.getFullName());<a name="line.7395"></a>
-<span class="sourceLineNo">7396</span>    }<a name="line.7396"></a>
-<span class="sourceLineNo">7397</span>    return true;<a name="line.7397"></a>
-<span class="sourceLineNo">7398</span>  }<a name="line.7398"></a>
-<span class="sourceLineNo">7399</span><a name="line.7399"></a>
-<span class="sourceLineNo">7400</span>  @Override<a name="line.7400"></a>
-<span class="sourceLineNo">7401</span>  public Message execService(RpcController controller, CoprocessorServiceCall call)<a name="line.7401"></a>
-<span class="sourceLineNo">7402</span>      throws IOException {<a name="line.7402"></a>
-<span class="sourceLineNo">7403</span>    String serviceName = call.getServiceName();<a name="line.7403"></a>
-<span class="sourceLineNo">7404</span>    String methodName = call.getMethodName();<a name="line.7404"></a>
-<span class="sourceLineNo">7405</span>    if (!coprocessorServiceHandlers.containsKey(serviceName)) {<a name="line.7405"></a>
-<span class="sourceLineNo">7406</span>      throw new UnknownProtocolException(null,<a name="line.7406"></a>
-<span class="sourceLineNo">7407</span>          "No registered coprocessor service found for name "+serviceName+<a name="line.7407"></a>
-<span class="sourceLineNo">7408</span>          " in region "+Bytes.toStringBinary(getRegionInfo().getRegionName()));<a name="line.7408"></a>
-<span class="sourceLineNo">7409</span>    }<a name="line.7409"></a>
-<span class="sourceLineNo">7410</span><a name="line.7410"></a>
-<span class="sourceLineNo">7411</span>    Service service = coprocessorServiceHandlers.get(serviceName);<a name="line.7411"></a>
-<span class="sourceLineNo">7412</span>    Descriptors.ServiceDescriptor serviceDesc = service.getDescriptorForType();<a name="line.7412"></a>
-<span class="sourceLineNo">7413</span>    Descriptors.MethodDescriptor methodDesc = serviceDesc.findMethodByName(methodName);<a name="line.7413"></a>
-<span class="sourceLineNo">7414</span>    if (methodDesc == null) {<a name="line.7414"></a>
-<span class="sourceLineNo">7415</span>      throw new UnknownProtocolException(service.getClass(),<a name="line.7415"></a>
-<span class="sourceLineNo">7416</span>          "Unknown method "+methodName+" called on service "+serviceName+<a name="line.7416"></a>
-<span class="sourceLineNo">7417</span>              " in region "+Bytes.toStringBinary(getRegionInfo().getRegionName()));<a name="line.7417"></a>
-<span class="sourceLineNo">7418</span>    }<a name="line.7418"></a>
-<span class="sourceLineNo">7419</span><a name="line.7419"></a>
-<span class="sourceLineNo">7420</span>    Message.Builder builder = service.getRequestPrototype(methodDesc).newBuilderForType();<a name="line.7420"></a>
-<span class="sourceLineNo">7421</span>    ProtobufUtil.mergeFrom(builder, call.getRequest());<a name="line.7421"></a>
-<span class="sourceLineNo">7422</span>    Message request = builder.build();<a name="line.7422"></a>
-<span class="sourceLineNo">7423</span><a name="line.7423"></a>
-<span class="sourceLineNo">7424</span>    if (coprocessorHost != null) {<a name="line.7424"></a>
-<span class="sourceLineNo">7425</span>      request = coprocessorHost.preEndpointInvocation(service, methodName, request);<a name="line.7425"></a>
-<span class="sourceLineNo">7426</span>    }<a name="line.7426"></a>
-<span class="sourceLineNo">7427</span><a name="line.7427"></a>
-<span class="sourceLineNo">7428</span>    final Message.Builder responseBuilder =<a name="line.7428"></a>
-<span class="sourceLineNo">7429</span>        service.getResponsePrototype(methodDesc).newBuilderForType();<a name="line.7429"></a>
-<span class="sourceLineNo">7430</span>    service.callMethod(methodDesc, controller, request, new RpcCallback&lt;Message&gt;() {<a name="line.7430"></a>
-<span class="sourceLineNo">7431</span>      @Override<a name="line.7431"></a>
-<span class="sourceLineNo">7432</span>      public void run(Message message) {<a name="line.7432"></a>
-<span class="sourceLineNo">7433</span>        if (message != null) {<a name="line.7433"></a>
-<span class="sourceLineNo">7434</span>          responseBuilder.mergeFrom(message);<a name="line.7434"></a>
-<span class="sourceLineNo">7435</span>        }<a name="line.7435"></a>
-<span class="sourceLineNo">7436</span>      }<a name="line.7436"></a>
-<span class="sourceLineNo">7437</span>    });<a name="line.7437"></a>
-<span class="sourceLineNo">7438</span><a name="line.7438"></a>
-<span class="sourceLineNo">7439</span>    if (coprocessorHost != null) {<a name="line.7439"></a>
-<span class="sourceLineNo">7440</span>      coprocessorHost.postEndpointInvocation(service, methodName, request, responseBuilder);<a name="line.7440"></a>
-<span class="sourceLineNo">7441</span>    }<a name="line.7441"></a>
-<span class="sourceLineNo">7442</span><a name="line.7442"></a>
-<span class="sourceLineNo">7443</span>    IOException exception = ResponseConverter.getControllerException(controller);<a name="line.7443"></a>
-<span class="sourceLineNo">7444</span>    if (exception != null) {<a name="line.7444"></a>
-<span class="sourceLineNo">7445</span>      throw exception;<a name="line.7445"></a>
-<span class="sourceLineNo">7446</span

<TRUNCATED>

[24/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
index c9f2d82..04fbb3a 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
@@ -67,15 +67,15 @@
 <span class="sourceLineNo">059</span>  requiredArguments = {<a name="line.59"></a>
 <span class="sourceLineNo">060</span>    @org.jamon.annotations.Argument(name = "master", type = "HMaster")},<a name="line.60"></a>
 <span class="sourceLineNo">061</span>  optionalArguments = {<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    @org.jamon.annotations.Argument(name = "metaLocation", type = "ServerName"),<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    @org.jamon.annotations.Argument(name = "serverManager", type = "ServerManager"),<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    @org.jamon.annotations.Argument(name = "frags", type = "Map&lt;String,Integer&gt;"),<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    @org.jamon.annotations.Argument(name = "assignmentManager", type = "AssignmentManager"),<a name="line.65"></a>
+<span class="sourceLineNo">062</span>    @org.jamon.annotations.Argument(name = "frags", type = "Map&lt;String,Integer&gt;"),<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    @org.jamon.annotations.Argument(name = "servers", type = "List&lt;ServerName&gt;"),<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    @org.jamon.annotations.Argument(name = "metaLocation", type = "ServerName"),<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    @org.jamon.annotations.Argument(name = "deadServers", type = "Set&lt;ServerName&gt;"),<a name="line.65"></a>
 <span class="sourceLineNo">066</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    @org.jamon.annotations.Argument(name = "catalogJanitorEnabled", type = "boolean"),<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    @org.jamon.annotations.Argument(name = "deadServers", type = "Set&lt;ServerName&gt;"),<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    @org.jamon.annotations.Argument(name = "servers", type = "List&lt;ServerName&gt;")})<a name="line.70"></a>
+<span class="sourceLineNo">067</span>    @org.jamon.annotations.Argument(name = "serverManager", type = "ServerManager"),<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    @org.jamon.annotations.Argument(name = "assignmentManager", type = "AssignmentManager"),<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    @org.jamon.annotations.Argument(name = "catalogJanitorEnabled", type = "boolean")})<a name="line.70"></a>
 <span class="sourceLineNo">071</span>public class MasterStatusTmpl<a name="line.71"></a>
 <span class="sourceLineNo">072</span>  extends org.jamon.AbstractTemplateProxy<a name="line.72"></a>
 <span class="sourceLineNo">073</span>{<a name="line.73"></a>
@@ -116,74 +116,74 @@
 <span class="sourceLineNo">108</span>      return m_master;<a name="line.108"></a>
 <span class="sourceLineNo">109</span>    }<a name="line.109"></a>
 <span class="sourceLineNo">110</span>    private HMaster m_master;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    // 22, 1<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    public void setMetaLocation(ServerName metaLocation)<a name="line.112"></a>
+<span class="sourceLineNo">111</span>    // 21, 1<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    public void setFrags(Map&lt;String,Integer&gt; frags)<a name="line.112"></a>
 <span class="sourceLineNo">113</span>    {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>      // 22, 1<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      m_metaLocation = metaLocation;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      m_metaLocation__IsNotDefault = true;<a name="line.116"></a>
+<span class="sourceLineNo">114</span>      // 21, 1<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      m_frags = frags;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      m_frags__IsNotDefault = true;<a name="line.116"></a>
 <span class="sourceLineNo">117</span>    }<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    public ServerName getMetaLocation()<a name="line.118"></a>
+<span class="sourceLineNo">118</span>    public Map&lt;String,Integer&gt; getFrags()<a name="line.118"></a>
 <span class="sourceLineNo">119</span>    {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      return m_metaLocation;<a name="line.120"></a>
+<span class="sourceLineNo">120</span>      return m_frags;<a name="line.120"></a>
 <span class="sourceLineNo">121</span>    }<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    private ServerName m_metaLocation;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    public boolean getMetaLocation__IsNotDefault()<a name="line.123"></a>
+<span class="sourceLineNo">122</span>    private Map&lt;String,Integer&gt; m_frags;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    public boolean getFrags__IsNotDefault()<a name="line.123"></a>
 <span class="sourceLineNo">124</span>    {<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      return m_metaLocation__IsNotDefault;<a name="line.125"></a>
+<span class="sourceLineNo">125</span>      return m_frags__IsNotDefault;<a name="line.125"></a>
 <span class="sourceLineNo">126</span>    }<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    private boolean m_metaLocation__IsNotDefault;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    // 28, 1<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    public void setServerManager(ServerManager serverManager)<a name="line.129"></a>
+<span class="sourceLineNo">127</span>    private boolean m_frags__IsNotDefault;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    // 23, 1<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    public void setServers(List&lt;ServerName&gt; servers)<a name="line.129"></a>
 <span class="sourceLineNo">130</span>    {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      // 28, 1<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      m_serverManager = serverManager;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      m_serverManager__IsNotDefault = true;<a name="line.133"></a>
+<span class="sourceLineNo">131</span>      // 23, 1<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      m_servers = servers;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      m_servers__IsNotDefault = true;<a name="line.133"></a>
 <span class="sourceLineNo">134</span>    }<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    public ServerManager getServerManager()<a name="line.135"></a>
+<span class="sourceLineNo">135</span>    public List&lt;ServerName&gt; getServers()<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      return m_serverManager;<a name="line.137"></a>
+<span class="sourceLineNo">137</span>      return m_servers;<a name="line.137"></a>
 <span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    private ServerManager m_serverManager;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    public boolean getServerManager__IsNotDefault()<a name="line.140"></a>
+<span class="sourceLineNo">139</span>    private List&lt;ServerName&gt; m_servers;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    public boolean getServers__IsNotDefault()<a name="line.140"></a>
 <span class="sourceLineNo">141</span>    {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      return m_serverManager__IsNotDefault;<a name="line.142"></a>
+<span class="sourceLineNo">142</span>      return m_servers__IsNotDefault;<a name="line.142"></a>
 <span class="sourceLineNo">143</span>    }<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    private boolean m_serverManager__IsNotDefault;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    // 21, 1<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    public void setFrags(Map&lt;String,Integer&gt; frags)<a name="line.146"></a>
+<span class="sourceLineNo">144</span>    private boolean m_servers__IsNotDefault;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    // 22, 1<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    public void setMetaLocation(ServerName metaLocation)<a name="line.146"></a>
 <span class="sourceLineNo">147</span>    {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      // 21, 1<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      m_frags = frags;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      m_frags__IsNotDefault = true;<a name="line.150"></a>
+<span class="sourceLineNo">148</span>      // 22, 1<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      m_metaLocation = metaLocation;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      m_metaLocation__IsNotDefault = true;<a name="line.150"></a>
 <span class="sourceLineNo">151</span>    }<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    public Map&lt;String,Integer&gt; getFrags()<a name="line.152"></a>
+<span class="sourceLineNo">152</span>    public ServerName getMetaLocation()<a name="line.152"></a>
 <span class="sourceLineNo">153</span>    {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      return m_frags;<a name="line.154"></a>
+<span class="sourceLineNo">154</span>      return m_metaLocation;<a name="line.154"></a>
 <span class="sourceLineNo">155</span>    }<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    private Map&lt;String,Integer&gt; m_frags;<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    public boolean getFrags__IsNotDefault()<a name="line.157"></a>
+<span class="sourceLineNo">156</span>    private ServerName m_metaLocation;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    public boolean getMetaLocation__IsNotDefault()<a name="line.157"></a>
 <span class="sourceLineNo">158</span>    {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      return m_frags__IsNotDefault;<a name="line.159"></a>
+<span class="sourceLineNo">159</span>      return m_metaLocation__IsNotDefault;<a name="line.159"></a>
 <span class="sourceLineNo">160</span>    }<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    private boolean m_frags__IsNotDefault;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    // 29, 1<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    public void setAssignmentManager(AssignmentManager assignmentManager)<a name="line.163"></a>
+<span class="sourceLineNo">161</span>    private boolean m_metaLocation__IsNotDefault;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    // 24, 1<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    public void setDeadServers(Set&lt;ServerName&gt; deadServers)<a name="line.163"></a>
 <span class="sourceLineNo">164</span>    {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      // 29, 1<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      m_assignmentManager = assignmentManager;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      m_assignmentManager__IsNotDefault = true;<a name="line.167"></a>
+<span class="sourceLineNo">165</span>      // 24, 1<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      m_deadServers = deadServers;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      m_deadServers__IsNotDefault = true;<a name="line.167"></a>
 <span class="sourceLineNo">168</span>    }<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    public AssignmentManager getAssignmentManager()<a name="line.169"></a>
+<span class="sourceLineNo">169</span>    public Set&lt;ServerName&gt; getDeadServers()<a name="line.169"></a>
 <span class="sourceLineNo">170</span>    {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      return m_assignmentManager;<a name="line.171"></a>
+<span class="sourceLineNo">171</span>      return m_deadServers;<a name="line.171"></a>
 <span class="sourceLineNo">172</span>    }<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    private AssignmentManager m_assignmentManager;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    public boolean getAssignmentManager__IsNotDefault()<a name="line.174"></a>
+<span class="sourceLineNo">173</span>    private Set&lt;ServerName&gt; m_deadServers;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    public boolean getDeadServers__IsNotDefault()<a name="line.174"></a>
 <span class="sourceLineNo">175</span>    {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      return m_assignmentManager__IsNotDefault;<a name="line.176"></a>
+<span class="sourceLineNo">176</span>      return m_deadServers__IsNotDefault;<a name="line.176"></a>
 <span class="sourceLineNo">177</span>    }<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    private boolean m_assignmentManager__IsNotDefault;<a name="line.178"></a>
+<span class="sourceLineNo">178</span>    private boolean m_deadServers__IsNotDefault;<a name="line.178"></a>
 <span class="sourceLineNo">179</span>    // 27, 1<a name="line.179"></a>
 <span class="sourceLineNo">180</span>    public void setFormat(String format)<a name="line.180"></a>
 <span class="sourceLineNo">181</span>    {<a name="line.181"></a>
@@ -201,74 +201,74 @@
 <span class="sourceLineNo">193</span>      return m_format__IsNotDefault;<a name="line.193"></a>
 <span class="sourceLineNo">194</span>    }<a name="line.194"></a>
 <span class="sourceLineNo">195</span>    private boolean m_format__IsNotDefault;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    // 25, 1<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    public void setCatalogJanitorEnabled(boolean catalogJanitorEnabled)<a name="line.197"></a>
+<span class="sourceLineNo">196</span>    // 28, 1<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    public void setServerManager(ServerManager serverManager)<a name="line.197"></a>
 <span class="sourceLineNo">198</span>    {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      // 25, 1<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      m_catalogJanitorEnabled = catalogJanitorEnabled;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      m_catalogJanitorEnabled__IsNotDefault = true;<a name="line.201"></a>
+<span class="sourceLineNo">199</span>      // 28, 1<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      m_serverManager = serverManager;<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      m_serverManager__IsNotDefault = true;<a name="line.201"></a>
 <span class="sourceLineNo">202</span>    }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    public boolean getCatalogJanitorEnabled()<a name="line.203"></a>
+<span class="sourceLineNo">203</span>    public ServerManager getServerManager()<a name="line.203"></a>
 <span class="sourceLineNo">204</span>    {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      return m_catalogJanitorEnabled;<a name="line.205"></a>
+<span class="sourceLineNo">205</span>      return m_serverManager;<a name="line.205"></a>
 <span class="sourceLineNo">206</span>    }<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    private boolean m_catalogJanitorEnabled;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    public boolean getCatalogJanitorEnabled__IsNotDefault()<a name="line.208"></a>
+<span class="sourceLineNo">207</span>    private ServerManager m_serverManager;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    public boolean getServerManager__IsNotDefault()<a name="line.208"></a>
 <span class="sourceLineNo">209</span>    {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      return m_catalogJanitorEnabled__IsNotDefault;<a name="line.210"></a>
+<span class="sourceLineNo">210</span>      return m_serverManager__IsNotDefault;<a name="line.210"></a>
 <span class="sourceLineNo">211</span>    }<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    private boolean m_catalogJanitorEnabled__IsNotDefault;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    // 26, 1<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    public void setFilter(String filter)<a name="line.214"></a>
+<span class="sourceLineNo">212</span>    private boolean m_serverManager__IsNotDefault;<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    // 29, 1<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    public void setAssignmentManager(AssignmentManager assignmentManager)<a name="line.214"></a>
 <span class="sourceLineNo">215</span>    {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      // 26, 1<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      m_filter = filter;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      m_filter__IsNotDefault = true;<a name="line.218"></a>
+<span class="sourceLineNo">216</span>      // 29, 1<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      m_assignmentManager = assignmentManager;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      m_assignmentManager__IsNotDefault = true;<a name="line.218"></a>
 <span class="sourceLineNo">219</span>    }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    public String getFilter()<a name="line.220"></a>
+<span class="sourceLineNo">220</span>    public AssignmentManager getAssignmentManager()<a name="line.220"></a>
 <span class="sourceLineNo">221</span>    {<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      return m_filter;<a name="line.222"></a>
+<span class="sourceLineNo">222</span>      return m_assignmentManager;<a name="line.222"></a>
 <span class="sourceLineNo">223</span>    }<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    private String m_filter;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    public boolean getFilter__IsNotDefault()<a name="line.225"></a>
+<span class="sourceLineNo">224</span>    private AssignmentManager m_assignmentManager;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    public boolean getAssignmentManager__IsNotDefault()<a name="line.225"></a>
 <span class="sourceLineNo">226</span>    {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      return m_filter__IsNotDefault;<a name="line.227"></a>
+<span class="sourceLineNo">227</span>      return m_assignmentManager__IsNotDefault;<a name="line.227"></a>
 <span class="sourceLineNo">228</span>    }<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    private boolean m_filter__IsNotDefault;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    // 24, 1<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    public void setDeadServers(Set&lt;ServerName&gt; deadServers)<a name="line.231"></a>
+<span class="sourceLineNo">229</span>    private boolean m_assignmentManager__IsNotDefault;<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    // 26, 1<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    public void setFilter(String filter)<a name="line.231"></a>
 <span class="sourceLineNo">232</span>    {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      // 24, 1<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      m_deadServers = deadServers;<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      m_deadServers__IsNotDefault = true;<a name="line.235"></a>
+<span class="sourceLineNo">233</span>      // 26, 1<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      m_filter = filter;<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      m_filter__IsNotDefault = true;<a name="line.235"></a>
 <span class="sourceLineNo">236</span>    }<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    public Set&lt;ServerName&gt; getDeadServers()<a name="line.237"></a>
+<span class="sourceLineNo">237</span>    public String getFilter()<a name="line.237"></a>
 <span class="sourceLineNo">238</span>    {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      return m_deadServers;<a name="line.239"></a>
+<span class="sourceLineNo">239</span>      return m_filter;<a name="line.239"></a>
 <span class="sourceLineNo">240</span>    }<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    private Set&lt;ServerName&gt; m_deadServers;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    public boolean getDeadServers__IsNotDefault()<a name="line.242"></a>
+<span class="sourceLineNo">241</span>    private String m_filter;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    public boolean getFilter__IsNotDefault()<a name="line.242"></a>
 <span class="sourceLineNo">243</span>    {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      return m_deadServers__IsNotDefault;<a name="line.244"></a>
+<span class="sourceLineNo">244</span>      return m_filter__IsNotDefault;<a name="line.244"></a>
 <span class="sourceLineNo">245</span>    }<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    private boolean m_deadServers__IsNotDefault;<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    // 23, 1<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    public void setServers(List&lt;ServerName&gt; servers)<a name="line.248"></a>
+<span class="sourceLineNo">246</span>    private boolean m_filter__IsNotDefault;<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    // 25, 1<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    public void setCatalogJanitorEnabled(boolean catalogJanitorEnabled)<a name="line.248"></a>
 <span class="sourceLineNo">249</span>    {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      // 23, 1<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      m_servers = servers;<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      m_servers__IsNotDefault = true;<a name="line.252"></a>
+<span class="sourceLineNo">250</span>      // 25, 1<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      m_catalogJanitorEnabled = catalogJanitorEnabled;<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      m_catalogJanitorEnabled__IsNotDefault = true;<a name="line.252"></a>
 <span class="sourceLineNo">253</span>    }<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    public List&lt;ServerName&gt; getServers()<a name="line.254"></a>
+<span class="sourceLineNo">254</span>    public boolean getCatalogJanitorEnabled()<a name="line.254"></a>
 <span class="sourceLineNo">255</span>    {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      return m_servers;<a name="line.256"></a>
+<span class="sourceLineNo">256</span>      return m_catalogJanitorEnabled;<a name="line.256"></a>
 <span class="sourceLineNo">257</span>    }<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    private List&lt;ServerName&gt; m_servers;<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    public boolean getServers__IsNotDefault()<a name="line.259"></a>
+<span class="sourceLineNo">258</span>    private boolean m_catalogJanitorEnabled;<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    public boolean getCatalogJanitorEnabled__IsNotDefault()<a name="line.259"></a>
 <span class="sourceLineNo">260</span>    {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      return m_servers__IsNotDefault;<a name="line.261"></a>
+<span class="sourceLineNo">261</span>      return m_catalogJanitorEnabled__IsNotDefault;<a name="line.261"></a>
 <span class="sourceLineNo">262</span>    }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    private boolean m_servers__IsNotDefault;<a name="line.263"></a>
+<span class="sourceLineNo">263</span>    private boolean m_catalogJanitorEnabled__IsNotDefault;<a name="line.263"></a>
 <span class="sourceLineNo">264</span>  }<a name="line.264"></a>
 <span class="sourceLineNo">265</span>  @Override<a name="line.265"></a>
 <span class="sourceLineNo">266</span>  protected org.jamon.AbstractTemplateProxy.ImplData makeImplData()<a name="line.266"></a>
@@ -280,31 +280,31 @@
 <span class="sourceLineNo">272</span>    return (ImplData) super.getImplData();<a name="line.272"></a>
 <span class="sourceLineNo">273</span>  }<a name="line.273"></a>
 <span class="sourceLineNo">274</span>  <a name="line.274"></a>
-<span class="sourceLineNo">275</span>  protected ServerName metaLocation;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setMetaLocation(ServerName p_metaLocation)<a name="line.276"></a>
+<span class="sourceLineNo">275</span>  protected Map&lt;String,Integer&gt; frags;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map&lt;String,Integer&gt; p_frags)<a name="line.276"></a>
 <span class="sourceLineNo">277</span>  {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    (getImplData()).setMetaLocation(p_metaLocation);<a name="line.278"></a>
+<span class="sourceLineNo">278</span>    (getImplData()).setFrags(p_frags);<a name="line.278"></a>
 <span class="sourceLineNo">279</span>    return this;<a name="line.279"></a>
 <span class="sourceLineNo">280</span>  }<a name="line.280"></a>
 <span class="sourceLineNo">281</span>  <a name="line.281"></a>
-<span class="sourceLineNo">282</span>  protected ServerManager serverManager;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServerManager(ServerManager p_serverManager)<a name="line.283"></a>
+<span class="sourceLineNo">282</span>  protected List&lt;ServerName&gt; servers;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List&lt;ServerName&gt; p_servers)<a name="line.283"></a>
 <span class="sourceLineNo">284</span>  {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    (getImplData()).setServerManager(p_serverManager);<a name="line.285"></a>
+<span class="sourceLineNo">285</span>    (getImplData()).setServers(p_servers);<a name="line.285"></a>
 <span class="sourceLineNo">286</span>    return this;<a name="line.286"></a>
 <span class="sourceLineNo">287</span>  }<a name="line.287"></a>
 <span class="sourceLineNo">288</span>  <a name="line.288"></a>
-<span class="sourceLineNo">289</span>  protected Map&lt;String,Integer&gt; frags;<a name="line.289"></a>
-<span class="sourceLineNo">290</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map&lt;String,Integer&gt; p_frags)<a name="line.290"></a>
+<span class="sourceLineNo">289</span>  protected ServerName metaLocation;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setMetaLocation(ServerName p_metaLocation)<a name="line.290"></a>
 <span class="sourceLineNo">291</span>  {<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    (getImplData()).setFrags(p_frags);<a name="line.292"></a>
+<span class="sourceLineNo">292</span>    (getImplData()).setMetaLocation(p_metaLocation);<a name="line.292"></a>
 <span class="sourceLineNo">293</span>    return this;<a name="line.293"></a>
 <span class="sourceLineNo">294</span>  }<a name="line.294"></a>
 <span class="sourceLineNo">295</span>  <a name="line.295"></a>
-<span class="sourceLineNo">296</span>  protected AssignmentManager assignmentManager;<a name="line.296"></a>
-<span class="sourceLineNo">297</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setAssignmentManager(AssignmentManager p_assignmentManager)<a name="line.297"></a>
+<span class="sourceLineNo">296</span>  protected Set&lt;ServerName&gt; deadServers;<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setDeadServers(Set&lt;ServerName&gt; p_deadServers)<a name="line.297"></a>
 <span class="sourceLineNo">298</span>  {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    (getImplData()).setAssignmentManager(p_assignmentManager);<a name="line.299"></a>
+<span class="sourceLineNo">299</span>    (getImplData()).setDeadServers(p_deadServers);<a name="line.299"></a>
 <span class="sourceLineNo">300</span>    return this;<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>
@@ -315,31 +315,31 @@
 <span class="sourceLineNo">307</span>    return this;<a name="line.307"></a>
 <span class="sourceLineNo">308</span>  }<a name="line.308"></a>
 <span class="sourceLineNo">309</span>  <a name="line.309"></a>
-<span class="sourceLineNo">310</span>  protected boolean catalogJanitorEnabled;<a name="line.310"></a>
-<span class="sourceLineNo">311</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setCatalogJanitorEnabled(boolean p_catalogJanitorEnabled)<a name="line.311"></a>
+<span class="sourceLineNo">310</span>  protected ServerManager serverManager;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServerManager(ServerManager p_serverManager)<a name="line.311"></a>
 <span class="sourceLineNo">312</span>  {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    (getImplData()).setCatalogJanitorEnabled(p_catalogJanitorEnabled);<a name="line.313"></a>
+<span class="sourceLineNo">313</span>    (getImplData()).setServerManager(p_serverManager);<a name="line.313"></a>
 <span class="sourceLineNo">314</span>    return this;<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>  protected String filter;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFilter(String p_filter)<a name="line.318"></a>
+<span class="sourceLineNo">317</span>  protected AssignmentManager assignmentManager;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setAssignmentManager(AssignmentManager p_assignmentManager)<a name="line.318"></a>
 <span class="sourceLineNo">319</span>  {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    (getImplData()).setFilter(p_filter);<a name="line.320"></a>
+<span class="sourceLineNo">320</span>    (getImplData()).setAssignmentManager(p_assignmentManager);<a name="line.320"></a>
 <span class="sourceLineNo">321</span>    return this;<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>  protected Set&lt;ServerName&gt; deadServers;<a name="line.324"></a>
-<span class="sourceLineNo">325</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setDeadServers(Set&lt;ServerName&gt; p_deadServers)<a name="line.325"></a>
+<span class="sourceLineNo">324</span>  protected String filter;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFilter(String p_filter)<a name="line.325"></a>
 <span class="sourceLineNo">326</span>  {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    (getImplData()).setDeadServers(p_deadServers);<a name="line.327"></a>
+<span class="sourceLineNo">327</span>    (getImplData()).setFilter(p_filter);<a name="line.327"></a>
 <span class="sourceLineNo">328</span>    return this;<a name="line.328"></a>
 <span class="sourceLineNo">329</span>  }<a name="line.329"></a>
 <span class="sourceLineNo">330</span>  <a name="line.330"></a>
-<span class="sourceLineNo">331</span>  protected List&lt;ServerName&gt; servers;<a name="line.331"></a>
-<span class="sourceLineNo">332</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List&lt;ServerName&gt; p_servers)<a name="line.332"></a>
+<span class="sourceLineNo">331</span>  protected boolean catalogJanitorEnabled;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setCatalogJanitorEnabled(boolean p_catalogJanitorEnabled)<a name="line.332"></a>
 <span class="sourceLineNo">333</span>  {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    (getImplData()).setServers(p_servers);<a name="line.334"></a>
+<span class="sourceLineNo">334</span>    (getImplData()).setCatalogJanitorEnabled(p_catalogJanitorEnabled);<a name="line.334"></a>
 <span class="sourceLineNo">335</span>    return this;<a name="line.335"></a>
 <span class="sourceLineNo">336</span>  }<a name="line.336"></a>
 <span class="sourceLineNo">337</span>  <a name="line.337"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
index 5014c4f..6681f12 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
@@ -68,15 +68,15 @@
 <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>  private final HMaster master;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  private final ServerName metaLocation;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>  private final ServerManager serverManager;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>  private final Map&lt;String,Integer&gt; frags;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>  private final AssignmentManager assignmentManager;<a name="line.66"></a>
+<span class="sourceLineNo">063</span>  private final Map&lt;String,Integer&gt; frags;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  private final List&lt;ServerName&gt; servers;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  private final ServerName metaLocation;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>  private final Set&lt;ServerName&gt; deadServers;<a name="line.66"></a>
 <span class="sourceLineNo">067</span>  private final String format;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  private final boolean catalogJanitorEnabled;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>  private final String filter;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  private final Set&lt;ServerName&gt; deadServers;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  private final List&lt;ServerName&gt; servers;<a name="line.71"></a>
+<span class="sourceLineNo">068</span>  private final ServerManager serverManager;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  private final AssignmentManager assignmentManager;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>  private final String filter;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>  private final boolean catalogJanitorEnabled;<a name="line.71"></a>
 <span class="sourceLineNo">072</span>  // 68, 1<a name="line.72"></a>
 <span class="sourceLineNo">073</span>  <a name="line.73"></a>
 <span class="sourceLineNo">074</span>  public String formatZKString() {<a name="line.74"></a>
@@ -106,41 +106,41 @@
 <span class="sourceLineNo">098</span><a name="line.98"></a>
 <span class="sourceLineNo">099</span>  protected static org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl.ImplData __jamon_setOptionalArguments(org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl.ImplData p_implData)<a name="line.99"></a>
 <span class="sourceLineNo">100</span>  {<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    if(! p_implData.getMetaLocation__IsNotDefault())<a name="line.101"></a>
+<span class="sourceLineNo">101</span>    if(! p_implData.getFrags__IsNotDefault())<a name="line.101"></a>
 <span class="sourceLineNo">102</span>    {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      p_implData.setMetaLocation(null);<a name="line.103"></a>
+<span class="sourceLineNo">103</span>      p_implData.setFrags(null);<a name="line.103"></a>
 <span class="sourceLineNo">104</span>    }<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    if(! p_implData.getServerManager__IsNotDefault())<a name="line.105"></a>
+<span class="sourceLineNo">105</span>    if(! p_implData.getServers__IsNotDefault())<a name="line.105"></a>
 <span class="sourceLineNo">106</span>    {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>      p_implData.setServerManager(null);<a name="line.107"></a>
+<span class="sourceLineNo">107</span>      p_implData.setServers(null);<a name="line.107"></a>
 <span class="sourceLineNo">108</span>    }<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    if(! p_implData.getFrags__IsNotDefault())<a name="line.109"></a>
+<span class="sourceLineNo">109</span>    if(! p_implData.getMetaLocation__IsNotDefault())<a name="line.109"></a>
 <span class="sourceLineNo">110</span>    {<a name="line.110"></a>
-<span class="sourceLineNo">111</span>      p_implData.setFrags(null);<a name="line.111"></a>
+<span class="sourceLineNo">111</span>      p_implData.setMetaLocation(null);<a name="line.111"></a>
 <span class="sourceLineNo">112</span>    }<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    if(! p_implData.getAssignmentManager__IsNotDefault())<a name="line.113"></a>
+<span class="sourceLineNo">113</span>    if(! p_implData.getDeadServers__IsNotDefault())<a name="line.113"></a>
 <span class="sourceLineNo">114</span>    {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      p_implData.setAssignmentManager(null);<a name="line.115"></a>
+<span class="sourceLineNo">115</span>      p_implData.setDeadServers(null);<a name="line.115"></a>
 <span class="sourceLineNo">116</span>    }<a name="line.116"></a>
 <span class="sourceLineNo">117</span>    if(! p_implData.getFormat__IsNotDefault())<a name="line.117"></a>
 <span class="sourceLineNo">118</span>    {<a name="line.118"></a>
 <span class="sourceLineNo">119</span>      p_implData.setFormat("html");<a name="line.119"></a>
 <span class="sourceLineNo">120</span>    }<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    if(! p_implData.getCatalogJanitorEnabled__IsNotDefault())<a name="line.121"></a>
+<span class="sourceLineNo">121</span>    if(! p_implData.getServerManager__IsNotDefault())<a name="line.121"></a>
 <span class="sourceLineNo">122</span>    {<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      p_implData.setCatalogJanitorEnabled(true);<a name="line.123"></a>
+<span class="sourceLineNo">123</span>      p_implData.setServerManager(null);<a name="line.123"></a>
 <span class="sourceLineNo">124</span>    }<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    if(! p_implData.getFilter__IsNotDefault())<a name="line.125"></a>
+<span class="sourceLineNo">125</span>    if(! p_implData.getAssignmentManager__IsNotDefault())<a name="line.125"></a>
 <span class="sourceLineNo">126</span>    {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      p_implData.setFilter("general");<a name="line.127"></a>
+<span class="sourceLineNo">127</span>      p_implData.setAssignmentManager(null);<a name="line.127"></a>
 <span class="sourceLineNo">128</span>    }<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    if(! p_implData.getDeadServers__IsNotDefault())<a name="line.129"></a>
+<span class="sourceLineNo">129</span>    if(! p_implData.getFilter__IsNotDefault())<a name="line.129"></a>
 <span class="sourceLineNo">130</span>    {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      p_implData.setDeadServers(null);<a name="line.131"></a>
+<span class="sourceLineNo">131</span>      p_implData.setFilter("general");<a name="line.131"></a>
 <span class="sourceLineNo">132</span>    }<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    if(! p_implData.getServers__IsNotDefault())<a name="line.133"></a>
+<span class="sourceLineNo">133</span>    if(! p_implData.getCatalogJanitorEnabled__IsNotDefault())<a name="line.133"></a>
 <span class="sourceLineNo">134</span>    {<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      p_implData.setServers(null);<a name="line.135"></a>
+<span class="sourceLineNo">135</span>      p_implData.setCatalogJanitorEnabled(true);<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    }<a name="line.136"></a>
 <span class="sourceLineNo">137</span>    return p_implData;<a name="line.137"></a>
 <span class="sourceLineNo">138</span>  }<a name="line.138"></a>
@@ -148,15 +148,15 @@
 <span class="sourceLineNo">140</span>  {<a name="line.140"></a>
 <span class="sourceLineNo">141</span>    super(p_templateManager, __jamon_setOptionalArguments(p_implData));<a name="line.141"></a>
 <span class="sourceLineNo">142</span>    master = p_implData.getMaster();<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    metaLocation = p_implData.getMetaLocation();<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    serverManager = p_implData.getServerManager();<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    frags = p_implData.getFrags();<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    assignmentManager = p_implData.getAssignmentManager();<a name="line.146"></a>
+<span class="sourceLineNo">143</span>    frags = p_implData.getFrags();<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    servers = p_implData.getServers();<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    metaLocation = p_implData.getMetaLocation();<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    deadServers = p_implData.getDeadServers();<a name="line.146"></a>
 <span class="sourceLineNo">147</span>    format = p_implData.getFormat();<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    catalogJanitorEnabled = p_implData.getCatalogJanitorEnabled();<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    filter = p_implData.getFilter();<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    deadServers = p_implData.getDeadServers();<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    servers = p_implData.getServers();<a name="line.151"></a>
+<span class="sourceLineNo">148</span>    serverManager = p_implData.getServerManager();<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    assignmentManager = p_implData.getAssignmentManager();<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    filter = p_implData.getFilter();<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    catalogJanitorEnabled = p_implData.getCatalogJanitorEnabled();<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>  @Override public void renderNoFlush(final java.io.Writer jamonWriter)<a name="line.154"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html
index f1ce24d..9ce41cc 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html
@@ -33,10 +33,10 @@
 <span class="sourceLineNo">025</span>  requiredArguments = {<a name="line.25"></a>
 <span class="sourceLineNo">026</span>    @org.jamon.annotations.Argument(name = "regionServer", type = "HRegionServer")},<a name="line.26"></a>
 <span class="sourceLineNo">027</span>  optionalArguments = {<a name="line.27"></a>
-<span class="sourceLineNo">028</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.28"></a>
-<span class="sourceLineNo">029</span>    @org.jamon.annotations.Argument(name = "bcv", type = "String"),<a name="line.29"></a>
+<span class="sourceLineNo">028</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.28"></a>
+<span class="sourceLineNo">029</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.29"></a>
 <span class="sourceLineNo">030</span>    @org.jamon.annotations.Argument(name = "bcn", type = "String"),<a name="line.30"></a>
-<span class="sourceLineNo">031</span>    @org.jamon.annotations.Argument(name = "format", type = "String")})<a name="line.31"></a>
+<span class="sourceLineNo">031</span>    @org.jamon.annotations.Argument(name = "bcv", type = "String")})<a name="line.31"></a>
 <span class="sourceLineNo">032</span>public class RSStatusTmpl<a name="line.32"></a>
 <span class="sourceLineNo">033</span>  extends org.jamon.AbstractTemplateProxy<a name="line.33"></a>
 <span class="sourceLineNo">034</span>{<a name="line.34"></a>
@@ -77,40 +77,40 @@
 <span class="sourceLineNo">069</span>      return m_regionServer;<a name="line.69"></a>
 <span class="sourceLineNo">070</span>    }<a name="line.70"></a>
 <span class="sourceLineNo">071</span>    private HRegionServer m_regionServer;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    // 21, 1<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    public void setFilter(String filter)<a name="line.73"></a>
+<span class="sourceLineNo">072</span>    // 22, 1<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    public void setFormat(String format)<a name="line.73"></a>
 <span class="sourceLineNo">074</span>    {<a name="line.74"></a>
-<span class="sourceLineNo">075</span>      // 21, 1<a name="line.75"></a>
-<span class="sourceLineNo">076</span>      m_filter = filter;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>      m_filter__IsNotDefault = true;<a name="line.77"></a>
+<span class="sourceLineNo">075</span>      // 22, 1<a name="line.75"></a>
+<span class="sourceLineNo">076</span>      m_format = format;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      m_format__IsNotDefault = true;<a name="line.77"></a>
 <span class="sourceLineNo">078</span>    }<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    public String getFilter()<a name="line.79"></a>
+<span class="sourceLineNo">079</span>    public String getFormat()<a name="line.79"></a>
 <span class="sourceLineNo">080</span>    {<a name="line.80"></a>
-<span class="sourceLineNo">081</span>      return m_filter;<a name="line.81"></a>
+<span class="sourceLineNo">081</span>      return m_format;<a name="line.81"></a>
 <span class="sourceLineNo">082</span>    }<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    private String m_filter;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    public boolean getFilter__IsNotDefault()<a name="line.84"></a>
+<span class="sourceLineNo">083</span>    private String m_format;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    public boolean getFormat__IsNotDefault()<a name="line.84"></a>
 <span class="sourceLineNo">085</span>    {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>      return m_filter__IsNotDefault;<a name="line.86"></a>
+<span class="sourceLineNo">086</span>      return m_format__IsNotDefault;<a name="line.86"></a>
 <span class="sourceLineNo">087</span>    }<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    private boolean m_filter__IsNotDefault;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    // 24, 1<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    public void setBcv(String bcv)<a name="line.90"></a>
+<span class="sourceLineNo">088</span>    private boolean m_format__IsNotDefault;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    // 21, 1<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    public void setFilter(String filter)<a name="line.90"></a>
 <span class="sourceLineNo">091</span>    {<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      // 24, 1<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      m_bcv = bcv;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      m_bcv__IsNotDefault = true;<a name="line.94"></a>
+<span class="sourceLineNo">092</span>      // 21, 1<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      m_filter = filter;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      m_filter__IsNotDefault = true;<a name="line.94"></a>
 <span class="sourceLineNo">095</span>    }<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    public String getBcv()<a name="line.96"></a>
+<span class="sourceLineNo">096</span>    public String getFilter()<a name="line.96"></a>
 <span class="sourceLineNo">097</span>    {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>      return m_bcv;<a name="line.98"></a>
+<span class="sourceLineNo">098</span>      return m_filter;<a name="line.98"></a>
 <span class="sourceLineNo">099</span>    }<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    private String m_bcv;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    public boolean getBcv__IsNotDefault()<a name="line.101"></a>
+<span class="sourceLineNo">100</span>    private String m_filter;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    public boolean getFilter__IsNotDefault()<a name="line.101"></a>
 <span class="sourceLineNo">102</span>    {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      return m_bcv__IsNotDefault;<a name="line.103"></a>
+<span class="sourceLineNo">103</span>      return m_filter__IsNotDefault;<a name="line.103"></a>
 <span class="sourceLineNo">104</span>    }<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    private boolean m_bcv__IsNotDefault;<a name="line.105"></a>
+<span class="sourceLineNo">105</span>    private boolean m_filter__IsNotDefault;<a name="line.105"></a>
 <span class="sourceLineNo">106</span>    // 23, 1<a name="line.106"></a>
 <span class="sourceLineNo">107</span>    public void setBcn(String bcn)<a name="line.107"></a>
 <span class="sourceLineNo">108</span>    {<a name="line.108"></a>
@@ -128,23 +128,23 @@
 <span class="sourceLineNo">120</span>      return m_bcn__IsNotDefault;<a name="line.120"></a>
 <span class="sourceLineNo">121</span>    }<a name="line.121"></a>
 <span class="sourceLineNo">122</span>    private boolean m_bcn__IsNotDefault;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    // 22, 1<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    public void setFormat(String format)<a name="line.124"></a>
+<span class="sourceLineNo">123</span>    // 24, 1<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    public void setBcv(String bcv)<a name="line.124"></a>
 <span class="sourceLineNo">125</span>    {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      // 22, 1<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      m_format = format;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      m_format__IsNotDefault = true;<a name="line.128"></a>
+<span class="sourceLineNo">126</span>      // 24, 1<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      m_bcv = bcv;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      m_bcv__IsNotDefault = true;<a name="line.128"></a>
 <span class="sourceLineNo">129</span>    }<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    public String getFormat()<a name="line.130"></a>
+<span class="sourceLineNo">130</span>    public String getBcv()<a name="line.130"></a>
 <span class="sourceLineNo">131</span>    {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      return m_format;<a name="line.132"></a>
+<span class="sourceLineNo">132</span>      return m_bcv;<a name="line.132"></a>
 <span class="sourceLineNo">133</span>    }<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    private String m_format;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    public boolean getFormat__IsNotDefault()<a name="line.135"></a>
+<span class="sourceLineNo">134</span>    private String m_bcv;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    public boolean getBcv__IsNotDefault()<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      return m_format__IsNotDefault;<a name="line.137"></a>
+<span class="sourceLineNo">137</span>      return m_bcv__IsNotDefault;<a name="line.137"></a>
 <span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    private boolean m_format__IsNotDefault;<a name="line.139"></a>
+<span class="sourceLineNo">139</span>    private boolean m_bcv__IsNotDefault;<a name="line.139"></a>
 <span class="sourceLineNo">140</span>  }<a name="line.140"></a>
 <span class="sourceLineNo">141</span>  @Override<a name="line.141"></a>
 <span class="sourceLineNo">142</span>  protected org.jamon.AbstractTemplateProxy.ImplData makeImplData()<a name="line.142"></a>
@@ -156,17 +156,17 @@
 <span class="sourceLineNo">148</span>    return (ImplData) super.getImplData();<a name="line.148"></a>
 <span class="sourceLineNo">149</span>  }<a name="line.149"></a>
 <span class="sourceLineNo">150</span>  <a name="line.150"></a>
-<span class="sourceLineNo">151</span>  protected String filter;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFilter(String p_filter)<a name="line.152"></a>
+<span class="sourceLineNo">151</span>  protected String format;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFormat(String p_format)<a name="line.152"></a>
 <span class="sourceLineNo">153</span>  {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    (getImplData()).setFilter(p_filter);<a name="line.154"></a>
+<span class="sourceLineNo">154</span>    (getImplData()).setFormat(p_format);<a name="line.154"></a>
 <span class="sourceLineNo">155</span>    return this;<a name="line.155"></a>
 <span class="sourceLineNo">156</span>  }<a name="line.156"></a>
 <span class="sourceLineNo">157</span>  <a name="line.157"></a>
-<span class="sourceLineNo">158</span>  protected String bcv;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcv(String p_bcv)<a name="line.159"></a>
+<span class="sourceLineNo">158</span>  protected String filter;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFilter(String p_filter)<a name="line.159"></a>
 <span class="sourceLineNo">160</span>  {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    (getImplData()).setBcv(p_bcv);<a name="line.161"></a>
+<span class="sourceLineNo">161</span>    (getImplData()).setFilter(p_filter);<a name="line.161"></a>
 <span class="sourceLineNo">162</span>    return this;<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>
@@ -177,10 +177,10 @@
 <span class="sourceLineNo">169</span>    return this;<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>  protected String format;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFormat(String p_format)<a name="line.173"></a>
+<span class="sourceLineNo">172</span>  protected String bcv;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcv(String p_bcv)<a name="line.173"></a>
 <span class="sourceLineNo">174</span>  {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    (getImplData()).setFormat(p_format);<a name="line.175"></a>
+<span class="sourceLineNo">175</span>    (getImplData()).setBcv(p_bcv);<a name="line.175"></a>
 <span class="sourceLineNo">176</span>    return this;<a name="line.176"></a>
 <span class="sourceLineNo">177</span>  }<a name="line.177"></a>
 <span class="sourceLineNo">178</span>  <a name="line.178"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.Intf.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.Intf.html b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.Intf.html
index f1ce24d..9ce41cc 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.Intf.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.Intf.html
@@ -33,10 +33,10 @@
 <span class="sourceLineNo">025</span>  requiredArguments = {<a name="line.25"></a>
 <span class="sourceLineNo">026</span>    @org.jamon.annotations.Argument(name = "regionServer", type = "HRegionServer")},<a name="line.26"></a>
 <span class="sourceLineNo">027</span>  optionalArguments = {<a name="line.27"></a>
-<span class="sourceLineNo">028</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.28"></a>
-<span class="sourceLineNo">029</span>    @org.jamon.annotations.Argument(name = "bcv", type = "String"),<a name="line.29"></a>
+<span class="sourceLineNo">028</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.28"></a>
+<span class="sourceLineNo">029</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.29"></a>
 <span class="sourceLineNo">030</span>    @org.jamon.annotations.Argument(name = "bcn", type = "String"),<a name="line.30"></a>
-<span class="sourceLineNo">031</span>    @org.jamon.annotations.Argument(name = "format", type = "String")})<a name="line.31"></a>
+<span class="sourceLineNo">031</span>    @org.jamon.annotations.Argument(name = "bcv", type = "String")})<a name="line.31"></a>
 <span class="sourceLineNo">032</span>public class RSStatusTmpl<a name="line.32"></a>
 <span class="sourceLineNo">033</span>  extends org.jamon.AbstractTemplateProxy<a name="line.33"></a>
 <span class="sourceLineNo">034</span>{<a name="line.34"></a>
@@ -77,40 +77,40 @@
 <span class="sourceLineNo">069</span>      return m_regionServer;<a name="line.69"></a>
 <span class="sourceLineNo">070</span>    }<a name="line.70"></a>
 <span class="sourceLineNo">071</span>    private HRegionServer m_regionServer;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    // 21, 1<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    public void setFilter(String filter)<a name="line.73"></a>
+<span class="sourceLineNo">072</span>    // 22, 1<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    public void setFormat(String format)<a name="line.73"></a>
 <span class="sourceLineNo">074</span>    {<a name="line.74"></a>
-<span class="sourceLineNo">075</span>      // 21, 1<a name="line.75"></a>
-<span class="sourceLineNo">076</span>      m_filter = filter;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>      m_filter__IsNotDefault = true;<a name="line.77"></a>
+<span class="sourceLineNo">075</span>      // 22, 1<a name="line.75"></a>
+<span class="sourceLineNo">076</span>      m_format = format;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      m_format__IsNotDefault = true;<a name="line.77"></a>
 <span class="sourceLineNo">078</span>    }<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    public String getFilter()<a name="line.79"></a>
+<span class="sourceLineNo">079</span>    public String getFormat()<a name="line.79"></a>
 <span class="sourceLineNo">080</span>    {<a name="line.80"></a>
-<span class="sourceLineNo">081</span>      return m_filter;<a name="line.81"></a>
+<span class="sourceLineNo">081</span>      return m_format;<a name="line.81"></a>
 <span class="sourceLineNo">082</span>    }<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    private String m_filter;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    public boolean getFilter__IsNotDefault()<a name="line.84"></a>
+<span class="sourceLineNo">083</span>    private String m_format;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    public boolean getFormat__IsNotDefault()<a name="line.84"></a>
 <span class="sourceLineNo">085</span>    {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>      return m_filter__IsNotDefault;<a name="line.86"></a>
+<span class="sourceLineNo">086</span>      return m_format__IsNotDefault;<a name="line.86"></a>
 <span class="sourceLineNo">087</span>    }<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    private boolean m_filter__IsNotDefault;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    // 24, 1<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    public void setBcv(String bcv)<a name="line.90"></a>
+<span class="sourceLineNo">088</span>    private boolean m_format__IsNotDefault;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    // 21, 1<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    public void setFilter(String filter)<a name="line.90"></a>
 <span class="sourceLineNo">091</span>    {<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      // 24, 1<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      m_bcv = bcv;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      m_bcv__IsNotDefault = true;<a name="line.94"></a>
+<span class="sourceLineNo">092</span>      // 21, 1<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      m_filter = filter;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      m_filter__IsNotDefault = true;<a name="line.94"></a>
 <span class="sourceLineNo">095</span>    }<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    public String getBcv()<a name="line.96"></a>
+<span class="sourceLineNo">096</span>    public String getFilter()<a name="line.96"></a>
 <span class="sourceLineNo">097</span>    {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>      return m_bcv;<a name="line.98"></a>
+<span class="sourceLineNo">098</span>      return m_filter;<a name="line.98"></a>
 <span class="sourceLineNo">099</span>    }<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    private String m_bcv;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    public boolean getBcv__IsNotDefault()<a name="line.101"></a>
+<span class="sourceLineNo">100</span>    private String m_filter;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    public boolean getFilter__IsNotDefault()<a name="line.101"></a>
 <span class="sourceLineNo">102</span>    {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      return m_bcv__IsNotDefault;<a name="line.103"></a>
+<span class="sourceLineNo">103</span>      return m_filter__IsNotDefault;<a name="line.103"></a>
 <span class="sourceLineNo">104</span>    }<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    private boolean m_bcv__IsNotDefault;<a name="line.105"></a>
+<span class="sourceLineNo">105</span>    private boolean m_filter__IsNotDefault;<a name="line.105"></a>
 <span class="sourceLineNo">106</span>    // 23, 1<a name="line.106"></a>
 <span class="sourceLineNo">107</span>    public void setBcn(String bcn)<a name="line.107"></a>
 <span class="sourceLineNo">108</span>    {<a name="line.108"></a>
@@ -128,23 +128,23 @@
 <span class="sourceLineNo">120</span>      return m_bcn__IsNotDefault;<a name="line.120"></a>
 <span class="sourceLineNo">121</span>    }<a name="line.121"></a>
 <span class="sourceLineNo">122</span>    private boolean m_bcn__IsNotDefault;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    // 22, 1<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    public void setFormat(String format)<a name="line.124"></a>
+<span class="sourceLineNo">123</span>    // 24, 1<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    public void setBcv(String bcv)<a name="line.124"></a>
 <span class="sourceLineNo">125</span>    {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      // 22, 1<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      m_format = format;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      m_format__IsNotDefault = true;<a name="line.128"></a>
+<span class="sourceLineNo">126</span>      // 24, 1<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      m_bcv = bcv;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      m_bcv__IsNotDefault = true;<a name="line.128"></a>
 <span class="sourceLineNo">129</span>    }<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    public String getFormat()<a name="line.130"></a>
+<span class="sourceLineNo">130</span>    public String getBcv()<a name="line.130"></a>
 <span class="sourceLineNo">131</span>    {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      return m_format;<a name="line.132"></a>
+<span class="sourceLineNo">132</span>      return m_bcv;<a name="line.132"></a>
 <span class="sourceLineNo">133</span>    }<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    private String m_format;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    public boolean getFormat__IsNotDefault()<a name="line.135"></a>
+<span class="sourceLineNo">134</span>    private String m_bcv;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    public boolean getBcv__IsNotDefault()<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      return m_format__IsNotDefault;<a name="line.137"></a>
+<span class="sourceLineNo">137</span>      return m_bcv__IsNotDefault;<a name="line.137"></a>
 <span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    private boolean m_format__IsNotDefault;<a name="line.139"></a>
+<span class="sourceLineNo">139</span>    private boolean m_bcv__IsNotDefault;<a name="line.139"></a>
 <span class="sourceLineNo">140</span>  }<a name="line.140"></a>
 <span class="sourceLineNo">141</span>  @Override<a name="line.141"></a>
 <span class="sourceLineNo">142</span>  protected org.jamon.AbstractTemplateProxy.ImplData makeImplData()<a name="line.142"></a>
@@ -156,17 +156,17 @@
 <span class="sourceLineNo">148</span>    return (ImplData) super.getImplData();<a name="line.148"></a>
 <span class="sourceLineNo">149</span>  }<a name="line.149"></a>
 <span class="sourceLineNo">150</span>  <a name="line.150"></a>
-<span class="sourceLineNo">151</span>  protected String filter;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFilter(String p_filter)<a name="line.152"></a>
+<span class="sourceLineNo">151</span>  protected String format;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFormat(String p_format)<a name="line.152"></a>
 <span class="sourceLineNo">153</span>  {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    (getImplData()).setFilter(p_filter);<a name="line.154"></a>
+<span class="sourceLineNo">154</span>    (getImplData()).setFormat(p_format);<a name="line.154"></a>
 <span class="sourceLineNo">155</span>    return this;<a name="line.155"></a>
 <span class="sourceLineNo">156</span>  }<a name="line.156"></a>
 <span class="sourceLineNo">157</span>  <a name="line.157"></a>
-<span class="sourceLineNo">158</span>  protected String bcv;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcv(String p_bcv)<a name="line.159"></a>
+<span class="sourceLineNo">158</span>  protected String filter;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFilter(String p_filter)<a name="line.159"></a>
 <span class="sourceLineNo">160</span>  {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    (getImplData()).setBcv(p_bcv);<a name="line.161"></a>
+<span class="sourceLineNo">161</span>    (getImplData()).setFilter(p_filter);<a name="line.161"></a>
 <span class="sourceLineNo">162</span>    return this;<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>
@@ -177,10 +177,10 @@
 <span class="sourceLineNo">169</span>    return this;<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>  protected String format;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFormat(String p_format)<a name="line.173"></a>
+<span class="sourceLineNo">172</span>  protected String bcv;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcv(String p_bcv)<a name="line.173"></a>
 <span class="sourceLineNo">174</span>  {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    (getImplData()).setFormat(p_format);<a name="line.175"></a>
+<span class="sourceLineNo">175</span>    (getImplData()).setBcv(p_bcv);<a name="line.175"></a>
 <span class="sourceLineNo">176</span>    return this;<a name="line.176"></a>
 <span class="sourceLineNo">177</span>  }<a name="line.177"></a>
 <span class="sourceLineNo">178</span>  <a name="line.178"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html
index f1ce24d..9ce41cc 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html
@@ -33,10 +33,10 @@
 <span class="sourceLineNo">025</span>  requiredArguments = {<a name="line.25"></a>
 <span class="sourceLineNo">026</span>    @org.jamon.annotations.Argument(name = "regionServer", type = "HRegionServer")},<a name="line.26"></a>
 <span class="sourceLineNo">027</span>  optionalArguments = {<a name="line.27"></a>
-<span class="sourceLineNo">028</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.28"></a>
-<span class="sourceLineNo">029</span>    @org.jamon.annotations.Argument(name = "bcv", type = "String"),<a name="line.29"></a>
+<span class="sourceLineNo">028</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.28"></a>
+<span class="sourceLineNo">029</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.29"></a>
 <span class="sourceLineNo">030</span>    @org.jamon.annotations.Argument(name = "bcn", type = "String"),<a name="line.30"></a>
-<span class="sourceLineNo">031</span>    @org.jamon.annotations.Argument(name = "format", type = "String")})<a name="line.31"></a>
+<span class="sourceLineNo">031</span>    @org.jamon.annotations.Argument(name = "bcv", type = "String")})<a name="line.31"></a>
 <span class="sourceLineNo">032</span>public class RSStatusTmpl<a name="line.32"></a>
 <span class="sourceLineNo">033</span>  extends org.jamon.AbstractTemplateProxy<a name="line.33"></a>
 <span class="sourceLineNo">034</span>{<a name="line.34"></a>
@@ -77,40 +77,40 @@
 <span class="sourceLineNo">069</span>      return m_regionServer;<a name="line.69"></a>
 <span class="sourceLineNo">070</span>    }<a name="line.70"></a>
 <span class="sourceLineNo">071</span>    private HRegionServer m_regionServer;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    // 21, 1<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    public void setFilter(String filter)<a name="line.73"></a>
+<span class="sourceLineNo">072</span>    // 22, 1<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    public void setFormat(String format)<a name="line.73"></a>
 <span class="sourceLineNo">074</span>    {<a name="line.74"></a>
-<span class="sourceLineNo">075</span>      // 21, 1<a name="line.75"></a>
-<span class="sourceLineNo">076</span>      m_filter = filter;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>      m_filter__IsNotDefault = true;<a name="line.77"></a>
+<span class="sourceLineNo">075</span>      // 22, 1<a name="line.75"></a>
+<span class="sourceLineNo">076</span>      m_format = format;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      m_format__IsNotDefault = true;<a name="line.77"></a>
 <span class="sourceLineNo">078</span>    }<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    public String getFilter()<a name="line.79"></a>
+<span class="sourceLineNo">079</span>    public String getFormat()<a name="line.79"></a>
 <span class="sourceLineNo">080</span>    {<a name="line.80"></a>
-<span class="sourceLineNo">081</span>      return m_filter;<a name="line.81"></a>
+<span class="sourceLineNo">081</span>      return m_format;<a name="line.81"></a>
 <span class="sourceLineNo">082</span>    }<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    private String m_filter;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    public boolean getFilter__IsNotDefault()<a name="line.84"></a>
+<span class="sourceLineNo">083</span>    private String m_format;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    public boolean getFormat__IsNotDefault()<a name="line.84"></a>
 <span class="sourceLineNo">085</span>    {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>      return m_filter__IsNotDefault;<a name="line.86"></a>
+<span class="sourceLineNo">086</span>      return m_format__IsNotDefault;<a name="line.86"></a>
 <span class="sourceLineNo">087</span>    }<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    private boolean m_filter__IsNotDefault;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    // 24, 1<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    public void setBcv(String bcv)<a name="line.90"></a>
+<span class="sourceLineNo">088</span>    private boolean m_format__IsNotDefault;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    // 21, 1<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    public void setFilter(String filter)<a name="line.90"></a>
 <span class="sourceLineNo">091</span>    {<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      // 24, 1<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      m_bcv = bcv;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      m_bcv__IsNotDefault = true;<a name="line.94"></a>
+<span class="sourceLineNo">092</span>      // 21, 1<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      m_filter = filter;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      m_filter__IsNotDefault = true;<a name="line.94"></a>
 <span class="sourceLineNo">095</span>    }<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    public String getBcv()<a name="line.96"></a>
+<span class="sourceLineNo">096</span>    public String getFilter()<a name="line.96"></a>
 <span class="sourceLineNo">097</span>    {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>      return m_bcv;<a name="line.98"></a>
+<span class="sourceLineNo">098</span>      return m_filter;<a name="line.98"></a>
 <span class="sourceLineNo">099</span>    }<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    private String m_bcv;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    public boolean getBcv__IsNotDefault()<a name="line.101"></a>
+<span class="sourceLineNo">100</span>    private String m_filter;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    public boolean getFilter__IsNotDefault()<a name="line.101"></a>
 <span class="sourceLineNo">102</span>    {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      return m_bcv__IsNotDefault;<a name="line.103"></a>
+<span class="sourceLineNo">103</span>      return m_filter__IsNotDefault;<a name="line.103"></a>
 <span class="sourceLineNo">104</span>    }<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    private boolean m_bcv__IsNotDefault;<a name="line.105"></a>
+<span class="sourceLineNo">105</span>    private boolean m_filter__IsNotDefault;<a name="line.105"></a>
 <span class="sourceLineNo">106</span>    // 23, 1<a name="line.106"></a>
 <span class="sourceLineNo">107</span>    public void setBcn(String bcn)<a name="line.107"></a>
 <span class="sourceLineNo">108</span>    {<a name="line.108"></a>
@@ -128,23 +128,23 @@
 <span class="sourceLineNo">120</span>      return m_bcn__IsNotDefault;<a name="line.120"></a>
 <span class="sourceLineNo">121</span>    }<a name="line.121"></a>
 <span class="sourceLineNo">122</span>    private boolean m_bcn__IsNotDefault;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    // 22, 1<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    public void setFormat(String format)<a name="line.124"></a>
+<span class="sourceLineNo">123</span>    // 24, 1<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    public void setBcv(String bcv)<a name="line.124"></a>
 <span class="sourceLineNo">125</span>    {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      // 22, 1<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      m_format = format;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      m_format__IsNotDefault = true;<a name="line.128"></a>
+<span class="sourceLineNo">126</span>      // 24, 1<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      m_bcv = bcv;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      m_bcv__IsNotDefault = true;<a name="line.128"></a>
 <span class="sourceLineNo">129</span>    }<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    public String getFormat()<a name="line.130"></a>
+<span class="sourceLineNo">130</span>    public String getBcv()<a name="line.130"></a>
 <span class="sourceLineNo">131</span>    {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      return m_format;<a name="line.132"></a>
+<span class="sourceLineNo">132</span>      return m_bcv;<a name="line.132"></a>
 <span class="sourceLineNo">133</span>    }<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    private String m_format;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    public boolean getFormat__IsNotDefault()<a name="line.135"></a>
+<span class="sourceLineNo">134</span>    private String m_bcv;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    public boolean getBcv__IsNotDefault()<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      return m_format__IsNotDefault;<a name="line.137"></a>
+<span class="sourceLineNo">137</span>      return m_bcv__IsNotDefault;<a name="line.137"></a>
 <span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    private boolean m_format__IsNotDefault;<a name="line.139"></a>
+<span class="sourceLineNo">139</span>    private boolean m_bcv__IsNotDefault;<a name="line.139"></a>
 <span class="sourceLineNo">140</span>  }<a name="line.140"></a>
 <span class="sourceLineNo">141</span>  @Override<a name="line.141"></a>
 <span class="sourceLineNo">142</span>  protected org.jamon.AbstractTemplateProxy.ImplData makeImplData()<a name="line.142"></a>
@@ -156,17 +156,17 @@
 <span class="sourceLineNo">148</span>    return (ImplData) super.getImplData();<a name="line.148"></a>
 <span class="sourceLineNo">149</span>  }<a name="line.149"></a>
 <span class="sourceLineNo">150</span>  <a name="line.150"></a>
-<span class="sourceLineNo">151</span>  protected String filter;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFilter(String p_filter)<a name="line.152"></a>
+<span class="sourceLineNo">151</span>  protected String format;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFormat(String p_format)<a name="line.152"></a>
 <span class="sourceLineNo">153</span>  {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    (getImplData()).setFilter(p_filter);<a name="line.154"></a>
+<span class="sourceLineNo">154</span>    (getImplData()).setFormat(p_format);<a name="line.154"></a>
 <span class="sourceLineNo">155</span>    return this;<a name="line.155"></a>
 <span class="sourceLineNo">156</span>  }<a name="line.156"></a>
 <span class="sourceLineNo">157</span>  <a name="line.157"></a>
-<span class="sourceLineNo">158</span>  protected String bcv;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcv(String p_bcv)<a name="line.159"></a>
+<span class="sourceLineNo">158</span>  protected String filter;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFilter(String p_filter)<a name="line.159"></a>
 <span class="sourceLineNo">160</span>  {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    (getImplData()).setBcv(p_bcv);<a name="line.161"></a>
+<span class="sourceLineNo">161</span>    (getImplData()).setFilter(p_filter);<a name="line.161"></a>
 <span class="sourceLineNo">162</span>    return this;<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>
@@ -177,10 +177,10 @@
 <span class="sourceLineNo">169</span>    return this;<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>  protected String format;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFormat(String p_format)<a name="line.173"></a>
+<span class="sourceLineNo">172</span>  protected String bcv;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcv(String p_bcv)<a name="line.173"></a>
 <span class="sourceLineNo">174</span>  {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    (getImplData()).setFormat(p_format);<a name="line.175"></a>
+<span class="sourceLineNo">175</span>    (getImplData()).setBcv(p_bcv);<a name="line.175"></a>
 <span class="sourceLineNo">176</span>    return this;<a name="line.176"></a>
 <span class="sourceLineNo">177</span>  }<a name="line.177"></a>
 <span class="sourceLineNo">178</span>  <a name="line.178"></a>


[42/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/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 cfd2380..cfd1df0 100644
--- a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
@@ -160,8 +160,8 @@
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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/7/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/ThriftServerRunner.ImplType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="strong">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="strong">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="strong">ThriftMetrics.ThriftServerType</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="strong">MetricsThriftServerSourceFactoryImpl.FactoryStorage</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html b/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
index 545c9d5..595d49d 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
@@ -379,76 +379,76 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.110">m_master</a></pre>
 </li>
 </ul>
-<a name="m_metaLocation">
+<a name="m_frags">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_metaLocation</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.122">m_metaLocation</a></pre>
+<h4>m_frags</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.122">m_frags</a></pre>
 </li>
 </ul>
-<a name="m_metaLocation__IsNotDefault">
+<a name="m_frags__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_metaLocation__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.127">m_metaLocation__IsNotDefault</a></pre>
+<h4>m_frags__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.127">m_frags__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_serverManager">
+<a name="m_servers">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_serverManager</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.139">m_serverManager</a></pre>
+<h4>m_servers</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.139">m_servers</a></pre>
 </li>
 </ul>
-<a name="m_serverManager__IsNotDefault">
+<a name="m_servers__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_serverManager__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.144">m_serverManager__IsNotDefault</a></pre>
+<h4>m_servers__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.144">m_servers__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_frags">
+<a name="m_metaLocation">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_frags</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.156">m_frags</a></pre>
+<h4>m_metaLocation</h4>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.156">m_metaLocation</a></pre>
 </li>
 </ul>
-<a name="m_frags__IsNotDefault">
+<a name="m_metaLocation__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_frags__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.161">m_frags__IsNotDefault</a></pre>
+<h4>m_metaLocation__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.161">m_metaLocation__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_assignmentManager">
+<a name="m_deadServers">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_assignmentManager</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.173">m_assignmentManager</a></pre>
+<h4>m_deadServers</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.173">m_deadServers</a></pre>
 </li>
 </ul>
-<a name="m_assignmentManager__IsNotDefault">
+<a name="m_deadServers__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_assignmentManager__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.178">m_assignmentManager__IsNotDefault</a></pre>
+<h4>m_deadServers__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.178">m_deadServers__IsNotDefault</a></pre>
 </li>
 </ul>
 <a name="m_format">
@@ -469,76 +469,76 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.195">m_format__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_catalogJanitorEnabled">
+<a name="m_serverManager">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_catalogJanitorEnabled</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.207">m_catalogJanitorEnabled</a></pre>
+<h4>m_serverManager</h4>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.207">m_serverManager</a></pre>
 </li>
 </ul>
-<a name="m_catalogJanitorEnabled__IsNotDefault">
+<a name="m_serverManager__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_catalogJanitorEnabled__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.212">m_catalogJanitorEnabled__IsNotDefault</a></pre>
+<h4>m_serverManager__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.212">m_serverManager__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_filter">
+<a name="m_assignmentManager">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_filter</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/master/MasterStatusTmpl.ImplData.html#line.224">m_filter</a></pre>
+<h4>m_assignmentManager</h4>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.224">m_assignmentManager</a></pre>
 </li>
 </ul>
-<a name="m_filter__IsNotDefault">
+<a name="m_assignmentManager__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_filter__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.229">m_filter__IsNotDefault</a></pre>
+<h4>m_assignmentManager__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.229">m_assignmentManager__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_deadServers">
+<a name="m_filter">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_deadServers</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.241">m_deadServers</a></pre>
+<h4>m_filter</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/master/MasterStatusTmpl.ImplData.html#line.241">m_filter</a></pre>
 </li>
 </ul>
-<a name="m_deadServers__IsNotDefault">
+<a name="m_filter__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_deadServers__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.246">m_deadServers__IsNotDefault</a></pre>
+<h4>m_filter__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.246">m_filter__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_servers">
+<a name="m_catalogJanitorEnabled">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_servers</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.258">m_servers</a></pre>
+<h4>m_catalogJanitorEnabled</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.258">m_catalogJanitorEnabled</a></pre>
 </li>
 </ul>
-<a name="m_servers__IsNotDefault">
+<a name="m_catalogJanitorEnabled__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>m_servers__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.263">m_servers__IsNotDefault</a></pre>
+<h4>m_catalogJanitorEnabled__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.263">m_catalogJanitorEnabled__IsNotDefault</a></pre>
 </li>
 </ul>
 </li>
@@ -584,112 +584,112 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.106">getMaster</a>()</pre>
 </li>
 </ul>
-<a name="setMetaLocation(org.apache.hadoop.hbase.ServerName)">
+<a name="setFrags(java.util.Map)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setMetaLocation</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.112">setMetaLocation</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;metaLocation)</pre>
+<h4>setFrags</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.112">setFrags</a>(<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;frags)</pre>
 </li>
 </ul>
-<a name="getMetaLocation()">
+<a name="getFrags()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getMetaLocation</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.118">getMetaLocation</a>()</pre>
+<h4>getFrags</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.118">getFrags</a>()</pre>
 </li>
 </ul>
-<a name="getMetaLocation__IsNotDefault()">
+<a name="getFrags__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getMetaLocation__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.123">getMetaLocation__IsNotDefault</a>()</pre>
+<h4>getFrags__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.123">getFrags__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setServerManager(org.apache.hadoop.hbase.master.ServerManager)">
+<a name="setServers(java.util.List)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setServerManager</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.129">setServerManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;serverManager)</pre>
+<h4>setServers</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.129">setServers</a>(<a href="http://docs.oracle.com/javase/7/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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)</pre>
 </li>
 </ul>
-<a name="getServerManager()">
+<a name="getServers()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getServerManager</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.135">getServerManager</a>()</pre>
+<h4>getServers</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.135">getServers</a>()</pre>
 </li>
 </ul>
-<a name="getServerManager__IsNotDefault()">
+<a name="getServers__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getServerManager__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.140">getServerManager__IsNotDefault</a>()</pre>
+<h4>getServers__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.140">getServers__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setFrags(java.util.Map)">
+<a name="setMetaLocation(org.apache.hadoop.hbase.ServerName)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFrags</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.146">setFrags</a>(<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;frags)</pre>
+<h4>setMetaLocation</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.146">setMetaLocation</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;metaLocation)</pre>
 </li>
 </ul>
-<a name="getFrags()">
+<a name="getMetaLocation()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getFrags</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.152">getFrags</a>()</pre>
+<h4>getMetaLocation</h4>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.152">getMetaLocation</a>()</pre>
 </li>
 </ul>
-<a name="getFrags__IsNotDefault()">
+<a name="getMetaLocation__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getFrags__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.157">getFrags__IsNotDefault</a>()</pre>
+<h4>getMetaLocation__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.157">getMetaLocation__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setAssignmentManager(org.apache.hadoop.hbase.master.AssignmentManager)">
+<a name="setDeadServers(java.util.Set)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setAssignmentManager</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.163">setAssignmentManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a>&nbsp;assignmentManager)</pre>
+<h4>setDeadServers</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.163">setDeadServers</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;deadServers)</pre>
 </li>
 </ul>
-<a name="getAssignmentManager()">
+<a name="getDeadServers()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getAssignmentManager</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.169">getAssignmentManager</a>()</pre>
+<h4>getDeadServers</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.169">getDeadServers</a>()</pre>
 </li>
 </ul>
-<a name="getAssignmentManager__IsNotDefault()">
+<a name="getDeadServers__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getAssignmentManager__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.174">getAssignmentManager__IsNotDefault</a>()</pre>
+<h4>getDeadServers__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.174">getDeadServers__IsNotDefault</a>()</pre>
 </li>
 </ul>
 <a name="setFormat(java.lang.String)">
@@ -719,112 +719,112 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.191">getFormat__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setCatalogJanitorEnabled(boolean)">
+<a name="setServerManager(org.apache.hadoop.hbase.master.ServerManager)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setCatalogJanitorEnabled</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.197">setCatalogJanitorEnabled</a>(boolean&nbsp;catalogJanitorEnabled)</pre>
+<h4>setServerManager</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.197">setServerManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;serverManager)</pre>
 </li>
 </ul>
-<a name="getCatalogJanitorEnabled()">
+<a name="getServerManager()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getCatalogJanitorEnabled</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.203">getCatalogJanitorEnabled</a>()</pre>
+<h4>getServerManager</h4>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.203">getServerManager</a>()</pre>
 </li>
 </ul>
-<a name="getCatalogJanitorEnabled__IsNotDefault()">
+<a name="getServerManager__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getCatalogJanitorEnabled__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.208">getCatalogJanitorEnabled__IsNotDefault</a>()</pre>
+<h4>getServerManager__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.208">getServerManager__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setFilter(java.lang.String)">
+<a name="setAssignmentManager(org.apache.hadoop.hbase.master.AssignmentManager)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFilter</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.214">setFilter</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;filter)</pre>
+<h4>setAssignmentManager</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.214">setAssignmentManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a>&nbsp;assignmentManager)</pre>
 </li>
 </ul>
-<a name="getFilter()">
+<a name="getAssignmentManager()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getFilter</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/master/MasterStatusTmpl.ImplData.html#line.220">getFilter</a>()</pre>
+<h4>getAssignmentManager</h4>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.220">getAssignmentManager</a>()</pre>
 </li>
 </ul>
-<a name="getFilter__IsNotDefault()">
+<a name="getAssignmentManager__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getFilter__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.225">getFilter__IsNotDefault</a>()</pre>
+<h4>getAssignmentManager__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.225">getAssignmentManager__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setDeadServers(java.util.Set)">
+<a name="setFilter(java.lang.String)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setDeadServers</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.231">setDeadServers</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;deadServers)</pre>
+<h4>setFilter</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.231">setFilter</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;filter)</pre>
 </li>
 </ul>
-<a name="getDeadServers()">
+<a name="getFilter()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getDeadServers</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.237">getDeadServers</a>()</pre>
+<h4>getFilter</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/master/MasterStatusTmpl.ImplData.html#line.237">getFilter</a>()</pre>
 </li>
 </ul>
-<a name="getDeadServers__IsNotDefault()">
+<a name="getFilter__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getDeadServers__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.242">getDeadServers__IsNotDefault</a>()</pre>
+<h4>getFilter__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.242">getFilter__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setServers(java.util.List)">
+<a name="setCatalogJanitorEnabled(boolean)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setServers</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.248">setServers</a>(<a href="http://docs.oracle.com/javase/7/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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)</pre>
+<h4>setCatalogJanitorEnabled</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.248">setCatalogJanitorEnabled</a>(boolean&nbsp;catalogJanitorEnabled)</pre>
 </li>
 </ul>
-<a name="getServers()">
+<a name="getCatalogJanitorEnabled()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getServers</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.254">getServers</a>()</pre>
+<h4>getCatalogJanitorEnabled</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.254">getCatalogJanitorEnabled</a>()</pre>
 </li>
 </ul>
-<a name="getServers__IsNotDefault()">
+<a name="getCatalogJanitorEnabled__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>getServers__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.259">getServers__IsNotDefault</a>()</pre>
+<h4>getCatalogJanitorEnabled__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.259">getCatalogJanitorEnabled__IsNotDefault</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html b/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
index 9b68db2..4ab989f 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
@@ -323,40 +323,40 @@ extends org.jamon.AbstractTemplateProxy</pre>
 <!--   -->
 </a>
 <h3>Field Detail</h3>
-<a name="metaLocation">
+<a name="frags">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>metaLocation</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.275">metaLocation</a></pre>
+<h4>frags</h4>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.275">frags</a></pre>
 </li>
 </ul>
-<a name="serverManager">
+<a name="servers">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>serverManager</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.282">serverManager</a></pre>
+<h4>servers</h4>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.282">servers</a></pre>
 </li>
 </ul>
-<a name="frags">
+<a name="metaLocation">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>frags</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.289">frags</a></pre>
+<h4>metaLocation</h4>
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.289">metaLocation</a></pre>
 </li>
 </ul>
-<a name="assignmentManager">
+<a name="deadServers">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>assignmentManager</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.296">assignmentManager</a></pre>
+<h4>deadServers</h4>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.296">deadServers</a></pre>
 </li>
 </ul>
 <a name="format">
@@ -368,40 +368,40 @@ extends org.jamon.AbstractTemplateProxy</pre>
 <pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/master/MasterStatusTmpl.html#line.303">format</a></pre>
 </li>
 </ul>
-<a name="catalogJanitorEnabled">
+<a name="serverManager">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>catalogJanitorEnabled</h4>
-<pre>protected&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.310">catalogJanitorEnabled</a></pre>
+<h4>serverManager</h4>
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.310">serverManager</a></pre>
 </li>
 </ul>
-<a name="filter">
+<a name="assignmentManager">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>filter</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/master/MasterStatusTmpl.html#line.317">filter</a></pre>
+<h4>assignmentManager</h4>
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.317">assignmentManager</a></pre>
 </li>
 </ul>
-<a name="deadServers">
+<a name="filter">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>deadServers</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.324">deadServers</a></pre>
+<h4>filter</h4>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/master/MasterStatusTmpl.html#line.324">filter</a></pre>
 </li>
 </ul>
-<a name="servers">
+<a name="catalogJanitorEnabled">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>servers</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.331">servers</a></pre>
+<h4>catalogJanitorEnabled</h4>
+<pre>protected&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.331">catalogJanitorEnabled</a></pre>
 </li>
 </ul>
 </li>
@@ -473,40 +473,40 @@ extends org.jamon.AbstractTemplateProxy</pre>
 </dl>
 </li>
 </ul>
-<a name="setMetaLocation(org.apache.hadoop.hbase.ServerName)">
+<a name="setFrags(java.util.Map)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setMetaLocation</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.276">setMetaLocation</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;p_metaLocation)</pre>
+<h4>setFrags</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.276">setFrags</a>(<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;p_frags)</pre>
 </li>
 </ul>
-<a name="setServerManager(org.apache.hadoop.hbase.master.ServerManager)">
+<a name="setServers(java.util.List)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setServerManager</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.283">setServerManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;p_serverManager)</pre>
+<h4>setServers</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.283">setServers</a>(<a href="http://docs.oracle.com/javase/7/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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;p_servers)</pre>
 </li>
 </ul>
-<a name="setFrags(java.util.Map)">
+<a name="setMetaLocation(org.apache.hadoop.hbase.ServerName)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFrags</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.290">setFrags</a>(<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;p_frags)</pre>
+<h4>setMetaLocation</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.290">setMetaLocation</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;p_metaLocation)</pre>
 </li>
 </ul>
-<a name="setAssignmentManager(org.apache.hadoop.hbase.master.AssignmentManager)">
+<a name="setDeadServers(java.util.Set)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setAssignmentManager</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.297">setAssignmentManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a>&nbsp;p_assignmentManager)</pre>
+<h4>setDeadServers</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.297">setDeadServers</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;p_deadServers)</pre>
 </li>
 </ul>
 <a name="setFormat(java.lang.String)">
@@ -518,40 +518,40 @@ extends org.jamon.AbstractTemplateProxy</pre>
 <pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.304">setFormat</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_format)</pre>
 </li>
 </ul>
-<a name="setCatalogJanitorEnabled(boolean)">
+<a name="setServerManager(org.apache.hadoop.hbase.master.ServerManager)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setCatalogJanitorEnabled</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.311">setCatalogJanitorEnabled</a>(boolean&nbsp;p_catalogJanitorEnabled)</pre>
+<h4>setServerManager</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.311">setServerManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;p_serverManager)</pre>
 </li>
 </ul>
-<a name="setFilter(java.lang.String)">
+<a name="setAssignmentManager(org.apache.hadoop.hbase.master.AssignmentManager)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFilter</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.318">setFilter</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_filter)</pre>
+<h4>setAssignmentManager</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.318">setAssignmentManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a>&nbsp;p_assignmentManager)</pre>
 </li>
 </ul>
-<a name="setDeadServers(java.util.Set)">
+<a name="setFilter(java.lang.String)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setDeadServers</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.325">setDeadServers</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;p_deadServers)</pre>
+<h4>setFilter</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.325">setFilter</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_filter)</pre>
 </li>
 </ul>
-<a name="setServers(java.util.List)">
+<a name="setCatalogJanitorEnabled(boolean)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setServers</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.332">setServers</a>(<a href="http://docs.oracle.com/javase/7/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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;p_servers)</pre>
+<h4>setCatalogJanitorEnabled</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.332">setCatalogJanitorEnabled</a>(boolean&nbsp;p_catalogJanitorEnabled)</pre>
 </li>
 </ul>
 <a name="constructImpl(java.lang.Class)">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html b/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
index 8dd06c8..ee77b03 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
@@ -264,40 +264,40 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/Master
 <pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.62">master</a></pre>
 </li>
 </ul>
-<a name="metaLocation">
+<a name="frags">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>metaLocation</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.63">metaLocation</a></pre>
+<h4>frags</h4>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.63">frags</a></pre>
 </li>
 </ul>
-<a name="serverManager">
+<a name="servers">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>serverManager</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.64">serverManager</a></pre>
+<h4>servers</h4>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.64">servers</a></pre>
 </li>
 </ul>
-<a name="frags">
+<a name="metaLocation">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>frags</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.65">frags</a></pre>
+<h4>metaLocation</h4>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.65">metaLocation</a></pre>
 </li>
 </ul>
-<a name="assignmentManager">
+<a name="deadServers">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>assignmentManager</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.66">assignmentManager</a></pre>
+<h4>deadServers</h4>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.66">deadServers</a></pre>
 </li>
 </ul>
 <a name="format">
@@ -309,40 +309,40 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/Master
 <pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/master/MasterStatusTmplImpl.html#line.67">format</a></pre>
 </li>
 </ul>
-<a name="catalogJanitorEnabled">
+<a name="serverManager">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>catalogJanitorEnabled</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.68">catalogJanitorEnabled</a></pre>
+<h4>serverManager</h4>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.68">serverManager</a></pre>
 </li>
 </ul>
-<a name="filter">
+<a name="assignmentManager">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>filter</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/master/MasterStatusTmplImpl.html#line.69">filter</a></pre>
+<h4>assignmentManager</h4>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.69">assignmentManager</a></pre>
 </li>
 </ul>
-<a name="deadServers">
+<a name="filter">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>deadServers</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.70">deadServers</a></pre>
+<h4>filter</h4>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/master/MasterStatusTmplImpl.html#line.70">filter</a></pre>
 </li>
 </ul>
-<a name="servers">
+<a name="catalogJanitorEnabled">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>servers</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.71">servers</a></pre>
+<h4>catalogJanitorEnabled</h4>
+<pre>private final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.71">catalogJanitorEnabled</a></pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html b/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html
index 4cc2ce5..a1040c8 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html
@@ -279,40 +279,40 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.71">m_regionServer</a></pre>
 </li>
 </ul>
-<a name="m_filter">
+<a name="m_format">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_filter</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.83">m_filter</a></pre>
+<h4>m_format</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.83">m_format</a></pre>
 </li>
 </ul>
-<a name="m_filter__IsNotDefault">
+<a name="m_format__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_filter__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.88">m_filter__IsNotDefault</a></pre>
+<h4>m_format__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.88">m_format__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_bcv">
+<a name="m_filter">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_bcv</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.100">m_bcv</a></pre>
+<h4>m_filter</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.100">m_filter</a></pre>
 </li>
 </ul>
-<a name="m_bcv__IsNotDefault">
+<a name="m_filter__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_bcv__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.105">m_bcv__IsNotDefault</a></pre>
+<h4>m_filter__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.105">m_filter__IsNotDefault</a></pre>
 </li>
 </ul>
 <a name="m_bcn">
@@ -333,22 +333,22 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.122">m_bcn__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_format">
+<a name="m_bcv">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_format</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.134">m_format</a></pre>
+<h4>m_bcv</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.134">m_bcv</a></pre>
 </li>
 </ul>
-<a name="m_format__IsNotDefault">
+<a name="m_bcv__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>m_format__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.139">m_format__IsNotDefault</a></pre>
+<h4>m_bcv__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.139">m_bcv__IsNotDefault</a></pre>
 </li>
 </ul>
 </li>
@@ -394,58 +394,58 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.67">getRegionServer</a>()</pre>
 </li>
 </ul>
-<a name="setFilter(java.lang.String)">
+<a name="setFormat(java.lang.String)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFilter</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.73">setFilter</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;filter)</pre>
+<h4>setFormat</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.73">setFormat</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;format)</pre>
 </li>
 </ul>
-<a name="getFilter()">
+<a name="getFormat()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getFilter</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.79">getFilter</a>()</pre>
+<h4>getFormat</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.79">getFormat</a>()</pre>
 </li>
 </ul>
-<a name="getFilter__IsNotDefault()">
+<a name="getFormat__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getFilter__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.84">getFilter__IsNotDefault</a>()</pre>
+<h4>getFormat__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.84">getFormat__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setBcv(java.lang.String)">
+<a name="setFilter(java.lang.String)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setBcv</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.90">setBcv</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;bcv)</pre>
+<h4>setFilter</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.90">setFilter</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;filter)</pre>
 </li>
 </ul>
-<a name="getBcv()">
+<a name="getFilter()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getBcv</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.96">getBcv</a>()</pre>
+<h4>getFilter</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.96">getFilter</a>()</pre>
 </li>
 </ul>
-<a name="getBcv__IsNotDefault()">
+<a name="getFilter__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getBcv__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.101">getBcv__IsNotDefault</a>()</pre>
+<h4>getFilter__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.101">getFilter__IsNotDefault</a>()</pre>
 </li>
 </ul>
 <a name="setBcn(java.lang.String)">
@@ -475,31 +475,31 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.118">getBcn__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setFormat(java.lang.String)">
+<a name="setBcv(java.lang.String)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFormat</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.124">setFormat</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;format)</pre>
+<h4>setBcv</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.124">setBcv</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;bcv)</pre>
 </li>
 </ul>
-<a name="getFormat()">
+<a name="getBcv()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getFormat</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.130">getFormat</a>()</pre>
+<h4>getBcv</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.130">getBcv</a>()</pre>
 </li>
 </ul>
-<a name="getFormat__IsNotDefault()">
+<a name="getBcv__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>getFormat__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.135">getFormat__IsNotDefault</a>()</pre>
+<h4>getBcv__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.135">getBcv__IsNotDefault</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html b/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html
index 0295426..71e0e55 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html
@@ -283,22 +283,22 @@ extends org.jamon.AbstractTemplateProxy</pre>
 <!--   -->
 </a>
 <h3>Field Detail</h3>
-<a name="filter">
+<a name="format">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>filter</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.html#line.151">filter</a></pre>
+<h4>format</h4>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.html#line.151">format</a></pre>
 </li>
 </ul>
-<a name="bcv">
+<a name="filter">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>bcv</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.html#line.158">bcv</a></pre>
+<h4>filter</h4>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.html#line.158">filter</a></pre>
 </li>
 </ul>
 <a name="bcn">
@@ -310,13 +310,13 @@ extends org.jamon.AbstractTemplateProxy</pre>
 <pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.html#line.165">bcn</a></pre>
 </li>
 </ul>
-<a name="format">
+<a name="bcv">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>format</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.html#line.172">format</a></pre>
+<h4>bcv</h4>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.html#line.172">bcv</a></pre>
 </li>
 </ul>
 </li>
@@ -388,22 +388,22 @@ extends org.jamon.AbstractTemplateProxy</pre>
 </dl>
 </li>
 </ul>
-<a name="setFilter(java.lang.String)">
+<a name="setFormat(java.lang.String)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFilter</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">RSStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html#line.152">setFilter</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_filter)</pre>
+<h4>setFormat</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">RSStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html#line.152">setFormat</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_format)</pre>
 </li>
 </ul>
-<a name="setBcv(java.lang.String)">
+<a name="setFilter(java.lang.String)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setBcv</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">RSStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html#line.159">setBcv</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_bcv)</pre>
+<h4>setFilter</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">RSStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html#line.159">setFilter</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_filter)</pre>
 </li>
 </ul>
 <a name="setBcn(java.lang.String)">
@@ -415,13 +415,13 @@ extends org.jamon.AbstractTemplateProxy</pre>
 <pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">RSStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html#line.166">setBcn</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_bcn)</pre>
 </li>
 </ul>
-<a name="setFormat(java.lang.String)">
+<a name="setBcv(java.lang.String)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFormat</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">RSStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html#line.173">setFormat</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_format)</pre>
+<h4>setBcv</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">RSStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html#line.173">setBcv</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_bcv)</pre>
 </li>
 </ul>
 <a name="constructImpl(java.lang.Class)">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html b/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html
index 4de41cc..87d2abb 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html
@@ -224,22 +224,22 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/
 <pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html#line.28">regionServer</a></pre>
 </li>
 </ul>
-<a name="filter">
+<a name="format">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>filter</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmplImpl.html#line.29">filter</a></pre>
+<h4>format</h4>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmplImpl.html#line.29">format</a></pre>
 </li>
 </ul>
-<a name="bcv">
+<a name="filter">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>bcv</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmplImpl.html#line.30">bcv</a></pre>
+<h4>filter</h4>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmplImpl.html#line.30">filter</a></pre>
 </li>
 </ul>
 <a name="bcn">
@@ -251,13 +251,13 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/
 <pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmplImpl.html#line.31">bcn</a></pre>
 </li>
 </ul>
-<a name="format">
+<a name="bcv">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>format</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmplImpl.html#line.32">format</a></pre>
+<h4>bcv</h4>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmplImpl.html#line.32">bcv</a></pre>
 </li>
 </ul>
 </li>


[49/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/apidocs/src-html/org/apache/hadoop/hbase/client/Append.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/client/Append.html b/apidocs/src-html/org/apache/hadoop/hbase/client/Append.html
index 93d92df..28a04b5 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/client/Append.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/client/Append.html
@@ -55,136 +55,135 @@
 <span class="sourceLineNo">047</span>@InterfaceAudience.Public<a name="line.47"></a>
 <span class="sourceLineNo">048</span>@InterfaceStability.Stable<a name="line.48"></a>
 <span class="sourceLineNo">049</span>public class Append extends Mutation {<a name="line.49"></a>
-<span class="sourceLineNo">050</span>  private static final String RETURN_RESULTS = "_rr_";<a name="line.50"></a>
-<span class="sourceLineNo">051</span>  /**<a name="line.51"></a>
-<span class="sourceLineNo">052</span>   * @param returnResults<a name="line.52"></a>
-<span class="sourceLineNo">053</span>   *          True (default) if the append operation should return the results.<a name="line.53"></a>
-<span class="sourceLineNo">054</span>   *          A client that is not interested in the result can save network<a name="line.54"></a>
-<span class="sourceLineNo">055</span>   *          bandwidth setting this to false.<a name="line.55"></a>
-<span class="sourceLineNo">056</span>   */<a name="line.56"></a>
-<span class="sourceLineNo">057</span>  public Append setReturnResults(boolean returnResults) {<a name="line.57"></a>
-<span class="sourceLineNo">058</span>    setAttribute(RETURN_RESULTS, Bytes.toBytes(returnResults));<a name="line.58"></a>
-<span class="sourceLineNo">059</span>    return this;<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>  /**<a name="line.62"></a>
-<span class="sourceLineNo">063</span>   * @return current setting for returnResults<a name="line.63"></a>
-<span class="sourceLineNo">064</span>   */<a name="line.64"></a>
+<span class="sourceLineNo">050</span>  /**<a name="line.50"></a>
+<span class="sourceLineNo">051</span>   * @param returnResults<a name="line.51"></a>
+<span class="sourceLineNo">052</span>   *          True (default) if the append operation should return the results.<a name="line.52"></a>
+<span class="sourceLineNo">053</span>   *          A client that is not interested in the result can save network<a name="line.53"></a>
+<span class="sourceLineNo">054</span>   *          bandwidth setting this to false.<a name="line.54"></a>
+<span class="sourceLineNo">055</span>   */<a name="line.55"></a>
+<span class="sourceLineNo">056</span>  public Append setReturnResults(boolean returnResults) {<a name="line.56"></a>
+<span class="sourceLineNo">057</span>    super.setReturnResults(returnResults);<a name="line.57"></a>
+<span class="sourceLineNo">058</span>    return this;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  }<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>   * @return current setting for returnResults<a name="line.62"></a>
+<span class="sourceLineNo">063</span>   */<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  // This method makes public the superclasses's protected method.<a name="line.64"></a>
 <span class="sourceLineNo">065</span>  public boolean isReturnResults() {<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    byte[] v = getAttribute(RETURN_RESULTS);<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    return v == null ? true : Bytes.toBoolean(v);<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  }<a name="line.68"></a>
-<span class="sourceLineNo">069</span><a name="line.69"></a>
-<span class="sourceLineNo">070</span>  /**<a name="line.70"></a>
-<span class="sourceLineNo">071</span>   * Create a Append operation for the specified row.<a name="line.71"></a>
-<span class="sourceLineNo">072</span>   * &lt;p&gt;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>   * At least one column must be appended to.<a name="line.73"></a>
-<span class="sourceLineNo">074</span>   * @param row row key; makes a local copy of passed in array.<a name="line.74"></a>
-<span class="sourceLineNo">075</span>   */<a name="line.75"></a>
-<span class="sourceLineNo">076</span>  public Append(byte[] row) {<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    this(row, 0, row.length);<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  }<a name="line.78"></a>
-<span class="sourceLineNo">079</span>  /**<a name="line.79"></a>
-<span class="sourceLineNo">080</span>   * Copy constructor<a name="line.80"></a>
-<span class="sourceLineNo">081</span>   * @param a<a name="line.81"></a>
-<span class="sourceLineNo">082</span>   */<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  public Append(Append a) {<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    this.row = a.getRow();<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    this.ts = a.getTimeStamp();<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    this.familyMap.putAll(a.getFamilyCellMap());<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    for (Map.Entry&lt;String, byte[]&gt; entry : a.getAttributesMap().entrySet()) {<a name="line.87"></a>
-<span class="sourceLineNo">088</span>      this.setAttribute(entry.getKey(), entry.getValue());<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    }<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>  /** Create a Append operation for the specified row.<a name="line.92"></a>
-<span class="sourceLineNo">093</span>   * &lt;p&gt;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   * At least one column must be appended to.<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   * @param rowArray Makes a copy out of this buffer.<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   * @param rowOffset<a name="line.96"></a>
-<span class="sourceLineNo">097</span>   * @param rowLength<a name="line.97"></a>
-<span class="sourceLineNo">098</span>   */<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  public Append(final byte [] rowArray, final int rowOffset, final int rowLength) {<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    checkRow(rowArray, rowOffset, rowLength);<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    this.row = Bytes.copy(rowArray, rowOffset, rowLength);<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  }<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>  /**<a name="line.104"></a>
-<span class="sourceLineNo">105</span>   * Add the specified column and value to this Append operation.<a name="line.105"></a>
-<span class="sourceLineNo">106</span>   * @param family family name<a name="line.106"></a>
-<span class="sourceLineNo">107</span>   * @param qualifier column qualifier<a name="line.107"></a>
-<span class="sourceLineNo">108</span>   * @param value value to append to specified column<a name="line.108"></a>
-<span class="sourceLineNo">109</span>   * @return this<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   */<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  public Append add(byte [] family, byte [] qualifier, byte [] value) {<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    KeyValue kv = new KeyValue(this.row, family, qualifier, this.ts, KeyValue.Type.Put, value);<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    return add(kv);<a name="line.113"></a>
-<span class="sourceLineNo">114</span>  }<a name="line.114"></a>
-<span class="sourceLineNo">115</span><a name="line.115"></a>
-<span class="sourceLineNo">116</span>  /**<a name="line.116"></a>
-<span class="sourceLineNo">117</span>   * Add column and value to this Append operation.<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   * @param cell<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   * @return This instance<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   */<a name="line.120"></a>
-<span class="sourceLineNo">121</span>  @SuppressWarnings("unchecked")<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  public Append add(final Cell cell) {<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    // Presume it is KeyValue for now.<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    byte [] family = CellUtil.cloneFamily(cell);<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    List&lt;Cell&gt; list = this.familyMap.get(family);<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    if (list == null) {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      list  = new ArrayList&lt;Cell&gt;();<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    }<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    // find where the new entry should be placed in the List<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    list.add(cell);<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    this.familyMap.put(family, list);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    return this;<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>  @Override<a name="line.135"></a>
-<span class="sourceLineNo">136</span>  public Append setAttribute(String name, byte[] value) {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    return (Append) super.setAttribute(name, value);<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>  @Override<a name="line.140"></a>
-<span class="sourceLineNo">141</span>  public Append setId(String id) {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    return (Append) super.setId(id);<a name="line.142"></a>
-<span class="sourceLineNo">143</span>  }<a name="line.143"></a>
-<span class="sourceLineNo">144</span><a name="line.144"></a>
-<span class="sourceLineNo">145</span>  @Override<a name="line.145"></a>
-<span class="sourceLineNo">146</span>  public Append setDurability(Durability d) {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    return (Append) super.setDurability(d);<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  }<a name="line.148"></a>
-<span class="sourceLineNo">149</span><a name="line.149"></a>
-<span class="sourceLineNo">150</span>  @Override<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  public Append setFamilyCellMap(NavigableMap&lt;byte[], List&lt;Cell&gt;&gt; map) {<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    return (Append) super.setFamilyCellMap(map);<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>  @Override<a name="line.155"></a>
-<span class="sourceLineNo">156</span>  public Append setClusterIds(List&lt;UUID&gt; clusterIds) {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    return (Append) super.setClusterIds(clusterIds);<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>  @Override<a name="line.160"></a>
-<span class="sourceLineNo">161</span>  public Append setCellVisibility(CellVisibility expression) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    return (Append) super.setCellVisibility(expression);<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>  @Override<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  public Append setACL(String user, Permission perms) {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    return (Append) super.setACL(user, perms);<a name="line.167"></a>
-<span class="sourceLineNo">168</span>  }<a name="line.168"></a>
-<span class="sourceLineNo">169</span><a name="line.169"></a>
-<span class="sourceLineNo">170</span>  @Override<a name="line.170"></a>
-<span class="sourceLineNo">171</span>  public Append setACL(Map&lt;String, Permission&gt; perms) {<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    return (Append) super.setACL(perms);<a name="line.172"></a>
-<span class="sourceLineNo">173</span>  }<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 Append setTTL(long ttl) {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    return (Append) super.setTTL(ttl);<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">066</span>    return super.isReturnResults();<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  }<a name="line.67"></a>
+<span class="sourceLineNo">068</span><a name="line.68"></a>
+<span class="sourceLineNo">069</span>  /**<a name="line.69"></a>
+<span class="sourceLineNo">070</span>   * Create a Append operation for the specified row.<a name="line.70"></a>
+<span class="sourceLineNo">071</span>   * &lt;p&gt;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>   * At least one column must be appended to.<a name="line.72"></a>
+<span class="sourceLineNo">073</span>   * @param row row key; makes a local copy of passed in array.<a name="line.73"></a>
+<span class="sourceLineNo">074</span>   */<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  public Append(byte[] row) {<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    this(row, 0, row.length);<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  }<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  /**<a name="line.78"></a>
+<span class="sourceLineNo">079</span>   * Copy constructor<a name="line.79"></a>
+<span class="sourceLineNo">080</span>   * @param a<a name="line.80"></a>
+<span class="sourceLineNo">081</span>   */<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  public Append(Append a) {<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    this.row = a.getRow();<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    this.ts = a.getTimeStamp();<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    this.familyMap.putAll(a.getFamilyCellMap());<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    for (Map.Entry&lt;String, byte[]&gt; entry : a.getAttributesMap().entrySet()) {<a name="line.86"></a>
+<span class="sourceLineNo">087</span>      this.setAttribute(entry.getKey(), entry.getValue());<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    }<a name="line.88"></a>
+<span class="sourceLineNo">089</span>  }<a name="line.89"></a>
+<span class="sourceLineNo">090</span><a name="line.90"></a>
+<span class="sourceLineNo">091</span>  /** Create a Append operation for the specified row.<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   * &lt;p&gt;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>   * At least one column must be appended to.<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   * @param rowArray Makes a copy out of this buffer.<a name="line.94"></a>
+<span class="sourceLineNo">095</span>   * @param rowOffset<a name="line.95"></a>
+<span class="sourceLineNo">096</span>   * @param rowLength<a name="line.96"></a>
+<span class="sourceLineNo">097</span>   */<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  public Append(final byte [] rowArray, final int rowOffset, final int rowLength) {<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    checkRow(rowArray, rowOffset, rowLength);<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    this.row = Bytes.copy(rowArray, rowOffset, rowLength);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  }<a name="line.101"></a>
+<span class="sourceLineNo">102</span><a name="line.102"></a>
+<span class="sourceLineNo">103</span>  /**<a name="line.103"></a>
+<span class="sourceLineNo">104</span>   * Add the specified column and value to this Append operation.<a name="line.104"></a>
+<span class="sourceLineNo">105</span>   * @param family family name<a name="line.105"></a>
+<span class="sourceLineNo">106</span>   * @param qualifier column qualifier<a name="line.106"></a>
+<span class="sourceLineNo">107</span>   * @param value value to append to specified column<a name="line.107"></a>
+<span class="sourceLineNo">108</span>   * @return this<a name="line.108"></a>
+<span class="sourceLineNo">109</span>   */<a name="line.109"></a>
+<span class="sourceLineNo">110</span>  public Append add(byte [] family, byte [] qualifier, byte [] value) {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    KeyValue kv = new KeyValue(this.row, family, qualifier, this.ts, KeyValue.Type.Put, value);<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    return add(kv);<a name="line.112"></a>
+<span class="sourceLineNo">113</span>  }<a name="line.113"></a>
+<span class="sourceLineNo">114</span><a name="line.114"></a>
+<span class="sourceLineNo">115</span>  /**<a name="line.115"></a>
+<span class="sourceLineNo">116</span>   * Add column and value to this Append operation.<a name="line.116"></a>
+<span class="sourceLineNo">117</span>   * @param cell<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   * @return This instance<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   */<a name="line.119"></a>
+<span class="sourceLineNo">120</span>  @SuppressWarnings("unchecked")<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  public Append add(final Cell cell) {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    // Presume it is KeyValue for now.<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    byte [] family = CellUtil.cloneFamily(cell);<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    List&lt;Cell&gt; list = this.familyMap.get(family);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    if (list == null) {<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      list  = new ArrayList&lt;Cell&gt;();<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    }<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    // find where the new entry should be placed in the List<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    list.add(cell);<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    this.familyMap.put(family, list);<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    return this;<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>  @Override<a name="line.134"></a>
+<span class="sourceLineNo">135</span>  public Append setAttribute(String name, byte[] value) {<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    return (Append) super.setAttribute(name, value);<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>  @Override<a name="line.139"></a>
+<span class="sourceLineNo">140</span>  public Append setId(String id) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    return (Append) super.setId(id);<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  }<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span>  @Override<a name="line.144"></a>
+<span class="sourceLineNo">145</span>  public Append setDurability(Durability d) {<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    return (Append) super.setDurability(d);<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>  @Override<a name="line.149"></a>
+<span class="sourceLineNo">150</span>  public Append setFamilyCellMap(NavigableMap&lt;byte[], List&lt;Cell&gt;&gt; map) {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    return (Append) super.setFamilyCellMap(map);<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>  @Override<a name="line.154"></a>
+<span class="sourceLineNo">155</span>  public Append setClusterIds(List&lt;UUID&gt; clusterIds) {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    return (Append) super.setClusterIds(clusterIds);<a name="line.156"></a>
+<span class="sourceLineNo">157</span>  }<a name="line.157"></a>
+<span class="sourceLineNo">158</span><a name="line.158"></a>
+<span class="sourceLineNo">159</span>  @Override<a name="line.159"></a>
+<span class="sourceLineNo">160</span>  public Append setCellVisibility(CellVisibility expression) {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    return (Append) super.setCellVisibility(expression);<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>  @Override<a name="line.164"></a>
+<span class="sourceLineNo">165</span>  public Append setACL(String user, Permission perms) {<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    return (Append) super.setACL(user, perms);<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>  @Override<a name="line.169"></a>
+<span class="sourceLineNo">170</span>  public Append setACL(Map&lt;String, Permission&gt; perms) {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    return (Append) super.setACL(perms);<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>  @Override<a name="line.174"></a>
+<span class="sourceLineNo">175</span>  public Append setTTL(long ttl) {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    return (Append) super.setTTL(ttl);<a name="line.176"></a>
+<span class="sourceLineNo">177</span>  }<a name="line.177"></a>
+<span class="sourceLineNo">178</span>}<a name="line.178"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/apidocs/src-html/org/apache/hadoop/hbase/client/Increment.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/client/Increment.html b/apidocs/src-html/org/apache/hadoop/hbase/client/Increment.html
index 7bdc8f8..7203c61 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/client/Increment.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/client/Increment.html
@@ -60,297 +60,294 @@
 <span class="sourceLineNo">052</span>@InterfaceStability.Stable<a name="line.52"></a>
 <span class="sourceLineNo">053</span>public class Increment extends Mutation implements Comparable&lt;Row&gt; {<a name="line.53"></a>
 <span class="sourceLineNo">054</span>  private static final long HEAP_OVERHEAD =  ClassSize.REFERENCE + ClassSize.TIMERANGE;<a name="line.54"></a>
-<span class="sourceLineNo">055</span><a name="line.55"></a>
-<span class="sourceLineNo">056</span>  private static final String RETURN_RESULTS = "_rr_";<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>  private TimeRange tr = new TimeRange();<a name="line.58"></a>
-<span class="sourceLineNo">059</span><a name="line.59"></a>
-<span class="sourceLineNo">060</span>  /**<a name="line.60"></a>
-<span class="sourceLineNo">061</span>   * Create a Increment operation for the specified row.<a name="line.61"></a>
-<span class="sourceLineNo">062</span>   * &lt;p&gt;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>   * At least one column must be incremented.<a name="line.63"></a>
-<span class="sourceLineNo">064</span>   * @param row row key (we will make a copy of this).<a name="line.64"></a>
-<span class="sourceLineNo">065</span>   */<a name="line.65"></a>
-<span class="sourceLineNo">066</span>  public Increment(byte [] row) {<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    this(row, 0, row.length);<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  }<a name="line.68"></a>
-<span class="sourceLineNo">069</span><a name="line.69"></a>
-<span class="sourceLineNo">070</span>  /**<a name="line.70"></a>
-<span class="sourceLineNo">071</span>   * Create a Increment operation for the specified row.<a name="line.71"></a>
-<span class="sourceLineNo">072</span>   * &lt;p&gt;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>   * At least one column must be incremented.<a name="line.73"></a>
-<span class="sourceLineNo">074</span>   * @param row row key (we will make a copy of this).<a name="line.74"></a>
-<span class="sourceLineNo">075</span>   */<a name="line.75"></a>
-<span class="sourceLineNo">076</span>  public Increment(final byte [] row, final int offset, final int length) {<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    checkRow(row, offset, length);<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    this.row = Bytes.copy(row, offset, length);<a name="line.78"></a>
-<span class="sourceLineNo">079</span>  }<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  /**<a name="line.80"></a>
-<span class="sourceLineNo">081</span>   * Copy constructor<a name="line.81"></a>
-<span class="sourceLineNo">082</span>   * @param i<a name="line.82"></a>
-<span class="sourceLineNo">083</span>   */<a name="line.83"></a>
-<span class="sourceLineNo">084</span>  public Increment(Increment i) {<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    this.row = i.getRow();<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    this.ts = i.getTimeStamp();<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    this.tr = i.getTimeRange();<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    this.familyMap.putAll(i.getFamilyCellMap());<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    for (Map.Entry&lt;String, byte[]&gt; entry : i.getAttributesMap().entrySet()) {<a name="line.89"></a>
-<span class="sourceLineNo">090</span>      this.setAttribute(entry.getKey(), entry.getValue());<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    }<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>   * Add the specified KeyValue to this operation.<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   * @param cell individual Cell<a name="line.96"></a>
-<span class="sourceLineNo">097</span>   * @return this<a name="line.97"></a>
-<span class="sourceLineNo">098</span>   * @throws java.io.IOException e<a name="line.98"></a>
-<span class="sourceLineNo">099</span>   */<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  public Increment add(Cell cell) throws IOException{<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    byte [] family = CellUtil.cloneFamily(cell);<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    List&lt;Cell&gt; list = getCellList(family);<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    //Checking that the row of the kv is the same as the put<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    int res = Bytes.compareTo(this.row, 0, row.length,<a name="line.104"></a>
-<span class="sourceLineNo">105</span>        cell.getRowArray(), cell.getRowOffset(), cell.getRowLength());<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    if (res != 0) {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>      throw new WrongRowIOException("The row in " + cell +<a name="line.107"></a>
-<span class="sourceLineNo">108</span>        " doesn't match the original one " +  Bytes.toStringBinary(this.row));<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    }<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    list.add(cell);<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    familyMap.put(family, list);<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    return this;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  }<a name="line.113"></a>
-<span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span>  /**<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   * Increment the column from the specific family with the specified qualifier<a name="line.116"></a>
-<span class="sourceLineNo">117</span>   * by the specified amount.<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   * &lt;p&gt;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   * Overrides previous calls to addColumn for this family and qualifier.<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   * @param family family name<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   * @param qualifier column qualifier<a name="line.121"></a>
-<span class="sourceLineNo">122</span>   * @param amount amount to increment by<a name="line.122"></a>
-<span class="sourceLineNo">123</span>   * @return the Increment object<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   */<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  public Increment addColumn(byte [] family, byte [] qualifier, long amount) {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    if (family == null) {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      throw new IllegalArgumentException("family cannot be null");<a name="line.127"></a>
+<span class="sourceLineNo">055</span>  private TimeRange tr = new TimeRange();<a name="line.55"></a>
+<span class="sourceLineNo">056</span><a name="line.56"></a>
+<span class="sourceLineNo">057</span>  /**<a name="line.57"></a>
+<span class="sourceLineNo">058</span>   * Create a Increment operation for the specified row.<a name="line.58"></a>
+<span class="sourceLineNo">059</span>   * &lt;p&gt;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>   * At least one column must be incremented.<a name="line.60"></a>
+<span class="sourceLineNo">061</span>   * @param row row key (we will make a copy of this).<a name="line.61"></a>
+<span class="sourceLineNo">062</span>   */<a name="line.62"></a>
+<span class="sourceLineNo">063</span>  public Increment(byte [] row) {<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    this(row, 0, row.length);<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  }<a name="line.65"></a>
+<span class="sourceLineNo">066</span><a name="line.66"></a>
+<span class="sourceLineNo">067</span>  /**<a name="line.67"></a>
+<span class="sourceLineNo">068</span>   * Create a Increment operation for the specified row.<a name="line.68"></a>
+<span class="sourceLineNo">069</span>   * &lt;p&gt;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>   * At least one column must be incremented.<a name="line.70"></a>
+<span class="sourceLineNo">071</span>   * @param row row key (we will make a copy of this).<a name="line.71"></a>
+<span class="sourceLineNo">072</span>   */<a name="line.72"></a>
+<span class="sourceLineNo">073</span>  public Increment(final byte [] row, final int offset, final int length) {<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    checkRow(row, offset, length);<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    this.row = Bytes.copy(row, offset, length);<a name="line.75"></a>
+<span class="sourceLineNo">076</span>  }<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  /**<a name="line.77"></a>
+<span class="sourceLineNo">078</span>   * Copy constructor<a name="line.78"></a>
+<span class="sourceLineNo">079</span>   * @param i<a name="line.79"></a>
+<span class="sourceLineNo">080</span>   */<a name="line.80"></a>
+<span class="sourceLineNo">081</span>  public Increment(Increment i) {<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    this.row = i.getRow();<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    this.ts = i.getTimeStamp();<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    this.tr = i.getTimeRange();<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    this.familyMap.putAll(i.getFamilyCellMap());<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    for (Map.Entry&lt;String, byte[]&gt; entry : i.getAttributesMap().entrySet()) {<a name="line.86"></a>
+<span class="sourceLineNo">087</span>      this.setAttribute(entry.getKey(), entry.getValue());<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    }<a name="line.88"></a>
+<span class="sourceLineNo">089</span>  }<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>   * Add the specified KeyValue to this operation.<a name="line.92"></a>
+<span class="sourceLineNo">093</span>   * @param cell individual Cell<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   * @return this<a name="line.94"></a>
+<span class="sourceLineNo">095</span>   * @throws java.io.IOException e<a name="line.95"></a>
+<span class="sourceLineNo">096</span>   */<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  public Increment add(Cell cell) throws IOException{<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    byte [] family = CellUtil.cloneFamily(cell);<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    List&lt;Cell&gt; list = getCellList(family);<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    //Checking that the row of the kv is the same as the put<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    int res = Bytes.compareTo(this.row, 0, row.length,<a name="line.101"></a>
+<span class="sourceLineNo">102</span>        cell.getRowArray(), cell.getRowOffset(), cell.getRowLength());<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    if (res != 0) {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      throw new WrongRowIOException("The row in " + cell +<a name="line.104"></a>
+<span class="sourceLineNo">105</span>        " doesn't match the original one " +  Bytes.toStringBinary(this.row));<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    }<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    list.add(cell);<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    familyMap.put(family, list);<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    return this;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>  }<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span>  /**<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   * Increment the column from the specific family with the specified qualifier<a name="line.113"></a>
+<span class="sourceLineNo">114</span>   * by the specified amount.<a name="line.114"></a>
+<span class="sourceLineNo">115</span>   * &lt;p&gt;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>   * Overrides previous calls to addColumn for this family and qualifier.<a name="line.116"></a>
+<span class="sourceLineNo">117</span>   * @param family family name<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   * @param qualifier column qualifier<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   * @param amount amount to increment by<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   * @return the Increment object<a name="line.120"></a>
+<span class="sourceLineNo">121</span>   */<a name="line.121"></a>
+<span class="sourceLineNo">122</span>  public Increment addColumn(byte [] family, byte [] qualifier, long amount) {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    if (family == null) {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      throw new IllegalArgumentException("family cannot be null");<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    }<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    if (qualifier == null) {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      throw new IllegalArgumentException("qualifier cannot be null");<a name="line.127"></a>
 <span class="sourceLineNo">128</span>    }<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    if (qualifier == null) {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>      throw new IllegalArgumentException("qualifier cannot be null");<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    }<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    List&lt;Cell&gt; list = getCellList(family);<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    KeyValue kv = createPutKeyValue(family, qualifier, ts, Bytes.toBytes(amount));<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    list.add(kv);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    familyMap.put(CellUtil.cloneFamily(kv), list);<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    return this;<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>   * Gets the TimeRange used for this increment.<a name="line.140"></a>
-<span class="sourceLineNo">141</span>   * @return TimeRange<a name="line.141"></a>
-<span class="sourceLineNo">142</span>   */<a name="line.142"></a>
-<span class="sourceLineNo">143</span>  public TimeRange getTimeRange() {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    return this.tr;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  }<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>   * Sets the TimeRange to be used on the Get for this increment.<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   * &lt;p&gt;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>   * This is useful for when you have counters that only last for specific<a name="line.150"></a>
-<span class="sourceLineNo">151</span>   * periods of time (ie. counters that are partitioned by time).  By setting<a name="line.151"></a>
-<span class="sourceLineNo">152</span>   * the range of valid times for this increment, you can potentially gain<a name="line.152"></a>
-<span class="sourceLineNo">153</span>   * some performance with a more optimal Get operation.<a name="line.153"></a>
-<span class="sourceLineNo">154</span>   * &lt;p&gt;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>   * This range is used as [minStamp, maxStamp).<a name="line.155"></a>
-<span class="sourceLineNo">156</span>   * @param minStamp minimum timestamp value, inclusive<a name="line.156"></a>
-<span class="sourceLineNo">157</span>   * @param maxStamp maximum timestamp value, exclusive<a name="line.157"></a>
-<span class="sourceLineNo">158</span>   * @throws IOException if invalid time range<a name="line.158"></a>
-<span class="sourceLineNo">159</span>   * @return this<a name="line.159"></a>
-<span class="sourceLineNo">160</span>   */<a name="line.160"></a>
-<span class="sourceLineNo">161</span>  public Increment setTimeRange(long minStamp, long maxStamp)<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  throws IOException {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    tr = new TimeRange(minStamp, maxStamp);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    return this;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>  }<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  <a name="line.166"></a>
-<span class="sourceLineNo">167</span>  /**<a name="line.167"></a>
-<span class="sourceLineNo">168</span>   * @param returnResults True (default) if the increment operation should return the results. A<a name="line.168"></a>
-<span class="sourceLineNo">169</span>   *          client that is not interested in the result can save network bandwidth setting this<a name="line.169"></a>
-<span class="sourceLineNo">170</span>   *          to false.<a name="line.170"></a>
-<span class="sourceLineNo">171</span>   */<a name="line.171"></a>
-<span class="sourceLineNo">172</span>  public Increment setReturnResults(boolean returnResults) {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    setAttribute(RETURN_RESULTS, Bytes.toBytes(returnResults));<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    return this;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>  }<a name="line.175"></a>
-<span class="sourceLineNo">176</span><a name="line.176"></a>
-<span class="sourceLineNo">177</span>  /**<a name="line.177"></a>
-<span class="sourceLineNo">178</span>   * @return current value for returnResults<a name="line.178"></a>
-<span class="sourceLineNo">179</span>   */<a name="line.179"></a>
-<span class="sourceLineNo">180</span>  public boolean isReturnResults() {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    byte[] v = getAttribute(RETURN_RESULTS);<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    return v == null ? true : Bytes.toBoolean(v);<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>   * Method for retrieving the number of families to increment from<a name="line.186"></a>
-<span class="sourceLineNo">187</span>   * @return number of families<a name="line.187"></a>
-<span class="sourceLineNo">188</span>   */<a name="line.188"></a>
-<span class="sourceLineNo">189</span>  @Override<a name="line.189"></a>
-<span class="sourceLineNo">190</span>  public int numFamilies() {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    return this.familyMap.size();<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>  /**<a name="line.194"></a>
-<span class="sourceLineNo">195</span>   * Method for checking if any families have been inserted into this Increment<a name="line.195"></a>
-<span class="sourceLineNo">196</span>   * @return true if familyMap is non empty false otherwise<a name="line.196"></a>
-<span class="sourceLineNo">197</span>   */<a name="line.197"></a>
-<span class="sourceLineNo">198</span>  public boolean hasFamilies() {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    return !this.familyMap.isEmpty();<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>   * Before 0.95, when you called Increment#getFamilyMap(), you got back<a name="line.203"></a>
-<span class="sourceLineNo">204</span>   * a map of families to a list of Longs.  Now, {@link #getFamilyCellMap()} returns<a name="line.204"></a>
-<span class="sourceLineNo">205</span>   * families by list of Cells.  This method has been added so you can have the<a name="line.205"></a>
-<span class="sourceLineNo">206</span>   * old behavior.<a name="line.206"></a>
-<span class="sourceLineNo">207</span>   * @return Map of families to a Map of qualifiers and their Long increments.<a name="line.207"></a>
-<span class="sourceLineNo">208</span>   * @since 0.95.0<a name="line.208"></a>
-<span class="sourceLineNo">209</span>   */<a name="line.209"></a>
-<span class="sourceLineNo">210</span>  public Map&lt;byte[], NavigableMap&lt;byte [], Long&gt;&gt; getFamilyMapOfLongs() {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    NavigableMap&lt;byte[], List&lt;Cell&gt;&gt; map = super.getFamilyCellMap();<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    Map&lt;byte [], NavigableMap&lt;byte[], Long&gt;&gt; results =<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      new TreeMap&lt;byte[], NavigableMap&lt;byte [], Long&gt;&gt;(Bytes.BYTES_COMPARATOR);<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    for (Map.Entry&lt;byte [], List&lt;Cell&gt;&gt; entry: map.entrySet()) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      NavigableMap&lt;byte [], Long&gt; longs = new TreeMap&lt;byte [], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      for (Cell cell: entry.getValue()) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>        longs.put(CellUtil.cloneQualifier(cell),<a name="line.217"></a>
-<span class="sourceLineNo">218</span>            Bytes.toLong(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength()));<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      results.put(entry.getKey(), longs);<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    }<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    return results;<a name="line.222"></a>
-<span class="sourceLineNo">223</span>  }<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span>  /**<a name="line.225"></a>
-<span class="sourceLineNo">226</span>   * @return String<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   */<a name="line.227"></a>
-<span class="sourceLineNo">228</span>  @Override<a name="line.228"></a>
-<span class="sourceLineNo">229</span>  public String toString() {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    StringBuilder sb = new StringBuilder();<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    sb.append("row=");<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    sb.append(Bytes.toStringBinary(this.row));<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    if(this.familyMap.size() == 0) {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      sb.append(", no columns set to be incremented");<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      return sb.toString();<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    }<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    sb.append(", families=");<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    boolean moreThanOne = false;<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    for(Map.Entry&lt;byte [], List&lt;Cell&gt;&gt; entry: this.familyMap.entrySet()) {<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      if(moreThanOne) {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>        sb.append("), ");<a name="line.241"></a>
-<span class="sourceLineNo">242</span>      } else {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>        moreThanOne = true;<a name="line.243"></a>
-<span class="sourceLineNo">244</span>        sb.append("{");<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      }<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      sb.append("(family=");<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      sb.append(Bytes.toString(entry.getKey()));<a name="line.247"></a>
-<span class="sourceLineNo">248</span>      sb.append(", columns=");<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      if(entry.getValue() == null) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        sb.append("NONE");<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      } else {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>        sb.append("{");<a name="line.252"></a>
-<span class="sourceLineNo">253</span>        boolean moreThanOneB = false;<a name="line.253"></a>
-<span class="sourceLineNo">254</span>        for(Cell cell : entry.getValue()) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>          if(moreThanOneB) {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>            sb.append(", ");<a name="line.256"></a>
-<span class="sourceLineNo">257</span>          } else {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>            moreThanOneB = true;<a name="line.258"></a>
-<span class="sourceLineNo">259</span>          }<a name="line.259"></a>
-<span class="sourceLineNo">260</span>          sb.append(CellUtil.getCellKeyAsString(cell) + "+=" +<a name="line.260"></a>
-<span class="sourceLineNo">261</span>              Bytes.toLong(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength()));<a name="line.261"></a>
-<span class="sourceLineNo">262</span>        }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>        sb.append("}");<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      }<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    }<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    sb.append("}");<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    return sb.toString();<a name="line.267"></a>
-<span class="sourceLineNo">268</span>  }<a name="line.268"></a>
-<span class="sourceLineNo">269</span><a name="line.269"></a>
-<span class="sourceLineNo">270</span>  @Override<a name="line.270"></a>
-<span class="sourceLineNo">271</span>  public int compareTo(Row i) {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    // TODO: This is wrong.  Can't have two the same just because on same row.<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    return Bytes.compareTo(this.getRow(), i.getRow());<a name="line.273"></a>
-<span class="sourceLineNo">274</span>  }<a name="line.274"></a>
-<span class="sourceLineNo">275</span><a name="line.275"></a>
-<span class="sourceLineNo">276</span>  @Override<a name="line.276"></a>
-<span class="sourceLineNo">277</span>  public int hashCode() {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    // TODO: This is wrong.  Can't have two gets the same just because on same row.  But it<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    // matches how equals works currently and gets rid of the findbugs warning.<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    return Bytes.hashCode(this.getRow());<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>  @Override<a name="line.283"></a>
-<span class="sourceLineNo">284</span>  public boolean equals(Object obj) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    // TODO: This is wrong.  Can't have two the same just because on same row.<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    if (this == obj) {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      return true;<a name="line.287"></a>
+<span class="sourceLineNo">129</span>    List&lt;Cell&gt; list = getCellList(family);<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    KeyValue kv = createPutKeyValue(family, qualifier, ts, Bytes.toBytes(amount));<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    list.add(kv);<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    familyMap.put(CellUtil.cloneFamily(kv), list);<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    return this;<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>   * Gets the TimeRange used for this increment.<a name="line.137"></a>
+<span class="sourceLineNo">138</span>   * @return TimeRange<a name="line.138"></a>
+<span class="sourceLineNo">139</span>   */<a name="line.139"></a>
+<span class="sourceLineNo">140</span>  public TimeRange getTimeRange() {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    return this.tr;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  }<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span>  /**<a name="line.144"></a>
+<span class="sourceLineNo">145</span>   * Sets the TimeRange to be used on the Get for this increment.<a name="line.145"></a>
+<span class="sourceLineNo">146</span>   * &lt;p&gt;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>   * This is useful for when you have counters that only last for specific<a name="line.147"></a>
+<span class="sourceLineNo">148</span>   * periods of time (ie. counters that are partitioned by time).  By setting<a name="line.148"></a>
+<span class="sourceLineNo">149</span>   * the range of valid times for this increment, you can potentially gain<a name="line.149"></a>
+<span class="sourceLineNo">150</span>   * some performance with a more optimal Get operation.<a name="line.150"></a>
+<span class="sourceLineNo">151</span>   * &lt;p&gt;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>   * This range is used as [minStamp, maxStamp).<a name="line.152"></a>
+<span class="sourceLineNo">153</span>   * @param minStamp minimum timestamp value, inclusive<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   * @param maxStamp maximum timestamp value, exclusive<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   * @throws IOException if invalid time range<a name="line.155"></a>
+<span class="sourceLineNo">156</span>   * @return this<a name="line.156"></a>
+<span class="sourceLineNo">157</span>   */<a name="line.157"></a>
+<span class="sourceLineNo">158</span>  public Increment setTimeRange(long minStamp, long maxStamp)<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  throws IOException {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    tr = new TimeRange(minStamp, maxStamp);<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    return this;<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>  /**<a name="line.164"></a>
+<span class="sourceLineNo">165</span>   * @param returnResults True (default) if the increment operation should return the results. A<a name="line.165"></a>
+<span class="sourceLineNo">166</span>   *          client that is not interested in the result can save network bandwidth setting this<a name="line.166"></a>
+<span class="sourceLineNo">167</span>   *          to false.<a name="line.167"></a>
+<span class="sourceLineNo">168</span>   */<a name="line.168"></a>
+<span class="sourceLineNo">169</span>  public Increment setReturnResults(boolean returnResults) {<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    super.setReturnResults(returnResults);<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    return this;<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>  /**<a name="line.174"></a>
+<span class="sourceLineNo">175</span>   * @return current setting for returnResults<a name="line.175"></a>
+<span class="sourceLineNo">176</span>   */<a name="line.176"></a>
+<span class="sourceLineNo">177</span>  // This method makes public the superclasses's protected method.<a name="line.177"></a>
+<span class="sourceLineNo">178</span>  public boolean isReturnResults() {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    return super.isReturnResults();<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>  /**<a name="line.182"></a>
+<span class="sourceLineNo">183</span>   * Method for retrieving the number of families to increment from<a name="line.183"></a>
+<span class="sourceLineNo">184</span>   * @return number of families<a name="line.184"></a>
+<span class="sourceLineNo">185</span>   */<a name="line.185"></a>
+<span class="sourceLineNo">186</span>  @Override<a name="line.186"></a>
+<span class="sourceLineNo">187</span>  public int numFamilies() {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    return this.familyMap.size();<a name="line.188"></a>
+<span class="sourceLineNo">189</span>  }<a name="line.189"></a>
+<span class="sourceLineNo">190</span><a name="line.190"></a>
+<span class="sourceLineNo">191</span>  /**<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   * Method for checking if any families have been inserted into this Increment<a name="line.192"></a>
+<span class="sourceLineNo">193</span>   * @return true if familyMap is non empty false otherwise<a name="line.193"></a>
+<span class="sourceLineNo">194</span>   */<a name="line.194"></a>
+<span class="sourceLineNo">195</span>  public boolean hasFamilies() {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    return !this.familyMap.isEmpty();<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>  /**<a name="line.199"></a>
+<span class="sourceLineNo">200</span>   * Before 0.95, when you called Increment#getFamilyMap(), you got back<a name="line.200"></a>
+<span class="sourceLineNo">201</span>   * a map of families to a list of Longs.  Now, {@link #getFamilyCellMap()} returns<a name="line.201"></a>
+<span class="sourceLineNo">202</span>   * families by list of Cells.  This method has been added so you can have the<a name="line.202"></a>
+<span class="sourceLineNo">203</span>   * old behavior.<a name="line.203"></a>
+<span class="sourceLineNo">204</span>   * @return Map of families to a Map of qualifiers and their Long increments.<a name="line.204"></a>
+<span class="sourceLineNo">205</span>   * @since 0.95.0<a name="line.205"></a>
+<span class="sourceLineNo">206</span>   */<a name="line.206"></a>
+<span class="sourceLineNo">207</span>  public Map&lt;byte[], NavigableMap&lt;byte [], Long&gt;&gt; getFamilyMapOfLongs() {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    NavigableMap&lt;byte[], List&lt;Cell&gt;&gt; map = super.getFamilyCellMap();<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    Map&lt;byte [], NavigableMap&lt;byte[], Long&gt;&gt; results =<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      new TreeMap&lt;byte[], NavigableMap&lt;byte [], Long&gt;&gt;(Bytes.BYTES_COMPARATOR);<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    for (Map.Entry&lt;byte [], List&lt;Cell&gt;&gt; entry: map.entrySet()) {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      NavigableMap&lt;byte [], Long&gt; longs = new TreeMap&lt;byte [], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      for (Cell cell: entry.getValue()) {<a name="line.213"></a>
+<span class="sourceLineNo">214</span>        longs.put(CellUtil.cloneQualifier(cell),<a name="line.214"></a>
+<span class="sourceLineNo">215</span>            Bytes.toLong(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength()));<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      }<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      results.put(entry.getKey(), longs);<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    }<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    return results;<a name="line.219"></a>
+<span class="sourceLineNo">220</span>  }<a name="line.220"></a>
+<span class="sourceLineNo">221</span><a name="line.221"></a>
+<span class="sourceLineNo">222</span>  /**<a name="line.222"></a>
+<span class="sourceLineNo">223</span>   * @return String<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   */<a name="line.224"></a>
+<span class="sourceLineNo">225</span>  @Override<a name="line.225"></a>
+<span class="sourceLineNo">226</span>  public String toString() {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    StringBuilder sb = new StringBuilder();<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    sb.append("row=");<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    sb.append(Bytes.toStringBinary(this.row));<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    if(this.familyMap.size() == 0) {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      sb.append(", no columns set to be incremented");<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      return sb.toString();<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    }<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    sb.append(", families=");<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    boolean moreThanOne = false;<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    for(Map.Entry&lt;byte [], List&lt;Cell&gt;&gt; entry: this.familyMap.entrySet()) {<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      if(moreThanOne) {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>        sb.append("), ");<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      } else {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>        moreThanOne = true;<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        sb.append("{");<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      }<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      sb.append("(family=");<a name="line.243"></a>
+<span class="sourceLineNo">244</span>      sb.append(Bytes.toString(entry.getKey()));<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      sb.append(", columns=");<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      if(entry.getValue() == null) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>        sb.append("NONE");<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      } else {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>        sb.append("{");<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        boolean moreThanOneB = false;<a name="line.250"></a>
+<span class="sourceLineNo">251</span>        for(Cell cell : entry.getValue()) {<a name="line.251"></a>
+<span class="sourceLineNo">252</span>          if(moreThanOneB) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>            sb.append(", ");<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          } else {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>            moreThanOneB = true;<a name="line.255"></a>
+<span class="sourceLineNo">256</span>          }<a name="line.256"></a>
+<span class="sourceLineNo">257</span>          sb.append(CellUtil.getCellKeyAsString(cell) + "+=" +<a name="line.257"></a>
+<span class="sourceLineNo">258</span>              Bytes.toLong(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength()));<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        }<a name="line.259"></a>
+<span class="sourceLineNo">260</span>        sb.append("}");<a name="line.260"></a>
+<span class="sourceLineNo">261</span>      }<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    }<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    sb.append("}");<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    return sb.toString();<a name="line.264"></a>
+<span class="sourceLineNo">265</span>  }<a name="line.265"></a>
+<span class="sourceLineNo">266</span><a name="line.266"></a>
+<span class="sourceLineNo">267</span>  @Override<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  public int compareTo(Row i) {<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    // TODO: This is wrong.  Can't have two the same just because on same row.<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    return Bytes.compareTo(this.getRow(), i.getRow());<a name="line.270"></a>
+<span class="sourceLineNo">271</span>  }<a name="line.271"></a>
+<span class="sourceLineNo">272</span><a name="line.272"></a>
+<span class="sourceLineNo">273</span>  @Override<a name="line.273"></a>
+<span class="sourceLineNo">274</span>  public int hashCode() {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    // TODO: This is wrong.  Can't have two gets the same just because on same row.  But it<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    // matches how equals works currently and gets rid of the findbugs warning.<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    return Bytes.hashCode(this.getRow());<a name="line.277"></a>
+<span class="sourceLineNo">278</span>  }<a name="line.278"></a>
+<span class="sourceLineNo">279</span><a name="line.279"></a>
+<span class="sourceLineNo">280</span>  @Override<a name="line.280"></a>
+<span class="sourceLineNo">281</span>  public boolean equals(Object obj) {<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    // TODO: This is wrong.  Can't have two the same just because on same row.<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    if (this == obj) {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      return true;<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    }<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    if (obj == null || getClass() != obj.getClass()) {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      return false;<a name="line.287"></a>
 <span class="sourceLineNo">288</span>    }<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    if (obj == null || getClass() != obj.getClass()) {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      return false;<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    }<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    Row other = (Row) obj;<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    return compareTo(other) == 0;<a name="line.293"></a>
-<span class="sourceLineNo">294</span>  }<a name="line.294"></a>
-<span class="sourceLineNo">295</span><a name="line.295"></a>
-<span class="sourceLineNo">296</span>  @Override<a name="line.296"></a>
-<span class="sourceLineNo">297</span>  protected long extraHeapSize(){<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    return HEAP_OVERHEAD;<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>  @Override<a name="line.301"></a>
-<span class="sourceLineNo">302</span>  public Increment setAttribute(String name, byte[] value) {<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    return (Increment) super.setAttribute(name, value);<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>  @Override<a name="line.306"></a>
-<span class="sourceLineNo">307</span>  public Increment setId(String id) {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    return (Increment) super.setId(id);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>  }<a name="line.309"></a>
-<span class="sourceLineNo">310</span><a name="line.310"></a>
-<span class="sourceLineNo">311</span>  @Override<a name="line.311"></a>
-<span class="sourceLineNo">312</span>  public Increment setDurability(Durability d) {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    return (Increment) super.setDurability(d);<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>  @Override<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  public Increment setFamilyCellMap(NavigableMap&lt;byte[], List&lt;Cell&gt;&gt; map) {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    return (Increment) super.setFamilyCellMap(map);<a name="line.318"></a>
-<span class="sourceLineNo">319</span>  }<a name="line.319"></a>
-<span class="sourceLineNo">320</span><a name="line.320"></a>
-<span class="sourceLineNo">321</span>  @Override<a name="line.321"></a>
-<span class="sourceLineNo">322</span>  public Increment setClusterIds(List&lt;UUID&gt; clusterIds) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    return (Increment) super.setClusterIds(clusterIds);<a name="line.323"></a>
-<span class="sourceLineNo">324</span>  }<a name="line.324"></a>
-<span class="sourceLineNo">325</span><a name="line.325"></a>
-<span class="sourceLineNo">326</span>  @Override<a name="line.326"></a>
-<span class="sourceLineNo">327</span>  public Increment setCellVisibility(CellVisibility expression) {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    return (Increment) super.setCellVisibility(expression);<a name="line.328"></a>
-<span class="sourceLineNo">329</span>  }<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span>  @Override<a name="line.331"></a>
-<span class="sourceLineNo">332</span>  public Increment setACL(String user, Permission perms) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    return (Increment) super.setACL(user, perms);<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>  @Override<a name="line.336"></a>
-<span class="sourceLineNo">337</span>  public Increment setACL(Map&lt;String, Permission&gt; perms) {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    return (Increment) super.setACL(perms);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>  }<a name="line.339"></a>
-<span class="sourceLineNo">340</span><a name="line.340"></a>
-<span class="sourceLineNo">341</span>  @Override<a name="line.341"></a>
-<span class="sourceLineNo">342</span>  public Increment setTTL(long ttl) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>    return (Increment) super.setTTL(ttl);<a name="line.343"></a>
-<span class="sourceLineNo">344</span>  }<a name="line.344"></a>
-<span class="sourceLineNo">345</span>}<a name="line.345"></a>
+<span class="sourceLineNo">289</span>    Row other = (Row) obj;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    return compareTo(other) == 0;<a name="line.290"></a>
+<span class="sourceLineNo">291</span>  }<a name="line.291"></a>
+<span class="sourceLineNo">292</span><a name="line.292"></a>
+<span class="sourceLineNo">293</span>  @Override<a name="line.293"></a>
+<span class="sourceLineNo">294</span>  protected long extraHeapSize(){<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    return HEAP_OVERHEAD;<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>  @Override<a name="line.298"></a>
+<span class="sourceLineNo">299</span>  public Increment setAttribute(String name, byte[] value) {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    return (Increment) super.setAttribute(name, value);<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>  @Override<a name="line.303"></a>
+<span class="sourceLineNo">304</span>  public Increment setId(String id) {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    return (Increment) super.setId(id);<a name="line.305"></a>
+<span class="sourceLineNo">306</span>  }<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>  @Override<a name="line.308"></a>
+<span class="sourceLineNo">309</span>  public Increment setDurability(Durability d) {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    return (Increment) super.setDurability(d);<a name="line.310"></a>
+<span class="sourceLineNo">311</span>  }<a name="line.311"></a>
+<span class="sourceLineNo">312</span><a name="line.312"></a>
+<span class="sourceLineNo">313</span>  @Override<a name="line.313"></a>
+<span class="sourceLineNo">314</span>  public Increment setFamilyCellMap(NavigableMap&lt;byte[], List&lt;Cell&gt;&gt; map) {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    return (Increment) super.setFamilyCellMap(map);<a name="line.315"></a>
+<span class="sourceLineNo">316</span>  }<a name="line.316"></a>
+<span class="sourceLineNo">317</span><a name="line.317"></a>
+<span class="sourceLineNo">318</span>  @Override<a name="line.318"></a>
+<span class="sourceLineNo">319</span>  public Increment setClusterIds(List&lt;UUID&gt; clusterIds) {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    return (Increment) super.setClusterIds(clusterIds);<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>  @Override<a name="line.323"></a>
+<span class="sourceLineNo">324</span>  public Increment setCellVisibility(CellVisibility expression) {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    return (Increment) super.setCellVisibility(expression);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>  }<a name="line.326"></a>
+<span class="sourceLineNo">327</span><a name="line.327"></a>
+<span class="sourceLineNo">328</span>  @Override<a name="line.328"></a>
+<span class="sourceLineNo">329</span>  public Increment setACL(String user, Permission perms) {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    return (Increment) super.setACL(user, perms);<a name="line.330"></a>
+<span class="sourceLineNo">331</span>  }<a name="line.331"></a>
+<span class="sourceLineNo">332</span><a name="line.332"></a>
+<span class="sourceLineNo">333</span>  @Override<a name="line.333"></a>
+<span class="sourceLineNo">334</span>  public Increment setACL(Map&lt;String, Permission&gt; perms) {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    return (Increment) super.setACL(perms);<a name="line.335"></a>
+<span class="sourceLineNo">336</span>  }<a name="line.336"></a>
+<span class="sourceLineNo">337</span><a name="line.337"></a>
+<span class="sourceLineNo">338</span>  @Override<a name="line.338"></a>
+<span class="sourceLineNo">339</span>  public Increment setTTL(long ttl) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    return (Increment) super.setTTL(ttl);<a name="line.340"></a>
+<span class="sourceLineNo">341</span>  }<a name="line.341"></a>
+<span class="sourceLineNo">342</span>}<a name="line.342"></a>
 
 
 


[48/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/apidocs/src-html/org/apache/hadoop/hbase/client/Mutation.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/client/Mutation.html b/apidocs/src-html/org/apache/hadoop/hbase/client/Mutation.html
index 0030a24..d2a7403 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/client/Mutation.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/client/Mutation.html
@@ -90,429 +90,448 @@
 <span class="sourceLineNo">082</span>   */<a name="line.82"></a>
 <span class="sourceLineNo">083</span>  private static final String OP_ATTRIBUTE_TTL = "_ttl";<a name="line.83"></a>
 <span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>  protected byte [] row = null;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>  protected long ts = HConstants.LATEST_TIMESTAMP;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  protected Durability durability = Durability.USE_DEFAULT;<a name="line.87"></a>
-<span class="sourceLineNo">088</span><a name="line.88"></a>
-<span class="sourceLineNo">089</span>  // A Map sorted by column family.<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  protected NavigableMap&lt;byte [], List&lt;Cell&gt;&gt; familyMap =<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    new TreeMap&lt;byte [], List&lt;Cell&gt;&gt;(Bytes.BYTES_COMPARATOR);<a name="line.91"></a>
-<span class="sourceLineNo">092</span><a name="line.92"></a>
-<span class="sourceLineNo">093</span>  @Override<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  public CellScanner cellScanner() {<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    return CellUtil.createCellScanner(getFamilyCellMap());<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>   * Creates an empty list if one doesn't exist for the given column family<a name="line.99"></a>
-<span class="sourceLineNo">100</span>   * or else it returns the associated list of Cell objects.<a name="line.100"></a>
-<span class="sourceLineNo">101</span>   *<a name="line.101"></a>
-<span class="sourceLineNo">102</span>   * @param family column family<a name="line.102"></a>
-<span class="sourceLineNo">103</span>   * @return a list of Cell objects, returns an empty list if one doesn't exist.<a name="line.103"></a>
-<span class="sourceLineNo">104</span>   */<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  List&lt;Cell&gt; getCellList(byte[] family) {<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    List&lt;Cell&gt; list = this.familyMap.get(family);<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    if (list == null) {<a name="line.107"></a>
-<span class="sourceLineNo">108</span>      list = new ArrayList&lt;Cell&gt;();<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    }<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    return list;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  }<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>  /*<a name="line.113"></a>
-<span class="sourceLineNo">114</span>   * Create a KeyValue with this objects row key and the Put identifier.<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   *<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   * @return a KeyValue with this objects row key and the Put identifier.<a name="line.116"></a>
-<span class="sourceLineNo">117</span>   */<a name="line.117"></a>
-<span class="sourceLineNo">118</span>  KeyValue createPutKeyValue(byte[] family, byte[] qualifier, long ts, byte[] value) {<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    return new KeyValue(this.row, family, qualifier, ts, KeyValue.Type.Put, value);<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>  /**<a name="line.122"></a>
-<span class="sourceLineNo">123</span>   * Create a KeyValue with this objects row key and the Put identifier.<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   * @param family<a name="line.124"></a>
-<span class="sourceLineNo">125</span>   * @param qualifier<a name="line.125"></a>
-<span class="sourceLineNo">126</span>   * @param ts<a name="line.126"></a>
-<span class="sourceLineNo">127</span>   * @param value<a name="line.127"></a>
-<span class="sourceLineNo">128</span>   * @param tags - Specify the Tags as an Array<a name="line.128"></a>
-<span class="sourceLineNo">129</span>   * @return a KeyValue with this objects row key and the Put identifier.<a name="line.129"></a>
-<span class="sourceLineNo">130</span>   */<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  KeyValue createPutKeyValue(byte[] family, byte[] qualifier, long ts, byte[] value, Tag[] tags) {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    KeyValue kvWithTag = new KeyValue(this.row, family, qualifier, ts, value, tags);<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    return kvWithTag;<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>   * Create a KeyValue with this objects row key and the Put identifier.<a name="line.137"></a>
-<span class="sourceLineNo">138</span>   *<a name="line.138"></a>
-<span class="sourceLineNo">139</span>   * @return a KeyValue with this objects row key and the Put identifier.<a name="line.139"></a>
-<span class="sourceLineNo">140</span>   */<a name="line.140"></a>
-<span class="sourceLineNo">141</span>  KeyValue createPutKeyValue(byte[] family, ByteBuffer qualifier, long ts, ByteBuffer value,<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      Tag[] tags) {<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    return new KeyValue(this.row, 0, this.row == null ? 0 : this.row.length,<a name="line.143"></a>
-<span class="sourceLineNo">144</span>        family, 0, family == null ? 0 : family.length,<a name="line.144"></a>
-<span class="sourceLineNo">145</span>        qualifier, ts, KeyValue.Type.Put, value, tags != null ? Arrays.asList(tags) : 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>   * Compile the column family (i.e. schema) information<a name="line.149"></a>
-<span class="sourceLineNo">150</span>   * into a Map. Useful for parsing and aggregation by debugging,<a name="line.150"></a>
-<span class="sourceLineNo">151</span>   * logging, and administration tools.<a name="line.151"></a>
-<span class="sourceLineNo">152</span>   * @return Map<a name="line.152"></a>
-<span class="sourceLineNo">153</span>   */<a name="line.153"></a>
-<span class="sourceLineNo">154</span>  @Override<a name="line.154"></a>
-<span class="sourceLineNo">155</span>  public Map&lt;String, Object&gt; getFingerprint() {<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    Map&lt;String, Object&gt; map = new HashMap&lt;String, Object&gt;();<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    List&lt;String&gt; families = new ArrayList&lt;String&gt;();<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    // ideally, we would also include table information, but that information<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    // is not stored in each Operation instance.<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    map.put("families", families);<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    for (Map.Entry&lt;byte [], List&lt;Cell&gt;&gt; entry : this.familyMap.entrySet()) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      families.add(Bytes.toStringBinary(entry.getKey()));<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    }<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    return map;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>  }<a name="line.165"></a>
-<span class="sourceLineNo">166</span><a name="line.166"></a>
-<span class="sourceLineNo">167</span>  /**<a name="line.167"></a>
-<span class="sourceLineNo">168</span>   * Compile the details beyond the scope of getFingerprint (row, columns,<a name="line.168"></a>
-<span class="sourceLineNo">169</span>   * timestamps, etc.) into a Map along with the fingerprinted information.<a name="line.169"></a>
-<span class="sourceLineNo">170</span>   * Useful for debugging, logging, and administration tools.<a name="line.170"></a>
-<span class="sourceLineNo">171</span>   * @param maxCols a limit on the number of columns output prior to truncation<a name="line.171"></a>
-<span class="sourceLineNo">172</span>   * @return Map<a name="line.172"></a>
-<span class="sourceLineNo">173</span>   */<a name="line.173"></a>
-<span class="sourceLineNo">174</span>  @Override<a name="line.174"></a>
-<span class="sourceLineNo">175</span>  public Map&lt;String, Object&gt; toMap(int maxCols) {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    // we start with the fingerprint map and build on top of it.<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    Map&lt;String, Object&gt; map = getFingerprint();<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    // replace the fingerprint's simple list of families with a<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    // map from column families to lists of qualifiers and kv details<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    Map&lt;String, List&lt;Map&lt;String, Object&gt;&gt;&gt; columns =<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      new HashMap&lt;String, List&lt;Map&lt;String, Object&gt;&gt;&gt;();<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    map.put("families", columns);<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    map.put("row", Bytes.toStringBinary(this.row));<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    int colCount = 0;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    // iterate through all column families affected<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    for (Map.Entry&lt;byte [], List&lt;Cell&gt;&gt; entry : this.familyMap.entrySet()) {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      // map from this family to details for each cell affected within the family<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      List&lt;Map&lt;String, Object&gt;&gt; qualifierDetails = new ArrayList&lt;Map&lt;String, Object&gt;&gt;();<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      columns.put(Bytes.toStringBinary(entry.getKey()), qualifierDetails);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      colCount += entry.getValue().size();<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      if (maxCols &lt;= 0) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>        continue;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      }<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      // add details for each cell<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      for (Cell cell: entry.getValue()) {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>        if (--maxCols &lt;= 0) {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>          continue;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>        }<a name="line.198"></a>
-<span class="sourceLineNo">199</span>        Map&lt;String, Object&gt; cellMap = cellToStringMap(cell);<a name="line.199"></a>
-<span class="sourceLineNo">200</span>        qualifierDetails.add(cellMap);<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>    map.put("totalColumns", colCount);<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    // add the id if set<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    if (getId() != null) {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      map.put("id", getId());<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    }<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    // Add the TTL if set<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    // Long.MAX_VALUE is the default, and is interpreted to mean this attribute<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    // has not been set.<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    if (getTTL() != Long.MAX_VALUE) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      map.put("ttl", getTTL());<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    }<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    return map;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>  }<a name="line.215"></a>
-<span class="sourceLineNo">216</span><a name="line.216"></a>
-<span class="sourceLineNo">217</span>  private static Map&lt;String, Object&gt; cellToStringMap(Cell c) {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    Map&lt;String, Object&gt; stringMap = new HashMap&lt;String, Object&gt;();<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    stringMap.put("qualifier", Bytes.toStringBinary(c.getQualifierArray(), c.getQualifierOffset(),<a name="line.219"></a>
-<span class="sourceLineNo">220</span>                c.getQualifierLength()));<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    stringMap.put("timestamp", c.getTimestamp());<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    stringMap.put("vlen", c.getValueLength());<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    List&lt;Tag&gt; tags = CellUtil.getTags(c);<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    if (tags != null) {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      List&lt;String&gt; tagsString = new ArrayList&lt;String&gt;();<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      for (Tag t : tags) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>        tagsString.add((t.getType()) + ":" + Bytes.toStringBinary(TagUtil.cloneValue(t)));<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      }<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      stringMap.put("tag", tagsString);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    }<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    return stringMap;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>  }<a name="line.232"></a>
-<span class="sourceLineNo">233</span><a name="line.233"></a>
-<span class="sourceLineNo">234</span>  /**<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   * Set the durability for this mutation<a name="line.235"></a>
-<span class="sourceLineNo">236</span>   * @param d<a name="line.236"></a>
-<span class="sourceLineNo">237</span>   */<a name="line.237"></a>
-<span class="sourceLineNo">238</span>  public Mutation setDurability(Durability d) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    this.durability = d;<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    return this;<a name="line.240"></a>
-<span class="sourceLineNo">241</span>  }<a name="line.241"></a>
-<span class="sourceLineNo">242</span><a name="line.242"></a>
-<span class="sourceLineNo">243</span>  /** Get the current durability */<a name="line.243"></a>
-<span class="sourceLineNo">244</span>  public Durability getDurability() {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    return this.durability;<a name="line.245"></a>
-<span class="sourceLineNo">246</span>  }<a name="line.246"></a>
-<span class="sourceLineNo">247</span><a name="line.247"></a>
-<span class="sourceLineNo">248</span>  /**<a name="line.248"></a>
-<span class="sourceLineNo">249</span>   * Method for retrieving the put's familyMap<a name="line.249"></a>
-<span class="sourceLineNo">250</span>   * @return familyMap<a name="line.250"></a>
-<span class="sourceLineNo">251</span>   */<a name="line.251"></a>
-<span class="sourceLineNo">252</span>  public NavigableMap&lt;byte [], List&lt;Cell&gt;&gt; getFamilyCellMap() {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    return this.familyMap;<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>   * Method for setting the put's familyMap<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   */<a name="line.258"></a>
-<span class="sourceLineNo">259</span>  public Mutation setFamilyCellMap(NavigableMap&lt;byte [], List&lt;Cell&gt;&gt; map) {<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    // TODO: Shut this down or move it up to be a Constructor.  Get new object rather than change<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    // this internal data member.<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    this.familyMap = map;<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    return this;<a name="line.263"></a>
-<span class="sourceLineNo">264</span>  }<a name="line.264"></a>
-<span class="sourceLineNo">265</span><a name="line.265"></a>
-<span class="sourceLineNo">266</span>  /**<a name="line.266"></a>
-<span class="sourceLineNo">267</span>   * Method to check if the familyMap is empty<a name="line.267"></a>
-<span class="sourceLineNo">268</span>   * @return true if empty, false otherwise<a name="line.268"></a>
-<span class="sourceLineNo">269</span>   */<a name="line.269"></a>
-<span class="sourceLineNo">270</span>  public boolean isEmpty() {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    return familyMap.isEmpty();<a name="line.271"></a>
-<span class="sourceLineNo">272</span>  }<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span>  /**<a name="line.274"></a>
-<span class="sourceLineNo">275</span>   * Method for retrieving the delete's row<a name="line.275"></a>
-<span class="sourceLineNo">276</span>   * @return row<a name="line.276"></a>
-<span class="sourceLineNo">277</span>   */<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  @Override<a name="line.278"></a>
-<span class="sourceLineNo">279</span>  public byte [] getRow() {<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    return this.row;<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>  @Override<a name="line.283"></a>
-<span class="sourceLineNo">284</span>  public int compareTo(final Row d) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    return Bytes.compareTo(this.getRow(), d.getRow());<a name="line.285"></a>
-<span class="sourceLineNo">286</span>  }<a name="line.286"></a>
-<span class="sourceLineNo">287</span><a name="line.287"></a>
-<span class="sourceLineNo">288</span>  /**<a name="line.288"></a>
-<span class="sourceLineNo">289</span>   * Method for retrieving the timestamp<a name="line.289"></a>
-<span class="sourceLineNo">290</span>   * @return timestamp<a name="line.290"></a>
-<span class="sourceLineNo">291</span>   */<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  public long getTimeStamp() {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    return this.ts;<a name="line.293"></a>
-<span class="sourceLineNo">294</span>  }<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>   * Marks that the clusters with the given clusterIds have consumed the mutation<a name="line.297"></a>
-<span class="sourceLineNo">298</span>   * @param clusterIds of the clusters that have consumed the mutation<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   */<a name="line.299"></a>
-<span class="sourceLineNo">300</span>  public Mutation setClusterIds(List&lt;UUID&gt; clusterIds) {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    ByteArrayDataOutput out = ByteStreams.newDataOutput();<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    out.writeInt(clusterIds.size());<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    for (UUID clusterId : clusterIds) {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      out.writeLong(clusterId.getMostSignificantBits());<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      out.writeLong(clusterId.getLeastSignificantBits());<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    }<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    setAttribute(CONSUMED_CLUSTER_IDS, out.toByteArray());<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    return this;<a name="line.308"></a>
-<span class="sourceLineNo">309</span>  }<a name="line.309"></a>
-<span class="sourceLineNo">310</span><a name="line.310"></a>
-<span class="sourceLineNo">311</span>  /**<a name="line.311"></a>
-<span class="sourceLineNo">312</span>   * @return the set of clusterIds that have consumed the mutation<a name="line.312"></a>
-<span class="sourceLineNo">313</span>   */<a name="line.313"></a>
-<span class="sourceLineNo">314</span>  public List&lt;UUID&gt; getClusterIds() {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    List&lt;UUID&gt; clusterIds = new ArrayList&lt;UUID&gt;();<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    byte[] bytes = getAttribute(CONSUMED_CLUSTER_IDS);<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    if(bytes != null) {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      ByteArrayDataInput in = ByteStreams.newDataInput(bytes);<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      int numClusters = in.readInt();<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      for(int i=0; i&lt;numClusters; i++){<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        clusterIds.add(new UUID(in.readLong(), in.readLong()));<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>    return clusterIds;<a name="line.324"></a>
-<span class="sourceLineNo">325</span>  }<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span>  /**<a name="line.327"></a>
-<span class="sourceLineNo">328</span>   * Sets the visibility expression associated with cells in this Mutation.<a name="line.328"></a>
-<span class="sourceLineNo">329</span>   * It is illegal to set &lt;code&gt;CellVisibility&lt;/code&gt; on &lt;code&gt;Delete&lt;/code&gt; mutation.<a name="line.329"></a>
-<span class="sourceLineNo">330</span>   * @param expression<a name="line.330"></a>
-<span class="sourceLineNo">331</span>   */<a name="line.331"></a>
-<span class="sourceLineNo">332</span>  public Mutation setCellVisibility(CellVisibility expression) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    this.setAttribute(VisibilityConstants.VISIBILITY_LABELS_ATTR_KEY, ProtobufUtil<a name="line.333"></a>
-<span class="sourceLineNo">334</span>        .toCellVisibility(expression).toByteArray());<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    return this;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>  }<a name="line.336"></a>
-<span class="sourceLineNo">337</span><a name="line.337"></a>
-<span class="sourceLineNo">338</span>  /**<a name="line.338"></a>
-<span class="sourceLineNo">339</span>   * @return CellVisibility associated with cells in this Mutation.<a name="line.339"></a>
-<span class="sourceLineNo">340</span>   * @throws DeserializationException<a name="line.340"></a>
-<span class="sourceLineNo">341</span>   */<a name="line.341"></a>
-<span class="sourceLineNo">342</span>  public CellVisibility getCellVisibility() throws DeserializationException {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>    byte[] cellVisibilityBytes = this.getAttribute(VisibilityConstants.VISIBILITY_LABELS_ATTR_KEY);<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    if (cellVisibilityBytes == null) return null;<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    return ProtobufUtil.toCellVisibility(cellVisibilityBytes);<a name="line.345"></a>
-<span class="sourceLineNo">346</span>  }<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>   * Number of KeyValues carried by this Mutation.<a name="line.349"></a>
-<span class="sourceLineNo">350</span>   * @return the total number of KeyValues<a name="line.350"></a>
-<span class="sourceLineNo">351</span>   */<a name="line.351"></a>
-<span class="sourceLineNo">352</span>  public int size() {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    int size = 0;<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    for (List&lt;Cell&gt; cells : this.familyMap.values()) {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      size += cells.size();<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    }<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    return size;<a name="line.357"></a>
-<span class="sourceLineNo">358</span>  }<a name="line.358"></a>
-<span class="sourceLineNo">359</span><a name="line.359"></a>
-<span class="sourceLineNo">360</span>  /**<a name="line.360"></a>
-<span class="sourceLineNo">361</span>   * @return the number of different families<a name="line.361"></a>
-<span class="sourceLineNo">362</span>   */<a name="line.362"></a>
-<span class="sourceLineNo">363</span>  public int numFamilies() {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    return familyMap.size();<a name="line.364"></a>
-<span class="sourceLineNo">365</span>  }<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span>  /**<a name="line.367"></a>
-<span class="sourceLineNo">368</span>   * @return Calculate what Mutation adds to class heap size.<a name="line.368"></a>
-<span class="sourceLineNo">369</span>   */<a name="line.369"></a>
-<span class="sourceLineNo">370</span>  @Override<a name="line.370"></a>
-<span class="sourceLineNo">371</span>  public long heapSize() {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    long heapsize = MUTATION_OVERHEAD;<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    // Adding row<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    heapsize += ClassSize.align(ClassSize.ARRAY + this.row.length);<a name="line.374"></a>
-<span class="sourceLineNo">375</span><a name="line.375"></a>
-<span class="sourceLineNo">376</span>    // Adding map overhead<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    heapsize +=<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      ClassSize.align(this.familyMap.size() * ClassSize.MAP_ENTRY);<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    for(Map.Entry&lt;byte [], List&lt;Cell&gt;&gt; entry : this.familyMap.entrySet()) {<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      //Adding key overhead<a name="line.380"></a>
-<span class="sourceLineNo">381</span>      heapsize +=<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        ClassSize.align(ClassSize.ARRAY + entry.getKey().length);<a name="line.382"></a>
-<span class="sourceLineNo">383</span><a name="line.383"></a>
-<span class="sourceLineNo">384</span>      //This part is kinds tricky since the JVM can reuse references if you<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      //store the same value, but have a good match with SizeOf at the moment<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      //Adding value overhead<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      heapsize += ClassSize.align(ClassSize.ARRAYLIST);<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      int size = entry.getValue().size();<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      heapsize += ClassSize.align(ClassSize.ARRAY +<a name="line.389"></a>
-<span class="sourceLineNo">390</span>          size * ClassSize.REFERENCE);<a name="line.390"></a>
-<span class="sourceLineNo">391</span><a name="line.391"></a>
-<span class="sourceLineNo">392</span>      for(Cell cell : entry.getValue()) {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>        heapsize += CellUtil.estimatedHeapSizeOf(cell);<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>    heapsize += getAttributeSize();<a name="line.396"></a>
-<span class="sourceLineNo">397</span>    heapsize += extraHeapSize();<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    return ClassSize.align(heapsize);<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>  /**<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   * @return The serialized ACL for this operation, or null if none<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   */<a name="line.403"></a>
-<span class="sourceLineNo">404</span>  public byte[] getACL() {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    return getAttribute(AccessControlConstants.OP_ATTRIBUTE_ACL);<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>  /**<a name="line.408"></a>
-<span class="sourceLineNo">409</span>   * @param user User short name<a name="line.409"></a>
-<span class="sourceLineNo">410</span>   * @param perms Permissions for the user<a name="line.410"></a>
-<span class="sourceLineNo">411</span>   */<a name="line.411"></a>
-<span class="sourceLineNo">412</span>  public Mutation setACL(String user, Permission perms) {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    setAttribute(AccessControlConstants.OP_ATTRIBUTE_ACL,<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      ProtobufUtil.toUsersAndPermissions(user, perms).toByteArray());<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    return this;<a name="line.415"></a>
-<span class="sourceLineNo">416</span>  }<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>   * @param perms A map of permissions for a user or users<a name="line.419"></a>
-<span class="sourceLineNo">420</span>   */<a name="line.420"></a>
-<span class="sourceLineNo">421</span>  public Mutation setACL(Map&lt;String, Permission&gt; perms) {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    ListMultimap&lt;String, Permission&gt; permMap = ArrayListMultimap.create();<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    for (Map.Entry&lt;String, Permission&gt; entry : perms.entrySet()) {<a name="line.423"></a>
-<span class="sourceLineNo">424</span>      permMap.put(entry.getKey(), entry.getValue());<a name="line.424"></a>
-<span class="sourceLineNo">425</span>    }<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    setAttribute(AccessControlConstants.OP_ATTRIBUTE_ACL,<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      ProtobufUtil.toUsersAndPermissions(permMap).toByteArray());<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    return this;<a name="line.428"></a>
-<span class="sourceLineNo">429</span>  }<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span>  /**<a name="line.431"></a>
-<span class="sourceLineNo">432</span>   * Return the TTL requested for the result of the mutation, in milliseconds.<a name="line.432"></a>
-<span class="sourceLineNo">433</span>   * @return the TTL requested for the result of the mutation, in milliseconds,<a name="line.433"></a>
-<span class="sourceLineNo">434</span>   * or Long.MAX_VALUE if unset<a name="line.434"></a>
-<span class="sourceLineNo">435</span>   */<a name="line.435"></a>
-<span class="sourceLineNo">436</span>  public long getTTL() {<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    byte[] ttlBytes = getAttribute(OP_ATTRIBUTE_TTL);<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    if (ttlBytes != null) {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      return Bytes.toLong(ttlBytes);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    }<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    return Long.MAX_VALUE;<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>  /**<a name="line.444"></a>
-<span class="sourceLineNo">445</span>   * Set the TTL desired for the result of the mutation, in milliseconds.<a name="line.445"></a>
-<span class="sourceLineNo">446</span>   * @param ttl the TTL desired for the result of the mutation, in milliseconds<a name="line.446"></a>
-<span class="sourceLineNo">447</span>   * @return this<a name="line.447"></a>
-<span class="sourceLineNo">448</span>   */<a name="line.448"></a>
-<span class="sourceLineNo">449</span>  public Mutation setTTL(long ttl) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    setAttribute(OP_ATTRIBUTE_TTL, Bytes.toBytes(ttl));<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    return this;<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  }<a name="line.452"></a>
-<span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span>  /**<a name="line.454"></a>
-<span class="sourceLineNo">455</span>   * Subclasses should override this method to add the heap size of their own fields.<a name="line.455"></a>
-<span class="sourceLineNo">456</span>   * @return the heap size to add (will be aligned).<a name="line.456"></a>
-<span class="sourceLineNo">457</span>   */<a name="line.457"></a>
-<span class="sourceLineNo">458</span>  protected long extraHeapSize(){<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    return 0L;<a name="line.459"></a>
-<span class="sourceLineNo">460</span>  }<a name="line.460"></a>
-<span class="sourceLineNo">461</span><a name="line.461"></a>
-<span class="sourceLineNo">462</span><a name="line.462"></a>
-<span class="sourceLineNo">463</span>  /**<a name="line.463"></a>
-<span class="sourceLineNo">464</span>   * @param row Row to check<a name="line.464"></a>
-<span class="sourceLineNo">465</span>   * @throws IllegalArgumentException Thrown if &lt;code&gt;row&lt;/code&gt; is empty or null or<a name="line.465"></a>
-<span class="sourceLineNo">466</span>   * &amp;gt; {@link HConstants#MAX_ROW_LENGTH}<a name="line.466"></a>
-<span class="sourceLineNo">467</span>   * @return &lt;code&gt;row&lt;/code&gt;<a name="line.467"></a>
-<span class="sourceLineNo">468</span>   */<a name="line.468"></a>
-<span class="sourceLineNo">469</span>  static byte [] checkRow(final byte [] row) {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    return checkRow(row, 0, row == null? 0: row.length);<a name="line.470"></a>
+<span class="sourceLineNo">085</span>  private static final String RETURN_RESULTS = "_rr_";<a name="line.85"></a>
+<span class="sourceLineNo">086</span><a name="line.86"></a>
+<span class="sourceLineNo">087</span>  protected byte [] row = null;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>  protected long ts = HConstants.LATEST_TIMESTAMP;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>  protected Durability durability = Durability.USE_DEFAULT;<a name="line.89"></a>
+<span class="sourceLineNo">090</span><a name="line.90"></a>
+<span class="sourceLineNo">091</span>  // A Map sorted by column family.<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  protected NavigableMap&lt;byte [], List&lt;Cell&gt;&gt; familyMap =<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    new TreeMap&lt;byte [], List&lt;Cell&gt;&gt;(Bytes.BYTES_COMPARATOR);<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span>  @Override<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  public CellScanner cellScanner() {<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    return CellUtil.createCellScanner(getFamilyCellMap());<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>  /**<a name="line.100"></a>
+<span class="sourceLineNo">101</span>   * Creates an empty list if one doesn't exist for the given column family<a name="line.101"></a>
+<span class="sourceLineNo">102</span>   * or else it returns the associated list of Cell objects.<a name="line.102"></a>
+<span class="sourceLineNo">103</span>   *<a name="line.103"></a>
+<span class="sourceLineNo">104</span>   * @param family column family<a name="line.104"></a>
+<span class="sourceLineNo">105</span>   * @return a list of Cell objects, returns an empty list if one doesn't exist.<a name="line.105"></a>
+<span class="sourceLineNo">106</span>   */<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  List&lt;Cell&gt; getCellList(byte[] family) {<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    List&lt;Cell&gt; list = this.familyMap.get(family);<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    if (list == null) {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      list = new ArrayList&lt;Cell&gt;();<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    }<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    return list;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>  }<a name="line.113"></a>
+<span class="sourceLineNo">114</span><a name="line.114"></a>
+<span class="sourceLineNo">115</span>  /*<a name="line.115"></a>
+<span class="sourceLineNo">116</span>   * Create a KeyValue with this objects row key and the Put identifier.<a name="line.116"></a>
+<span class="sourceLineNo">117</span>   *<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   * @return a KeyValue with this objects row key and the Put identifier.<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   */<a name="line.119"></a>
+<span class="sourceLineNo">120</span>  KeyValue createPutKeyValue(byte[] family, byte[] qualifier, long ts, byte[] value) {<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    return new KeyValue(this.row, family, qualifier, ts, KeyValue.Type.Put, value);<a name="line.121"></a>
+<span class="sourceLineNo">122</span>  }<a name="line.122"></a>
+<span class="sourceLineNo">123</span><a name="line.123"></a>
+<span class="sourceLineNo">124</span>  /**<a name="line.124"></a>
+<span class="sourceLineNo">125</span>   * Create a KeyValue with this objects row key and the Put identifier.<a name="line.125"></a>
+<span class="sourceLineNo">126</span>   * @param family<a name="line.126"></a>
+<span class="sourceLineNo">127</span>   * @param qualifier<a name="line.127"></a>
+<span class="sourceLineNo">128</span>   * @param ts<a name="line.128"></a>
+<span class="sourceLineNo">129</span>   * @param value<a name="line.129"></a>
+<span class="sourceLineNo">130</span>   * @param tags - Specify the Tags as an Array<a name="line.130"></a>
+<span class="sourceLineNo">131</span>   * @return a KeyValue with this objects row key and the Put identifier.<a name="line.131"></a>
+<span class="sourceLineNo">132</span>   */<a name="line.132"></a>
+<span class="sourceLineNo">133</span>  KeyValue createPutKeyValue(byte[] family, byte[] qualifier, long ts, byte[] value, Tag[] tags) {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    KeyValue kvWithTag = new KeyValue(this.row, family, qualifier, ts, value, tags);<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    return kvWithTag;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  }<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>   * Create a KeyValue with this objects row key and the Put identifier.<a name="line.139"></a>
+<span class="sourceLineNo">140</span>   *<a name="line.140"></a>
+<span class="sourceLineNo">141</span>   * @return a KeyValue with this objects row key and the Put identifier.<a name="line.141"></a>
+<span class="sourceLineNo">142</span>   */<a name="line.142"></a>
+<span class="sourceLineNo">143</span>  KeyValue createPutKeyValue(byte[] family, ByteBuffer qualifier, long ts, ByteBuffer value,<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      Tag[] tags) {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    return new KeyValue(this.row, 0, this.row == null ? 0 : this.row.length,<a name="line.145"></a>
+<span class="sourceLineNo">146</span>        family, 0, family == null ? 0 : family.length,<a name="line.146"></a>
+<span class="sourceLineNo">147</span>        qualifier, ts, KeyValue.Type.Put, value, tags != null ? Arrays.asList(tags) : null);<a name="line.147"></a>
+<span class="sourceLineNo">148</span>  }<a name="line.148"></a>
+<span class="sourceLineNo">149</span><a name="line.149"></a>
+<span class="sourceLineNo">150</span>  /**<a name="line.150"></a>
+<span class="sourceLineNo">151</span>   * Compile the column family (i.e. schema) information<a name="line.151"></a>
+<span class="sourceLineNo">152</span>   * into a Map. Useful for parsing and aggregation by debugging,<a name="line.152"></a>
+<span class="sourceLineNo">153</span>   * logging, and administration tools.<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   * @return Map<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   */<a name="line.155"></a>
+<span class="sourceLineNo">156</span>  @Override<a name="line.156"></a>
+<span class="sourceLineNo">157</span>  public Map&lt;String, Object&gt; getFingerprint() {<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    Map&lt;String, Object&gt; map = new HashMap&lt;String, Object&gt;();<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    List&lt;String&gt; families = new ArrayList&lt;String&gt;();<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    // ideally, we would also include table information, but that information<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    // is not stored in each Operation instance.<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    map.put("families", families);<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    for (Map.Entry&lt;byte [], List&lt;Cell&gt;&gt; entry : this.familyMap.entrySet()) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      families.add(Bytes.toStringBinary(entry.getKey()));<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    }<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    return map;<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>  /**<a name="line.169"></a>
+<span class="sourceLineNo">170</span>   * Compile the details beyond the scope of getFingerprint (row, columns,<a name="line.170"></a>
+<span class="sourceLineNo">171</span>   * timestamps, etc.) into a Map along with the fingerprinted information.<a name="line.171"></a>
+<span class="sourceLineNo">172</span>   * Useful for debugging, logging, and administration tools.<a name="line.172"></a>
+<span class="sourceLineNo">173</span>   * @param maxCols a limit on the number of columns output prior to truncation<a name="line.173"></a>
+<span class="sourceLineNo">174</span>   * @return Map<a name="line.174"></a>
+<span class="sourceLineNo">175</span>   */<a name="line.175"></a>
+<span class="sourceLineNo">176</span>  @Override<a name="line.176"></a>
+<span class="sourceLineNo">177</span>  public Map&lt;String, Object&gt; toMap(int maxCols) {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    // we start with the fingerprint map and build on top of it.<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    Map&lt;String, Object&gt; map = getFingerprint();<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    // replace the fingerprint's simple list of families with a<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    // map from column families to lists of qualifiers and kv details<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    Map&lt;String, List&lt;Map&lt;String, Object&gt;&gt;&gt; columns =<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      new HashMap&lt;String, List&lt;Map&lt;String, Object&gt;&gt;&gt;();<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    map.put("families", columns);<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    map.put("row", Bytes.toStringBinary(this.row));<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    int colCount = 0;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    // iterate through all column families affected<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    for (Map.Entry&lt;byte [], List&lt;Cell&gt;&gt; entry : this.familyMap.entrySet()) {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      // map from this family to details for each cell affected within the family<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      List&lt;Map&lt;String, Object&gt;&gt; qualifierDetails = new ArrayList&lt;Map&lt;String, Object&gt;&gt;();<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      columns.put(Bytes.toStringBinary(entry.getKey()), qualifierDetails);<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      colCount += entry.getValue().size();<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      if (maxCols &lt;= 0) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>        continue;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      }<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      // add details for each cell<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      for (Cell cell: entry.getValue()) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        if (--maxCols &lt;= 0) {<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>        Map&lt;String, Object&gt; cellMap = cellToStringMap(cell);<a name="line.201"></a>
+<span class="sourceLineNo">202</span>        qualifierDetails.add(cellMap);<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>
+<span class="sourceLineNo">205</span>    map.put("totalColumns", colCount);<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    // add the id if set<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    if (getId() != null) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      map.put("id", getId());<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    }<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    // Add the TTL if set<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    // Long.MAX_VALUE is the default, and is interpreted to mean this attribute<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    // has not been set.<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    if (getTTL() != Long.MAX_VALUE) {<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      map.put("ttl", getTTL());<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    }<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    return map;<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>  private static Map&lt;String, Object&gt; cellToStringMap(Cell c) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    Map&lt;String, Object&gt; stringMap = new HashMap&lt;String, Object&gt;();<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    stringMap.put("qualifier", Bytes.toStringBinary(c.getQualifierArray(), c.getQualifierOffset(),<a name="line.221"></a>
+<span class="sourceLineNo">222</span>                c.getQualifierLength()));<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    stringMap.put("timestamp", c.getTimestamp());<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    stringMap.put("vlen", c.getValueLength());<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    List&lt;Tag&gt; tags = CellUtil.getTags(c);<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    if (tags != null) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      List&lt;String&gt; tagsString = new ArrayList&lt;String&gt;();<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      for (Tag t : tags) {<a name="line.228"></a>
+<span class="sourceLineNo">229</span>        tagsString.add((t.getType()) + ":" + Bytes.toStringBinary(TagUtil.cloneValue(t)));<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      }<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      stringMap.put("tag", tagsString);<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    }<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    return stringMap;<a name="line.233"></a>
+<span class="sourceLineNo">234</span>  }<a name="line.234"></a>
+<span class="sourceLineNo">235</span><a name="line.235"></a>
+<span class="sourceLineNo">236</span>  /**<a name="line.236"></a>
+<span class="sourceLineNo">237</span>   * Set the durability for this mutation<a name="line.237"></a>
+<span class="sourceLineNo">238</span>   * @param d<a name="line.238"></a>
+<span class="sourceLineNo">239</span>   */<a name="line.239"></a>
+<span class="sourceLineNo">240</span>  public Mutation setDurability(Durability d) {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    this.durability = d;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    return this;<a name="line.242"></a>
+<span class="sourceLineNo">243</span>  }<a name="line.243"></a>
+<span class="sourceLineNo">244</span><a name="line.244"></a>
+<span class="sourceLineNo">245</span>  /** Get the current durability */<a name="line.245"></a>
+<span class="sourceLineNo">246</span>  public Durability getDurability() {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    return this.durability;<a name="line.247"></a>
+<span class="sourceLineNo">248</span>  }<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span>  /**<a name="line.250"></a>
+<span class="sourceLineNo">251</span>   * Method for retrieving the put's familyMap<a name="line.251"></a>
+<span class="sourceLineNo">252</span>   * @return familyMap<a name="line.252"></a>
+<span class="sourceLineNo">253</span>   */<a name="line.253"></a>
+<span class="sourceLineNo">254</span>  public NavigableMap&lt;byte [], List&lt;Cell&gt;&gt; getFamilyCellMap() {<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    return this.familyMap;<a name="line.255"></a>
+<span class="sourceLineNo">256</span>  }<a name="line.256"></a>
+<span class="sourceLineNo">257</span><a name="line.257"></a>
+<span class="sourceLineNo">258</span>  /**<a name="line.258"></a>
+<span class="sourceLineNo">259</span>   * Method for setting the put's familyMap<a name="line.259"></a>
+<span class="sourceLineNo">260</span>   */<a name="line.260"></a>
+<span class="sourceLineNo">261</span>  public Mutation setFamilyCellMap(NavigableMap&lt;byte [], List&lt;Cell&gt;&gt; map) {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    // TODO: Shut this down or move it up to be a Constructor.  Get new object rather than change<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    // this internal data member.<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    this.familyMap = map;<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    return this;<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>  /**<a name="line.268"></a>
+<span class="sourceLineNo">269</span>   * Method to check if the familyMap is empty<a name="line.269"></a>
+<span class="sourceLineNo">270</span>   * @return true if empty, false otherwise<a name="line.270"></a>
+<span class="sourceLineNo">271</span>   */<a name="line.271"></a>
+<span class="sourceLineNo">272</span>  public boolean isEmpty() {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    return familyMap.isEmpty();<a name="line.273"></a>
+<span class="sourceLineNo">274</span>  }<a name="line.274"></a>
+<span class="sourceLineNo">275</span><a name="line.275"></a>
+<span class="sourceLineNo">276</span>  /**<a name="line.276"></a>
+<span class="sourceLineNo">277</span>   * Method for retrieving the delete's row<a name="line.277"></a>
+<span class="sourceLineNo">278</span>   * @return row<a name="line.278"></a>
+<span class="sourceLineNo">279</span>   */<a name="line.279"></a>
+<span class="sourceLineNo">280</span>  @Override<a name="line.280"></a>
+<span class="sourceLineNo">281</span>  public byte [] getRow() {<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    return this.row;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  }<a name="line.283"></a>
+<span class="sourceLineNo">284</span><a name="line.284"></a>
+<span class="sourceLineNo">285</span>  @Override<a name="line.285"></a>
+<span class="sourceLineNo">286</span>  public int compareTo(final Row d) {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    return Bytes.compareTo(this.getRow(), d.getRow());<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>  /**<a name="line.290"></a>
+<span class="sourceLineNo">291</span>   * Method for retrieving the timestamp<a name="line.291"></a>
+<span class="sourceLineNo">292</span>   * @return timestamp<a name="line.292"></a>
+<span class="sourceLineNo">293</span>   */<a name="line.293"></a>
+<span class="sourceLineNo">294</span>  public long getTimeStamp() {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    return this.ts;<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>   * Marks that the clusters with the given clusterIds have consumed the mutation<a name="line.299"></a>
+<span class="sourceLineNo">300</span>   * @param clusterIds of the clusters that have consumed the mutation<a name="line.300"></a>
+<span class="sourceLineNo">301</span>   */<a name="line.301"></a>
+<span class="sourceLineNo">302</span>  public Mutation setClusterIds(List&lt;UUID&gt; clusterIds) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    ByteArrayDataOutput out = ByteStreams.newDataOutput();<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    out.writeInt(clusterIds.size());<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    for (UUID clusterId : clusterIds) {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      out.writeLong(clusterId.getMostSignificantBits());<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      out.writeLong(clusterId.getLeastSignificantBits());<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    }<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    setAttribute(CONSUMED_CLUSTER_IDS, out.toByteArray());<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    return this;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>  }<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>   * @return the set of clusterIds that have consumed the mutation<a name="line.314"></a>
+<span class="sourceLineNo">315</span>   */<a name="line.315"></a>
+<span class="sourceLineNo">316</span>  public List&lt;UUID&gt; getClusterIds() {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    List&lt;UUID&gt; clusterIds = new ArrayList&lt;UUID&gt;();<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    byte[] bytes = getAttribute(CONSUMED_CLUSTER_IDS);<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    if(bytes != null) {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      ByteArrayDataInput in = ByteStreams.newDataInput(bytes);<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      int numClusters = in.readInt();<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      for(int i=0; i&lt;numClusters; i++){<a name="line.322"></a>
+<span class="sourceLineNo">323</span>        clusterIds.add(new UUID(in.readLong(), in.readLong()));<a name="line.323"></a>
+<span class="sourceLineNo">324</span>      }<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    }<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    return clusterIds;<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>  /**<a name="line.329"></a>
+<span class="sourceLineNo">330</span>   * Sets the visibility expression associated with cells in this Mutation.<a name="line.330"></a>
+<span class="sourceLineNo">331</span>   * It is illegal to set &lt;code&gt;CellVisibility&lt;/code&gt; on &lt;code&gt;Delete&lt;/code&gt; mutation.<a name="line.331"></a>
+<span class="sourceLineNo">332</span>   * @param expression<a name="line.332"></a>
+<span class="sourceLineNo">333</span>   */<a name="line.333"></a>
+<span class="sourceLineNo">334</span>  public Mutation setCellVisibility(CellVisibility expression) {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    this.setAttribute(VisibilityConstants.VISIBILITY_LABELS_ATTR_KEY, ProtobufUtil<a name="line.335"></a>
+<span class="sourceLineNo">336</span>        .toCellVisibility(expression).toByteArray());<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    return this;<a name="line.337"></a>
+<span class="sourceLineNo">338</span>  }<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span>  /**<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   * @return CellVisibility associated with cells in this Mutation.<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   * @throws DeserializationException<a name="line.342"></a>
+<span class="sourceLineNo">343</span>   */<a name="line.343"></a>
+<span class="sourceLineNo">344</span>  public CellVisibility getCellVisibility() throws DeserializationException {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    byte[] cellVisibilityBytes = this.getAttribute(VisibilityConstants.VISIBILITY_LABELS_ATTR_KEY);<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    if (cellVisibilityBytes == null) return null;<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    return ProtobufUtil.toCellVisibility(cellVisibilityBytes);<a name="line.347"></a>
+<span class="sourceLineNo">348</span>  }<a name="line.348"></a>
+<span class="sourceLineNo">349</span><a name="line.349"></a>
+<span class="sourceLineNo">350</span>  /**<a name="line.350"></a>
+<span class="sourceLineNo">351</span>   * Number of KeyValues carried by this Mutation.<a name="line.351"></a>
+<span class="sourceLineNo">352</span>   * @return the total number of KeyValues<a name="line.352"></a>
+<span class="sourceLineNo">353</span>   */<a name="line.353"></a>
+<span class="sourceLineNo">354</span>  public int size() {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    int size = 0;<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    for (List&lt;Cell&gt; cells : this.familyMap.values()) {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      size += cells.size();<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    return size;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>  }<a name="line.360"></a>
+<span class="sourceLineNo">361</span><a name="line.361"></a>
+<span class="sourceLineNo">362</span>  /**<a name="line.362"></a>
+<span class="sourceLineNo">363</span>   * @return the number of different families<a name="line.363"></a>
+<span class="sourceLineNo">364</span>   */<a name="line.364"></a>
+<span class="sourceLineNo">365</span>  public int numFamilies() {<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    return familyMap.size();<a name="line.366"></a>
+<span class="sourceLineNo">367</span>  }<a name="line.367"></a>
+<span class="sourceLineNo">368</span><a name="line.368"></a>
+<span class="sourceLineNo">369</span>  /**<a name="line.369"></a>
+<span class="sourceLineNo">370</span>   * @return Calculate what Mutation adds to class heap size.<a name="line.370"></a>
+<span class="sourceLineNo">371</span>   */<a name="line.371"></a>
+<span class="sourceLineNo">372</span>  @Override<a name="line.372"></a>
+<span class="sourceLineNo">373</span>  public long heapSize() {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    long heapsize = MUTATION_OVERHEAD;<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    // Adding row<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    heapsize += ClassSize.align(ClassSize.ARRAY + this.row.length);<a name="line.376"></a>
+<span class="sourceLineNo">377</span><a name="line.377"></a>
+<span class="sourceLineNo">378</span>    // Adding map overhead<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    heapsize +=<a name="line.379"></a>
+<span class="sourceLineNo">380</span>      ClassSize.align(this.familyMap.size() * ClassSize.MAP_ENTRY);<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    for(Map.Entry&lt;byte [], List&lt;Cell&gt;&gt; entry : this.familyMap.entrySet()) {<a name="line.381"></a>
+<span class="sourceLineNo">382</span>      //Adding key overhead<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      heapsize +=<a name="line.383"></a>
+<span class="sourceLineNo">384</span>        ClassSize.align(ClassSize.ARRAY + entry.getKey().length);<a name="line.384"></a>
+<span class="sourceLineNo">385</span><a name="line.385"></a>
+<span class="sourceLineNo">386</span>      //This part is kinds tricky since the JVM can reuse references if you<a name="line.386"></a>
+<span class="sourceLineNo">387</span>      //store the same value, but have a good match with SizeOf at the moment<a name="line.387"></a>
+<span class="sourceLineNo">388</span>      //Adding value overhead<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      heapsize += ClassSize.align(ClassSize.ARRAYLIST);<a name="line.389"></a>
+<span class="sourceLineNo">390</span>      int size = entry.getValue().size();<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      heapsize += ClassSize.align(ClassSize.ARRAY +<a name="line.391"></a>
+<span class="sourceLineNo">392</span>          size * ClassSize.REFERENCE);<a name="line.392"></a>
+<span class="sourceLineNo">393</span><a name="line.393"></a>
+<span class="sourceLineNo">394</span>      for(Cell cell : entry.getValue()) {<a name="line.394"></a>
+<span class="sourceLineNo">395</span>        heapsize += CellUtil.estimatedHeapSizeOf(cell);<a name="line.395"></a>
+<span class="sourceLineNo">396</span>      }<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    }<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    heapsize += getAttributeSize();<a name="line.398"></a>
+<span class="sourceLineNo">399</span>    heapsize += extraHeapSize();<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    return ClassSize.align(heapsize);<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>  /**<a name="line.403"></a>
+<span class="sourceLineNo">404</span>   * @return The serialized ACL for this operation, or null if none<a name="line.404"></a>
+<span class="sourceLineNo">405</span>   */<a name="line.405"></a>
+<span class="sourceLineNo">406</span>  public byte[] getACL() {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    return getAttribute(AccessControlConstants.OP_ATTRIBUTE_ACL);<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>  /**<a name="line.410"></a>
+<span class="sourceLineNo">411</span>   * @param user User short name<a name="line.411"></a>
+<span class="sourceLineNo">412</span>   * @param perms Permissions for the user<a name="line.412"></a>
+<span class="sourceLineNo">413</span>   */<a name="line.413"></a>
+<span class="sourceLineNo">414</span>  public Mutation setACL(String user, Permission perms) {<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    setAttribute(AccessControlConstants.OP_ATTRIBUTE_ACL,<a name="line.415"></a>
+<span class="sourceLineNo">416</span>      ProtobufUtil.toUsersAndPermissions(user, perms).toByteArray());<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    return this;<a name="line.417"></a>
+<span class="sourceLineNo">418</span>  }<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>   * @param perms A map of permissions for a user or users<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   */<a name="line.422"></a>
+<span class="sourceLineNo">423</span>  public Mutation setACL(Map&lt;String, Permission&gt; perms) {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>    ListMultimap&lt;String, Permission&gt; permMap = ArrayListMultimap.create();<a name="line.424"></a>
+<span class="sourceLineNo">425</span>    for (Map.Entry&lt;String, Permission&gt; entry : perms.entrySet()) {<a name="line.425"></a>
+<span class="sourceLineNo">426</span>      permMap.put(entry.getKey(), entry.getValue());<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    }<a name="line.427"></a>
+<span class="sourceLineNo">428</span>    setAttribute(AccessControlConstants.OP_ATTRIBUTE_ACL,<a name="line.428"></a>
+<span class="sourceLineNo">429</span>      ProtobufUtil.toUsersAndPermissions(permMap).toByteArray());<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    return this;<a name="line.430"></a>
+<span class="sourceLineNo">431</span>  }<a name="line.431"></a>
+<span class="sourceLineNo">432</span><a name="line.432"></a>
+<span class="sourceLineNo">433</span>  /**<a name="line.433"></a>
+<span class="sourceLineNo">434</span>   * Return the TTL requested for the result of the mutation, in milliseconds.<a name="line.434"></a>
+<span class="sourceLineNo">435</span>   * @return the TTL requested for the result of the mutation, in milliseconds,<a name="line.435"></a>
+<span class="sourceLineNo">436</span>   * or Long.MAX_VALUE if unset<a name="line.436"></a>
+<span class="sourceLineNo">437</span>   */<a name="line.437"></a>
+<span class="sourceLineNo">438</span>  public long getTTL() {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>    byte[] ttlBytes = getAttribute(OP_ATTRIBUTE_TTL);<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    if (ttlBytes != null) {<a name="line.440"></a>
+<span class="sourceLineNo">441</span>      return Bytes.toLong(ttlBytes);<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    }<a name="line.442"></a>
+<span class="sourceLineNo">443</span>    return Long.MAX_VALUE;<a name="line.443"></a>
+<span class="sourceLineNo">444</span>  }<a name="line.444"></a>
+<span class="sourceLineNo">445</span><a name="line.445"></a>
+<span class="sourceLineNo">446</span>  /**<a name="line.446"></a>
+<span class="sourceLineNo">447</span>   * Set the TTL desired for the result of the mutation, in milliseconds.<a name="line.447"></a>
+<span class="sourceLineNo">448</span>   * @param ttl the TTL desired for the result of the mutation, in milliseconds<a name="line.448"></a>
+<span class="sourceLineNo">449</span>   * @return this<a name="line.449"></a>
+<span class="sourceLineNo">450</span>   */<a name="line.450"></a>
+<span class="sourceLineNo">451</span>  public Mutation setTTL(long ttl) {<a name="line.451"></a>
+<span class="sourceLineNo">452</span>    setAttribute(OP_ATTRIBUTE_TTL, Bytes.toBytes(ttl));<a name="line.452"></a>
+<span class="sourceLineNo">453</span>    return this;<a name="line.453"></a>
+<span class="sourceLineNo">454</span>  }<a name="line.454"></a>
+<span class="sourceLineNo">455</span><a name="line.455"></a>
+<span class="sourceLineNo">456</span>  /**<a name="line.456"></a>
+<span class="sourceLineNo">457</span>   * @return current value for returnResults<a name="line.457"></a>
+<span class="sourceLineNo">458</span>   */<a name="line.458"></a>
+<span class="sourceLineNo">459</span>  // Used by Increment and Append only.<a name="line.459"></a>
+<span class="sourceLineNo">460</span>  @InterfaceAudience.Private<a name="line.460"></a>
+<span class="sourceLineNo">461</span>  protected boolean isReturnResults() {<a name="line.461"></a>
+<span class="sourceLineNo">462</span>    byte[] v = getAttribute(RETURN_RESULTS);<a name="line.462"></a>
+<span class="sourceLineNo">463</span>    return v == null ? true : Bytes.toBoolean(v);<a name="line.463"></a>
+<span class="sourceLineNo">464</span>  }<a name="line.464"></a>
+<span class="sourceLineNo">465</span><a name="line.465"></a>
+<span class="sourceLineNo">466</span>  @InterfaceAudience.Private<a name="line.466"></a>
+<span class="sourceLineNo">467</span>  // Used by Increment and Append only.<a name="line.467"></a>
+<span class="sourceLineNo">468</span>  protected Mutation setReturnResults(boolean returnResults) {<a name="line.468"></a>
+<span class="sourceLineNo">469</span>    setAttribute(RETURN_RESULTS, Bytes.toBytes(returnResults));<a name="line.469"></a>
+<span class="sourceLineNo">470</span>    return this;<a name="line.470"></a>
 <span class="sourceLineNo">471</span>  }<a name="line.471"></a>
 <span class="sourceLineNo">472</span><a name="line.472"></a>
 <span class="sourceLineNo">473</span>  /**<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   * @param row Row to check<a name="line.474"></a>
-<span class="sourceLineNo">475</span>   * @param offset<a name="line.475"></a>
-<span class="sourceLineNo">476</span>   * @param length<a name="line.476"></a>
-<span class="sourceLineNo">477</span>   * @throws IllegalArgumentException Thrown if &lt;code&gt;row&lt;/code&gt; is empty or null or<a name="line.477"></a>
-<span class="sourceLineNo">478</span>   * &amp;gt; {@link HConstants#MAX_ROW_LENGTH}<a name="line.478"></a>
-<span class="sourceLineNo">479</span>   * @return &lt;code&gt;row&lt;/code&gt;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>   */<a name="line.480"></a>
-<span class="sourceLineNo">481</span>  static byte [] checkRow(final byte [] row, final int offset, final int length) {<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    if (row == null) {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      throw new IllegalArgumentException("Row buffer is null");<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    }<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    if (length == 0) {<a name="line.485"></a>
-<span class="sourceLineNo">486</span>      throw new IllegalArgumentException("Row length is 0");<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    }<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    if (length &gt; HConstants.MAX_ROW_LENGTH) {<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      throw new IllegalArgumentException("Row length " + length + " is &gt; " +<a name="line.489"></a>
-<span class="sourceLineNo">490</span>        HConstants.MAX_ROW_LENGTH);<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    }<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    return row;<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>  static void checkRow(ByteBuffer row) {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    if (row == null) {<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      throw new IllegalArgumentException("Row buffer is null");<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    }<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    if (row.remaining() == 0) {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      throw new IllegalArgumentException("Row length is 0");<a name="line.500"></a>
-<span class="sourceLineNo">501</span>    }<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    if (row.remaining() &gt; HConstants.MAX_ROW_LENGTH) {<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      throw new IllegalArgumentException("Row length " + row.remaining() + " is &gt; " +<a name="line.503"></a>
-<span class="sourceLineNo">504</span>          HConstants.MAX_ROW_LENGTH);<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    }<a name="line.505"></a>
-<span class="sourceLineNo">506</span>  }<a name="line.506"></a>
-<span class="sourceLineNo">507</span>}<a name="line.507"></a>
+<span class="sourceLineNo">474</span>   * Subclasses should override this method to add the heap size of their own fields.<a name="line.474"></a>
+<span class="sourceLineNo">475</span>   * @return the heap size to add (will be aligned).<a name="line.475"></a>
+<span class="sourceLineNo">476</span>   */<a name="line.476"></a>
+<span class="sourceLineNo">477</span>  protected long extraHeapSize(){<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    return 0L;<a name="line.478"></a>
+<span class="sourceLineNo">479</span>  }<a name="line.479"></a>
+<span class="sourceLineNo">480</span><a name="line.480"></a>
+<span class="sourceLineNo">481</span><a name="line.481"></a>
+<span class="sourceLineNo">482</span>  /**<a name="line.482"></a>
+<span class="sourceLineNo">483</span>   * @param row Row to check<a name="line.483"></a>
+<span class="sourceLineNo">484</span>   * @throws IllegalArgumentException Thrown if &lt;code&gt;row&lt;/code&gt; is empty or null or<a name="line.484"></a>
+<span class="sourceLineNo">485</span>   * &amp;gt; {@link HConstants#MAX_ROW_LENGTH}<a name="line.485"></a>
+<span class="sourceLineNo">486</span>   * @return &lt;code&gt;row&lt;/code&gt;<a name="line.486"></a>
+<span class="sourceLineNo">487</span>   */<a name="line.487"></a>
+<span class="sourceLineNo">488</span>  static byte [] checkRow(final byte [] row) {<a name="line.488"></a>
+<span class="sourceLineNo">489</span>    return checkRow(row, 0, row == null? 0: row.length);<a name="line.489"></a>
+<span class="sourceLineNo">490</span>  }<a name="line.490"></a>
+<span class="sourceLineNo">491</span><a name="line.491"></a>
+<span class="sourceLineNo">492</span>  /**<a name="line.492"></a>
+<span class="sourceLineNo">493</span>   * @param row Row to check<a name="line.493"></a>
+<span class="sourceLineNo">494</span>   * @param offset<a name="line.494"></a>
+<span class="sourceLineNo">495</span>   * @param length<a name="line.495"></a>
+<span class="sourceLineNo">496</span>   * @throws IllegalArgumentException Thrown if &lt;code&gt;row&lt;/code&gt; is empty or null or<a name="line.496"></a>
+<span class="sourceLineNo">497</span>   * &amp;gt; {@link HConstants#MAX_ROW_LENGTH}<a name="line.497"></a>
+<span class="sourceLineNo">498</span>   * @return &lt;code&gt;row&lt;/code&gt;<a name="line.498"></a>
+<span class="sourceLineNo">499</span>   */<a name="line.499"></a>
+<span class="sourceLineNo">500</span>  static byte [] checkRow(final byte [] row, final int offset, final int length) {<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    if (row == null) {<a name="line.501"></a>
+<span class="sourceLineNo">502</span>      throw new IllegalArgumentException("Row buffer is null");<a name="line.502"></a>
+<span class="sourceLineNo">503</span>    }<a name="line.503"></a>
+<span class="sourceLineNo">504</span>    if (length == 0) {<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      throw new IllegalArgumentException("Row length is 0");<a name="line.505"></a>
+<span class="sourceLineNo">506</span>    }<a name="line.506"></a>
+<span class="sourceLineNo">507</span>    if (length &gt; HConstants.MAX_ROW_LENGTH) {<a name="line.507"></a>
+<span class="sourceLineNo">508</span>      throw new IllegalArgumentException("Row length " + length + " is &gt; " +<a name="line.508"></a>
+<span class="sourceLineNo">509</span>        HConstants.MAX_ROW_LENGTH);<a name="line.509"></a>
+<span class="sourceLineNo">510</span>    }<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    return row;<a name="line.511"></a>
+<span class="sourceLineNo">512</span>  }<a name="line.512"></a>
+<span class="sourceLineNo">513</span><a name="line.513"></a>
+<span class="sourceLineNo">514</span>  static void checkRow(ByteBuffer row) {<a name="line.514"></a>
+<span class="sourceLineNo">515</span>    if (row == null) {<a name="line.515"></a>
+<span class="sourceLineNo">516</span>      throw new IllegalArgumentException("Row buffer is null");<a name="line.516"></a>
+<span class="sourceLineNo">517</span>    }<a name="line.517"></a>
+<span class="sourceLineNo">518</span>    if (row.remaining() == 0) {<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      throw new IllegalArgumentException("Row length is 0");<a name="line.519"></a>
+<span class="sourceLineNo">520</span>    }<a name="line.520"></a>
+<span class="sourceLineNo">521</span>    if (row.remaining() &gt; HConstants.MAX_ROW_LENGTH) {<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      throw new IllegalArgumentException("Row length " + row.remaining() + " is &gt; " +<a name="line.522"></a>
+<span class="sourceLineNo">523</span>          HConstants.MAX_ROW_LENGTH);<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    }<a name="line.524"></a>
+<span class="sourceLineNo">525</span>  }<a name="line.525"></a>
+<span class="sourceLineNo">526</span>}<a name="line.526"></a>
 
 
 


[33/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/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 1d64963..a232cc8 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
@@ -6980,880 +6980,882 @@
 <span class="sourceLineNo">6972</span>      lock(this.updatesLock.readLock());<a name="line.6972"></a>
 <span class="sourceLineNo">6973</span>      try {<a name="line.6973"></a>
 <span class="sourceLineNo">6974</span>        Result cpResult = doCoprocessorPreCall(op, mutation);<a name="line.6974"></a>
-<span class="sourceLineNo">6975</span>        if (cpResult != null) return cpResult;<a name="line.6975"></a>
-<span class="sourceLineNo">6976</span>        Durability effectiveDurability = getEffectiveDurability(mutation.getDurability());<a name="line.6976"></a>
-<span class="sourceLineNo">6977</span>        Map&lt;Store, List&lt;Cell&gt;&gt; forMemStore =<a name="line.6977"></a>
-<span class="sourceLineNo">6978</span>            new HashMap&lt;Store, List&lt;Cell&gt;&gt;(mutation.getFamilyCellMap().size());<a name="line.6978"></a>
-<span class="sourceLineNo">6979</span>        // Reckon Cells to apply to WAL --  in returned walEdit -- and what to add to memstore and<a name="line.6979"></a>
-<span class="sourceLineNo">6980</span>        // what to return back to the client (in 'forMemStore' and 'results' respectively).<a name="line.6980"></a>
-<span class="sourceLineNo">6981</span>        WALEdit walEdit = reckonDeltas(op, mutation, effectiveDurability, forMemStore, results);<a name="line.6981"></a>
-<span class="sourceLineNo">6982</span>        // Actually write to WAL now if a walEdit to apply.<a name="line.6982"></a>
-<span class="sourceLineNo">6983</span>        if (walEdit != null &amp;&amp; !walEdit.isEmpty()) {<a name="line.6983"></a>
-<span class="sourceLineNo">6984</span>          writeEntry = doWALAppend(walEdit, durability, nonceGroup, nonce);<a name="line.6984"></a>
-<span class="sourceLineNo">6985</span>        } else {<a name="line.6985"></a>
-<span class="sourceLineNo">6986</span>          // If walEdits is empty, it means we skipped the WAL; update counters and start an mvcc<a name="line.6986"></a>
-<span class="sourceLineNo">6987</span>          // transaction.<a name="line.6987"></a>
-<span class="sourceLineNo">6988</span>          recordMutationWithoutWal(mutation.getFamilyCellMap());<a name="line.6988"></a>
-<span class="sourceLineNo">6989</span>          writeEntry = mvcc.begin();<a name="line.6989"></a>
-<span class="sourceLineNo">6990</span>        }<a name="line.6990"></a>
-<span class="sourceLineNo">6991</span>        // Now write to MemStore. Do it a column family at a time.<a name="line.6991"></a>
-<span class="sourceLineNo">6992</span>        long sequenceId = writeEntry.getWriteNumber();<a name="line.6992"></a>
-<span class="sourceLineNo">6993</span>        for (Map.Entry&lt;Store, List&lt;Cell&gt;&gt; e: forMemStore.entrySet()) {<a name="line.6993"></a>
-<span class="sourceLineNo">6994</span>          accumulatedResultSize +=<a name="line.6994"></a>
-<span class="sourceLineNo">6995</span>              applyToMemstore(e.getKey(), e.getValue(), true, false, sequenceId);<a name="line.6995"></a>
-<span class="sourceLineNo">6996</span>        }<a name="line.6996"></a>
-<span class="sourceLineNo">6997</span>        mvcc.completeAndWait(writeEntry);<a name="line.6997"></a>
-<span class="sourceLineNo">6998</span>        writeEntry = null;<a name="line.6998"></a>
-<span class="sourceLineNo">6999</span>      } finally {<a name="line.6999"></a>
-<span class="sourceLineNo">7000</span>        this.updatesLock.readLock().unlock();<a name="line.7000"></a>
-<span class="sourceLineNo">7001</span>      }<a name="line.7001"></a>
-<span class="sourceLineNo">7002</span>      // If results is null, then client asked that we not return the calculated results.<a name="line.7002"></a>
-<span class="sourceLineNo">7003</span>      return results !=  null? Result.create(results): null;<a name="line.7003"></a>
-<span class="sourceLineNo">7004</span>    } finally {<a name="line.7004"></a>
-<span class="sourceLineNo">7005</span>      // Call complete always, even on success. doDelta is doing a Get READ_UNCOMMITTED when it goes<a name="line.7005"></a>
-<span class="sourceLineNo">7006</span>      // to get current value under an exclusive lock so no need so no need to wait to return to<a name="line.7006"></a>
-<span class="sourceLineNo">7007</span>      // the client. Means only way to read-your-own-increment or append is to come in with an<a name="line.7007"></a>
-<span class="sourceLineNo">7008</span>      // a 0 increment.<a name="line.7008"></a>
-<span class="sourceLineNo">7009</span>      if (writeEntry != null) mvcc.complete(writeEntry);<a name="line.7009"></a>
-<span class="sourceLineNo">7010</span>      rowLock.release();<a name="line.7010"></a>
-<span class="sourceLineNo">7011</span>      // Request a cache flush if over the limit.  Do it outside update lock.<a name="line.7011"></a>
-<span class="sourceLineNo">7012</span>      if (isFlushSize(this.addAndGetGlobalMemstoreSize(accumulatedResultSize))) requestFlush();<a name="line.7012"></a>
-<span class="sourceLineNo">7013</span>      closeRegionOperation(op);<a name="line.7013"></a>
-<span class="sourceLineNo">7014</span>      if (this.metricsRegion != null) {<a name="line.7014"></a>
-<span class="sourceLineNo">7015</span>        switch (op) {<a name="line.7015"></a>
-<span class="sourceLineNo">7016</span>          case INCREMENT:<a name="line.7016"></a>
-<span class="sourceLineNo">7017</span>            this.metricsRegion.updateIncrement();<a name="line.7017"></a>
-<span class="sourceLineNo">7018</span>            break;<a name="line.7018"></a>
-<span class="sourceLineNo">7019</span>          case APPEND:<a name="line.7019"></a>
-<span class="sourceLineNo">7020</span>            this.metricsRegion.updateAppend();<a name="line.7020"></a>
-<span class="sourceLineNo">7021</span>            break;<a name="line.7021"></a>
-<span class="sourceLineNo">7022</span>          default:<a name="line.7022"></a>
+<span class="sourceLineNo">6975</span>        if (cpResult != null) {<a name="line.6975"></a>
+<span class="sourceLineNo">6976</span>          return returnResults? cpResult: null;<a name="line.6976"></a>
+<span class="sourceLineNo">6977</span>        }<a name="line.6977"></a>
+<span class="sourceLineNo">6978</span>        Durability effectiveDurability = getEffectiveDurability(mutation.getDurability());<a name="line.6978"></a>
+<span class="sourceLineNo">6979</span>        Map&lt;Store, List&lt;Cell&gt;&gt; forMemStore =<a name="line.6979"></a>
+<span class="sourceLineNo">6980</span>            new HashMap&lt;Store, List&lt;Cell&gt;&gt;(mutation.getFamilyCellMap().size());<a name="line.6980"></a>
+<span class="sourceLineNo">6981</span>        // Reckon Cells to apply to WAL --  in returned walEdit -- and what to add to memstore and<a name="line.6981"></a>
+<span class="sourceLineNo">6982</span>        // what to return back to the client (in 'forMemStore' and 'results' respectively).<a name="line.6982"></a>
+<span class="sourceLineNo">6983</span>        WALEdit walEdit = reckonDeltas(op, mutation, effectiveDurability, forMemStore, results);<a name="line.6983"></a>
+<span class="sourceLineNo">6984</span>        // Actually write to WAL now if a walEdit to apply.<a name="line.6984"></a>
+<span class="sourceLineNo">6985</span>        if (walEdit != null &amp;&amp; !walEdit.isEmpty()) {<a name="line.6985"></a>
+<span class="sourceLineNo">6986</span>          writeEntry = doWALAppend(walEdit, durability, nonceGroup, nonce);<a name="line.6986"></a>
+<span class="sourceLineNo">6987</span>        } else {<a name="line.6987"></a>
+<span class="sourceLineNo">6988</span>          // If walEdits is empty, it means we skipped the WAL; update counters and start an mvcc<a name="line.6988"></a>
+<span class="sourceLineNo">6989</span>          // transaction.<a name="line.6989"></a>
+<span class="sourceLineNo">6990</span>          recordMutationWithoutWal(mutation.getFamilyCellMap());<a name="line.6990"></a>
+<span class="sourceLineNo">6991</span>          writeEntry = mvcc.begin();<a name="line.6991"></a>
+<span class="sourceLineNo">6992</span>        }<a name="line.6992"></a>
+<span class="sourceLineNo">6993</span>        // Now write to MemStore. Do it a column family at a time.<a name="line.6993"></a>
+<span class="sourceLineNo">6994</span>        long sequenceId = writeEntry.getWriteNumber();<a name="line.6994"></a>
+<span class="sourceLineNo">6995</span>        for (Map.Entry&lt;Store, List&lt;Cell&gt;&gt; e: forMemStore.entrySet()) {<a name="line.6995"></a>
+<span class="sourceLineNo">6996</span>          accumulatedResultSize +=<a name="line.6996"></a>
+<span class="sourceLineNo">6997</span>              applyToMemstore(e.getKey(), e.getValue(), true, false, sequenceId);<a name="line.6997"></a>
+<span class="sourceLineNo">6998</span>        }<a name="line.6998"></a>
+<span class="sourceLineNo">6999</span>        mvcc.completeAndWait(writeEntry);<a name="line.6999"></a>
+<span class="sourceLineNo">7000</span>        writeEntry = null;<a name="line.7000"></a>
+<span class="sourceLineNo">7001</span>      } finally {<a name="line.7001"></a>
+<span class="sourceLineNo">7002</span>        this.updatesLock.readLock().unlock();<a name="line.7002"></a>
+<span class="sourceLineNo">7003</span>      }<a name="line.7003"></a>
+<span class="sourceLineNo">7004</span>      // If results is null, then client asked that we not return the calculated results.<a name="line.7004"></a>
+<span class="sourceLineNo">7005</span>      return results != null &amp;&amp; returnResults? Result.create(results): null;<a name="line.7005"></a>
+<span class="sourceLineNo">7006</span>    } finally {<a name="line.7006"></a>
+<span class="sourceLineNo">7007</span>      // Call complete always, even on success. doDelta is doing a Get READ_UNCOMMITTED when it goes<a name="line.7007"></a>
+<span class="sourceLineNo">7008</span>      // to get current value under an exclusive lock so no need so no need to wait to return to<a name="line.7008"></a>
+<span class="sourceLineNo">7009</span>      // the client. Means only way to read-your-own-increment or append is to come in with an<a name="line.7009"></a>
+<span class="sourceLineNo">7010</span>      // a 0 increment.<a name="line.7010"></a>
+<span class="sourceLineNo">7011</span>      if (writeEntry != null) mvcc.complete(writeEntry);<a name="line.7011"></a>
+<span class="sourceLineNo">7012</span>      rowLock.release();<a name="line.7012"></a>
+<span class="sourceLineNo">7013</span>      // Request a cache flush if over the limit.  Do it outside update lock.<a name="line.7013"></a>
+<span class="sourceLineNo">7014</span>      if (isFlushSize(this.addAndGetGlobalMemstoreSize(accumulatedResultSize))) requestFlush();<a name="line.7014"></a>
+<span class="sourceLineNo">7015</span>      closeRegionOperation(op);<a name="line.7015"></a>
+<span class="sourceLineNo">7016</span>      if (this.metricsRegion != null) {<a name="line.7016"></a>
+<span class="sourceLineNo">7017</span>        switch (op) {<a name="line.7017"></a>
+<span class="sourceLineNo">7018</span>          case INCREMENT:<a name="line.7018"></a>
+<span class="sourceLineNo">7019</span>            this.metricsRegion.updateIncrement();<a name="line.7019"></a>
+<span class="sourceLineNo">7020</span>            break;<a name="line.7020"></a>
+<span class="sourceLineNo">7021</span>          case APPEND:<a name="line.7021"></a>
+<span class="sourceLineNo">7022</span>            this.metricsRegion.updateAppend();<a name="line.7022"></a>
 <span class="sourceLineNo">7023</span>            break;<a name="line.7023"></a>
-<span class="sourceLineNo">7024</span>        }<a name="line.7024"></a>
-<span class="sourceLineNo">7025</span>      }<a name="line.7025"></a>
-<span class="sourceLineNo">7026</span>    }<a name="line.7026"></a>
-<span class="sourceLineNo">7027</span>  }<a name="line.7027"></a>
-<span class="sourceLineNo">7028</span><a name="line.7028"></a>
-<span class="sourceLineNo">7029</span>  private WriteEntry doWALAppend(WALEdit walEdit, Durability durability, long nonceGroup,<a name="line.7029"></a>
-<span class="sourceLineNo">7030</span>      long nonce)<a name="line.7030"></a>
-<span class="sourceLineNo">7031</span>  throws IOException {<a name="line.7031"></a>
-<span class="sourceLineNo">7032</span>    return doWALAppend(walEdit, durability, WALKey.EMPTY_UUIDS, System.currentTimeMillis(),<a name="line.7032"></a>
-<span class="sourceLineNo">7033</span>      nonceGroup, nonce);<a name="line.7033"></a>
-<span class="sourceLineNo">7034</span>  }<a name="line.7034"></a>
-<span class="sourceLineNo">7035</span><a name="line.7035"></a>
-<span class="sourceLineNo">7036</span>  /**<a name="line.7036"></a>
-<span class="sourceLineNo">7037</span>   * @return writeEntry associated with this append<a name="line.7037"></a>
-<span class="sourceLineNo">7038</span>   */<a name="line.7038"></a>
-<span class="sourceLineNo">7039</span>  private WriteEntry doWALAppend(WALEdit walEdit, Durability durability, List&lt;UUID&gt; clusterIds,<a name="line.7039"></a>
-<span class="sourceLineNo">7040</span>      long now, long nonceGroup, long nonce)<a name="line.7040"></a>
-<span class="sourceLineNo">7041</span>  throws IOException {<a name="line.7041"></a>
-<span class="sourceLineNo">7042</span>    WriteEntry writeEntry = null;<a name="line.7042"></a>
-<span class="sourceLineNo">7043</span>    // Using default cluster id, as this can only happen in the originating cluster.<a name="line.7043"></a>
-<span class="sourceLineNo">7044</span>    // A slave cluster receives the final value (not the delta) as a Put. We use HLogKey<a name="line.7044"></a>
-<span class="sourceLineNo">7045</span>    // here instead of WALKey directly to support legacy coprocessors.<a name="line.7045"></a>
-<span class="sourceLineNo">7046</span>    WALKey walKey = new WALKey(this.getRegionInfo().getEncodedNameAsBytes(),<a name="line.7046"></a>
-<span class="sourceLineNo">7047</span>      this.htableDescriptor.getTableName(), WALKey.NO_SEQUENCE_ID, now, clusterIds,<a name="line.7047"></a>
-<span class="sourceLineNo">7048</span>      nonceGroup, nonce, mvcc);<a name="line.7048"></a>
-<span class="sourceLineNo">7049</span>    try {<a name="line.7049"></a>
-<span class="sourceLineNo">7050</span>      long txid =<a name="line.7050"></a>
-<span class="sourceLineNo">7051</span>        this.wal.append(this.htableDescriptor, this.getRegionInfo(), walKey, walEdit, true);<a name="line.7051"></a>
-<span class="sourceLineNo">7052</span>      // Call sync on our edit.<a name="line.7052"></a>
-<span class="sourceLineNo">7053</span>      if (txid != 0) sync(txid, durability);<a name="line.7053"></a>
-<span class="sourceLineNo">7054</span>      writeEntry = walKey.getWriteEntry();<a name="line.7054"></a>
-<span class="sourceLineNo">7055</span>    } catch (IOException ioe) {<a name="line.7055"></a>
-<span class="sourceLineNo">7056</span>      if (walKey != null) mvcc.complete(walKey.getWriteEntry());<a name="line.7056"></a>
-<span class="sourceLineNo">7057</span>      throw ioe;<a name="line.7057"></a>
-<span class="sourceLineNo">7058</span>    }<a name="line.7058"></a>
-<span class="sourceLineNo">7059</span>    return writeEntry;<a name="line.7059"></a>
-<span class="sourceLineNo">7060</span>  }<a name="line.7060"></a>
-<span class="sourceLineNo">7061</span><a name="line.7061"></a>
-<span class="sourceLineNo">7062</span>  /**<a name="line.7062"></a>
-<span class="sourceLineNo">7063</span>   * Do coprocessor pre-increment or pre-append call.<a name="line.7063"></a>
-<span class="sourceLineNo">7064</span>   * @return Result returned out of the coprocessor, which means bypass all further processing and<a name="line.7064"></a>
-<span class="sourceLineNo">7065</span>   *  return the proffered Result instead, or null which means proceed.<a name="line.7065"></a>
-<span class="sourceLineNo">7066</span>   */<a name="line.7066"></a>
-<span class="sourceLineNo">7067</span>  private Result doCoprocessorPreCall(final Operation op, final Mutation mutation)<a name="line.7067"></a>
-<span class="sourceLineNo">7068</span>  throws IOException {<a name="line.7068"></a>
-<span class="sourceLineNo">7069</span>    Result result = null;<a name="line.7069"></a>
-<span class="sourceLineNo">7070</span>    if (this.coprocessorHost != null) {<a name="line.7070"></a>
-<span class="sourceLineNo">7071</span>      switch(op) {<a name="line.7071"></a>
-<span class="sourceLineNo">7072</span>        case INCREMENT:<a name="line.7072"></a>
-<span class="sourceLineNo">7073</span>          result = this.coprocessorHost.preIncrementAfterRowLock((Increment)mutation);<a name="line.7073"></a>
-<span class="sourceLineNo">7074</span>          break;<a name="line.7074"></a>
-<span class="sourceLineNo">7075</span>        case APPEND:<a name="line.7075"></a>
-<span class="sourceLineNo">7076</span>          result = this.coprocessorHost.preAppendAfterRowLock((Append)mutation);<a name="line.7076"></a>
-<span class="sourceLineNo">7077</span>          break;<a name="line.7077"></a>
-<span class="sourceLineNo">7078</span>        default: throw new UnsupportedOperationException(op.toString());<a name="line.7078"></a>
-<span class="sourceLineNo">7079</span>      }<a name="line.7079"></a>
-<span class="sourceLineNo">7080</span>    }<a name="line.7080"></a>
-<span class="sourceLineNo">7081</span>    return result;<a name="line.7081"></a>
-<span class="sourceLineNo">7082</span>  }<a name="line.7082"></a>
-<span class="sourceLineNo">7083</span><a name="line.7083"></a>
-<span class="sourceLineNo">7084</span>  /**<a name="line.7084"></a>
-<span class="sourceLineNo">7085</span>   * Reckon the Cells to apply to WAL, memstore, and to return to the Client; these Sets are not<a name="line.7085"></a>
-<span class="sourceLineNo">7086</span>   * always the same dependent on whether to write WAL or if the amount to increment is zero (in<a name="line.7086"></a>
-<span class="sourceLineNo">7087</span>   * this case we write back nothing, just return latest Cell value to the client).<a name="line.7087"></a>
-<span class="sourceLineNo">7088</span>   *<a name="line.7088"></a>
-<span class="sourceLineNo">7089</span>   * @param results Fill in here what goes back to the Client if it is non-null (if null, client<a name="line.7089"></a>
-<span class="sourceLineNo">7090</span>   *  doesn't want results).<a name="line.7090"></a>
-<span class="sourceLineNo">7091</span>   * @param forMemStore Fill in here what to apply to the MemStore (by Store).<a name="line.7091"></a>
-<span class="sourceLineNo">7092</span>   * @return A WALEdit to apply to WAL or null if we are to skip the WAL.<a name="line.7092"></a>
-<span class="sourceLineNo">7093</span>   */<a name="line.7093"></a>
-<span class="sourceLineNo">7094</span>  private WALEdit reckonDeltas(final Operation op, final Mutation mutation,<a name="line.7094"></a>
-<span class="sourceLineNo">7095</span>      final Durability effectiveDurability, final Map&lt;Store, List&lt;Cell&gt;&gt; forMemStore,<a name="line.7095"></a>
-<span class="sourceLineNo">7096</span>      final List&lt;Cell&gt; results)<a name="line.7096"></a>
-<span class="sourceLineNo">7097</span>  throws IOException {<a name="line.7097"></a>
-<span class="sourceLineNo">7098</span>    WALEdit walEdit = null;<a name="line.7098"></a>
-<span class="sourceLineNo">7099</span>    long now = EnvironmentEdgeManager.currentTime();<a name="line.7099"></a>
-<span class="sourceLineNo">7100</span>    final boolean writeToWAL = effectiveDurability != Durability.SKIP_WAL;<a name="line.7100"></a>
-<span class="sourceLineNo">7101</span>    // Process a Store/family at a time.<a name="line.7101"></a>
-<span class="sourceLineNo">7102</span>    for (Map.Entry&lt;byte [], List&lt;Cell&gt;&gt; entry: mutation.getFamilyCellMap().entrySet()) {<a name="line.7102"></a>
-<span class="sourceLineNo">7103</span>      final byte [] columnFamilyName = entry.getKey();<a name="line.7103"></a>
-<span class="sourceLineNo">7104</span>      List&lt;Cell&gt; deltas = entry.getValue();<a name="line.7104"></a>
-<span class="sourceLineNo">7105</span>      Store store = this.stores.get(columnFamilyName);<a name="line.7105"></a>
-<span class="sourceLineNo">7106</span>      // Reckon for the Store what to apply to WAL and MemStore.<a name="line.7106"></a>
-<span class="sourceLineNo">7107</span>      List&lt;Cell&gt; toApply =<a name="line.7107"></a>
-<span class="sourceLineNo">7108</span>        reckonDeltasByStore(store, op, mutation, effectiveDurability, now, deltas, results);<a name="line.7108"></a>
-<span class="sourceLineNo">7109</span>      if (!toApply.isEmpty()) {<a name="line.7109"></a>
-<span class="sourceLineNo">7110</span>        forMemStore.put(store, toApply);<a name="line.7110"></a>
-<span class="sourceLineNo">7111</span>        if (writeToWAL) {<a name="line.7111"></a>
-<span class="sourceLineNo">7112</span>          if (walEdit == null) {<a name="line.7112"></a>
-<span class="sourceLineNo">7113</span>            walEdit = new WALEdit();<a name="line.7113"></a>
-<span class="sourceLineNo">7114</span>          }<a name="line.7114"></a>
-<span class="sourceLineNo">7115</span>          walEdit.getCells().addAll(toApply);<a name="line.7115"></a>
-<span class="sourceLineNo">7116</span>        }<a name="line.7116"></a>
-<span class="sourceLineNo">7117</span>      }<a name="line.7117"></a>
-<span class="sourceLineNo">7118</span>    }<a name="line.7118"></a>
-<span class="sourceLineNo">7119</span>    return walEdit;<a name="line.7119"></a>
-<span class="sourceLineNo">7120</span>  }<a name="line.7120"></a>
-<span class="sourceLineNo">7121</span><a name="line.7121"></a>
-<span class="sourceLineNo">7122</span>  /**<a name="line.7122"></a>
-<span class="sourceLineNo">7123</span>   * Reckon the Cells to apply to WAL, memstore, and to return to the Client in passed<a name="line.7123"></a>
-<span class="sourceLineNo">7124</span>   * column family/Store.<a name="line.7124"></a>
-<span class="sourceLineNo">7125</span>   *<a name="line.7125"></a>
-<span class="sourceLineNo">7126</span>   * Does Get of current value and then adds passed in deltas for this Store returning the result.<a name="line.7126"></a>
+<span class="sourceLineNo">7024</span>          default:<a name="line.7024"></a>
+<span class="sourceLineNo">7025</span>            break;<a name="line.7025"></a>
+<span class="sourceLineNo">7026</span>        }<a name="line.7026"></a>
+<span class="sourceLineNo">7027</span>      }<a name="line.7027"></a>
+<span class="sourceLineNo">7028</span>    }<a name="line.7028"></a>
+<span class="sourceLineNo">7029</span>  }<a name="line.7029"></a>
+<span class="sourceLineNo">7030</span><a name="line.7030"></a>
+<span class="sourceLineNo">7031</span>  private WriteEntry doWALAppend(WALEdit walEdit, Durability durability, long nonceGroup,<a name="line.7031"></a>
+<span class="sourceLineNo">7032</span>      long nonce)<a name="line.7032"></a>
+<span class="sourceLineNo">7033</span>  throws IOException {<a name="line.7033"></a>
+<span class="sourceLineNo">7034</span>    return doWALAppend(walEdit, durability, WALKey.EMPTY_UUIDS, System.currentTimeMillis(),<a name="line.7034"></a>
+<span class="sourceLineNo">7035</span>      nonceGroup, nonce);<a name="line.7035"></a>
+<span class="sourceLineNo">7036</span>  }<a name="line.7036"></a>
+<span class="sourceLineNo">7037</span><a name="line.7037"></a>
+<span class="sourceLineNo">7038</span>  /**<a name="line.7038"></a>
+<span class="sourceLineNo">7039</span>   * @return writeEntry associated with this append<a name="line.7039"></a>
+<span class="sourceLineNo">7040</span>   */<a name="line.7040"></a>
+<span class="sourceLineNo">7041</span>  private WriteEntry doWALAppend(WALEdit walEdit, Durability durability, List&lt;UUID&gt; clusterIds,<a name="line.7041"></a>
+<span class="sourceLineNo">7042</span>      long now, long nonceGroup, long nonce)<a name="line.7042"></a>
+<span class="sourceLineNo">7043</span>  throws IOException {<a name="line.7043"></a>
+<span class="sourceLineNo">7044</span>    WriteEntry writeEntry = null;<a name="line.7044"></a>
+<span class="sourceLineNo">7045</span>    // Using default cluster id, as this can only happen in the originating cluster.<a name="line.7045"></a>
+<span class="sourceLineNo">7046</span>    // A slave cluster receives the final value (not the delta) as a Put. We use HLogKey<a name="line.7046"></a>
+<span class="sourceLineNo">7047</span>    // here instead of WALKey directly to support legacy coprocessors.<a name="line.7047"></a>
+<span class="sourceLineNo">7048</span>    WALKey walKey = new WALKey(this.getRegionInfo().getEncodedNameAsBytes(),<a name="line.7048"></a>
+<span class="sourceLineNo">7049</span>      this.htableDescriptor.getTableName(), WALKey.NO_SEQUENCE_ID, now, clusterIds,<a name="line.7049"></a>
+<span class="sourceLineNo">7050</span>      nonceGroup, nonce, mvcc);<a name="line.7050"></a>
+<span class="sourceLineNo">7051</span>    try {<a name="line.7051"></a>
+<span class="sourceLineNo">7052</span>      long txid =<a name="line.7052"></a>
+<span class="sourceLineNo">7053</span>        this.wal.append(this.htableDescriptor, this.getRegionInfo(), walKey, walEdit, true);<a name="line.7053"></a>
+<span class="sourceLineNo">7054</span>      // Call sync on our edit.<a name="line.7054"></a>
+<span class="sourceLineNo">7055</span>      if (txid != 0) sync(txid, durability);<a name="line.7055"></a>
+<span class="sourceLineNo">7056</span>      writeEntry = walKey.getWriteEntry();<a name="line.7056"></a>
+<span class="sourceLineNo">7057</span>    } catch (IOException ioe) {<a name="line.7057"></a>
+<span class="sourceLineNo">7058</span>      if (walKey != null) mvcc.complete(walKey.getWriteEntry());<a name="line.7058"></a>
+<span class="sourceLineNo">7059</span>      throw ioe;<a name="line.7059"></a>
+<span class="sourceLineNo">7060</span>    }<a name="line.7060"></a>
+<span class="sourceLineNo">7061</span>    return writeEntry;<a name="line.7061"></a>
+<span class="sourceLineNo">7062</span>  }<a name="line.7062"></a>
+<span class="sourceLineNo">7063</span><a name="line.7063"></a>
+<span class="sourceLineNo">7064</span>  /**<a name="line.7064"></a>
+<span class="sourceLineNo">7065</span>   * Do coprocessor pre-increment or pre-append call.<a name="line.7065"></a>
+<span class="sourceLineNo">7066</span>   * @return Result returned out of the coprocessor, which means bypass all further processing and<a name="line.7066"></a>
+<span class="sourceLineNo">7067</span>   *  return the proffered Result instead, or null which means proceed.<a name="line.7067"></a>
+<span class="sourceLineNo">7068</span>   */<a name="line.7068"></a>
+<span class="sourceLineNo">7069</span>  private Result doCoprocessorPreCall(final Operation op, final Mutation mutation)<a name="line.7069"></a>
+<span class="sourceLineNo">7070</span>  throws IOException {<a name="line.7070"></a>
+<span class="sourceLineNo">7071</span>    Result result = null;<a name="line.7071"></a>
+<span class="sourceLineNo">7072</span>    if (this.coprocessorHost != null) {<a name="line.7072"></a>
+<span class="sourceLineNo">7073</span>      switch(op) {<a name="line.7073"></a>
+<span class="sourceLineNo">7074</span>        case INCREMENT:<a name="line.7074"></a>
+<span class="sourceLineNo">7075</span>          result = this.coprocessorHost.preIncrementAfterRowLock((Increment)mutation);<a name="line.7075"></a>
+<span class="sourceLineNo">7076</span>          break;<a name="line.7076"></a>
+<span class="sourceLineNo">7077</span>        case APPEND:<a name="line.7077"></a>
+<span class="sourceLineNo">7078</span>          result = this.coprocessorHost.preAppendAfterRowLock((Append)mutation);<a name="line.7078"></a>
+<span class="sourceLineNo">7079</span>          break;<a name="line.7079"></a>
+<span class="sourceLineNo">7080</span>        default: throw new UnsupportedOperationException(op.toString());<a name="line.7080"></a>
+<span class="sourceLineNo">7081</span>      }<a name="line.7081"></a>
+<span class="sourceLineNo">7082</span>    }<a name="line.7082"></a>
+<span class="sourceLineNo">7083</span>    return result;<a name="line.7083"></a>
+<span class="sourceLineNo">7084</span>  }<a name="line.7084"></a>
+<span class="sourceLineNo">7085</span><a name="line.7085"></a>
+<span class="sourceLineNo">7086</span>  /**<a name="line.7086"></a>
+<span class="sourceLineNo">7087</span>   * Reckon the Cells to apply to WAL, memstore, and to return to the Client; these Sets are not<a name="line.7087"></a>
+<span class="sourceLineNo">7088</span>   * always the same dependent on whether to write WAL or if the amount to increment is zero (in<a name="line.7088"></a>
+<span class="sourceLineNo">7089</span>   * this case we write back nothing, just return latest Cell value to the client).<a name="line.7089"></a>
+<span class="sourceLineNo">7090</span>   *<a name="line.7090"></a>
+<span class="sourceLineNo">7091</span>   * @param results Fill in here what goes back to the Client if it is non-null (if null, client<a name="line.7091"></a>
+<span class="sourceLineNo">7092</span>   *  doesn't want results).<a name="line.7092"></a>
+<span class="sourceLineNo">7093</span>   * @param forMemStore Fill in here what to apply to the MemStore (by Store).<a name="line.7093"></a>
+<span class="sourceLineNo">7094</span>   * @return A WALEdit to apply to WAL or null if we are to skip the WAL.<a name="line.7094"></a>
+<span class="sourceLineNo">7095</span>   */<a name="line.7095"></a>
+<span class="sourceLineNo">7096</span>  private WALEdit reckonDeltas(final Operation op, final Mutation mutation,<a name="line.7096"></a>
+<span class="sourceLineNo">7097</span>      final Durability effectiveDurability, final Map&lt;Store, List&lt;Cell&gt;&gt; forMemStore,<a name="line.7097"></a>
+<span class="sourceLineNo">7098</span>      final List&lt;Cell&gt; results)<a name="line.7098"></a>
+<span class="sourceLineNo">7099</span>  throws IOException {<a name="line.7099"></a>
+<span class="sourceLineNo">7100</span>    WALEdit walEdit = null;<a name="line.7100"></a>
+<span class="sourceLineNo">7101</span>    long now = EnvironmentEdgeManager.currentTime();<a name="line.7101"></a>
+<span class="sourceLineNo">7102</span>    final boolean writeToWAL = effectiveDurability != Durability.SKIP_WAL;<a name="line.7102"></a>
+<span class="sourceLineNo">7103</span>    // Process a Store/family at a time.<a name="line.7103"></a>
+<span class="sourceLineNo">7104</span>    for (Map.Entry&lt;byte [], List&lt;Cell&gt;&gt; entry: mutation.getFamilyCellMap().entrySet()) {<a name="line.7104"></a>
+<span class="sourceLineNo">7105</span>      final byte [] columnFamilyName = entry.getKey();<a name="line.7105"></a>
+<span class="sourceLineNo">7106</span>      List&lt;Cell&gt; deltas = entry.getValue();<a name="line.7106"></a>
+<span class="sourceLineNo">7107</span>      Store store = this.stores.get(columnFamilyName);<a name="line.7107"></a>
+<span class="sourceLineNo">7108</span>      // Reckon for the Store what to apply to WAL and MemStore.<a name="line.7108"></a>
+<span class="sourceLineNo">7109</span>      List&lt;Cell&gt; toApply =<a name="line.7109"></a>
+<span class="sourceLineNo">7110</span>        reckonDeltasByStore(store, op, mutation, effectiveDurability, now, deltas, results);<a name="line.7110"></a>
+<span class="sourceLineNo">7111</span>      if (!toApply.isEmpty()) {<a name="line.7111"></a>
+<span class="sourceLineNo">7112</span>        forMemStore.put(store, toApply);<a name="line.7112"></a>
+<span class="sourceLineNo">7113</span>        if (writeToWAL) {<a name="line.7113"></a>
+<span class="sourceLineNo">7114</span>          if (walEdit == null) {<a name="line.7114"></a>
+<span class="sourceLineNo">7115</span>            walEdit = new WALEdit();<a name="line.7115"></a>
+<span class="sourceLineNo">7116</span>          }<a name="line.7116"></a>
+<span class="sourceLineNo">7117</span>          walEdit.getCells().addAll(toApply);<a name="line.7117"></a>
+<span class="sourceLineNo">7118</span>        }<a name="line.7118"></a>
+<span class="sourceLineNo">7119</span>      }<a name="line.7119"></a>
+<span class="sourceLineNo">7120</span>    }<a name="line.7120"></a>
+<span class="sourceLineNo">7121</span>    return walEdit;<a name="line.7121"></a>
+<span class="sourceLineNo">7122</span>  }<a name="line.7122"></a>
+<span class="sourceLineNo">7123</span><a name="line.7123"></a>
+<span class="sourceLineNo">7124</span>  /**<a name="line.7124"></a>
+<span class="sourceLineNo">7125</span>   * Reckon the Cells to apply to WAL, memstore, and to return to the Client in passed<a name="line.7125"></a>
+<span class="sourceLineNo">7126</span>   * column family/Store.<a name="line.7126"></a>
 <span class="sourceLineNo">7127</span>   *<a name="line.7127"></a>
-<span class="sourceLineNo">7128</span>   * @param op Whether Increment or Append<a name="line.7128"></a>
-<span class="sourceLineNo">7129</span>   * @param mutation The encompassing Mutation object<a name="line.7129"></a>
-<span class="sourceLineNo">7130</span>   * @param deltas Changes to apply to this Store; either increment amount or data to append<a name="line.7130"></a>
-<span class="sourceLineNo">7131</span>   * @param results In here we accumulate all the Cells we are to return to the client; this List<a name="line.7131"></a>
-<span class="sourceLineNo">7132</span>   *  can be larger than what we return in case where delta is zero; i.e. don't write<a name="line.7132"></a>
-<span class="sourceLineNo">7133</span>   *  out new values, just return current value. If null, client doesn't want results returned.<a name="line.7133"></a>
-<span class="sourceLineNo">7134</span>   * @return Resulting Cells after &lt;code&gt;deltas&lt;/code&gt; have been applied to current<a name="line.7134"></a>
-<span class="sourceLineNo">7135</span>   *  values. Side effect is our filling out of the &lt;code&gt;results&lt;/code&gt; List.<a name="line.7135"></a>
-<span class="sourceLineNo">7136</span>   */<a name="line.7136"></a>
-<span class="sourceLineNo">7137</span>  private List&lt;Cell&gt; reckonDeltasByStore(final Store store, final Operation op,<a name="line.7137"></a>
-<span class="sourceLineNo">7138</span>      final Mutation mutation, final Durability effectiveDurability, final long now,<a name="line.7138"></a>
-<span class="sourceLineNo">7139</span>      final List&lt;Cell&gt; deltas, final List&lt;Cell&gt; results)<a name="line.7139"></a>
-<span class="sourceLineNo">7140</span>  throws IOException {<a name="line.7140"></a>
-<span class="sourceLineNo">7141</span>    byte [] columnFamily = store.getFamily().getName();<a name="line.7141"></a>
-<span class="sourceLineNo">7142</span>    List&lt;Cell&gt; toApply = new ArrayList&lt;Cell&gt;(deltas.size());<a name="line.7142"></a>
-<span class="sourceLineNo">7143</span>    // Get previous values for all columns in this family.<a name="line.7143"></a>
-<span class="sourceLineNo">7144</span>    List&lt;Cell&gt; currentValues = get(mutation, store, deltas,<a name="line.7144"></a>
-<span class="sourceLineNo">7145</span>        null/*Default IsolationLevel*/,<a name="line.7145"></a>
-<span class="sourceLineNo">7146</span>        op == Operation.INCREMENT? ((Increment)mutation).getTimeRange(): null);<a name="line.7146"></a>
-<span class="sourceLineNo">7147</span>    // Iterate the input columns and update existing values if they were found, otherwise<a name="line.7147"></a>
-<span class="sourceLineNo">7148</span>    // add new column initialized to the delta amount<a name="line.7148"></a>
-<span class="sourceLineNo">7149</span>    int currentValuesIndex = 0;<a name="line.7149"></a>
-<span class="sourceLineNo">7150</span>    for (int i = 0; i &lt; deltas.size(); i++) {<a name="line.7150"></a>
-<span class="sourceLineNo">7151</span>      Cell delta = deltas.get(i);<a name="line.7151"></a>
-<span class="sourceLineNo">7152</span>      Cell currentValue = null;<a name="line.7152"></a>
-<span class="sourceLineNo">7153</span>      if (currentValuesIndex &lt; currentValues.size() &amp;&amp;<a name="line.7153"></a>
-<span class="sourceLineNo">7154</span>          CellUtil.matchingQualifier(currentValues.get(currentValuesIndex), delta)) {<a name="line.7154"></a>
-<span class="sourceLineNo">7155</span>        currentValue = currentValues.get(currentValuesIndex);<a name="line.7155"></a>
-<span class="sourceLineNo">7156</span>        if (i &lt; (deltas.size() - 1) &amp;&amp; !CellUtil.matchingQualifier(delta, deltas.get(i + 1))) {<a name="line.7156"></a>
-<span class="sourceLineNo">7157</span>          currentValuesIndex++;<a name="line.7157"></a>
-<span class="sourceLineNo">7158</span>        }<a name="line.7158"></a>
-<span class="sourceLineNo">7159</span>      }<a name="line.7159"></a>
-<span class="sourceLineNo">7160</span>      // Switch on whether this an increment or an append building the new Cell to apply.<a name="line.7160"></a>
-<span class="sourceLineNo">7161</span>      Cell newCell = null;<a name="line.7161"></a>
-<span class="sourceLineNo">7162</span>      MutationType mutationType = null;<a name="line.7162"></a>
-<span class="sourceLineNo">7163</span>      boolean apply = true;<a name="line.7163"></a>
-<span class="sourceLineNo">7164</span>      switch (op) {<a name="line.7164"></a>
-<span class="sourceLineNo">7165</span>        case INCREMENT:<a name="line.7165"></a>
-<span class="sourceLineNo">7166</span>          mutationType = MutationType.INCREMENT;<a name="line.7166"></a>
-<span class="sourceLineNo">7167</span>          // If delta amount to apply is 0, don't write WAL or MemStore.<a name="line.7167"></a>
-<span class="sourceLineNo">7168</span>          long deltaAmount = getLongValue(delta);<a name="line.7168"></a>
-<span class="sourceLineNo">7169</span>          apply = deltaAmount != 0;<a name="line.7169"></a>
-<span class="sourceLineNo">7170</span>          newCell = reckonIncrement(delta, deltaAmount, currentValue, columnFamily, now,<a name="line.7170"></a>
-<span class="sourceLineNo">7171</span>            (Increment)mutation);<a name="line.7171"></a>
-<span class="sourceLineNo">7172</span>          break;<a name="line.7172"></a>
-<span class="sourceLineNo">7173</span>        case APPEND:<a name="line.7173"></a>
-<span class="sourceLineNo">7174</span>          mutationType = MutationType.APPEND;<a name="line.7174"></a>
-<span class="sourceLineNo">7175</span>          // Always apply Append. TODO: Does empty delta value mean reset Cell? It seems to.<a name="line.7175"></a>
-<span class="sourceLineNo">7176</span>          newCell = reckonAppend(delta, currentValue, now, (Append)mutation);<a name="line.7176"></a>
-<span class="sourceLineNo">7177</span>          break;<a name="line.7177"></a>
-<span class="sourceLineNo">7178</span>        default: throw new UnsupportedOperationException(op.toString());<a name="line.7178"></a>
-<span class="sourceLineNo">7179</span>      }<a name="line.7179"></a>
-<span class="sourceLineNo">7180</span><a name="line.7180"></a>
-<span class="sourceLineNo">7181</span>      // Give coprocessors a chance to update the new cell<a name="line.7181"></a>
-<span class="sourceLineNo">7182</span>      if (coprocessorHost != null) {<a name="line.7182"></a>
-<span class="sourceLineNo">7183</span>        newCell =<a name="line.7183"></a>
-<span class="sourceLineNo">7184</span>            coprocessorHost.postMutationBeforeWAL(mutationType, mutation, currentValue, newCell);<a name="line.7184"></a>
-<span class="sourceLineNo">7185</span>      }<a name="line.7185"></a>
-<span class="sourceLineNo">7186</span>      // If apply, we need to update memstore/WAL with new value; add it toApply.<a name="line.7186"></a>
-<span class="sourceLineNo">7187</span>      if (apply) {<a name="line.7187"></a>
-<span class="sourceLineNo">7188</span>        toApply.add(newCell);<a name="line.7188"></a>
-<span class="sourceLineNo">7189</span>      }<a name="line.7189"></a>
-<span class="sourceLineNo">7190</span>      // Add to results to get returned to the Client. If null, cilent does not want results.<a name="line.7190"></a>
-<span class="sourceLineNo">7191</span>      if (results != null) {<a name="line.7191"></a>
-<span class="sourceLineNo">7192</span>        results.add(newCell);<a name="line.7192"></a>
-<span class="sourceLineNo">7193</span>      }<a name="line.7193"></a>
-<span class="sourceLineNo">7194</span>    }<a name="line.7194"></a>
-<span class="sourceLineNo">7195</span>    return toApply;<a name="line.7195"></a>
-<span class="sourceLineNo">7196</span>  }<a name="line.7196"></a>
-<span class="sourceLineNo">7197</span><a name="line.7197"></a>
-<span class="sourceLineNo">7198</span>  /**<a name="line.7198"></a>
-<span class="sourceLineNo">7199</span>   * Calculate new Increment Cell.<a name="line.7199"></a>
-<span class="sourceLineNo">7200</span>   * @return New Increment Cell with delta applied to currentValue if currentValue is not null;<a name="line.7200"></a>
-<span class="sourceLineNo">7201</span>   *  otherwise, a new Cell with the delta set as its value.<a name="line.7201"></a>
-<span class="sourceLineNo">7202</span>   */<a name="line.7202"></a>
-<span class="sourceLineNo">7203</span>  private Cell reckonIncrement(final Cell delta, final long deltaAmount, final Cell currentValue,<a name="line.7203"></a>
-<span class="sourceLineNo">7204</span>      byte [] columnFamily, final long now, Mutation mutation)<a name="line.7204"></a>
-<span class="sourceLineNo">7205</span>  throws IOException {<a name="line.7205"></a>
-<span class="sourceLineNo">7206</span>    // Forward any tags found on the delta.<a name="line.7206"></a>
-<span class="sourceLineNo">7207</span>    List&lt;Tag&gt; tags = TagUtil.carryForwardTags(delta);<a name="line.7207"></a>
-<span class="sourceLineNo">7208</span>    long newValue = deltaAmount;<a name="line.7208"></a>
-<span class="sourceLineNo">7209</span>    long ts = now;<a name="line.7209"></a>
-<span class="sourceLineNo">7210</span>    if (currentValue != null) {<a name="line.7210"></a>
-<span class="sourceLineNo">7211</span>      tags = TagUtil.carryForwardTags(tags, currentValue);<a name="line.7211"></a>
-<span class="sourceLineNo">7212</span>      ts = Math.max(now, currentValue.getTimestamp());<a name="line.7212"></a>
-<span class="sourceLineNo">7213</span>      newValue += getLongValue(currentValue);<a name="line.7213"></a>
-<span class="sourceLineNo">7214</span>    }<a name="line.7214"></a>
-<span class="sourceLineNo">7215</span>    // Now make up the new Cell. TODO: FIX. This is carnel knowledge of how KeyValues are made...<a name="line.7215"></a>
-<span class="sourceLineNo">7216</span>    // doesn't work well with offheaping or if we are doing a different Cell type.<a name="line.7216"></a>
-<span class="sourceLineNo">7217</span>    byte [] incrementAmountInBytes = Bytes.toBytes(newValue);<a name="line.7217"></a>
-<span class="sourceLineNo">7218</span>    tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7218"></a>
-<span class="sourceLineNo">7219</span>    byte [] row = mutation.getRow();<a name="line.7219"></a>
-<span class="sourceLineNo">7220</span>    return new KeyValue(row, 0, row.length,<a name="line.7220"></a>
-<span class="sourceLineNo">7221</span>      columnFamily, 0, columnFamily.length,<a name="line.7221"></a>
-<span class="sourceLineNo">7222</span>      delta.getQualifierArray(), delta.getQualifierOffset(), delta.getQualifierLength(),<a name="line.7222"></a>
-<span class="sourceLineNo">7223</span>      ts, KeyValue.Type.Put,<a name="line.7223"></a>
-<span class="sourceLineNo">7224</span>      incrementAmountInBytes, 0, incrementAmountInBytes.length,<a name="line.7224"></a>
-<span class="sourceLineNo">7225</span>      tags);<a name="line.7225"></a>
-<span class="sourceLineNo">7226</span>  }<a name="line.7226"></a>
-<span class="sourceLineNo">7227</span><a name="line.7227"></a>
-<span class="sourceLineNo">7228</span>  private Cell reckonAppend(final Cell delta, final Cell currentValue, final long now,<a name="line.7228"></a>
-<span class="sourceLineNo">7229</span>      Append mutation)<a name="line.7229"></a>
-<span class="sourceLineNo">7230</span>  throws IOException {<a name="line.7230"></a>
-<span class="sourceLineNo">7231</span>    // Forward any tags found on the delta.<a name="line.7231"></a>
-<span class="sourceLineNo">7232</span>    List&lt;Tag&gt; tags = TagUtil.carryForwardTags(delta);<a name="line.7232"></a>
-<span class="sourceLineNo">7233</span>    long ts = now;<a name="line.7233"></a>
-<span class="sourceLineNo">7234</span>    Cell newCell = null;<a name="line.7234"></a>
-<span class="sourceLineNo">7235</span>    byte [] row = mutation.getRow();<a name="line.7235"></a>
-<span class="sourceLineNo">7236</span>    if (currentValue != null) {<a name="line.7236"></a>
-<span class="sourceLineNo">7237</span>      tags = TagUtil.carryForwardTags(tags, currentValue);<a name="line.7237"></a>
-<span class="sourceLineNo">7238</span>      ts = Math.max(now, currentValue.getTimestamp());<a name="line.7238"></a>
-<span class="sourceLineNo">7239</span>      tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7239"></a>
-<span class="sourceLineNo">7240</span>      byte[] tagBytes = TagUtil.fromList(tags);<a name="line.7240"></a>
-<span class="sourceLineNo">7241</span>      // Allocate an empty cell and copy in all parts.<a name="line.7241"></a>
-<span class="sourceLineNo">7242</span>      // TODO: This is intimate knowledge of how a KeyValue is made. Undo!!! Prevents our doing<a name="line.7242"></a>
-<span class="sourceLineNo">7243</span>      // other Cell types. Copying on-heap too if an off-heap Cell.<a name="line.7243"></a>
-<span class="sourceLineNo">7244</span>      newCell = new KeyValue(row.length, delta.getFamilyLength(),<a name="line.7244"></a>
-<span class="sourceLineNo">7245</span>        delta.getQualifierLength(), ts, KeyValue.Type.Put,<a name="line.7245"></a>
-<span class="sourceLineNo">7246</span>        delta.getValueLength() + currentValue.getValueLength(),<a name="line.7246"></a>
-<span class="sourceLineNo">7247</span>        tagBytes == null? 0: tagBytes.length);<a name="line.7247"></a>
-<span class="sourceLineNo">7248</span>      // Copy in row, family, and qualifier<a name="line.7248"></a>
-<span class="sourceLineNo">7249</span>      System.arraycopy(row, 0, newCell.getRowArray(), newCell.getRowOffset(), row.length);<a name="line.7249"></a>
-<span class="sourceLineNo">7250</span>      System.arraycopy(delta.getFamilyArray(), delta.getFamilyOffset(),<a name="line.7250"></a>
-<span class="sourceLineNo">7251</span>          newCell.getFamilyArray(), newCell.getFamilyOffset(), delta.getFamilyLength());<a name="line.7251"></a>
-<span class="sourceLineNo">7252</span>      System.arraycopy(delta.getQualifierArray(), delta.getQualifierOffset(),<a name="line.7252"></a>
-<span class="sourceLineNo">7253</span>          newCell.getQualifierArray(), newCell.getQualifierOffset(), delta.getQualifierLength());<a name="line.7253"></a>
-<span class="sourceLineNo">7254</span>      // Copy in the value<a name="line.7254"></a>
-<span class="sourceLineNo">7255</span>      CellUtil.copyValueTo(currentValue, newCell.getValueArray(), newCell.getValueOffset());<a name="line.7255"></a>
-<span class="sourceLineNo">7256</span>      System.arraycopy(delta.getValueArray(), delta.getValueOffset(),<a name="line.7256"></a>
-<span class="sourceLineNo">7257</span>          newCell.getValueArray(), newCell.getValueOffset() + currentValue.getValueLength(),<a name="line.7257"></a>
-<span class="sourceLineNo">7258</span>          delta.getValueLength());<a name="line.7258"></a>
-<span class="sourceLineNo">7259</span>      // Copy in tag data<a name="line.7259"></a>
-<span class="sourceLineNo">7260</span>      if (tagBytes != null) {<a name="line.7260"></a>
-<span class="sourceLineNo">7261</span>        System.arraycopy(tagBytes, 0,<a name="line.7261"></a>
-<span class="sourceLineNo">7262</span>            newCell.getTagsArray(), newCell.getTagsOffset(), tagBytes.length);<a name="line.7262"></a>
-<span class="sourceLineNo">7263</span>      }<a name="line.7263"></a>
-<span class="sourceLineNo">7264</span>    } else {<a name="line.7264"></a>
-<span class="sourceLineNo">7265</span>      // Append's KeyValue.Type==Put and ts==HConstants.LATEST_TIMESTAMP<a name="line.7265"></a>
-<span class="sourceLineNo">7266</span>      CellUtil.updateLatestStamp(delta, now);<a name="line.7266"></a>
-<span class="sourceLineNo">7267</span>      newCell = delta;<a name="line.7267"></a>
-<span class="sourceLineNo">7268</span>      tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7268"></a>
-<span class="sourceLineNo">7269</span>      if (tags != null) {<a name="line.7269"></a>
-<span class="sourceLineNo">7270</span>        newCell = new TagRewriteCell(delta, TagUtil.fromList(tags));<a name="line.7270"></a>
-<span class="sourceLineNo">7271</span>      }<a name="line.7271"></a>
-<span class="sourceLineNo">7272</span>    }<a name="line.7272"></a>
-<span class="sourceLineNo">7273</span>    return newCell;<a name="line.7273"></a>
-<span class="sourceLineNo">7274</span>  }<a name="line.7274"></a>
-<span class="sourceLineNo">7275</span><a name="line.7275"></a>
-<span class="sourceLineNo">7276</span>  /**<a name="line.7276"></a>
-<span class="sourceLineNo">7277</span>   * @return Get the long out of the passed in Cell<a name="line.7277"></a>
-<span class="sourceLineNo">7278</span>   */<a name="line.7278"></a>
-<span class="sourceLineNo">7279</span>  private static long getLongValue(final Cell cell) throws DoNotRetryIOException {<a name="line.7279"></a>
-<span class="sourceLineNo">7280</span>    int len = cell.getValueLength();<a name="line.7280"></a>
-<span class="sourceLineNo">7281</span>    if (len != Bytes.SIZEOF_LONG) {<a name="line.7281"></a>
-<span class="sourceLineNo">7282</span>      // throw DoNotRetryIOException instead of IllegalArgumentException<a name="line.7282"></a>
-<span class="sourceLineNo">7283</span>      throw new DoNotRetryIOException("Field is not a long, it's " + len + " bytes wide");<a name="line.7283"></a>
-<span class="sourceLineNo">7284</span>    }<a name="line.7284"></a>
-<span class="sourceLineNo">7285</span>    return Bytes.toLong(cell.getValueArray(), cell.getValueOffset(), len);<a name="line.7285"></a>
-<span class="sourceLineNo">7286</span>  }<a name="line.7286"></a>
-<span class="sourceLineNo">7287</span><a name="line.7287"></a>
-<span class="sourceLineNo">7288</span>  /**<a name="line.7288"></a>
-<span class="sourceLineNo">7289</span>   * Do a specific Get on passed &lt;code&gt;columnFamily&lt;/code&gt; and column qualifiers.<a name="line.7289"></a>
-<span class="sourceLineNo">7290</span>   * @param mutation Mutation we are doing this Get for.<a name="line.7290"></a>
-<span class="sourceLineNo">7291</span>   * @param columnFamily Which column family on row (TODO: Go all Gets in one go)<a name="line.7291"></a>
-<span class="sourceLineNo">7292</span>   * @param coordinates Cells from &lt;code&gt;mutation&lt;/code&gt; used as coordinates applied to Get.<a name="line.7292"></a>
-<span class="sourceLineNo">7293</span>   * @return Return list of Cells found.<a name="line.7293"></a>
-<span class="sourceLineNo">7294</span>   */<a name="line.7294"></a>
-<span class="sourceLineNo">7295</span>  private List&lt;Cell&gt; get(final Mutation mutation, final Store store,<a name="line.7295"></a>
-<span class="sourceLineNo">7296</span>          final List&lt;Cell&gt; coordinates, final IsolationLevel isolation, final TimeRange tr)<a name="line.7296"></a>
-<span class="sourceLineNo">7297</span>  throws IOException {<a name="line.7297"></a>
-<span class="sourceLineNo">7298</span>    // Sort the cells so that they match the order that they appear in the Get results. Otherwise,<a name="line.7298"></a>
-<span class="sourceLineNo">7299</span>    // we won't be able to find the existing values if the cells are not specified in order by the<a name="line.7299"></a>
-<span class="sourceLineNo">7300</span>    // client since cells are in an array list.<a name="line.7300"></a>
-<span class="sourceLineNo">7301</span>    // TODO: I don't get why we are sorting. St.Ack 20150107<a name="line.7301"></a>
-<span class="sourceLineNo">7302</span>    sort(coordinates, store.getComparator());<a name="line.7302"></a>
-<span class="sourceLineNo">7303</span>    Get get = new Get(mutation.getRow());<a name="line.7303"></a>
-<span class="sourceLineNo">7304</span>    if (isolation != null) {<a name="line.7304"></a>
-<span class="sourceLineNo">7305</span>      get.setIsolationLevel(isolation);<a name="line.7305"></a>
-<span class="sourceLineNo">7306</span>    }<a name="line.7306"></a>
-<span class="sourceLineNo">7307</span>    for (Cell cell: coordinates) {<a name="line.7307"></a>
-<span class="sourceLineNo">7308</span>      get.addColumn(store.getFamily().getName(), CellUtil.cloneQualifier(cell));<a name="line.7308"></a>
-<span class="sourceLineNo">7309</span>    }<a name="line.7309"></a>
-<span class="sourceLineNo">7310</span>    // Increments carry time range. If an Increment instance, put it on the Get.<a name="line.7310"></a>
-<span class="sourceLineNo">7311</span>    if (tr != null) {<a name="line.7311"></a>
-<span class="sourceLineNo">7312</span>      get.setTimeRange(tr.getMin(), tr.getMax());<a name="line.7312"></a>
-<span class="sourceLineNo">7313</span>    }<a name="line.7313"></a>
-<span class="sourceLineNo">7314</span>    return get(get, false);<a name="line.7314"></a>
-<span class="sourceLineNo">7315</span>  }<a name="line.7315"></a>
-<span class="sourceLineNo">7316</span><a name="line.7316"></a>
-<span class="sourceLineNo">7317</span>  /**<a name="line.7317"></a>
-<span class="sourceLineNo">7318</span>   * @return Sorted list of &lt;code&gt;cells&lt;/code&gt; using &lt;code&gt;comparator&lt;/code&gt;<a name="line.7318"></a>
-<span class="sourceLineNo">7319</span>   */<a name="line.7319"></a>
-<span class="sourceLineNo">7320</span>  private static List&lt;Cell&gt; sort(List&lt;Cell&gt; cells, final Comparator&lt;Cell&gt; comparator) {<a name="line.7320"></a>
-<span class="sourceLineNo">7321</span>    Collections.sort(cells, comparator);<a name="line.7321"></a>
-<span class="sourceLineNo">7322</span>    return cells;<a name="line.7322"></a>
-<span class="sourceLineNo">7323</span>  }<a name="line.7323"></a>
-<span class="sourceLineNo">7324</span><a name="line.7324"></a>
-<span class="sourceLineNo">7325</span>  //<a name="line.7325"></a>
-<span class="sourceLineNo">7326</span>  // New HBASE-880 Helpers<a name="line.7326"></a>
+<span class="sourceLineNo">7128</span>   * Does Get of current value and then adds passed in deltas for this Store returning the result.<a name="line.7128"></a>
+<span class="sourceLineNo">7129</span>   *<a name="line.7129"></a>
+<span class="sourceLineNo">7130</span>   * @param op Whether Increment or Append<a name="line.7130"></a>
+<span class="sourceLineNo">7131</span>   * @param mutation The encompassing Mutation object<a name="line.7131"></a>
+<span class="sourceLineNo">7132</span>   * @param deltas Changes to apply to this Store; either increment amount or data to append<a name="line.7132"></a>
+<span class="sourceLineNo">7133</span>   * @param results In here we accumulate all the Cells we are to return to the client; this List<a name="line.7133"></a>
+<span class="sourceLineNo">7134</span>   *  can be larger than what we return in case where delta is zero; i.e. don't write<a name="line.7134"></a>
+<span class="sourceLineNo">7135</span>   *  out new values, just return current value. If null, client doesn't want results returned.<a name="line.7135"></a>
+<span class="sourceLineNo">7136</span>   * @return Resulting Cells after &lt;code&gt;deltas&lt;/code&gt; have been applied to current<a name="line.7136"></a>
+<span class="sourceLineNo">7137</span>   *  values. Side effect is our filling out of the &lt;code&gt;results&lt;/code&gt; List.<a name="line.7137"></a>
+<span class="sourceLineNo">7138</span>   */<a name="line.7138"></a>
+<span class="sourceLineNo">7139</span>  private List&lt;Cell&gt; reckonDeltasByStore(final Store store, final Operation op,<a name="line.7139"></a>
+<span class="sourceLineNo">7140</span>      final Mutation mutation, final Durability effectiveDurability, final long now,<a name="line.7140"></a>
+<span class="sourceLineNo">7141</span>      final List&lt;Cell&gt; deltas, final List&lt;Cell&gt; results)<a name="line.7141"></a>
+<span class="sourceLineNo">7142</span>  throws IOException {<a name="line.7142"></a>
+<span class="sourceLineNo">7143</span>    byte [] columnFamily = store.getFamily().getName();<a name="line.7143"></a>
+<span class="sourceLineNo">7144</span>    List&lt;Cell&gt; toApply = new ArrayList&lt;Cell&gt;(deltas.size());<a name="line.7144"></a>
+<span class="sourceLineNo">7145</span>    // Get previous values for all columns in this family.<a name="line.7145"></a>
+<span class="sourceLineNo">7146</span>    List&lt;Cell&gt; currentValues = get(mutation, store, deltas,<a name="line.7146"></a>
+<span class="sourceLineNo">7147</span>        null/*Default IsolationLevel*/,<a name="line.7147"></a>
+<span class="sourceLineNo">7148</span>        op == Operation.INCREMENT? ((Increment)mutation).getTimeRange(): null);<a name="line.7148"></a>
+<span class="sourceLineNo">7149</span>    // Iterate the input columns and update existing values if they were found, otherwise<a name="line.7149"></a>
+<span class="sourceLineNo">7150</span>    // add new column initialized to the delta amount<a name="line.7150"></a>
+<span class="sourceLineNo">7151</span>    int currentValuesIndex = 0;<a name="line.7151"></a>
+<span class="sourceLineNo">7152</span>    for (int i = 0; i &lt; deltas.size(); i++) {<a name="line.7152"></a>
+<span class="sourceLineNo">7153</span>      Cell delta = deltas.get(i);<a name="line.7153"></a>
+<span class="sourceLineNo">7154</span>      Cell currentValue = null;<a name="line.7154"></a>
+<span class="sourceLineNo">7155</span>      if (currentValuesIndex &lt; currentValues.size() &amp;&amp;<a name="line.7155"></a>
+<span class="sourceLineNo">7156</span>          CellUtil.matchingQualifier(currentValues.get(currentValuesIndex), delta)) {<a name="line.7156"></a>
+<span class="sourceLineNo">7157</span>        currentValue = currentValues.get(currentValuesIndex);<a name="line.7157"></a>
+<span class="sourceLineNo">7158</span>        if (i &lt; (deltas.size() - 1) &amp;&amp; !CellUtil.matchingQualifier(delta, deltas.get(i + 1))) {<a name="line.7158"></a>
+<span class="sourceLineNo">7159</span>          currentValuesIndex++;<a name="line.7159"></a>
+<span class="sourceLineNo">7160</span>        }<a name="line.7160"></a>
+<span class="sourceLineNo">7161</span>      }<a name="line.7161"></a>
+<span class="sourceLineNo">7162</span>      // Switch on whether this an increment or an append building the new Cell to apply.<a name="line.7162"></a>
+<span class="sourceLineNo">7163</span>      Cell newCell = null;<a name="line.7163"></a>
+<span class="sourceLineNo">7164</span>      MutationType mutationType = null;<a name="line.7164"></a>
+<span class="sourceLineNo">7165</span>      boolean apply = true;<a name="line.7165"></a>
+<span class="sourceLineNo">7166</span>      switch (op) {<a name="line.7166"></a>
+<span class="sourceLineNo">7167</span>        case INCREMENT:<a name="line.7167"></a>
+<span class="sourceLineNo">7168</span>          mutationType = MutationType.INCREMENT;<a name="line.7168"></a>
+<span class="sourceLineNo">7169</span>          // If delta amount to apply is 0, don't write WAL or MemStore.<a name="line.7169"></a>
+<span class="sourceLineNo">7170</span>          long deltaAmount = getLongValue(delta);<a name="line.7170"></a>
+<span class="sourceLineNo">7171</span>          apply = deltaAmount != 0;<a name="line.7171"></a>
+<span class="sourceLineNo">7172</span>          newCell = reckonIncrement(delta, deltaAmount, currentValue, columnFamily, now,<a name="line.7172"></a>
+<span class="sourceLineNo">7173</span>            (Increment)mutation);<a name="line.7173"></a>
+<span class="sourceLineNo">7174</span>          break;<a name="line.7174"></a>
+<span class="sourceLineNo">7175</span>        case APPEND:<a name="line.7175"></a>
+<span class="sourceLineNo">7176</span>          mutationType = MutationType.APPEND;<a name="line.7176"></a>
+<span class="sourceLineNo">7177</span>          // Always apply Append. TODO: Does empty delta value mean reset Cell? It seems to.<a name="line.7177"></a>
+<span class="sourceLineNo">7178</span>          newCell = reckonAppend(delta, currentValue, now, (Append)mutation);<a name="line.7178"></a>
+<span class="sourceLineNo">7179</span>          break;<a name="line.7179"></a>
+<span class="sourceLineNo">7180</span>        default: throw new UnsupportedOperationException(op.toString());<a name="line.7180"></a>
+<span class="sourceLineNo">7181</span>      }<a name="line.7181"></a>
+<span class="sourceLineNo">7182</span><a name="line.7182"></a>
+<span class="sourceLineNo">7183</span>      // Give coprocessors a chance to update the new cell<a name="line.7183"></a>
+<span class="sourceLineNo">7184</span>      if (coprocessorHost != null) {<a name="line.7184"></a>
+<span class="sourceLineNo">7185</span>        newCell =<a name="line.7185"></a>
+<span class="sourceLineNo">7186</span>            coprocessorHost.postMutationBeforeWAL(mutationType, mutation, currentValue, newCell);<a name="line.7186"></a>
+<span class="sourceLineNo">7187</span>      }<a name="line.7187"></a>
+<span class="sourceLineNo">7188</span>      // If apply, we need to update memstore/WAL with new value; add it toApply.<a name="line.7188"></a>
+<span class="sourceLineNo">7189</span>      if (apply) {<a name="line.7189"></a>
+<span class="sourceLineNo">7190</span>        toApply.add(newCell);<a name="line.7190"></a>
+<span class="sourceLineNo">7191</span>      }<a name="line.7191"></a>
+<span class="sourceLineNo">7192</span>      // Add to results to get returned to the Client. If null, cilent does not want results.<a name="line.7192"></a>
+<span class="sourceLineNo">7193</span>      if (results != null) {<a name="line.7193"></a>
+<span class="sourceLineNo">7194</span>        results.add(newCell);<a name="line.7194"></a>
+<span class="sourceLineNo">7195</span>      }<a name="line.7195"></a>
+<span class="sourceLineNo">7196</span>    }<a name="line.7196"></a>
+<span class="sourceLineNo">7197</span>    return toApply;<a name="line.7197"></a>
+<span class="sourceLineNo">7198</span>  }<a name="line.7198"></a>
+<span class="sourceLineNo">7199</span><a name="line.7199"></a>
+<span class="sourceLineNo">7200</span>  /**<a name="line.7200"></a>
+<span class="sourceLineNo">7201</span>   * Calculate new Increment Cell.<a name="line.7201"></a>
+<span class="sourceLineNo">7202</span>   * @return New Increment Cell with delta applied to currentValue if currentValue is not null;<a name="line.7202"></a>
+<span class="sourceLineNo">7203</span>   *  otherwise, a new Cell with the delta set as its value.<a name="line.7203"></a>
+<span class="sourceLineNo">7204</span>   */<a name="line.7204"></a>
+<span class="sourceLineNo">7205</span>  private Cell reckonIncrement(final Cell delta, final long deltaAmount, final Cell currentValue,<a name="line.7205"></a>
+<span class="sourceLineNo">7206</span>      byte [] columnFamily, final long now, Mutation mutation)<a name="line.7206"></a>
+<span class="sourceLineNo">7207</span>  throws IOException {<a name="line.7207"></a>
+<span class="sourceLineNo">7208</span>    // Forward any tags found on the delta.<a name="line.7208"></a>
+<span class="sourceLineNo">7209</span>    List&lt;Tag&gt; tags = TagUtil.carryForwardTags(delta);<a name="line.7209"></a>
+<span class="sourceLineNo">7210</span>    long newValue = deltaAmount;<a name="line.7210"></a>
+<span class="sourceLineNo">7211</span>    long ts = now;<a name="line.7211"></a>
+<span class="sourceLineNo">7212</span>    if (currentValue != null) {<a name="line.7212"></a>
+<span class="sourceLineNo">7213</span>      tags = TagUtil.carryForwardTags(tags, currentValue);<a name="line.7213"></a>
+<span class="sourceLineNo">7214</span>      ts = Math.max(now, currentValue.getTimestamp());<a name="line.7214"></a>
+<span class="sourceLineNo">7215</span>      newValue += getLongValue(currentValue);<a name="line.7215"></a>
+<span class="sourceLineNo">7216</span>    }<a name="line.7216"></a>
+<span class="sourceLineNo">7217</span>    // Now make up the new Cell. TODO: FIX. This is carnel knowledge of how KeyValues are made...<a name="line.7217"></a>
+<span class="sourceLineNo">7218</span>    // doesn't work well with offheaping or if we are doing a different Cell type.<a name="line.7218"></a>
+<span class="sourceLineNo">7219</span>    byte [] incrementAmountInBytes = Bytes.toBytes(newValue);<a name="line.7219"></a>
+<span class="sourceLineNo">7220</span>    tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7220"></a>
+<span class="sourceLineNo">7221</span>    byte [] row = mutation.getRow();<a name="line.7221"></a>
+<span class="sourceLineNo">7222</span>    return new KeyValue(row, 0, row.length,<a name="line.7222"></a>
+<span class="sourceLineNo">7223</span>      columnFamily, 0, columnFamily.length,<a name="line.7223"></a>
+<span class="sourceLineNo">7224</span>      delta.getQualifierArray(), delta.getQualifierOffset(), delta.getQualifierLength(),<a name="line.7224"></a>
+<span class="sourceLineNo">7225</span>      ts, KeyValue.Type.Put,<a name="line.7225"></a>
+<span class="sourceLineNo">7226</span>      incrementAmountInBytes, 0, incrementAmountInBytes.length,<a name="line.7226"></a>
+<span class="sourceLineNo">7227</span>      tags);<a name="line.7227"></a>
+<span class="sourceLineNo">7228</span>  }<a name="line.7228"></a>
+<span class="sourceLineNo">7229</span><a name="line.7229"></a>
+<span class="sourceLineNo">7230</span>  private Cell reckonAppend(final Cell delta, final Cell currentValue, final long now,<a name="line.7230"></a>
+<span class="sourceLineNo">7231</span>      Append mutation)<a name="line.7231"></a>
+<span class="sourceLineNo">7232</span>  throws IOException {<a name="line.7232"></a>
+<span class="sourceLineNo">7233</span>    // Forward any tags found on the delta.<a name="line.7233"></a>
+<span class="sourceLineNo">7234</span>    List&lt;Tag&gt; tags = TagUtil.carryForwardTags(delta);<a name="line.7234"></a>
+<span class="sourceLineNo">7235</span>    long ts = now;<a name="line.7235"></a>
+<span class="sourceLineNo">7236</span>    Cell newCell = null;<a name="line.7236"></a>
+<span class="sourceLineNo">7237</span>    byte [] row = mutation.getRow();<a name="line.7237"></a>
+<span class="sourceLineNo">7238</span>    if (currentValue != null) {<a name="line.7238"></a>
+<span class="sourceLineNo">7239</span>      tags = TagUtil.carryForwardTags(tags, currentValue);<a name="line.7239"></a>
+<span class="sourceLineNo">7240</span>      ts = Math.max(now, currentValue.getTimestamp());<a name="line.7240"></a>
+<span class="sourceLineNo">7241</span>      tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7241"></a>
+<span class="sourceLineNo">7242</span>      byte[] tagBytes = TagUtil.fromList(tags);<a name="line.7242"></a>
+<span class="sourceLineNo">7243</span>      // Allocate an empty cell and copy in all parts.<a name="line.7243"></a>
+<span class="sourceLineNo">7244</span>      // TODO: This is intimate knowledge of how a KeyValue is made. Undo!!! Prevents our doing<a name="line.7244"></a>
+<span class="sourceLineNo">7245</span>      // other Cell types. Copying on-heap too if an off-heap Cell.<a name="line.7245"></a>
+<span class="sourceLineNo">7246</span>      newCell = new KeyValue(row.length, delta.getFamilyLength(),<a name="line.7246"></a>
+<span class="sourceLineNo">7247</span>        delta.getQualifierLength(), ts, KeyValue.Type.Put,<a name="line.7247"></a>
+<span class="sourceLineNo">7248</span>        delta.getValueLength() + currentValue.getValueLength(),<a name="line.7248"></a>
+<span class="sourceLineNo">7249</span>        tagBytes == null? 0: tagBytes.length);<a name="line.7249"></a>
+<span class="sourceLineNo">7250</span>      // Copy in row, family, and qualifier<a name="line.7250"></a>
+<span class="sourceLineNo">7251</span>      System.arraycopy(row, 0, newCell.getRowArray(), newCell.getRowOffset(), row.length);<a name="line.7251"></a>
+<span class="sourceLineNo">7252</span>      System.arraycopy(delta.getFamilyArray(), delta.getFamilyOffset(),<a name="line.7252"></a>
+<span class="sourceLineNo">7253</span>          newCell.getFamilyArray(), newCell.getFamilyOffset(), delta.getFamilyLength());<a name="line.7253"></a>
+<span class="sourceLineNo">7254</span>      System.arraycopy(delta.getQualifierArray(), delta.getQualifierOffset(),<a name="line.7254"></a>
+<span class="sourceLineNo">7255</span>          newCell.getQualifierArray(), newCell.getQualifierOffset(), delta.getQualifierLength());<a name="line.7255"></a>
+<span class="sourceLineNo">7256</span>      // Copy in the value<a name="line.7256"></a>
+<span class="sourceLineNo">7257</span>      CellUtil.copyValueTo(currentValue, newCell.getValueArray(), newCell.getValueOffset());<a name="line.7257"></a>
+<span class="sourceLineNo">7258</span>      System.arraycopy(delta.getValueArray(), delta.getValueOffset(),<a name="line.7258"></a>
+<span class="sourceLineNo">7259</span>          newCell.getValueArray(), newCell.getValueOffset() + currentValue.getValueLength(),<a name="line.7259"></a>
+<span class="sourceLineNo">7260</span>          delta.getValueLength());<a name="line.7260"></a>
+<span class="sourceLineNo">7261</span>      // Copy in tag data<a name="line.7261"></a>
+<span class="sourceLineNo">7262</span>      if (tagBytes != null) {<a name="line.7262"></a>
+<span class="sourceLineNo">7263</span>        System.arraycopy(tagBytes, 0,<a name="line.7263"></a>
+<span class="sourceLineNo">7264</span>            newCell.getTagsArray(), newCell.getTagsOffset(), tagBytes.length);<a name="line.7264"></a>
+<span class="sourceLineNo">7265</span>      }<a name="line.7265"></a>
+<span class="sourceLineNo">7266</span>    } else {<a name="line.7266"></a>
+<span class="sourceLineNo">7267</span>      // Append's KeyValue.Type==Put and ts==HConstants.LATEST_TIMESTAMP<a name="line.7267"></a>
+<span class="sourceLineNo">7268</span>      CellUtil.updateLatestStamp(delta, now);<a name="line.7268"></a>
+<span class="sourceLineNo">7269</span>      newCell = delta;<a name="line.7269"></a>
+<span class="sourceLineNo">7270</span>      tags = TagUtil.carryForwardTTLTag(tags, mutation.getTTL());<a name="line.7270"></a>
+<span class="sourceLineNo">7271</span>      if (tags != null) {<a name="line.7271"></a>
+<span class="sourceLineNo">7272</span>        newCell = new TagRewriteCell(delta, TagUtil.fromList(tags));<a name="line.7272"></a>
+<span class="sourceLineNo">7273</span>      }<a name="line.7273"></a>
+<span class="sourceLineNo">7274</span>    }<a name="line.7274"></a>
+<span class="sourceLineNo">7275</span>    return newCell;<a name="line.7275"></a>
+<span class="sourceLineNo">7276</span>  }<a name="line.7276"></a>
+<span class="sourceLineNo">7277</span><a name="line.7277"></a>
+<span class="sourceLineNo">7278</span>  /**<a name="line.7278"></a>
+<span class="sourceLineNo">7279</span>   * @return Get the long out of the passed in Cell<a name="line.7279"></a>
+<span class="sourceLineNo">7280</span>   */<a name="line.7280"></a>
+<span class="sourceLineNo">7281</span>  private static long getLongValue(final Cell cell) throws DoNotRetryIOException {<a name="line.7281"></a>
+<span class="sourceLineNo">7282</span>    int len = cell.getValueLength();<a name="line.7282"></a>
+<span class="sourceLineNo">7283</span>    if (len != Bytes.SIZEOF_LONG) {<a name="line.7283"></a>
+<span class="sourceLineNo">7284</span>      // throw DoNotRetryIOException instead of IllegalArgumentException<a name="line.7284"></a>
+<span class="sourceLineNo">7285</span>      throw new DoNotRetryIOException("Field is not a long, it's " + len + " bytes wide");<a name="line.7285"></a>
+<span class="sourceLineNo">7286</span>    }<a name="line.7286"></a>
+<span class="sourceLineNo">7287</span>    return Bytes.toLong(cell.getValueArray(), cell.getValueOffset(), len);<a name="line.7287"></a>
+<span class="sourceLineNo">7288</span>  }<a name="line.7288"></a>
+<span class="sourceLineNo">7289</span><a name="line.7289"></a>
+<span class="sourceLineNo">7290</span>  /**<a name="line.7290"></a>
+<span class="sourceLineNo">7291</span>   * Do a specific Get on passed &lt;code&gt;columnFamily&lt;/code&gt; and column qualifiers.<a name="line.7291"></a>
+<span class="sourceLineNo">7292</span>   * @param mutation Mutation we are doing this Get for.<a name="line.7292"></a>
+<span class="sourceLineNo">7293</span>   * @param columnFamily Which column family on row (TODO: Go all Gets in one go)<a name="line.7293"></a>
+<span class="sourceLineNo">7294</span>   * @param coordinates Cells from &lt;code&gt;mutation&lt;/code&gt; used as coordinates applied to Get.<a name="line.7294"></a>
+<span class="sourceLineNo">7295</span>   * @return Return list of Cells found.<a name="line.7295"></a>
+<span class="sourceLineNo">7296</span>   */<a name="line.7296"></a>
+<span class="sourceLineNo">7297</span>  private List&lt;Cell&gt; get(final Mutation mutation, final Store store,<a name="line.7297"></a>
+<span class="sourceLineNo">7298</span>          final List&lt;Cell&gt; coordinates, final IsolationLevel isolation, final TimeRange tr)<a name="line.7298"></a>
+<span class="sourceLineNo">7299</span>  throws IOException {<a name="line.7299"></a>
+<span class="sourceLineNo">7300</span>    // Sort the cells so that they match the order that they appear in the Get results. Otherwise,<a name="line.7300"></a>
+<span class="sourceLineNo">7301</span>    // we won't be able to find the existing values if the cells are not specified in order by the<a name="line.7301"></a>
+<span class="sourceLineNo">7302</span>    // client since cells are in an array list.<a name="line.7302"></a>
+<span class="sourceLineNo">7303</span>    // TODO: I don't get why we are sorting. St.Ack 20150107<a name="line.7303"></a>
+<span class="sourceLineNo">7304</span>    sort(coordinates, store.getComparator());<a name="line.7304"></a>
+<span class="sourceLineNo">7305</span>    Get get = new Get(mutation.getRow());<a name="line.7305"></a>
+<span class="sourceLineNo">7306</span>    if (isolation != null) {<a name="line.7306"></a>
+<span class="sourceLineNo">7307</span>      get.setIsolationLevel(isolation);<a name="line.7307"></a>
+<span class="sourceLineNo">7308</span>    }<a name="line.7308"></a>
+<span class="sourceLineNo">7309</span>    for (Cell cell: coordinates) {<a name="line.7309"></a>
+<span class="sourceLineNo">7310</span>      get.addColumn(store.getFamily().getName(), CellUtil.cloneQualifier(cell));<a name="line.7310"></a>
+<span class="sourceLineNo">7311</span>    }<a name="line.7311"></a>
+<span class="sourceLineNo">7312</span>    // Increments carry time range. If an Increment instance, put it on the Get.<a name="line.7312"></a>
+<span class="sourceLineNo">7313</span>    if (tr != null) {<a name="line.7313"></a>
+<span class="sourceLineNo">7314</span>      get.setTimeRange(tr.getMin(), tr.getMax());<a name="line.7314"></a>
+<span class="sourceLineNo">7315</span>    }<a name="line.7315"></a>
+<span class="sourceLineNo">7316</span>    return get(get, false);<a name="line.7316"></a>
+<span class="sourceLineNo">7317</span>  }<a name="line.7317"></a>
+<span class="sourceLineNo">7318</span><a name="line.7318"></a>
+<span class="sourceLineNo">7319</span>  /**<a name="line.7319"></a>
+<span class="sourceLineNo">7320</span>   * @return Sorted list of &lt;code&gt;cells&lt;/code&gt; using &lt;code&gt;comparator&lt;/code&gt;<a name="line.7320"></a>
+<span class="sourceLineNo">7321</span>   */<a name="line.7321"></a>
+<span class="sourceLineNo">7322</span>  private static List&lt;Cell&gt; sort(List&lt;Cell&gt; cells, final Comparator&lt;Cell&gt; comparator) {<a name="line.7322"></a>
+<span class="sourceLineNo">7323</span>    Collections.sort(cells, comparator);<a name="line.7323"></a>
+<span class="sourceLineNo">7324</span>    return cells;<a name="line.7324"></a>
+<span class="sourceLineNo">7325</span>  }<a name="line.7325"></a>
+<span class="sourceLineNo">7326</span><a name="line.7326"></a>
 <span class="sourceLineNo">7327</span>  //<a name="line.7327"></a>
-<span class="sourceLineNo">7328</span><a name="line.7328"></a>
-<span class="sourceLineNo">7329</span>  void checkFamily(final byte [] family)<a name="line.7329"></a>
-<span class="sourceLineNo">7330</span>  throws NoSuchColumnFamilyException {<a name="line.7330"></a>
-<span class="sourceLineNo">7331</span>    if (!this.htableDescriptor.hasFamily(family)) {<a name="line.7331"></a>
-<span class="sourceLineNo">7332</span>      throw new NoSuchColumnFamilyException("Column family " +<a name="line.7332"></a>
-<span class="sourceLineNo">7333</span>          Bytes.toString(family) + " does not exist in region " + this<a name="line.7333"></a>
-<span class="sourceLineNo">7334</span>          + " in table " + this.htableDescriptor);<a name="line.7334"></a>
-<span class="sourceLineNo">7335</span>    }<a name="line.7335"></a>
-<span class="sourceLineNo">7336</span>  }<a name="line.7336"></a>
-<span class="sourceLineNo">7337</span><a name="line.7337"></a>
-<span class="sourceLineNo">7338</span>  public static final long FIXED_OVERHEAD = ClassSize.align(<a name="line.7338"></a>
-<span class="sourceLineNo">7339</span>      ClassSize.OBJECT +<a name="line.7339"></a>
-<span class="sourceLineNo">7340</span>      ClassSize.ARRAY +<a name="line.7340"></a>
-<span class="sourceLineNo">7341</span>      45 * ClassSize.REFERENCE + 2 * Bytes.SIZEOF_INT +<a name="line.7341"></a>
-<span class="sourceLineNo">7342</span>      (14 * Bytes.SIZEOF_LONG) +<a name="line.7342"></a>
-<span class="sourceLineNo">7343</span>      5 * Bytes.SIZEOF_BOOLEAN);<a name="line.7343"></a>
-<span class="sourceLineNo">7344</span><a name="line.7344"></a>
-<span class="sourceLineNo">7345</span>  // woefully out of date - currently missing:<a name="line.7345"></a>
-<span class="sourceLineNo">7346</span>  // 1 x HashMap - coprocessorServiceHandlers<a name="line.7346"></a>
-<span class="sourceLineNo">7347</span>  // 6 x Counter - numMutationsWithoutWAL, dataInMemoryWithoutWAL,<a name="line.7347"></a>
-<span class="sourceLineNo">7348</span>  //   checkAndMutateChecksPassed, checkAndMutateChecksFailed, readRequestsCount,<a name="line.7348"></a>
-<span class="sourceLineNo">7349</span>  //   writeRequestsCount<a name="line.7349"></a>
-<span class="sourceLineNo">7350</span>  // 1 x HRegion$WriteState - writestate<a name="line.7350"></a>
-<span class="sourceLineNo">7351</span>  // 1 x RegionCoprocessorHost - coprocessorHost<a name="line.7351"></a>
-<span class="sourceLineNo">7352</span>  // 1 x RegionSplitPolicy - splitPolicy<a name="line.7352"></a>
-<span class="sourceLineNo">7353</span>  // 1 x MetricsRegion - metricsRegion<a name="line.7353"></a>
-<span class="sourceLineNo">7354</span>  // 1 x MetricsRegionWrapperImpl - metricsRegionWrapper<a name="line.7354"></a>
-<span class="sourceLineNo">7355</span>  public static final long DEEP_OVERHEAD = FIXED_OVERHEAD +<a name="line.7355"></a>
-<span class="sourceLineNo">7356</span>      ClassSize.OBJECT + // closeLock<a name="line.7356"></a>
-<span class="sourceLineNo">7357</span>      (2 * ClassSize.ATOMIC_BOOLEAN) + // closed, closing<a name="line.7357"></a>
-<span class="sourceLineNo">7358</span>      (3 * ClassSize.ATOMIC_LONG) + // memStoreSize, numPutsWithoutWAL, dataInMemoryWithoutWAL<a name="line.7358"></a>
-<span class="sourceLineNo">7359</span>      (2 * ClassSize.CONCURRENT_HASHMAP) +  // lockedRows, scannerReadPoints<a name="line.7359"></a>
-<span class="sourceLineNo">7360</span>      WriteState.HEAP_SIZE + // writestate<a name="line.7360"></a>
-<span class="sourceLineNo">7361</span>      ClassSize.CONCURRENT_SKIPLISTMAP + ClassSize.CONCURRENT_SKIPLISTMAP_ENTRY + // stores<a name="line.7361"></a>
-<span class="sourceLineNo">7362</span>      (2 * ClassSize.REENTRANT_LOCK) + // lock, updatesLock<a name="line.7362"></a>
-<span class="sourceLineNo">7363</span>      MultiVersionConcurrencyControl.FIXED_SIZE // mvcc<a name="line.7363"></a>
-<span class="sourceLineNo">7364</span>      + ClassSize.TREEMAP // maxSeqIdInStores<a name="line.7364"></a>
-<span class="sourceLineNo">7365</span>      + 2 * ClassSize.ATOMIC_INTEGER // majorInProgress, minorInProgress<a name="line.7365"></a>
-<span class="sourceLineNo">7366</span>      ;<a name="line.7366"></a>
-<span class="sourceLineNo">7367</span><a name="line.7367"></a>
-<span class="sourceLineNo">7368</span>  @Override<a name="line.7368"></a>
-<span class="sourceLineNo">7369</span>  public long heapSize() {<a name="line.7369"></a>
-<span class="sourceLineNo">7370</span>    long heapSize = DEEP_OVERHEAD;<a name="line.7370"></a>
-<span class="sourceLineNo">7371</span>    for (Store store : this.stores.values()) {<a name="line.7371"></a>
-<span class="sourceLineNo">7372</span>      heapSize += store.heapSize();<a name="line.7372"></a>
-<span class="sourceLineNo">7373</span>    }<a name="line.7373"></a>
-<span class="sourceLineNo">7374</span>    // this does not take into account row locks, recent flushes, mvcc entries, and more<a name="line.7374"></a>
-<span class="sourceLineNo">7375</span>    return heapSize;<a name="line.7375"></a>
-<span class="sourceLineNo">7376</span>  }<a name="line.7376"></a>
-<span class="sourceLineNo">7377</span><a name="line.7377"></a>
-<span class="sourceLineNo">7378</span>  @Override<a name="line.7378"></a>
-<span class="sourceLineNo">7379</span>  public boolean registerService(Service instance) {<a name="line.7379"></a>
-<span class="sourceLineNo">7380</span>    /*<a name="line.7380"></a>
-<span class="sourceLineNo">7381</span>     * No stacking of instances is allowed for a single service name<a name="line.7381"></a>
-<span class="sourceLineNo">7382</span>     */<a name="line.7382"></a>
-<span class="sourceLineNo">7383</span>    Descriptors.ServiceDescriptor serviceDesc = instance.getDescriptorForType();<a name="line.7383"></a>
-<span class="sourceLineNo">7384</span>    if (coprocessorServiceHandlers.containsKey(serviceDesc.getFullName())) {<a name="line.7384"></a>
-<span class="sourceLineNo">7385</span>      LOG.error("Coprocessor service " + serviceDesc.getFullName() +<a name="line.7385"></a>
-<span class="sourceLineNo">7386</span>              " already registered, rejecting request from " + instance<a name="line.7386"></a>
-<span class="sourceLineNo">7387</span>      );<a name="line.7387"></a>
-<span class="sourceLineNo">7388</span>      return false;<a name="line.7388"></a>
-<span class="sourceLineNo">7389</span>    }<a name="line.7389"></a>
-<span class="sourceLineNo">7390</span><a name="line.7390"></a>
-<span class="sourceLineNo">7391</span>    coprocessorServiceHandlers.put(serviceDesc.getFullName(), instance);<a name="line.7391"></a>
-<span class="sourceLineNo">7392</span>    if (LOG.isDebugEnabled()) {<a name="line.7392"></a>
-<span class="sourceLineNo">7393</span>      LOG.debug("Registered coprocessor service: region=" +<a name="line.7393"></a>
-<span class="sourceLineNo">7394</span>          Bytes.toStringBinary(getRegionInfo().getRegionName()) +<a name="line.7394"></a>
-<span class="sourceLineNo">7395</span>          " service=" + serviceDesc.getFullName());<a name="line.7395"></a>
-<span class="sourceLineNo">7396</span>    }<a name="line.7396"></a>
-<span class="sourceLineNo">7397</span>    return true;<a name="line.7397"></a>
-<span class="sourceLineNo">7398</span>  }<a name="line.7398"></a>
-<span class="sourceLineNo">7399</span><a name="line.7399"></a>
-<span class="sourceLineNo">7400</span>  @Override<a name="line.7400"></a>
-<span class="sourceLineNo">7401</span>  public Message execService(RpcController controller, CoprocessorServiceCall call)<a name="line.7401"></a>
-<span class="sourceLineNo">7402</span>      throws IOException {<a name="line.7402"></a>
-<span class="sourceLineNo">7403</span>    String serviceName = call.getServiceName();<a name="line.7403"></a>
-<span class="sourceLineNo">7404</span>    String methodName = call.getMethodName();<a name="line.7404"></a>
-<span class="sourceLineNo">7405</span>    if (!coprocessorServiceHandlers.containsKey(serviceName)) {<a name="line.7405"></a>
-<span class="sourceLineNo">7406</span>      throw new UnknownProtocolException(null,<a name="line.7406"></a>
-<span class="sourceLineNo">7407</span>          "No registered coprocessor service found for name "+serviceName+<a name="line.7407"></a>
-<span class="sourceLineNo">7408</span>          " in region "+Bytes.toStringBinary(getRegionInfo().getRegionName()));<a name="line.7408"></a>
-<span class="sourceLineNo">7409</span>    }<a name="line.7409"></a>
-<span class="sourceLineNo">7410</span><a name="line.7410"></a>
-<span class="sourceLineNo">7411</span>    Service service = coprocessorServiceHandlers.get(serviceName);<a name="line.7411"></a>
-<span class="sourceLineNo">7412</span>    Descriptors.ServiceDescriptor serviceDesc = service.getDescriptorForType();<a name="line.7412"></a>
-<span class="sourceLineNo">7413</span>    Descriptors.MethodDescriptor methodDesc = serviceDesc.findMethodByName(methodName);<a name="line.7413"></a>
-<span class="sourceLineNo">7414</span>    if (methodDesc == null) {<a name="line.7414"></a>
-<span class="sourceLineNo">7415</span>      throw new UnknownProtocolException(service.getClass(),<a name="line.7415"></a>
-<span class="sourceLineNo">7416</span>          "Unknown method "+methodName+" called on service "+serviceName+<a name="line.7416"></a>
-<span class="sourceLineNo">7417</span>              " in region "+Bytes.toStringBinary(getRegionInfo().getRegionName()));<a name="line.7417"></a>
-<span class="sourceLineNo">7418</span>    }<a name="line.7418"></a>
-<span class="sourceLineNo">7419</span><a name="line.7419"></a>
-<span class="sourceLineNo">7420</span>    Message.Builder builder = service.getRequestPrototype(methodDesc).newBuilderForType();<a name="line.7420"></a>
-<span class="sourceLineNo">7421</span>    ProtobufUtil.mergeFrom(builder, call.getRequest());<a name="line.7421"></a>
-<span class="sourceLineNo">7422</span>    Message request = builder.build();<a name="line.7422"></a>
-<span class="sourceLineNo">7423</span><a name="line.7423"></a>
-<span class="sourceLineNo">7424</span>    if (coprocessorHost != null) {<a name="line.7424"></a>
-<span class="sourceLineNo">7425</span>      request = coprocessorHost.preEndpointInvocation(service, methodName, request);<a name="line.7425"></a>
-<span class="sourceLineNo">7426</span>    }<a name="line.7426"></a>
-<span class="sourceLineNo">7427</span><a name="line.7427"></a>
-<span class="sourceLineNo">7428</span>    final Message.Builder responseBuilder =<a name="line.7428"></a>
-<span class="sourceLineNo">7429</span>        service.getResponsePrototype(methodDesc).newBuilderForType();<a name="line.7429"></a>
-<span class="sourceLineNo">7430</span>    service.callMethod(methodDesc, controller, request, new RpcCallback&lt;Message&gt;() {<a name="line.7430"></a>
-<span class="sourceLineNo">7431</span>      @Override<a name="line.7431"></a>
-<span class="sourceLineNo">7432</span>      public void run(Message message) {<a name="line.7432"></a>
-<span class="sourceLineNo">7433</span>        if (message != null) {<a name="line.7433"></a>
-<span class="sourceLineNo">7434</span>          responseBuilder.mergeFrom(message);<a name="line.7434"></a>
-<span class="sourceLineNo">7435</span>        }<a name="line.7435"></a>
-<span class="sourceLineNo">7436</span>      }<a name="line.7436"></a>
-<span class="sourceLineNo">7437</span>    });<a name="line.7437"></a>
-<span class="sourceLineNo">7438</span><a name="line.7438"></a>
-<span class="sourceLineNo">7439</span>    if (coprocessorHost != null) {<a name="line.7439"></a>
-<span class="sourceLineNo">7440</span>      coprocessorHost.postEndpointInvocation(service, methodName, request, responseBuilder);<a name="line.7440"></a>
-<span class="sourceLineNo">7441</span>    }<a name="line.7441"></a>
-<span class="sourceLineNo">7442</span><a name="line.7442"></a>
-<span class="sourceLineNo">7443</span>    IOException exception = ResponseConverter.getControllerException(controller);<a name="line.7443"></a>
-<span class="sourceLineNo">7444</span>    if (exception != null) {<a name="line.7444"></a>
-<span class="sourceLineNo">7445</span>      throw exception;<a name="line.7445"></a>
-<span class="sourceLineNo">7446</span>    }<a n

<TRUNCATED>

[38/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/src-html/org/apache/hadoop/hbase/ProcedureInfo.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/ProcedureInfo.html b/devapidocs/src-html/org/apache/hadoop/hbase/ProcedureInfo.html
index 8178706..bf877b1 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/ProcedureInfo.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/ProcedureInfo.html
@@ -57,210 +57,211 @@
 <span class="sourceLineNo">049</span><a name="line.49"></a>
 <span class="sourceLineNo">050</span>  private long clientAckTime = -1;<a name="line.50"></a>
 <span class="sourceLineNo">051</span><a name="line.51"></a>
-<span class="sourceLineNo">052</span>  public ProcedureInfo(<a name="line.52"></a>
-<span class="sourceLineNo">053</span>      final long procId,<a name="line.53"></a>
-<span class="sourceLineNo">054</span>      final String procName,<a name="line.54"></a>
-<span class="sourceLineNo">055</span>      final String procOwner,<a name="line.55"></a>
-<span class="sourceLineNo">056</span>      final ProcedureState procState,<a name="line.56"></a>
-<span class="sourceLineNo">057</span>      final long parentId,<a name="line.57"></a>
-<span class="sourceLineNo">058</span>      final NonceKey nonceKey,<a name="line.58"></a>
-<span class="sourceLineNo">059</span>      final ForeignExceptionMessage exception,<a name="line.59"></a>
-<span class="sourceLineNo">060</span>      final long lastUpdate,<a name="line.60"></a>
-<span class="sourceLineNo">061</span>      final long startTime,<a name="line.61"></a>
-<span class="sourceLineNo">062</span>      final byte[] result) {<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    this.procId = procId;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    this.procName = procName;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    this.procOwner = procOwner;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    this.procState = procState;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    this.parentId = parentId;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    this.nonceKey = nonceKey;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    this.lastUpdate = lastUpdate;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    this.startTime = startTime;<a name="line.70"></a>
-<span class="sourceLineNo">071</span><a name="line.71"></a>
-<span class="sourceLineNo">072</span>    // If the procedure is completed, we should treat exception and result differently<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    this.exception = exception;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    this.result = result;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  }<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="CN_IDIOM_NO_SUPER_CALL",<a name="line.77"></a>
-<span class="sourceLineNo">078</span>      justification="Intentional; calling super class clone doesn't make sense here.")<a name="line.78"></a>
-<span class="sourceLineNo">079</span>  public ProcedureInfo clone() {<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    return new ProcedureInfo(procId, procName, procOwner, procState, parentId, nonceKey,<a name="line.80"></a>
-<span class="sourceLineNo">081</span>      exception, lastUpdate, startTime, result);<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  }<a name="line.82"></a>
-<span class="sourceLineNo">083</span><a name="line.83"></a>
-<span class="sourceLineNo">084</span>  public long getProcId() {<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    return procId;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>  }<a name="line.86"></a>
-<span class="sourceLineNo">087</span><a name="line.87"></a>
-<span class="sourceLineNo">088</span>  public String getProcName() {<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    return procName;<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>  public String getProcOwner() {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    return procOwner;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  }<a name="line.94"></a>
-<span class="sourceLineNo">095</span><a name="line.95"></a>
-<span class="sourceLineNo">096</span>  public ProcedureState getProcState() {<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    return procState;<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>  public boolean hasParentId() {<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    return (parentId != -1);<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  }<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>  public long getParentId() {<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    return parentId;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  }<a name="line.106"></a>
-<span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span>  public NonceKey getNonceKey() {<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    return nonceKey;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  }<a name="line.110"></a>
-<span class="sourceLineNo">111</span><a name="line.111"></a>
-<span class="sourceLineNo">112</span>  public boolean isFailed() {<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    return exception != null;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>  }<a name="line.114"></a>
-<span class="sourceLineNo">115</span><a name="line.115"></a>
-<span class="sourceLineNo">116</span>  public IOException getException() {<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    if (isFailed()) {<a name="line.117"></a>
-<span class="sourceLineNo">118</span>      return ForeignExceptionUtil.toIOException(exception);<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    }<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    return null;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>  }<a name="line.121"></a>
-<span class="sourceLineNo">122</span><a name="line.122"></a>
-<span class="sourceLineNo">123</span>  @InterfaceAudience.Private<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  public ForeignExceptionMessage getForeignExceptionMessage() {<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    return exception;<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 String getExceptionCause() {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    assert isFailed();<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    return exception.getGenericException().getClassName();<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>  public String getExceptionMessage() {<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    assert isFailed();<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    return exception.getGenericException().getMessage();<a name="line.135"></a>
-<span class="sourceLineNo">136</span>  }<a name="line.136"></a>
-<span class="sourceLineNo">137</span><a name="line.137"></a>
-<span class="sourceLineNo">138</span>  public String getExceptionFullMessage() {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    assert isFailed();<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    return getExceptionCause() + " - " + getExceptionMessage();<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>  public boolean hasResultData() {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    return result != null;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  }<a name="line.145"></a>
-<span class="sourceLineNo">146</span><a name="line.146"></a>
-<span class="sourceLineNo">147</span>  public byte[] getResult() {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    return result;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  }<a name="line.149"></a>
-<span class="sourceLineNo">150</span><a name="line.150"></a>
-<span class="sourceLineNo">151</span>  public long getStartTime() {<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    return startTime;<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>  public long getLastUpdate() {<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    return lastUpdate;<a name="line.156"></a>
-<span class="sourceLineNo">157</span>  }<a name="line.157"></a>
-<span class="sourceLineNo">158</span><a name="line.158"></a>
-<span class="sourceLineNo">159</span>  public long executionTime() {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    return lastUpdate - startTime;<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>  @InterfaceAudience.Private<a name="line.163"></a>
-<span class="sourceLineNo">164</span>  public boolean hasClientAckTime() {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    return clientAckTime &gt; 0;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  }<a name="line.166"></a>
-<span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span>  @InterfaceAudience.Private<a name="line.168"></a>
-<span class="sourceLineNo">169</span>  public long getClientAckTime() {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    return clientAckTime;<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>  @InterfaceAudience.Private<a name="line.173"></a>
-<span class="sourceLineNo">174</span>  public void setClientAckTime(final long timestamp) {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    this.clientAckTime = timestamp;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>  }<a name="line.176"></a>
-<span class="sourceLineNo">177</span><a name="line.177"></a>
-<span class="sourceLineNo">178</span>  /**<a name="line.178"></a>
-<span class="sourceLineNo">179</span>   * @return Convert the current {@link ProcedureInfo} into a Protocol Buffers Procedure<a name="line.179"></a>
-<span class="sourceLineNo">180</span>   * instance.<a name="line.180"></a>
-<span class="sourceLineNo">181</span>   */<a name="line.181"></a>
-<span class="sourceLineNo">182</span>  @InterfaceAudience.Private<a name="line.182"></a>
-<span class="sourceLineNo">183</span>  public static ProcedureProtos.Procedure convertToProcedureProto(<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      final ProcedureInfo procInfo) {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    ProcedureProtos.Procedure.Builder builder = ProcedureProtos.Procedure.newBuilder();<a name="line.185"></a>
-<span class="sourceLineNo">186</span><a name="line.186"></a>
-<span class="sourceLineNo">187</span>    builder.setClassName(procInfo.getProcName());<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    builder.setProcId(procInfo.getProcId());<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    builder.setStartTime(procInfo.getStartTime());<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    builder.setState(procInfo.getProcState());<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    builder.setLastUpdate(procInfo.getLastUpdate());<a name="line.191"></a>
-<span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span>    if (procInfo.hasParentId()) {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      builder.setParentId(procInfo.getParentId());<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    }<a name="line.195"></a>
-<span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span>    if (procInfo.getProcOwner() != null) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>       builder.setOwner(procInfo.getProcOwner());<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>    if (procInfo.isFailed()) {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>        builder.setException(procInfo.getForeignExceptionMessage());<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>
-<span class="sourceLineNo">205</span>    if (procInfo.hasResultData()) {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      builder.setResult(ByteStringer.wrap(procInfo.getResult()));<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>    return builder.build();<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>   * Helper to convert the protobuf object.<a name="line.213"></a>
-<span class="sourceLineNo">214</span>   * @return Convert the current Protocol Buffers Procedure to {@link ProcedureInfo}<a name="line.214"></a>
-<span class="sourceLineNo">215</span>   * instance.<a name="line.215"></a>
-<span class="sourceLineNo">216</span>   */<a name="line.216"></a>
-<span class="sourceLineNo">217</span>  @InterfaceAudience.Private<a name="line.217"></a>
-<span class="sourceLineNo">218</span>  public static ProcedureInfo convert(final ProcedureProtos.Procedure procProto) {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    NonceKey nonceKey = null;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    if (procProto.getNonce() != HConstants.NO_NONCE) {<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      nonceKey = new NonceKey(procProto.getNonceGroup(), procProto.getNonce());<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    }<a name="line.222"></a>
-<span class="sourceLineNo">223</span><a name="line.223"></a>
-<span class="sourceLineNo">224</span>    return new ProcedureInfo(<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      procProto.getProcId(),<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      procProto.getClassName(),<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      procProto.getOwner(),<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      procProto.getState(),<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      procProto.hasParentId() ? procProto.getParentId() : -1,<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      nonceKey,<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      procProto.hasException() ? procProto.getException() : null,<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      procProto.getLastUpdate(),<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      procProto.getStartTime(),<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      procProto.hasResult() ? procProto.getResult().toByteArray() : null);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>  }<a name="line.235"></a>
-<span class="sourceLineNo">236</span><a name="line.236"></a>
-<span class="sourceLineNo">237</span>  /**<a name="line.237"></a>
-<span class="sourceLineNo">238</span>   * Check if the user is this procedure's owner<a name="line.238"></a>
-<span class="sourceLineNo">239</span>   * @param procInfo the procedure to check<a name="line.239"></a>
-<span class="sourceLineNo">240</span>   * @param user the user<a name="line.240"></a>
-<span class="sourceLineNo">241</span>   * @return true if the user is the owner of the procedure,<a name="line.241"></a>
-<span class="sourceLineNo">242</span>   *   false otherwise or the owner is unknown.<a name="line.242"></a>
-<span class="sourceLineNo">243</span>   */<a name="line.243"></a>
-<span class="sourceLineNo">244</span>  @InterfaceAudience.Private<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  public static boolean isProcedureOwner(final ProcedureInfo procInfo, final User user) {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    if (user == null) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      return false;<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    }<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    String procOwner = procInfo.getProcOwner();<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    if (procOwner == null) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      return false;<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    }<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    return procOwner.equals(user.getShortName());<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">052</span>  @InterfaceAudience.Private<a name="line.52"></a>
+<span class="sourceLineNo">053</span>  public ProcedureInfo(<a name="line.53"></a>
+<span class="sourceLineNo">054</span>      final long procId,<a name="line.54"></a>
+<span class="sourceLineNo">055</span>      final String procName,<a name="line.55"></a>
+<span class="sourceLineNo">056</span>      final String procOwner,<a name="line.56"></a>
+<span class="sourceLineNo">057</span>      final ProcedureState procState,<a name="line.57"></a>
+<span class="sourceLineNo">058</span>      final long parentId,<a name="line.58"></a>
+<span class="sourceLineNo">059</span>      final NonceKey nonceKey,<a name="line.59"></a>
+<span class="sourceLineNo">060</span>      final ForeignExceptionMessage exception,<a name="line.60"></a>
+<span class="sourceLineNo">061</span>      final long lastUpdate,<a name="line.61"></a>
+<span class="sourceLineNo">062</span>      final long startTime,<a name="line.62"></a>
+<span class="sourceLineNo">063</span>      final byte[] result) {<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    this.procId = procId;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    this.procName = procName;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    this.procOwner = procOwner;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    this.procState = procState;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    this.parentId = parentId;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    this.nonceKey = nonceKey;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    this.lastUpdate = lastUpdate;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    this.startTime = startTime;<a name="line.71"></a>
+<span class="sourceLineNo">072</span><a name="line.72"></a>
+<span class="sourceLineNo">073</span>    // If the procedure is completed, we should treat exception and result differently<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    this.exception = exception;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    this.result = result;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>  }<a name="line.76"></a>
+<span class="sourceLineNo">077</span><a name="line.77"></a>
+<span class="sourceLineNo">078</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="CN_IDIOM_NO_SUPER_CALL",<a name="line.78"></a>
+<span class="sourceLineNo">079</span>      justification="Intentional; calling super class clone doesn't make sense here.")<a name="line.79"></a>
+<span class="sourceLineNo">080</span>  public ProcedureInfo clone() {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    return new ProcedureInfo(procId, procName, procOwner, procState, parentId, nonceKey,<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      exception, lastUpdate, startTime, result);<a name="line.82"></a>
+<span class="sourceLineNo">083</span>  }<a name="line.83"></a>
+<span class="sourceLineNo">084</span><a name="line.84"></a>
+<span class="sourceLineNo">085</span>  public long getProcId() {<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    return procId;<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>  public String getProcName() {<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    return procName;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  }<a name="line.91"></a>
+<span class="sourceLineNo">092</span><a name="line.92"></a>
+<span class="sourceLineNo">093</span>  public String getProcOwner() {<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    return procOwner;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  }<a name="line.95"></a>
+<span class="sourceLineNo">096</span><a name="line.96"></a>
+<span class="sourceLineNo">097</span>  public ProcedureState getProcState() {<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    return procState;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  }<a name="line.99"></a>
+<span class="sourceLineNo">100</span><a name="line.100"></a>
+<span class="sourceLineNo">101</span>  public boolean hasParentId() {<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    return (parentId != -1);<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  }<a name="line.103"></a>
+<span class="sourceLineNo">104</span><a name="line.104"></a>
+<span class="sourceLineNo">105</span>  public long getParentId() {<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    return parentId;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  }<a name="line.107"></a>
+<span class="sourceLineNo">108</span><a name="line.108"></a>
+<span class="sourceLineNo">109</span>  public NonceKey getNonceKey() {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    return nonceKey;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>  }<a name="line.111"></a>
+<span class="sourceLineNo">112</span><a name="line.112"></a>
+<span class="sourceLineNo">113</span>  public boolean isFailed() {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    return exception != null;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  }<a name="line.115"></a>
+<span class="sourceLineNo">116</span><a name="line.116"></a>
+<span class="sourceLineNo">117</span>  public IOException getException() {<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    if (isFailed()) {<a name="line.118"></a>
+<span class="sourceLineNo">119</span>      return ForeignExceptionUtil.toIOException(exception);<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    }<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    return null;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>  }<a name="line.122"></a>
+<span class="sourceLineNo">123</span><a name="line.123"></a>
+<span class="sourceLineNo">124</span>  @InterfaceAudience.Private<a name="line.124"></a>
+<span class="sourceLineNo">125</span>  public ForeignExceptionMessage getForeignExceptionMessage() {<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    return exception;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>  }<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span>  public String getExceptionCause() {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    assert isFailed();<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    return exception.getGenericException().getClassName();<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>  public String getExceptionMessage() {<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    assert isFailed();<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    return exception.getGenericException().getMessage();<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>  public String getExceptionFullMessage() {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    assert isFailed();<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    return getExceptionCause() + " - " + getExceptionMessage();<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  }<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span>  public boolean hasResultData() {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    return result != 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>  public byte[] getResult() {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    return result;<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>  public long getStartTime() {<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    return startTime;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  }<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span>  public long getLastUpdate() {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    return lastUpdate;<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>  public long executionTime() {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    return lastUpdate - startTime;<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>  @InterfaceAudience.Private<a name="line.164"></a>
+<span class="sourceLineNo">165</span>  public boolean hasClientAckTime() {<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    return clientAckTime &gt; 0;<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>  @InterfaceAudience.Private<a name="line.169"></a>
+<span class="sourceLineNo">170</span>  public long getClientAckTime() {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    return clientAckTime;<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>  @InterfaceAudience.Private<a name="line.174"></a>
+<span class="sourceLineNo">175</span>  public void setClientAckTime(final long timestamp) {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    this.clientAckTime = timestamp;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>  }<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>   * @return Convert the current {@link ProcedureInfo} into a Protocol Buffers Procedure<a name="line.180"></a>
+<span class="sourceLineNo">181</span>   * instance.<a name="line.181"></a>
+<span class="sourceLineNo">182</span>   */<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  @InterfaceAudience.Private<a name="line.183"></a>
+<span class="sourceLineNo">184</span>  public static ProcedureProtos.Procedure convertToProcedureProto(<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      final ProcedureInfo procInfo) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    ProcedureProtos.Procedure.Builder builder = ProcedureProtos.Procedure.newBuilder();<a name="line.186"></a>
+<span class="sourceLineNo">187</span><a name="line.187"></a>
+<span class="sourceLineNo">188</span>    builder.setClassName(procInfo.getProcName());<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    builder.setProcId(procInfo.getProcId());<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    builder.setStartTime(procInfo.getStartTime());<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    builder.setState(procInfo.getProcState());<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    builder.setLastUpdate(procInfo.getLastUpdate());<a name="line.192"></a>
+<span class="sourceLineNo">193</span><a name="line.193"></a>
+<span class="sourceLineNo">194</span>    if (procInfo.hasParentId()) {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      builder.setParentId(procInfo.getParentId());<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>    if (procInfo.getProcOwner() != null) {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>       builder.setOwner(procInfo.getProcOwner());<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>    if (procInfo.isFailed()) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>        builder.setException(procInfo.getForeignExceptionMessage());<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    }<a name="line.204"></a>
+<span class="sourceLineNo">205</span><a name="line.205"></a>
+<span class="sourceLineNo">206</span>    if (procInfo.hasResultData()) {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      builder.setResult(ByteStringer.wrap(procInfo.getResult()));<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>    return builder.build();<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>  /**<a name="line.213"></a>
+<span class="sourceLineNo">214</span>   * Helper to convert the protobuf object.<a name="line.214"></a>
+<span class="sourceLineNo">215</span>   * @return Convert the current Protocol Buffers Procedure to {@link ProcedureInfo}<a name="line.215"></a>
+<span class="sourceLineNo">216</span>   * instance.<a name="line.216"></a>
+<span class="sourceLineNo">217</span>   */<a name="line.217"></a>
+<span class="sourceLineNo">218</span>  @InterfaceAudience.Private<a name="line.218"></a>
+<span class="sourceLineNo">219</span>  public static ProcedureInfo convert(final ProcedureProtos.Procedure procProto) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    NonceKey nonceKey = null;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    if (procProto.getNonce() != HConstants.NO_NONCE) {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      nonceKey = new NonceKey(procProto.getNonceGroup(), procProto.getNonce());<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    }<a name="line.223"></a>
+<span class="sourceLineNo">224</span><a name="line.224"></a>
+<span class="sourceLineNo">225</span>    return new ProcedureInfo(<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      procProto.getProcId(),<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      procProto.getClassName(),<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      procProto.getOwner(),<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      procProto.getState(),<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      procProto.hasParentId() ? procProto.getParentId() : -1,<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      nonceKey,<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      procProto.hasException() ? procProto.getException() : null,<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      procProto.getLastUpdate(),<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      procProto.getStartTime(),<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      procProto.hasResult() ? procProto.getResult().toByteArray() : null);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>  }<a name="line.236"></a>
+<span class="sourceLineNo">237</span><a name="line.237"></a>
+<span class="sourceLineNo">238</span>  /**<a name="line.238"></a>
+<span class="sourceLineNo">239</span>   * Check if the user is this procedure's owner<a name="line.239"></a>
+<span class="sourceLineNo">240</span>   * @param procInfo the procedure to check<a name="line.240"></a>
+<span class="sourceLineNo">241</span>   * @param user the user<a name="line.241"></a>
+<span class="sourceLineNo">242</span>   * @return true if the user is the owner of the procedure,<a name="line.242"></a>
+<span class="sourceLineNo">243</span>   *   false otherwise or the owner is unknown.<a name="line.243"></a>
+<span class="sourceLineNo">244</span>   */<a name="line.244"></a>
+<span class="sourceLineNo">245</span>  @InterfaceAudience.Private<a name="line.245"></a>
+<span class="sourceLineNo">246</span>  public static boolean isProcedureOwner(final ProcedureInfo procInfo, final User user) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    if (user == null) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      return false;<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    }<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    String procOwner = procInfo.getProcOwner();<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    if (procOwner == null) {<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      return false;<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    }<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    return procOwner.equals(user.getShortName());<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>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/src-html/org/apache/hadoop/hbase/client/Append.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/Append.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/Append.html
index 93d92df..28a04b5 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/Append.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/Append.html
@@ -55,136 +55,135 @@
 <span class="sourceLineNo">047</span>@InterfaceAudience.Public<a name="line.47"></a>
 <span class="sourceLineNo">048</span>@InterfaceStability.Stable<a name="line.48"></a>
 <span class="sourceLineNo">049</span>public class Append extends Mutation {<a name="line.49"></a>
-<span class="sourceLineNo">050</span>  private static final String RETURN_RESULTS = "_rr_";<a name="line.50"></a>
-<span class="sourceLineNo">051</span>  /**<a name="line.51"></a>
-<span class="sourceLineNo">052</span>   * @param returnResults<a name="line.52"></a>
-<span class="sourceLineNo">053</span>   *          True (default) if the append operation should return the results.<a name="line.53"></a>
-<span class="sourceLineNo">054</span>   *          A client that is not interested in the result can save network<a name="line.54"></a>
-<span class="sourceLineNo">055</span>   *          bandwidth setting this to false.<a name="line.55"></a>
-<span class="sourceLineNo">056</span>   */<a name="line.56"></a>
-<span class="sourceLineNo">057</span>  public Append setReturnResults(boolean returnResults) {<a name="line.57"></a>
-<span class="sourceLineNo">058</span>    setAttribute(RETURN_RESULTS, Bytes.toBytes(returnResults));<a name="line.58"></a>
-<span class="sourceLineNo">059</span>    return this;<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>  /**<a name="line.62"></a>
-<span class="sourceLineNo">063</span>   * @return current setting for returnResults<a name="line.63"></a>
-<span class="sourceLineNo">064</span>   */<a name="line.64"></a>
+<span class="sourceLineNo">050</span>  /**<a name="line.50"></a>
+<span class="sourceLineNo">051</span>   * @param returnResults<a name="line.51"></a>
+<span class="sourceLineNo">052</span>   *          True (default) if the append operation should return the results.<a name="line.52"></a>
+<span class="sourceLineNo">053</span>   *          A client that is not interested in the result can save network<a name="line.53"></a>
+<span class="sourceLineNo">054</span>   *          bandwidth setting this to false.<a name="line.54"></a>
+<span class="sourceLineNo">055</span>   */<a name="line.55"></a>
+<span class="sourceLineNo">056</span>  public Append setReturnResults(boolean returnResults) {<a name="line.56"></a>
+<span class="sourceLineNo">057</span>    super.setReturnResults(returnResults);<a name="line.57"></a>
+<span class="sourceLineNo">058</span>    return this;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  }<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>   * @return current setting for returnResults<a name="line.62"></a>
+<span class="sourceLineNo">063</span>   */<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  // This method makes public the superclasses's protected method.<a name="line.64"></a>
 <span class="sourceLineNo">065</span>  public boolean isReturnResults() {<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    byte[] v = getAttribute(RETURN_RESULTS);<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    return v == null ? true : Bytes.toBoolean(v);<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  }<a name="line.68"></a>
-<span class="sourceLineNo">069</span><a name="line.69"></a>
-<span class="sourceLineNo">070</span>  /**<a name="line.70"></a>
-<span class="sourceLineNo">071</span>   * Create a Append operation for the specified row.<a name="line.71"></a>
-<span class="sourceLineNo">072</span>   * &lt;p&gt;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>   * At least one column must be appended to.<a name="line.73"></a>
-<span class="sourceLineNo">074</span>   * @param row row key; makes a local copy of passed in array.<a name="line.74"></a>
-<span class="sourceLineNo">075</span>   */<a name="line.75"></a>
-<span class="sourceLineNo">076</span>  public Append(byte[] row) {<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    this(row, 0, row.length);<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  }<a name="line.78"></a>
-<span class="sourceLineNo">079</span>  /**<a name="line.79"></a>
-<span class="sourceLineNo">080</span>   * Copy constructor<a name="line.80"></a>
-<span class="sourceLineNo">081</span>   * @param a<a name="line.81"></a>
-<span class="sourceLineNo">082</span>   */<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  public Append(Append a) {<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    this.row = a.getRow();<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    this.ts = a.getTimeStamp();<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    this.familyMap.putAll(a.getFamilyCellMap());<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    for (Map.Entry&lt;String, byte[]&gt; entry : a.getAttributesMap().entrySet()) {<a name="line.87"></a>
-<span class="sourceLineNo">088</span>      this.setAttribute(entry.getKey(), entry.getValue());<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    }<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>  /** Create a Append operation for the specified row.<a name="line.92"></a>
-<span class="sourceLineNo">093</span>   * &lt;p&gt;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   * At least one column must be appended to.<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   * @param rowArray Makes a copy out of this buffer.<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   * @param rowOffset<a name="line.96"></a>
-<span class="sourceLineNo">097</span>   * @param rowLength<a name="line.97"></a>
-<span class="sourceLineNo">098</span>   */<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  public Append(final byte [] rowArray, final int rowOffset, final int rowLength) {<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    checkRow(rowArray, rowOffset, rowLength);<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    this.row = Bytes.copy(rowArray, rowOffset, rowLength);<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  }<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>  /**<a name="line.104"></a>
-<span class="sourceLineNo">105</span>   * Add the specified column and value to this Append operation.<a name="line.105"></a>
-<span class="sourceLineNo">106</span>   * @param family family name<a name="line.106"></a>
-<span class="sourceLineNo">107</span>   * @param qualifier column qualifier<a name="line.107"></a>
-<span class="sourceLineNo">108</span>   * @param value value to append to specified column<a name="line.108"></a>
-<span class="sourceLineNo">109</span>   * @return this<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   */<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  public Append add(byte [] family, byte [] qualifier, byte [] value) {<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    KeyValue kv = new KeyValue(this.row, family, qualifier, this.ts, KeyValue.Type.Put, value);<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    return add(kv);<a name="line.113"></a>
-<span class="sourceLineNo">114</span>  }<a name="line.114"></a>
-<span class="sourceLineNo">115</span><a name="line.115"></a>
-<span class="sourceLineNo">116</span>  /**<a name="line.116"></a>
-<span class="sourceLineNo">117</span>   * Add column and value to this Append operation.<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   * @param cell<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   * @return This instance<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   */<a name="line.120"></a>
-<span class="sourceLineNo">121</span>  @SuppressWarnings("unchecked")<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  public Append add(final Cell cell) {<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    // Presume it is KeyValue for now.<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    byte [] family = CellUtil.cloneFamily(cell);<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    List&lt;Cell&gt; list = this.familyMap.get(family);<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    if (list == null) {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      list  = new ArrayList&lt;Cell&gt;();<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    }<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    // find where the new entry should be placed in the List<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    list.add(cell);<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    this.familyMap.put(family, list);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    return this;<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>  @Override<a name="line.135"></a>
-<span class="sourceLineNo">136</span>  public Append setAttribute(String name, byte[] value) {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    return (Append) super.setAttribute(name, value);<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>  @Override<a name="line.140"></a>
-<span class="sourceLineNo">141</span>  public Append setId(String id) {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    return (Append) super.setId(id);<a name="line.142"></a>
-<span class="sourceLineNo">143</span>  }<a name="line.143"></a>
-<span class="sourceLineNo">144</span><a name="line.144"></a>
-<span class="sourceLineNo">145</span>  @Override<a name="line.145"></a>
-<span class="sourceLineNo">146</span>  public Append setDurability(Durability d) {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    return (Append) super.setDurability(d);<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  }<a name="line.148"></a>
-<span class="sourceLineNo">149</span><a name="line.149"></a>
-<span class="sourceLineNo">150</span>  @Override<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  public Append setFamilyCellMap(NavigableMap&lt;byte[], List&lt;Cell&gt;&gt; map) {<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    return (Append) super.setFamilyCellMap(map);<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>  @Override<a name="line.155"></a>
-<span class="sourceLineNo">156</span>  public Append setClusterIds(List&lt;UUID&gt; clusterIds) {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    return (Append) super.setClusterIds(clusterIds);<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>  @Override<a name="line.160"></a>
-<span class="sourceLineNo">161</span>  public Append setCellVisibility(CellVisibility expression) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    return (Append) super.setCellVisibility(expression);<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>  @Override<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  public Append setACL(String user, Permission perms) {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    return (Append) super.setACL(user, perms);<a name="line.167"></a>
-<span class="sourceLineNo">168</span>  }<a name="line.168"></a>
-<span class="sourceLineNo">169</span><a name="line.169"></a>
-<span class="sourceLineNo">170</span>  @Override<a name="line.170"></a>
-<span class="sourceLineNo">171</span>  public Append setACL(Map&lt;String, Permission&gt; perms) {<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    return (Append) super.setACL(perms);<a name="line.172"></a>
-<span class="sourceLineNo">173</span>  }<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 Append setTTL(long ttl) {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    return (Append) super.setTTL(ttl);<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">066</span>    return super.isReturnResults();<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  }<a name="line.67"></a>
+<span class="sourceLineNo">068</span><a name="line.68"></a>
+<span class="sourceLineNo">069</span>  /**<a name="line.69"></a>
+<span class="sourceLineNo">070</span>   * Create a Append operation for the specified row.<a name="line.70"></a>
+<span class="sourceLineNo">071</span>   * &lt;p&gt;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>   * At least one column must be appended to.<a name="line.72"></a>
+<span class="sourceLineNo">073</span>   * @param row row key; makes a local copy of passed in array.<a name="line.73"></a>
+<span class="sourceLineNo">074</span>   */<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  public Append(byte[] row) {<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    this(row, 0, row.length);<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  }<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  /**<a name="line.78"></a>
+<span class="sourceLineNo">079</span>   * Copy constructor<a name="line.79"></a>
+<span class="sourceLineNo">080</span>   * @param a<a name="line.80"></a>
+<span class="sourceLineNo">081</span>   */<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  public Append(Append a) {<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    this.row = a.getRow();<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    this.ts = a.getTimeStamp();<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    this.familyMap.putAll(a.getFamilyCellMap());<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    for (Map.Entry&lt;String, byte[]&gt; entry : a.getAttributesMap().entrySet()) {<a name="line.86"></a>
+<span class="sourceLineNo">087</span>      this.setAttribute(entry.getKey(), entry.getValue());<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    }<a name="line.88"></a>
+<span class="sourceLineNo">089</span>  }<a name="line.89"></a>
+<span class="sourceLineNo">090</span><a name="line.90"></a>
+<span class="sourceLineNo">091</span>  /** Create a Append operation for the specified row.<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   * &lt;p&gt;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>   * At least one column must be appended to.<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   * @param rowArray Makes a copy out of this buffer.<a name="line.94"></a>
+<span class="sourceLineNo">095</span>   * @param rowOffset<a name="line.95"></a>
+<span class="sourceLineNo">096</span>   * @param rowLength<a name="line.96"></a>
+<span class="sourceLineNo">097</span>   */<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  public Append(final byte [] rowArray, final int rowOffset, final int rowLength) {<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    checkRow(rowArray, rowOffset, rowLength);<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    this.row = Bytes.copy(rowArray, rowOffset, rowLength);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  }<a name="line.101"></a>
+<span class="sourceLineNo">102</span><a name="line.102"></a>
+<span class="sourceLineNo">103</span>  /**<a name="line.103"></a>
+<span class="sourceLineNo">104</span>   * Add the specified column and value to this Append operation.<a name="line.104"></a>
+<span class="sourceLineNo">105</span>   * @param family family name<a name="line.105"></a>
+<span class="sourceLineNo">106</span>   * @param qualifier column qualifier<a name="line.106"></a>
+<span class="sourceLineNo">107</span>   * @param value value to append to specified column<a name="line.107"></a>
+<span class="sourceLineNo">108</span>   * @return this<a name="line.108"></a>
+<span class="sourceLineNo">109</span>   */<a name="line.109"></a>
+<span class="sourceLineNo">110</span>  public Append add(byte [] family, byte [] qualifier, byte [] value) {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    KeyValue kv = new KeyValue(this.row, family, qualifier, this.ts, KeyValue.Type.Put, value);<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    return add(kv);<a name="line.112"></a>
+<span class="sourceLineNo">113</span>  }<a name="line.113"></a>
+<span class="sourceLineNo">114</span><a name="line.114"></a>
+<span class="sourceLineNo">115</span>  /**<a name="line.115"></a>
+<span class="sourceLineNo">116</span>   * Add column and value to this Append operation.<a name="line.116"></a>
+<span class="sourceLineNo">117</span>   * @param cell<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   * @return This instance<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   */<a name="line.119"></a>
+<span class="sourceLineNo">120</span>  @SuppressWarnings("unchecked")<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  public Append add(final Cell cell) {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    // Presume it is KeyValue for now.<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    byte [] family = CellUtil.cloneFamily(cell);<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    List&lt;Cell&gt; list = this.familyMap.get(family);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    if (list == null) {<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      list  = new ArrayList&lt;Cell&gt;();<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    }<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    // find where the new entry should be placed in the List<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    list.add(cell);<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    this.familyMap.put(family, list);<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    return this;<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>  @Override<a name="line.134"></a>
+<span class="sourceLineNo">135</span>  public Append setAttribute(String name, byte[] value) {<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    return (Append) super.setAttribute(name, value);<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>  @Override<a name="line.139"></a>
+<span class="sourceLineNo">140</span>  public Append setId(String id) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    return (Append) super.setId(id);<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  }<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span>  @Override<a name="line.144"></a>
+<span class="sourceLineNo">145</span>  public Append setDurability(Durability d) {<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    return (Append) super.setDurability(d);<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>  @Override<a name="line.149"></a>
+<span class="sourceLineNo">150</span>  public Append setFamilyCellMap(NavigableMap&lt;byte[], List&lt;Cell&gt;&gt; map) {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    return (Append) super.setFamilyCellMap(map);<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>  @Override<a name="line.154"></a>
+<span class="sourceLineNo">155</span>  public Append setClusterIds(List&lt;UUID&gt; clusterIds) {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    return (Append) super.setClusterIds(clusterIds);<a name="line.156"></a>
+<span class="sourceLineNo">157</span>  }<a name="line.157"></a>
+<span class="sourceLineNo">158</span><a name="line.158"></a>
+<span class="sourceLineNo">159</span>  @Override<a name="line.159"></a>
+<span class="sourceLineNo">160</span>  public Append setCellVisibility(CellVisibility expression) {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    return (Append) super.setCellVisibility(expression);<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>  @Override<a name="line.164"></a>
+<span class="sourceLineNo">165</span>  public Append setACL(String user, Permission perms) {<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    return (Append) super.setACL(user, perms);<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>  @Override<a name="line.169"></a>
+<span class="sourceLineNo">170</span>  public Append setACL(Map&lt;String, Permission&gt; perms) {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    return (Append) super.setACL(perms);<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>  @Override<a name="line.174"></a>
+<span class="sourceLineNo">175</span>  public Append setTTL(long ttl) {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    return (Append) super.setTTL(ttl);<a name="line.176"></a>
+<span class="sourceLineNo">177</span>  }<a name="line.177"></a>
+<span class="sourceLineNo">178</span>}<a name="line.178"></a>
 
 
 


[18/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.MutationReplay.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.MutationReplay.html b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.MutationReplay.html
index 0597160..b444f46 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.MutationReplay.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.MutationReplay.html
@@ -184,2145 +184,2183 @@
 <span class="sourceLineNo">176</span>  // Min batch size when replay WAL edits<a name="line.176"></a>
 <span class="sourceLineNo">177</span>  private final int minBatchSize;<a name="line.177"></a>
 <span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span>  WALSplitter(final WALFactory factory, Configuration conf, Path rootDir,<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      FileSystem fs, LastSequenceId idChecker,<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      CoordinatedStateManager csm, RecoveryMode mode) {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    this.conf = HBaseConfiguration.create(conf);<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    String codecClassName = conf<a name="line.183"></a>
-<span class="sourceLineNo">184</span>        .get(WALCellCodec.WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    this.conf.set(HConstants.RPC_CODEC_CONF_KEY, codecClassName);<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    this.rootDir = rootDir;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    this.fs = fs;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    this.sequenceIdChecker = idChecker;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    this.csm = (BaseCoordinatedStateManager)csm;<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    this.walFactory = factory;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    this.controller = new PipelineController();<a name="line.191"></a>
-<span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span>    entryBuffers = new EntryBuffers(controller,<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        this.conf.getInt("hbase.regionserver.hlog.splitlog.buffersize",<a name="line.194"></a>
-<span class="sourceLineNo">195</span>            128*1024*1024));<a name="line.195"></a>
+<span class="sourceLineNo">179</span>  // the file being split currently<a name="line.179"></a>
+<span class="sourceLineNo">180</span>  private FileStatus fileBeingSplit;<a name="line.180"></a>
+<span class="sourceLineNo">181</span><a name="line.181"></a>
+<span class="sourceLineNo">182</span>  @VisibleForTesting<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  WALSplitter(final WALFactory factory, Configuration conf, Path rootDir,<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      FileSystem fs, LastSequenceId idChecker,<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      CoordinatedStateManager csm, RecoveryMode mode) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    this.conf = HBaseConfiguration.create(conf);<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    String codecClassName = conf<a name="line.187"></a>
+<span class="sourceLineNo">188</span>        .get(WALCellCodec.WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    this.conf.set(HConstants.RPC_CODEC_CONF_KEY, codecClassName);<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    this.rootDir = rootDir;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    this.fs = fs;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    this.sequenceIdChecker = idChecker;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    this.csm = (BaseCoordinatedStateManager)csm;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    this.walFactory = factory;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    this.controller = new PipelineController();<a name="line.195"></a>
 <span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span>    // a larger minBatchSize may slow down recovery because replay writer has to wait for<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    // enough edits before replaying them<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    this.minBatchSize = this.conf.getInt("hbase.regionserver.wal.logreplay.batch.size", 64);<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    this.distributedLogReplay = (RecoveryMode.LOG_REPLAY == mode);<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>    this.numWriterThreads = this.conf.getInt("hbase.regionserver.hlog.splitlog.writer.threads", 3);<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    if (csm != null &amp;&amp; this.distributedLogReplay) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      outputSink = new LogReplayOutputSink(controller, entryBuffers, numWriterThreads);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    } else {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      if (this.distributedLogReplay) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        LOG.info("ZooKeeperWatcher is passed in as NULL so disable distrubitedLogRepaly.");<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      }<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      this.distributedLogReplay = false;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      outputSink = new LogRecoveredEditsOutputSink(controller, entryBuffers, numWriterThreads);<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>  }<a name="line.213"></a>
-<span class="sourceLineNo">214</span><a name="line.214"></a>
-<span class="sourceLineNo">215</span>  /**<a name="line.215"></a>
-<span class="sourceLineNo">216</span>   * Splits a WAL file into region's recovered-edits directory.<a name="line.216"></a>
-<span class="sourceLineNo">217</span>   * This is the main entry point for distributed log splitting from SplitLogWorker.<a name="line.217"></a>
-<span class="sourceLineNo">218</span>   * &lt;p&gt;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>   * If the log file has N regions then N recovered.edits files will be produced.<a name="line.219"></a>
-<span class="sourceLineNo">220</span>   * &lt;p&gt;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   * @param rootDir<a name="line.221"></a>
-<span class="sourceLineNo">222</span>   * @param logfile<a name="line.222"></a>
-<span class="sourceLineNo">223</span>   * @param fs<a name="line.223"></a>
-<span class="sourceLineNo">224</span>   * @param conf<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   * @param reporter<a name="line.225"></a>
-<span class="sourceLineNo">226</span>   * @param idChecker<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   * @param cp coordination state manager<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   * @return false if it is interrupted by the progress-able.<a name="line.228"></a>
-<span class="sourceLineNo">229</span>   * @throws IOException<a name="line.229"></a>
-<span class="sourceLineNo">230</span>   */<a name="line.230"></a>
-<span class="sourceLineNo">231</span>  public static boolean splitLogFile(Path rootDir, FileStatus logfile, FileSystem fs,<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      Configuration conf, CancelableProgressable reporter, LastSequenceId idChecker,<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      CoordinatedStateManager cp, RecoveryMode mode, final WALFactory factory) throws IOException {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, idChecker, cp, mode);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    return s.splitLogFile(logfile, reporter);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  }<a name="line.236"></a>
-<span class="sourceLineNo">237</span><a name="line.237"></a>
-<span class="sourceLineNo">238</span>  // A wrapper to split one log folder using the method used by distributed<a name="line.238"></a>
-<span class="sourceLineNo">239</span>  // log splitting. Used by tools and unit tests. It should be package private.<a name="line.239"></a>
-<span class="sourceLineNo">240</span>  // It is public only because TestWALObserver is in a different package,<a name="line.240"></a>
-<span class="sourceLineNo">241</span>  // which uses this method to do log splitting.<a name="line.241"></a>
-<span class="sourceLineNo">242</span>  @VisibleForTesting<a name="line.242"></a>
-<span class="sourceLineNo">243</span>  public static List&lt;Path&gt; split(Path rootDir, Path logDir, Path oldLogDir,<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      FileSystem fs, Configuration conf, final WALFactory factory) throws IOException {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    final FileStatus[] logfiles = SplitLogManager.getFileList(conf,<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        Collections.singletonList(logDir), null);<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    List&lt;Path&gt; splits = new ArrayList&lt;Path&gt;();<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    if (logfiles != null &amp;&amp; logfiles.length &gt; 0) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      for (FileStatus logfile: logfiles) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, null, null,<a name="line.250"></a>
-<span class="sourceLineNo">251</span>            RecoveryMode.LOG_SPLITTING);<a name="line.251"></a>
-<span class="sourceLineNo">252</span>        if (s.splitLogFile(logfile, null)) {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>          finishSplitLogFile(rootDir, oldLogDir, logfile.getPath(), conf);<a name="line.253"></a>
-<span class="sourceLineNo">254</span>          if (s.outputSink.splits != null) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>            splits.addAll(s.outputSink.splits);<a name="line.255"></a>
-<span class="sourceLineNo">256</span>          }<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        }<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      }<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    }<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    if (!fs.delete(logDir, true)) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      throw new IOException("Unable to delete src dir: " + logDir);<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    return splits;<a name="line.263"></a>
-<span class="sourceLineNo">264</span>  }<a name="line.264"></a>
-<span class="sourceLineNo">265</span><a name="line.265"></a>
-<span class="sourceLineNo">266</span>  /**<a name="line.266"></a>
-<span class="sourceLineNo">267</span>   * log splitting implementation, splits one log file.<a name="line.267"></a>
-<span class="sourceLineNo">268</span>   * @param logfile should be an actual log file.<a name="line.268"></a>
-<span class="sourceLineNo">269</span>   */<a name="line.269"></a>
-<span class="sourceLineNo">270</span>  boolean splitLogFile(FileStatus logfile, CancelableProgressable reporter) throws IOException {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    Preconditions.checkState(status == null);<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    Preconditions.checkArgument(logfile.isFile(),<a name="line.272"></a>
-<span class="sourceLineNo">273</span>        "passed in file status is for something other than a regular file.");<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    boolean isCorrupted = false;<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    boolean skipErrors = conf.getBoolean("hbase.hlog.split.skip.errors",<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      SPLIT_SKIP_ERRORS_DEFAULT);<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    int interval = conf.getInt("hbase.splitlog.report.interval.loglines", 1024);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    Path logPath = logfile.getPath();<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    boolean outputSinkStarted = false;<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    boolean progress_failed = false;<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    int editsCount = 0;<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    int editsSkipped = 0;<a name="line.282"></a>
-<span class="sourceLineNo">283</span><a name="line.283"></a>
-<span class="sourceLineNo">284</span>    status =<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        TaskMonitor.get().createStatus(<a name="line.285"></a>
-<span class="sourceLineNo">286</span>          "Splitting log file " + logfile.getPath() + "into a temporary staging area.");<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    Reader in = null;<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    try {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      long logLength = logfile.getLen();<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      LOG.info("Splitting wal: " + logPath + ", length=" + logLength);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      LOG.info("DistributedLogReplay = " + this.distributedLogReplay);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      status.setStatus("Opening log file");<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>        progress_failed = true;<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        return false;<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      }<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      try {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        in = getReader(logfile, skipErrors, reporter);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      } catch (CorruptedLogFileException e) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>        LOG.warn("Could not get reader, corrupted log file " + logPath, e);<a name="line.300"></a>
-<span class="sourceLineNo">301</span>        ZKSplitLog.markCorrupted(rootDir, logfile.getPath().getName(), fs);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>        isCorrupted = true;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      }<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      if (in == null) {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>        LOG.warn("Nothing to split in log file " + logPath);<a name="line.305"></a>
-<span class="sourceLineNo">306</span>        return true;<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      }<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      int numOpenedFilesBeforeReporting = conf.getInt("hbase.splitlog.report.openedfiles", 3);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      int numOpenedFilesLastCheck = 0;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      outputSink.setReporter(reporter);<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      outputSink.startWriterThreads();<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      outputSinkStarted = true;<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      Entry entry;<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      Long lastFlushedSequenceId = -1L;<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      ServerName serverName = DefaultWALProvider.getServerNameFromWALDirectoryName(logPath);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      failedServerName = (serverName == null) ? "" : serverName.getServerName();<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      while ((entry = getNextLogLine(in, logPath, skipErrors)) != null) {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>        byte[] region = entry.getKey().getEncodedRegionName();<a name="line.318"></a>
-<span class="sourceLineNo">319</span>        String encodedRegionNameAsStr = Bytes.toString(region);<a name="line.319"></a>
-<span class="sourceLineNo">320</span>        lastFlushedSequenceId = lastFlushedSequenceIds.get(encodedRegionNameAsStr);<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        if (lastFlushedSequenceId == null) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>          if (this.distributedLogReplay) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>            RegionStoreSequenceIds ids =<a name="line.323"></a>
-<span class="sourceLineNo">324</span>                csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.324"></a>
-<span class="sourceLineNo">325</span>                  encodedRegionNameAsStr);<a name="line.325"></a>
-<span class="sourceLineNo">326</span>            if (ids != null) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>              lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.327"></a>
-<span class="sourceLineNo">328</span>              if (LOG.isDebugEnabled()) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>                LOG.debug("DLR Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.329"></a>
-<span class="sourceLineNo">330</span>                  TextFormat.shortDebugString(ids));<a name="line.330"></a>
-<span class="sourceLineNo">331</span>              }<a name="line.331"></a>
-<span class="sourceLineNo">332</span>            }<a name="line.332"></a>
-<span class="sourceLineNo">333</span>          } else if (sequenceIdChecker != null) {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>            RegionStoreSequenceIds ids = sequenceIdChecker.getLastSequenceId(region);<a name="line.334"></a>
-<span class="sourceLineNo">335</span>            Map&lt;byte[], Long&gt; maxSeqIdInStores = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.335"></a>
-<span class="sourceLineNo">336</span>            for (StoreSequenceId storeSeqId : ids.getStoreSequenceIdList()) {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>              maxSeqIdInStores.put(storeSeqId.getFamilyName().toByteArray(),<a name="line.337"></a>
-<span class="sourceLineNo">338</span>                storeSeqId.getSequenceId());<a name="line.338"></a>
-<span class="sourceLineNo">339</span>            }<a name="line.339"></a>
-<span class="sourceLineNo">340</span>            regionMaxSeqIdInStores.put(encodedRegionNameAsStr, maxSeqIdInStores);<a name="line.340"></a>
-<span class="sourceLineNo">341</span>            lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.341"></a>
-<span class="sourceLineNo">342</span>            if (LOG.isDebugEnabled()) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>              LOG.debug("DLS Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.343"></a>
-<span class="sourceLineNo">344</span>                  TextFormat.shortDebugString(ids));<a name="line.344"></a>
+<span class="sourceLineNo">197</span>    entryBuffers = new EntryBuffers(controller,<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        this.conf.getInt("hbase.regionserver.hlog.splitlog.buffersize",<a name="line.198"></a>
+<span class="sourceLineNo">199</span>            128*1024*1024));<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>    // a larger minBatchSize may slow down recovery because replay writer has to wait for<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    // enough edits before replaying them<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    this.minBatchSize = this.conf.getInt("hbase.regionserver.wal.logreplay.batch.size", 64);<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    this.distributedLogReplay = (RecoveryMode.LOG_REPLAY == mode);<a name="line.204"></a>
+<span class="sourceLineNo">205</span><a name="line.205"></a>
+<span class="sourceLineNo">206</span>    this.numWriterThreads = this.conf.getInt("hbase.regionserver.hlog.splitlog.writer.threads", 3);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    if (csm != null &amp;&amp; this.distributedLogReplay) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      outputSink = new LogReplayOutputSink(controller, entryBuffers, numWriterThreads);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    } else {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      if (this.distributedLogReplay) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>        LOG.info("ZooKeeperWatcher is passed in as NULL so disable distrubitedLogRepaly.");<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      }<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      this.distributedLogReplay = false;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      outputSink = new LogRecoveredEditsOutputSink(controller, entryBuffers, numWriterThreads);<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    }<a name="line.215"></a>
+<span class="sourceLineNo">216</span><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>
+<span class="sourceLineNo">220</span>   * Splits a WAL file into region's recovered-edits directory.<a name="line.220"></a>
+<span class="sourceLineNo">221</span>   * This is the main entry point for distributed log splitting from SplitLogWorker.<a name="line.221"></a>
+<span class="sourceLineNo">222</span>   * &lt;p&gt;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>   * If the log file has N regions then N recovered.edits files will be produced.<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   * &lt;p&gt;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   * @param rootDir<a name="line.225"></a>
+<span class="sourceLineNo">226</span>   * @param logfile<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   * @param fs<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   * @param conf<a name="line.228"></a>
+<span class="sourceLineNo">229</span>   * @param reporter<a name="line.229"></a>
+<span class="sourceLineNo">230</span>   * @param idChecker<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   * @param cp coordination state manager<a name="line.231"></a>
+<span class="sourceLineNo">232</span>   * @return false if it is interrupted by the progress-able.<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   * @throws IOException<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   */<a name="line.234"></a>
+<span class="sourceLineNo">235</span>  public static boolean splitLogFile(Path rootDir, FileStatus logfile, FileSystem fs,<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      Configuration conf, CancelableProgressable reporter, LastSequenceId idChecker,<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      CoordinatedStateManager cp, RecoveryMode mode, final WALFactory factory) throws IOException {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, idChecker, cp, mode);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    return s.splitLogFile(logfile, reporter);<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>  // A wrapper to split one log folder using the method used by distributed<a name="line.242"></a>
+<span class="sourceLineNo">243</span>  // log splitting. Used by tools and unit tests. It should be package private.<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  // It is public only because TestWALObserver is in a different package,<a name="line.244"></a>
+<span class="sourceLineNo">245</span>  // which uses this method to do log splitting.<a name="line.245"></a>
+<span class="sourceLineNo">246</span>  @VisibleForTesting<a name="line.246"></a>
+<span class="sourceLineNo">247</span>  public static List&lt;Path&gt; split(Path rootDir, Path logDir, Path oldLogDir,<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      FileSystem fs, Configuration conf, final WALFactory factory) throws IOException {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    final FileStatus[] logfiles = SplitLogManager.getFileList(conf,<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        Collections.singletonList(logDir), null);<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    List&lt;Path&gt; splits = new ArrayList&lt;Path&gt;();<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    if (logfiles != null &amp;&amp; logfiles.length &gt; 0) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      for (FileStatus logfile: logfiles) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>        WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, null, null,<a name="line.254"></a>
+<span class="sourceLineNo">255</span>            RecoveryMode.LOG_SPLITTING);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>        if (s.splitLogFile(logfile, null)) {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>          finishSplitLogFile(rootDir, oldLogDir, logfile.getPath(), conf);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>          if (s.outputSink.splits != null) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>            splits.addAll(s.outputSink.splits);<a name="line.259"></a>
+<span class="sourceLineNo">260</span>          }<a name="line.260"></a>
+<span class="sourceLineNo">261</span>        }<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      }<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    }<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    if (!fs.delete(logDir, true)) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      throw new IOException("Unable to delete src dir: " + logDir);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    }<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    return splits;<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  }<a name="line.268"></a>
+<span class="sourceLineNo">269</span><a name="line.269"></a>
+<span class="sourceLineNo">270</span>  /**<a name="line.270"></a>
+<span class="sourceLineNo">271</span>   * log splitting implementation, splits one log file.<a name="line.271"></a>
+<span class="sourceLineNo">272</span>   * @param logfile should be an actual log file.<a name="line.272"></a>
+<span class="sourceLineNo">273</span>   */<a name="line.273"></a>
+<span class="sourceLineNo">274</span>  @VisibleForTesting<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  boolean splitLogFile(FileStatus logfile, CancelableProgressable reporter) throws IOException {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    Preconditions.checkState(status == null);<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    Preconditions.checkArgument(logfile.isFile(),<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        "passed in file status is for something other than a regular file.");<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    boolean isCorrupted = false;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    boolean skipErrors = conf.getBoolean("hbase.hlog.split.skip.errors",<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      SPLIT_SKIP_ERRORS_DEFAULT);<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    int interval = conf.getInt("hbase.splitlog.report.interval.loglines", 1024);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    Path logPath = logfile.getPath();<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    boolean outputSinkStarted = false;<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    boolean progress_failed = false;<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    int editsCount = 0;<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    int editsSkipped = 0;<a name="line.287"></a>
+<span class="sourceLineNo">288</span><a name="line.288"></a>
+<span class="sourceLineNo">289</span>    status =<a name="line.289"></a>
+<span class="sourceLineNo">290</span>        TaskMonitor.get().createStatus(<a name="line.290"></a>
+<span class="sourceLineNo">291</span>          "Splitting log file " + logfile.getPath() + "into a temporary staging area.");<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    Reader in = null;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    this.fileBeingSplit = logfile;<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    try {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      long logLength = logfile.getLen();<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      LOG.info("Splitting wal: " + logPath + ", length=" + logLength);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      LOG.info("DistributedLogReplay = " + this.distributedLogReplay);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      status.setStatus("Opening log file");<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>        progress_failed = true;<a name="line.300"></a>
+<span class="sourceLineNo">301</span>        return false;<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      }<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      try {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>        in = getReader(logfile, skipErrors, reporter);<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      } catch (CorruptedLogFileException e) {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>        LOG.warn("Could not get reader, corrupted log file " + logPath, e);<a name="line.306"></a>
+<span class="sourceLineNo">307</span>        ZKSplitLog.markCorrupted(rootDir, logfile.getPath().getName(), fs);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>        isCorrupted = true;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      }<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      if (in == null) {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        LOG.warn("Nothing to split in log file " + logPath);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        return true;<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      }<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      int numOpenedFilesBeforeReporting = conf.getInt("hbase.splitlog.report.openedfiles", 3);<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      int numOpenedFilesLastCheck = 0;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      outputSink.setReporter(reporter);<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      outputSink.startWriterThreads();<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      outputSinkStarted = true;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      Entry entry;<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      Long lastFlushedSequenceId = -1L;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      ServerName serverName = DefaultWALProvider.getServerNameFromWALDirectoryName(logPath);<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      failedServerName = (serverName == null) ? "" : serverName.getServerName();<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      while ((entry = getNextLogLine(in, logPath, skipErrors)) != null) {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>        byte[] region = entry.getKey().getEncodedRegionName();<a name="line.324"></a>
+<span class="sourceLineNo">325</span>        String encodedRegionNameAsStr = Bytes.toString(region);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>        lastFlushedSequenceId = lastFlushedSequenceIds.get(encodedRegionNameAsStr);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>        if (lastFlushedSequenceId == null) {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>          if (this.distributedLogReplay) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>            RegionStoreSequenceIds ids =<a name="line.329"></a>
+<span class="sourceLineNo">330</span>                csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.330"></a>
+<span class="sourceLineNo">331</span>                  encodedRegionNameAsStr);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>            if (ids != null) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span>              lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.333"></a>
+<span class="sourceLineNo">334</span>              if (LOG.isDebugEnabled()) {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>                LOG.debug("DLR Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.335"></a>
+<span class="sourceLineNo">336</span>                  TextFormat.shortDebugString(ids));<a name="line.336"></a>
+<span class="sourceLineNo">337</span>              }<a name="line.337"></a>
+<span class="sourceLineNo">338</span>            }<a name="line.338"></a>
+<span class="sourceLineNo">339</span>          } else if (sequenceIdChecker != null) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>            RegionStoreSequenceIds ids = sequenceIdChecker.getLastSequenceId(region);<a name="line.340"></a>
+<span class="sourceLineNo">341</span>            Map&lt;byte[], Long&gt; maxSeqIdInStores = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.341"></a>
+<span class="sourceLineNo">342</span>            for (StoreSequenceId storeSeqId : ids.getStoreSequenceIdList()) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>              maxSeqIdInStores.put(storeSeqId.getFamilyName().toByteArray(),<a name="line.343"></a>
+<span class="sourceLineNo">344</span>                storeSeqId.getSequenceId());<a name="line.344"></a>
 <span class="sourceLineNo">345</span>            }<a name="line.345"></a>
-<span class="sourceLineNo">346</span>          }<a name="line.346"></a>
-<span class="sourceLineNo">347</span>          if (lastFlushedSequenceId == null) {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>            lastFlushedSequenceId = -1L;<a name="line.348"></a>
-<span class="sourceLineNo">349</span>          }<a name="line.349"></a>
-<span class="sourceLineNo">350</span>          lastFlushedSequenceIds.put(encodedRegionNameAsStr, lastFlushedSequenceId);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        }<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        if (lastFlushedSequenceId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>          editsSkipped++;<a name="line.353"></a>
-<span class="sourceLineNo">354</span>          continue;<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        }<a name="line.355"></a>
-<span class="sourceLineNo">356</span>        entryBuffers.appendEntry(entry);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        editsCount++;<a name="line.357"></a>
-<span class="sourceLineNo">358</span>        int moreWritersFromLastCheck = this.getNumOpenWriters() - numOpenedFilesLastCheck;<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        // If sufficient edits have passed, check if we should report progress.<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        if (editsCount % interval == 0<a name="line.360"></a>
-<span class="sourceLineNo">361</span>            || moreWritersFromLastCheck &gt; numOpenedFilesBeforeReporting) {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>          numOpenedFilesLastCheck = this.getNumOpenWriters();<a name="line.362"></a>
-<span class="sourceLineNo">363</span>          String countsStr = (editsCount - (editsSkipped + outputSink.getSkippedEdits()))<a name="line.363"></a>
-<span class="sourceLineNo">364</span>              + " edits, skipped " + editsSkipped + " edits.";<a name="line.364"></a>
-<span class="sourceLineNo">365</span>          status.setStatus("Split " + countsStr);<a name="line.365"></a>
-<span class="sourceLineNo">366</span>          if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>            progress_failed = true;<a name="line.367"></a>
-<span class="sourceLineNo">368</span>            return false;<a name="line.368"></a>
-<span class="sourceLineNo">369</span>          }<a name="line.369"></a>
-<span class="sourceLineNo">370</span>        }<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      }<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    } catch (InterruptedException ie) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      IOException iie = new InterruptedIOException();<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      iie.initCause(ie);<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      throw iie;<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    } catch (CorruptedLogFileException e) {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      LOG.warn("Could not parse, corrupted log file " + logPath, e);<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      csm.getSplitLogWorkerCoordination().markCorrupted(rootDir,<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        logfile.getPath().getName(), fs);<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      isCorrupted = true;<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    } catch (IOException e) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      throw e;<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    } finally {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      LOG.debug("Finishing writing output logs and closing down.");<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      try {<a name="line.386"></a>
-<span class="sourceLineNo">387</span>        if (null != in) {<a name="line.387"></a>
-<span class="sourceLineNo">388</span>          in.close();<a name="line.388"></a>
-<span class="sourceLineNo">389</span>        }<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      } catch (IOException exception) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        LOG.warn("Could not close wal reader: " + exception.getMessage());<a name="line.391"></a>
-<span class="sourceLineNo">392</span>        LOG.debug("exception details", exception);<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      }<a name="line.393"></a>
-<span class="sourceLineNo">394</span>      try {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        if (outputSinkStarted) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>          // Set progress_failed to true as the immediate following statement will reset its value<a name="line.396"></a>
-<span class="sourceLineNo">397</span>          // when finishWritingAndClose() throws exception, progress_failed has the right value<a name="line.397"></a>
-<span class="sourceLineNo">398</span>          progress_failed = true;<a name="line.398"></a>
-<span class="sourceLineNo">399</span>          progress_failed = outputSink.finishWritingAndClose() == null;<a name="line.399"></a>
-<span class="sourceLineNo">400</span>        }<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      } finally {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        String msg =<a name="line.402"></a>
-<span class="sourceLineNo">403</span>            "Processed " + editsCount + " edits across " + outputSink.getNumberOfRecoveredRegions()<a name="line.403"></a>
-<span class="sourceLineNo">404</span>                + " regions; edits skipped=" + editsSkipped + "; log file=" + logPath +<a name="line.404"></a>
-<span class="sourceLineNo">405</span>                ", length=" + logfile.getLen() + // See if length got updated post lease recovery<a name="line.405"></a>
-<span class="sourceLineNo">406</span>                ", corrupted=" + isCorrupted + ", progress failed=" + progress_failed;<a name="line.406"></a>
-<span class="sourceLineNo">407</span>        LOG.info(msg);<a name="line.407"></a>
-<span class="sourceLineNo">408</span>        status.markComplete(msg);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      }<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    }<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    return !progress_failed;<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>   * Completes the work done by splitLogFile by archiving logs<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   * &lt;p&gt;<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * It is invoked by SplitLogManager once it knows that one of the<a name="line.417"></a>
-<span class="sourceLineNo">418</span>   * SplitLogWorkers have completed the splitLogFile() part. If the master<a name="line.418"></a>
-<span class="sourceLineNo">419</span>   * crashes then this function might get called multiple times.<a name="line.419"></a>
-<span class="sourceLineNo">420</span>   * &lt;p&gt;<a name="line.420"></a>
-<span class="sourceLineNo">421</span>   * @param logfile<a name="line.421"></a>
-<span class="sourceLineNo">422</span>   * @param conf<a name="line.422"></a>
-<span class="sourceLineNo">423</span>   * @throws IOException<a name="line.423"></a>
-<span class="sourceLineNo">424</span>   */<a name="line.424"></a>
-<span class="sourceLineNo">425</span>  public static void finishSplitLogFile(String logfile,<a name="line.425"></a>
-<span class="sourceLineNo">426</span>      Configuration conf)  throws IOException {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    Path rootdir = FSUtils.getRootDir(conf);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    Path oldLogDir = new Path(rootdir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    Path logPath;<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    if (FSUtils.isStartingWithPath(rootdir, logfile)) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      logPath = new Path(logfile);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    } else {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      logPath = new Path(rootdir, logfile);<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    }<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    finishSplitLogFile(rootdir, oldLogDir, logPath, conf);<a name="line.435"></a>
-<span class="sourceLineNo">436</span>  }<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>  static void finishSplitLogFile(Path rootdir, Path oldLogDir,<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      Path logPath, Configuration conf) throws IOException {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    List&lt;Path&gt; processedLogs = new ArrayList&lt;Path&gt;();<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    List&lt;Path&gt; corruptedLogs = new ArrayList&lt;Path&gt;();<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    FileSystem fs;<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    fs = rootdir.getFileSystem(conf);<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    if (ZKSplitLog.isCorrupted(rootdir, logPath.getName(), fs)) {<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      corruptedLogs.add(logPath);<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    } else {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      processedLogs.add(logPath);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    }<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    archiveLogs(corruptedLogs, processedLogs, oldLogDir, fs, conf);<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    Path stagingDir = ZKSplitLog.getSplitLogDir(rootdir, logPath.getName());<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    fs.delete(stagingDir, true);<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  }<a name="line.452"></a>
-<span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span>  /**<a name="line.454"></a>
-<span class="sourceLineNo">455</span>   * Moves processed logs to a oldLogDir after successful processing Moves<a name="line.455"></a>
-<span class="sourceLineNo">456</span>   * corrupted logs (any log that couldn't be successfully parsed to corruptDir<a name="line.456"></a>
-<span class="sourceLineNo">457</span>   * (.corrupt) for later investigation<a name="line.457"></a>
-<span class="sourceLineNo">458</span>   *<a name="line.458"></a>
-<span class="sourceLineNo">459</span>   * @param corruptedLogs<a name="line.459"></a>
-<span class="sourceLineNo">460</span>   * @param processedLogs<a name="line.460"></a>
-<span class="sourceLineNo">461</span>   * @param oldLogDir<a name="line.461"></a>
-<span class="sourceLineNo">462</span>   * @param fs<a name="line.462"></a>
-<span class="sourceLineNo">463</span>   * @param conf<a name="line.463"></a>
-<span class="sourceLineNo">464</span>   * @throws IOException<a name="line.464"></a>
-<span class="sourceLineNo">465</span>   */<a name="line.465"></a>
-<span class="sourceLineNo">466</span>  private static void archiveLogs(<a name="line.466"></a>
-<span class="sourceLineNo">467</span>      final List&lt;Path&gt; corruptedLogs,<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      final List&lt;Path&gt; processedLogs, final Path oldLogDir,<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      final FileSystem fs, final Configuration conf) throws IOException {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    final Path corruptDir = new Path(FSUtils.getRootDir(conf), conf.get(<a name="line.470"></a>
-<span class="sourceLineNo">471</span>        "hbase.regionserver.hlog.splitlog.corrupt.dir",  HConstants.CORRUPT_DIR_NAME));<a name="line.471"></a>
-<span class="sourceLineNo">472</span><a name="line.472"></a>
-<span class="sourceLineNo">473</span>    if (!fs.mkdirs(corruptDir)) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      LOG.info("Unable to mkdir " + corruptDir);<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    }<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    fs.mkdirs(oldLogDir);<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>    // this method can get restarted or called multiple times for archiving<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    // the same log files.<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    for (Path corrupted : corruptedLogs) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      Path p = new Path(corruptDir, corrupted.getName());<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      if (fs.exists(corrupted)) {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        if (!fs.rename(corrupted, p)) {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>          LOG.warn("Unable to move corrupted log " + corrupted + " to " + p);<a name="line.484"></a>
-<span class="sourceLineNo">485</span>        } else {<a name="line.485"></a>
-<span class="sourceLineNo">486</span>          LOG.warn("Moved corrupted log " + corrupted + " to " + p);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>        }<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      }<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    }<a name="line.489"></a>
-<span class="sourceLineNo">490</span><a name="line.490"></a>
-<span class="sourceLineNo">491</span>    for (Path p : processedLogs) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      Path newPath = FSHLog.getWALArchivePath(oldLogDir, p);<a name="line.492"></a>
-<span class="sourceLineNo">493</span>      if (fs.exists(p)) {<a name="line.493"></a>
-<span class="sourceLineNo">494</span>        if (!FSUtils.renameAndSetModifyTime(fs, p, newPath)) {<a name="line.494"></a>
-<span class="sourceLineNo">495</span>          LOG.warn("Unable to move  " + p + " to " + newPath);<a name="line.495"></a>
-<span class="sourceLineNo">496</span>        } else {<a name="line.496"></a>
-<span class="sourceLineNo">497</span>          LOG.info("Archived processed log " + p + " to " + newPath);<a name="line.497"></a>
-<span class="sourceLineNo">498</span>        }<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      }<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><a name="line.502"></a>
-<span class="sourceLineNo">503</span>  /**<a name="line.503"></a>
-<span class="sourceLineNo">504</span>   * Path to a file under RECOVERED_EDITS_DIR directory of the region found in<a name="line.504"></a>
-<span class="sourceLineNo">505</span>   * &lt;code&gt;logEntry&lt;/code&gt; named for the sequenceid in the passed<a name="line.505"></a>
-<span class="sourceLineNo">506</span>   * &lt;code&gt;logEntry&lt;/code&gt;: e.g. /hbase/some_table/2323432434/recovered.edits/2332.<a name="line.506"></a>
-<span class="sourceLineNo">507</span>   * This method also ensures existence of RECOVERED_EDITS_DIR under the region<a name="line.507"></a>
-<span class="sourceLineNo">508</span>   * creating it if necessary.<a name="line.508"></a>
-<span class="sourceLineNo">509</span>   * @param fs<a name="line.509"></a>
-<span class="sourceLineNo">510</span>   * @param logEntry<a name="line.510"></a>
-<span class="sourceLineNo">511</span>   * @param rootDir HBase root dir.<a name="line.511"></a>
-<span class="sourceLineNo">512</span>   * @return Path to file into which to dump split log edits.<a name="line.512"></a>
-<span class="sourceLineNo">513</span>   * @throws IOException<a name="line.513"></a>
-<span class="sourceLineNo">514</span>   */<a name="line.514"></a>
-<span class="sourceLineNo">515</span>  @SuppressWarnings("deprecation")<a name="line.515"></a>
-<span class="sourceLineNo">516</span>  static Path getRegionSplitEditsPath(final FileSystem fs,<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      final Entry logEntry, final Path rootDir, boolean isCreate)<a name="line.517"></a>
-<span class="sourceLineNo">518</span>  throws IOException {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    Path tableDir = FSUtils.getTableDir(rootDir, logEntry.getKey().getTablename());<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    String encodedRegionName = Bytes.toString(logEntry.getKey().getEncodedRegionName());<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    Path regiondir = HRegion.getRegionDir(tableDir, encodedRegionName);<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    Path dir = getRegionDirRecoveredEditsDir(regiondir);<a name="line.522"></a>
-<span class="sourceLineNo">523</span><a name="line.523"></a>
-<span class="sourceLineNo">524</span>    if (!fs.exists(regiondir)) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      LOG.info("This region's directory doesn't exist: "<a name="line.525"></a>
-<span class="sourceLineNo">526</span>          + regiondir.toString() + ". It is very likely that it was" +<a name="line.526"></a>
-<span class="sourceLineNo">527</span>          " already split so it's safe to discard those edits.");<a name="line.527"></a>
-<span class="sourceLineNo">528</span>      return null;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    }<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    if (fs.exists(dir) &amp;&amp; fs.isFile(dir)) {<a name="line.530"></a>
-<span class="sourceLineNo">531</span>      Path tmp = new Path("/tmp");<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      if (!fs.exists(tmp)) {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>        fs.mkdirs(tmp);<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      }<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      tmp = new Path(tmp,<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        HConstants.RECOVERED_EDITS_DIR + "_" + encodedRegionName);<a name="line.536"></a>
-<span class="sourceLineNo">537</span>      LOG.warn("Found existing old file: " + dir + ". It could be some "<a name="line.537"></a>
-<span class="sourceLineNo">538</span>        + "leftover of an old installation. It should be a folder instead. "<a name="line.538"></a>
-<span class="sourceLineNo">539</span>        + "So moving it to " + tmp);<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      if (!fs.rename(dir, tmp)) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        LOG.warn("Failed to sideline old file " + dir);<a name="line.541"></a>
-<span class="sourceLineNo">542</span>      }<a name="line.542"></a>
-<span class="sourceLineNo">543</span>    }<a name="line.543"></a>
-<span class="sourceLineNo">544</span><a name="line.544"></a>
-<span class="sourceLineNo">545</span>    if (isCreate &amp;&amp; !fs.exists(dir)) {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>      if (!fs.mkdirs(dir)) LOG.warn("mkdir failed on " + dir);<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    }<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    // Append file name ends with RECOVERED_LOG_TMPFILE_SUFFIX to ensure<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    // region's replayRecoveredEdits will not delete it<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    String fileName = formatRecoveredEditsFileName(logEntry.getKey().getLogSeqNum());<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    fileName = getTmpRecoveredEditsFileName(fileName);<a name="line.551"></a>
-<span class="sourceLineNo">552</span>    return new Path(dir, fileName);<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>  static String getTmpRecoveredEditsFileName(String fileName) {<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    return fileName + RECOVERED_LOG_TMPFILE_SUFFIX;<a name="line.556"></a>
-<span class="sourceLineNo">557</span>  }<a name="line.557"></a>
-<span class="sourceLineNo">558</span><a name="line.558"></a>
-<span class="sourceLineNo">559</span>  /**<a name="line.559"></a>
-<span class="sourceLineNo">560</span>   * Get the completed recovered edits file path, renaming it to be by last edit<a name="line.560"></a>
-<span class="sourceLineNo">561</span>   * in the file from its first edit. Then we could use the name to skip<a name="line.561"></a>
-<span class="sourceLineNo">562</span>   * recovered edits when doing {@link HRegion#replayRecoveredEditsIfAny}.<a name="line.562"></a>
-<span class="sourceLineNo">563</span>   * @param srcPath<a name="line.563"></a>
-<span class="sourceLineNo">564</span>   * @param maximumEditLogSeqNum<a name="line.564"></a>
-<span class="sourceLineNo">565</span>   * @return dstPath take file's last edit log seq num as the name<a name="line.565"></a>
-<span class="sourceLineNo">566</span>   */<a name="line.566"></a>
-<span class="sourceLineNo">567</span>  static Path getCompletedRecoveredEditsFilePath(Path srcPath,<a name="line.567"></a>
-<span class="sourceLineNo">568</span>      Long maximumEditLogSeqNum) {<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    String fileName = formatRecoveredEditsFileName(maximumEditLogSeqNum);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    return new Path(srcPath.getParent(), fileName);<a name="line.570"></a>
-<span class="sourceLineNo">571</span>  }<a name="line.571"></a>
-<span class="sourceLineNo">572</span><a name="line.572"></a>
-<span class="sourceLineNo">573</span>  static String formatRecoveredEditsFileName(final long seqid) {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    return String.format("%019d", seqid);<a name="line.574"></a>
-<span class="sourceLineNo">575</span>  }<a name="line.575"></a>
-<span class="sourceLineNo">576</span><a name="line.576"></a>
-<span class="sourceLineNo">577</span>  private static final Pattern EDITFILES_NAME_PATTERN = Pattern.compile("-?[0-9]+");<a name="line.577"></a>
-<span class="sourceLineNo">578</span>  private static final String RECOVERED_LOG_TMPFILE_SUFFIX = ".temp";<a name="line.578"></a>
-<span class="sourceLineNo">579</span><a name="line.579"></a>
-<span class="sourceLineNo">580</span>  /**<a name="line.580"></a>
-<span class="sourceLineNo">581</span>   * @param regiondir<a name="line.581"></a>
-<span class="sourceLineNo">582</span>   *          This regions directory in the filesystem.<a name="line.582"></a>
-<span class="sourceLineNo">583</span>   * @return The directory that holds recovered edits files for the region<a name="line.583"></a>
-<span class="sourceLineNo">584</span>   *         &lt;code&gt;regiondir&lt;/code&gt;<a name="line.584"></a>
-<span class="sourceLineNo">585</span>   */<a name="line.585"></a>
-<span class="sourceLineNo">586</span>  public static Path getRegionDirRecoveredEditsDir(final Path regiondir) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    return new Path(regiondir, HConstants.RECOVERED_EDITS_DIR);<a name="line.587"></a>
-<span class="sourceLineNo">588</span>  }<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span>  /**<a name="line.590"></a>
-<span class="sourceLineNo">591</span>   * Returns sorted set of edit files made by splitter, excluding files<a name="line.591"></a>
-<span class="sourceLineNo">592</span>   * with '.temp' suffix.<a name="line.592"></a>
-<span class="sourceLineNo">593</span>   *<a name="line.593"></a>
-<span class="sourceLineNo">594</span>   * @param fs<a name="line.594"></a>
-<span class="sourceLineNo">595</span>   * @param regiondir<a name="line.595"></a>
-<span class="sourceLineNo">596</span>   * @return Files in passed &lt;code&gt;regiondir&lt;/code&gt; as a sorted set.<a name="line.596"></a>
-<span class="sourceLineNo">597</span>   * @throws IOException<a name="line.597"></a>
-<span class="sourceLineNo">598</span>   */<a name="line.598"></a>
-<span class="sourceLineNo">599</span>  public static NavigableSet&lt;Path&gt; getSplitEditFilesSorted(final FileSystem fs,<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      final Path regiondir) throws IOException {<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    NavigableSet&lt;Path&gt; filesSorted = new TreeSet&lt;Path&gt;();<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    Path editsdir = getRegionDirRecoveredEditsDir(regiondir);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    if (!fs.exists(editsdir))<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      return filesSorted;<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    FileStatus[] files = FSUtils.listStatus(fs, editsdir, new PathFilter() {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      @Override<a name="line.606"></a>
-<span class="sourceLineNo">607</span>      public boolean accept(Path p) {<a name="line.607"></a>
-<span class="sourceLineNo">608</span>        boolean result = false;<a name="line.608"></a>
-<span class="sourceLineNo">609</span>        try {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>          // Return files and only files that match the editfile names pattern.<a name="line.610"></a>
-<span class="sourceLineNo">611</span>          // There can be other files in this directory other than edit files.<a name="line.611"></a>
-<span class="sourceLineNo">612</span>          // In particular, on error, we'll move aside the bad edit file giving<a name="line.612"></a>
-<span class="sourceLineNo">613</span>          // it a timestamp suffix. See moveAsideBadEditsFile.<a name="line.613"></a>
-<span class="sourceLineNo">614</span>          Matcher m = EDITFILES_NAME_PATTERN.matcher(p.getName());<a name="line.614"></a>
-<span class="sourceLineNo">615</span>          result = fs.isFile(p) &amp;&amp; m.matches();<a name="line.615"></a>
-<span class="sourceLineNo">616</span>          // Skip the file whose name ends with RECOVERED_LOG_TMPFILE_SUFFIX,<a name="line.616"></a>
-<span class="sourceLineNo">617</span>          // because it means splitwal thread is writting this file.<a name="line.617"></a>
-<span class="sourceLineNo">618</span>          if (p.getName().endsWith(RECOVERED_LOG_TMPFILE_SUFFIX)) {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>            result = false;<a name="line.619"></a>
-<span class="sourceLineNo">620</span>          }<a name="line.620"></a>
-<span class="sourceLineNo">621</span>          // Skip SeqId Files<a name="line.621"></a>
-<span class="sourceLineNo">622</span>          if (isSequenceIdFile(p)) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span>            result = false;<a name="line.623"></a>
-<span class="sourceLineNo">624</span>          }<a name="line.624"></a>
-<span class="sourceLineNo">625</span>        } catch (IOException e) {<a name="line.625"></a>
-<span class="sourceLineNo">626</span>          LOG.warn("Failed isFile check on " + p);<a name="line.626"></a>
-<span class="sourceLineNo">627</span>        }<a name="line.627"></a>
-<span class="sourceLineNo">628</span>        return result;<a name="line.628"></a>
-<span class="sourceLineNo">629</span>      }<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    });<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    if (files == null) {<a name="line.631"></a>
-<span class="sourceLineNo">632</span>      return filesSorted;<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    }<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    for (FileStatus status : files) {<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      filesSorted.add(status.getPath());<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    }<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    return filesSorted;<a name="line.637"></a>
-<span class="sourceLineNo">638</span>  }<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>   * Move aside a bad edits file.<a name="line.641"></a>
-<span class="sourceLineNo">642</span>   *<a name="line.642"></a>
-<span class="sourceLineNo">643</span>   * @param fs<a name="line.643"></a>
-<span class="sourceLineNo">644</span>   * @param edits<a name="line.644"></a>
-<span class="sourceLineNo">645</span>   *          Edits file to move aside.<a name="line.645"></a>
-<span class="sourceLineNo">646</span>   * @return The name of the moved aside file.<a name="line.646"></a>
-<span class="sourceLineNo">647</span>   * @throws IOException<a name="line.647"></a>
-<span class="sourceLineNo">648</span>   */<a name="line.648"></a>
-<span class="sourceLineNo">649</span>  public static Path moveAsideBadEditsFile(final FileSystem fs, final Path edits)<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      throws IOException {<a name="line.650"></a>
-<span class="sourceLineNo">651</span>    Path moveAsideName = new Path(edits.getParent(), edits.getName() + "."<a name="line.651"></a>
-<span class="sourceLineNo">652</span>        + System.currentTimeMillis());<a name="line.652"></a>
-<span class="sourceLineNo">653</span>    if (!fs.rename(edits, moveAsideName)) {<a name="line.653"></a>
-<span class="sourceLineNo">654</span>      LOG.warn("Rename failed from " + edits + " to " + moveAsideName);<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    }<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    return moveAsideName;<a name="line.656"></a>
-<span class="sourceLineNo">657</span>  }<a name="line.657"></a>
-<span class="sourceLineNo">658</span><a name="line.658"></a>
-<span class="sourceLineNo">659</span>  private static final String SEQUENCE_ID_FILE_SUFFIX = ".seqid";<a name="line.659"></a>
-<span class="sourceLineNo">660</span>  private static final String OLD_SEQUENCE_ID_FILE_SUFFIX = "_seqid";<a name="line.660"></a>
-<span class="sourceLineNo">661</span>  private static final int SEQUENCE_ID_FILE_SUFFIX_LENGTH = SEQUENCE_ID_FILE_SUFFIX.length();<a name="line.661"></a>
-<span class="sourceLineNo">662</span><a name="line.662"></a>
-<span class="sourceLineNo">663</span>  /**<a name="line.663"></a>
-<span class="sourceLineNo">664</span>   * Is the given file a region open sequence id file.<a name="line.664"></a>
-<span class="sourceLineNo">665</span>   */<a name="line.665"></a>
-<span class="sourceLineNo">666</span>  @VisibleForTesting<a name="line.666"></a>
-<span class="sourceLineNo">667</span>  public static boolean isSequenceIdFile(final Path file) {<a name="line.667"></a>
-<span class="sourceLineNo">668</span>    return file.getName().endsWith(SEQUENCE_ID_FILE_SUFFIX)<a name="line.668"></a>
-<span class="sourceLineNo">669</span>        || file.getName().endsWith(OLD_SEQUENCE_ID_FILE_SUFFIX);<a name="line.669"></a>
-<span class="sourceLineNo">670</span>  }<a name="line.670"></a>
+<span class="sourceLineNo">346</span>            regionMaxSeqIdInStores.put(encodedRegionNameAsStr, maxSeqIdInStores);<a name="line.346"></a>
+<span class="sourceLineNo">347</span>            lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.347"></a>
+<span class="sourceLineNo">348</span>            if (LOG.isDebugEnabled()) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>              LOG.debug("DLS Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.349"></a>
+<span class="sourceLineNo">350</span>                  TextFormat.shortDebugString(ids));<a name="line.350"></a>
+<span class="sourceLineNo">351</span>            }<a name="line.351"></a>
+<span class="sourceLineNo">352</span>          }<a name="line.352"></a>
+<span class="sourceLineNo">353</span>          if (lastFlushedSequenceId == null) {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>            lastFlushedSequenceId = -1L;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>          }<a name="line.355"></a>
+<span class="sourceLineNo">356</span>          lastFlushedSequenceIds.put(encodedRegionNameAsStr, lastFlushedSequenceId);<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        }<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        if (lastFlushedSequenceId &gt;= entry.getKey().getSequenceId()) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>          editsSkipped++;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>          continue;<a name="line.360"></a>
+<span class="sourceLineNo">361</span>        }<a name="line.361"></a>
+<span class="sourceLineNo">362</span>        entryBuffers.appendEntry(entry);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        editsCount++;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>        int moreWritersFromLastCheck = this.getNumOpenWriters() - numOpenedFilesLastCheck;<a name="line.364"></a>
+<span class="sourceLineNo">365</span>        // If sufficient edits have passed, check if we should report progress.<a name="line.365"></a>
+<span class="sourceLineNo">366</span>        if (editsCount % interval == 0<a name="line.366"></a>
+<span class="sourceLineNo">367</span>            || moreWritersFromLastCheck &gt; numOpenedFilesBeforeReporting) {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>          numOpenedFilesLastCheck = this.getNumOpenWriters();<a name="line.368"></a>
+<span class="sourceLineNo">369</span>          String countsStr = (editsCount - (editsSkipped + outputSink.getSkippedEdits()))<a name="line.369"></a>
+<span class="sourceLineNo">370</span>              + " edits, skipped " + editsSkipped + " edits.";<a name="line.370"></a>
+<span class="sourceLineNo">371</span>          status.setStatus("Split " + countsStr);<a name="line.371"></a>
+<span class="sourceLineNo">372</span>          if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>            progress_failed = true;<a name="line.373"></a>
+<span class="sourceLineNo">374</span>            return false;<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>      }<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    } catch (InterruptedException ie) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      IOException iie = new InterruptedIOException();<a name="line.379"></a>
+<span class="sourceLineNo">380</span>      iie.initCause(ie);<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      throw iie;<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    } catch (CorruptedLogFileException e) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      LOG.warn("Could not parse, corrupted log file " + logPath, e);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      csm.getSplitLogWorkerCoordination().markCorrupted(rootDir,<a name="line.384"></a>
+<span class="sourceLineNo">385</span>        logfile.getPath().getName(), fs);<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      isCorrupted = true;<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    } catch (IOException e) {<a name="line.387"></a>
+<span class="sourceLineNo">388</span>      e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      throw e;<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    } finally {<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      LOG.debug("Finishing writing output logs and closing down.");<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      try {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>        if (null != in) {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>          in.close();<a name="line.394"></a>
+<span class="sourceLineNo">395</span>        }<a name="line.395"></a>
+<span class="sourceLineNo">396</span>      } catch (IOException exception) {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>        LOG.warn("Could not close wal reader: " + exception.getMessage());<a name="line.397"></a>
+<span class="sourceLineNo">398</span>        LOG.debug("exception details", exception);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      }<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      try {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>        if (outputSinkStarted) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>          // Set progress_failed to true as the immediate following statement will reset its value<a name="line.402"></a>
+<span class="sourceLineNo">403</span>          // when finishWritingAndClose() throws exception, progress_failed has the right value<a name="line.403"></a>
+<span class="sourceLineNo">404</span>          progress_failed = true;<a name="line.404"></a>
+<span class="sourceLineNo">405</span>          progress_failed = outputSink.finishWritingAndClose() == null;<a name="line.405"></a>
+<span class="sourceLineNo">406</span>        }<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      } finally {<a name="line.407"></a>
+<span class="sourceLineNo">408</span>        String msg =<a name="line.408"></a>
+<span class="sourceLineNo">409</span>            "Processed " + editsCount + " edits across " + outputSink.getNumberOfRecoveredRegions()<a name="line.409"></a>
+<span class="sourceLineNo">410</span>                + " regions; edits skipped=" + editsSkipped + "; log file=" + logPath +<a name="line.410"></a>
+<span class="sourceLineNo">411</span>                ", length=" + logfile.getLen() + // See if length got updated post lease recovery<a name="line.411"></a>
+<span class="sourceLineNo">412</span>                ", corrupted=" + isCorrupted + ", progress failed=" + progress_failed;<a name="line.412"></a>
+<span class="sourceLineNo">413</span>        LOG.info(msg);<a name="line.413"></a>
+<span class="sourceLineNo">414</span>        status.markComplete(msg);<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>    return !progress_failed;<a name="line.417"></a>
+<span class="sourceLineNo">418</span>  }<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>   * Completes the work done by splitLogFile by archiving logs<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   * &lt;p&gt;<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   * It is invoked by SplitLogManager once it knows that one of the<a name="line.423"></a>
+<span class="sourceLineNo">424</span>   * SplitLogWorkers have completed the splitLogFile() part. If the master<a name="line.424"></a>
+<span class="sourceLineNo">425</span>   * crashes then this function might get called multiple times.<a name="line.425"></a>
+<span class="sourceLineNo">426</span>   * &lt;p&gt;<a name="line.426"></a>
+<span class="sourceLineNo">427</span>   * @param logfile<a name="line.427"></a>
+<span class="sourceLineNo">428</span>   * @param conf<a name="line.428"></a>
+<span class="sourceLineNo">429</span>   * @throws IOException<a name="line.429"></a>
+<span class="sourceLineNo">430</span>   */<a name="line.430"></a>
+<span class="sourceLineNo">431</span>  public static void finishSplitLogFile(String logfile,<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      Configuration conf)  throws IOException {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    Path rootdir = FSUtils.getRootDir(conf);<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    Path oldLogDir = new Path(rootdir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.434"></a>
+<span class="sourceLineNo">435</span>    Path logPath;<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    if (FSUtils.isStartingWithPath(rootdir, logfile)) {<a name="line.436"></a>
+<span class="sourceLineNo">437</span>      logPath = new Path(logfile);<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    } else {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>      logPath = new Path(rootdir, logfile);<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    }<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    finishSplitLogFile(rootdir, oldLogDir, logPath, conf);<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>  private static void finishSplitLogFile(Path rootdir, Path oldLogDir,<a name="line.444"></a>
+<span class="sourceLineNo">445</span>      Path logPath, Configuration conf) throws IOException {<a name="line.445"></a>
+<span class="sourceLineNo">446</span>    List&lt;Path&gt; processedLogs = new ArrayList&lt;Path&gt;();<a name="line.446"></a>
+<span class="sourceLineNo">447</span>    List&lt;Path&gt; corruptedLogs = new ArrayList&lt;Path&gt;();<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    FileSystem fs;<a name="line.448"></a>
+<span class="sourceLineNo">449</span>    fs = rootdir.getFileSystem(conf);<a name="line.449"></a>
+<span class="sourceLineNo">450</span>    if (ZKSplitLog.isCorrupted(rootdir, logPath.getName(), fs)) {<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      corruptedLogs.add(logPath);<a name="line.451"></a>
+<span class="sourceLineNo">452</span>    } else {<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      processedLogs.add(logPath);<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    }<a name="line.454"></a>
+<span class="sourceLineNo">455</span>    archiveLogs(corruptedLogs, processedLogs, oldLogDir, fs, conf);<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    Path stagingDir = ZKSplitLog.getSplitLogDir(rootdir, logPath.getName());<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    fs.delete(stagingDir, true);<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>  /**<a name="line.460"></a>
+<span class="sourceLineNo">461</span>   * Moves processed logs to a oldLogDir after successful processing Moves<a name="line.461"></a>
+<span class="sourceLineNo">462</span>   * corrupted logs (any log that couldn't be successfully parsed to corruptDir<a name="line.462"></a>
+<span class="sourceLineNo">463</span>   * (.corrupt) for later investigation<a name="line.463"></a>
+<span class="sourceLineNo">464</span>   *<a name="line.464"></a>
+<span class="sourceLineNo">465</span>   * @param corruptedLogs<a name="line.465"></a>
+<span class="sourceLineNo">466</span>   * @param processedLogs<a name="line.466"></a>
+<span class="sourceLineNo">467</span>   * @param oldLogDir<a name="line.467"></a>
+<span class="sourceLineNo">468</span>   * @param fs<a name="line.468"></a>
+<span class="sourceLineNo">469</span>   * @param conf<a name="line.469"></a>
+<span class="sourceLineNo">470</span>   * @throws IOException<a name="line.470"></a>
+<span class="sourceLineNo">471</span>   */<a name="line.471"></a>
+<span class="sourceLineNo">472</span>  private static void archiveLogs(<a name="line.472"></a>
+<span class="sourceLineNo">473</span>      final List&lt;Path&gt; corruptedLogs,<a name="line.473"></a>
+<span class="sourceLineNo">474</span>      final List&lt;Path&gt; processedLogs, final Path oldLogDir,<a name="line.474"></a>
+<span class="sourceLineNo">475</span>      final FileSystem fs, final Configuration conf) throws IOException {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    final Path corruptDir = new Path(FSUtils.getRootDir(conf), conf.get(<a name="line.476"></a>
+<span class="sourceLineNo">477</span>        "hbase.regionserver.hlog.splitlog.corrupt.dir",  HConstants.CORRUPT_DIR_NAME));<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>    if (!fs.mkdirs(corruptDir)) {<a name="line.479"></a>
+<span class="sourceLineNo">480</span>      LOG.info("Unable to mkdir " + corruptDir);<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    }<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    fs.mkdirs(oldLogDir);<a name="line.482"></a>
+<span class="sourceLineNo">483</span><a name="line.483"></a>
+<span class="sourceLineNo">484</span>    // this method can get restarted or called multiple times for archiving<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    // the same log files.<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    for (Path corrupted : corruptedLogs) {<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      Path p = new Path(corruptDir, corrupted.getName());<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      if (fs.exists(corrupted)) {<a name="line.488"></a>
+<span class="sourceLineNo">489</span>        if (!fs.rename(corrupted, p)) {<a name="line.489"></a>
+<span class="sourceLineNo">490</span>          LOG.warn("Unable to move corrupted log " + corrupted + " to " + p);<a name="line.490"></a>
+<span class="sourceLineNo">491</span>        } else {<a name="line.491"></a>
+<span class="sourceLineNo">492</span>          LOG.warn("Moved corrupted log " + corrupted + " to " + p);<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>    }<a name="line.495"></a>
+<span class="sourceLineNo">496</span><a name="line.496"></a>
+<span class="sourceLineNo">497</span>    for (Path p : processedLogs) {<a name="line.497"></a>
+<span class="sourceLineNo">498</span>      Path newPath = FSHLog.getWALArchivePath(oldLogDir, p);<a name="line.498"></a>
+<span class="sourceLineNo">499</span>      if (fs.exists(p)) {<a name="line.499"></a>
+<span class="sourceLineNo">500</span>        if (!FSUtils.renameAndSetModifyTime(fs, p, newPath)) {<a name="line.500"></a>
+<span class="sourceLineNo">501</span>          LOG.warn("Unable to move  " + p + " to " + newPath);<a name="line.501"></a>
+<span class="sourceLineNo">502</span>        } else {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>          LOG.info("Archived processed log " + p + " to " + newPath);<a name="line.503"></a>
+<span class="sourceLineNo">504</span>        }<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      }<a name="line.505"></a>
+<span class="sourceLineNo">506</span>    }<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>  /**<a name="line.509"></a>
+<span class="sourceLineNo">510</span>   * Path to a file under RECOVERED_EDITS_DIR directory of the region found in<a name="line.510"></a>
+<span class="sourceLineNo">511</span>   * &lt;code&gt;logEntry&lt;/code&gt; named for the sequenceid in the passed<a name="line.511"></a>
+<span class="sourceLineNo">512</span>   * &lt;code&gt;logEntry&lt;/code&gt;: e.g. /hbase/some_table/2323432434/recovered.edits/2332.<a name="line.512"></a>
+<span class="sourceLineNo">513</span>   * This method also ensures existence of RECOVERED_EDITS_DIR under the region<a name="line.513"></a>
+<span class="sourceLineNo">514</span>   * creating it if necessary.<a name="line.514"></a>
+<span class="sourceLineNo">515</span>   * @param fs<a name="line.515"></a>
+<span class="sourceLineNo">516</span>   * @param logEntry<a name="line.516"></a>
+<span class="sourceLineNo">517</span>   * @param rootDir HBase root dir.<a name="line.517"></a>
+<span class="sourceLineNo">518</span>   * @param fileBeingSplit the file being split currently. Used to generate tmp file name.<a name="line.518"></a>
+<span class="sourceLineNo">519</span>   * @return Path to file into which to dump split log edits.<a name="line.519"></a>
+<span class="sourceLineNo">520</span>   * @throws IOException<a name="line.520"></a>
+<span class="sourceLineNo">521</span>   */<a name="line.521"></a>
+<span class="sourceLineNo">522</span>  @SuppressWarnings("deprecation")<a name="line.522"></a>
+<span class="sourceLineNo">523</span>  private static Path getRegionSplitEditsPath(final FileSystem fs,<a name="line.523"></a>
+<span class="sourceLineNo">524</span>      final Entry logEntry, final Path rootDir, FileStatus fileBeingSplit)<a name="line.524"></a>
+<span class="sourceLineNo">525</span>  throws IOException {<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    Path tableDir = FSUtils.getTableDir(rootDir, logEntry.getKey().getTablename());<a name="line.526"></a>
+<span class="sourceLineNo">527</span>    String encodedRegionName = Bytes.toString(logEntry.getKey().getEncodedRegionName());<a name="line.527"></a>
+<span class="sourceLineNo">528</span>    Path regiondir = HRegion.getRegionDir(tableDir, encodedRegionName);<a name="line.528"></a>
+<span class="sourceLineNo">529</span>    Path dir = getRegionDirRecoveredEditsDir(regiondir);<a name="line.529"></a>
+<span class="sourceLineNo">530</span><a name="line.530"></a>
+<span class="sourceLineNo">531</span>    if (!fs.exists(regiondir)) {<a name="line.531"></a>
+<span class="sourceLineNo">532</span>      LOG.info("This region's directory doesn't exist: "<a name="line.532"></a>
+<span class="sourceLineNo">533</span>          + regiondir.toString() + ". It is very likely that it was" +<a name="line.533"></a>
+<span class="sourceLineNo">534</span>          " already split so it's safe to discard those edits.");<a name="line.534"></a>
+<span class="sourceLineNo">535</span>      return null;<a name="line.535"></a>
+<span class="sourceLineNo">536</span>    }<a name="line.536"></a>
+<span class="sourceLineNo">537</span>    if (fs.exists(dir) &amp;&amp; fs.isFile(dir)) {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      Path tmp = new Path("/tmp");<a name="line.538"></a>
+<span class="sourceLineNo">539</span>      if (!fs.exists(tmp)) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span>        fs.mkdirs(tmp);<a name="line.540"></a>
+<span class="sourceLineNo">541</span>      }<a name="line.541"></a>
+<span class="sourceLineNo">542</span>      tmp = new Path(tmp,<a name="line.542"></a>
+<span class="sourceLineNo">543</span>        HConstants.RECOVERED_EDITS_DIR + "_" + encodedRegionName);<a name="line.543"></a>
+<span class="sourceLineNo">544</span>      LOG.warn("Found existing old file: " + dir + ". It could be some "<a name="line.544"></a>
+<span class="sourceLineNo">545</span>        + "leftover of an old installation. It should be a folder instead. "<a name="line.545"></a>
+<span class="sourceLineNo">546</span>        + "So moving it to " + tmp);<a name="line.546"></a>
+<span class="sourceLineNo">547</span>      if (!fs.rename(dir, tmp)) {<a name="line.547"></a>
+<span class="sourceLineNo">548</span>        LOG.warn("Failed to sideline old file " + dir);<a name="line.548"></a>
+<span class="sourceLineNo">549</span>      }<a name="line.549"></a>
+<span class="sourceLineNo">550</span>    }<a name="line.550"></a>
+<span class="sourceLineNo">551</span><a name="line.551"></a>
+<span class="sourceLineNo">552</span>    if (!fs.exists(dir) &amp;&amp; !fs.mkdirs(dir

<TRUNCATED>

[10/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.html b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.html
index 0597160..b444f46 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/wal/WALSplitter.html
@@ -184,2145 +184,2183 @@
 <span class="sourceLineNo">176</span>  // Min batch size when replay WAL edits<a name="line.176"></a>
 <span class="sourceLineNo">177</span>  private final int minBatchSize;<a name="line.177"></a>
 <span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span>  WALSplitter(final WALFactory factory, Configuration conf, Path rootDir,<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      FileSystem fs, LastSequenceId idChecker,<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      CoordinatedStateManager csm, RecoveryMode mode) {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    this.conf = HBaseConfiguration.create(conf);<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    String codecClassName = conf<a name="line.183"></a>
-<span class="sourceLineNo">184</span>        .get(WALCellCodec.WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    this.conf.set(HConstants.RPC_CODEC_CONF_KEY, codecClassName);<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    this.rootDir = rootDir;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    this.fs = fs;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    this.sequenceIdChecker = idChecker;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    this.csm = (BaseCoordinatedStateManager)csm;<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    this.walFactory = factory;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    this.controller = new PipelineController();<a name="line.191"></a>
-<span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span>    entryBuffers = new EntryBuffers(controller,<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        this.conf.getInt("hbase.regionserver.hlog.splitlog.buffersize",<a name="line.194"></a>
-<span class="sourceLineNo">195</span>            128*1024*1024));<a name="line.195"></a>
+<span class="sourceLineNo">179</span>  // the file being split currently<a name="line.179"></a>
+<span class="sourceLineNo">180</span>  private FileStatus fileBeingSplit;<a name="line.180"></a>
+<span class="sourceLineNo">181</span><a name="line.181"></a>
+<span class="sourceLineNo">182</span>  @VisibleForTesting<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  WALSplitter(final WALFactory factory, Configuration conf, Path rootDir,<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      FileSystem fs, LastSequenceId idChecker,<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      CoordinatedStateManager csm, RecoveryMode mode) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    this.conf = HBaseConfiguration.create(conf);<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    String codecClassName = conf<a name="line.187"></a>
+<span class="sourceLineNo">188</span>        .get(WALCellCodec.WAL_CELL_CODEC_CLASS_KEY, WALCellCodec.class.getName());<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    this.conf.set(HConstants.RPC_CODEC_CONF_KEY, codecClassName);<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    this.rootDir = rootDir;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    this.fs = fs;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    this.sequenceIdChecker = idChecker;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    this.csm = (BaseCoordinatedStateManager)csm;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    this.walFactory = factory;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    this.controller = new PipelineController();<a name="line.195"></a>
 <span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span>    // a larger minBatchSize may slow down recovery because replay writer has to wait for<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    // enough edits before replaying them<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    this.minBatchSize = this.conf.getInt("hbase.regionserver.wal.logreplay.batch.size", 64);<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    this.distributedLogReplay = (RecoveryMode.LOG_REPLAY == mode);<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>    this.numWriterThreads = this.conf.getInt("hbase.regionserver.hlog.splitlog.writer.threads", 3);<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    if (csm != null &amp;&amp; this.distributedLogReplay) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      outputSink = new LogReplayOutputSink(controller, entryBuffers, numWriterThreads);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    } else {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      if (this.distributedLogReplay) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        LOG.info("ZooKeeperWatcher is passed in as NULL so disable distrubitedLogRepaly.");<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      }<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      this.distributedLogReplay = false;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      outputSink = new LogRecoveredEditsOutputSink(controller, entryBuffers, numWriterThreads);<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>  }<a name="line.213"></a>
-<span class="sourceLineNo">214</span><a name="line.214"></a>
-<span class="sourceLineNo">215</span>  /**<a name="line.215"></a>
-<span class="sourceLineNo">216</span>   * Splits a WAL file into region's recovered-edits directory.<a name="line.216"></a>
-<span class="sourceLineNo">217</span>   * This is the main entry point for distributed log splitting from SplitLogWorker.<a name="line.217"></a>
-<span class="sourceLineNo">218</span>   * &lt;p&gt;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>   * If the log file has N regions then N recovered.edits files will be produced.<a name="line.219"></a>
-<span class="sourceLineNo">220</span>   * &lt;p&gt;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   * @param rootDir<a name="line.221"></a>
-<span class="sourceLineNo">222</span>   * @param logfile<a name="line.222"></a>
-<span class="sourceLineNo">223</span>   * @param fs<a name="line.223"></a>
-<span class="sourceLineNo">224</span>   * @param conf<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   * @param reporter<a name="line.225"></a>
-<span class="sourceLineNo">226</span>   * @param idChecker<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   * @param cp coordination state manager<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   * @return false if it is interrupted by the progress-able.<a name="line.228"></a>
-<span class="sourceLineNo">229</span>   * @throws IOException<a name="line.229"></a>
-<span class="sourceLineNo">230</span>   */<a name="line.230"></a>
-<span class="sourceLineNo">231</span>  public static boolean splitLogFile(Path rootDir, FileStatus logfile, FileSystem fs,<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      Configuration conf, CancelableProgressable reporter, LastSequenceId idChecker,<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      CoordinatedStateManager cp, RecoveryMode mode, final WALFactory factory) throws IOException {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, idChecker, cp, mode);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    return s.splitLogFile(logfile, reporter);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  }<a name="line.236"></a>
-<span class="sourceLineNo">237</span><a name="line.237"></a>
-<span class="sourceLineNo">238</span>  // A wrapper to split one log folder using the method used by distributed<a name="line.238"></a>
-<span class="sourceLineNo">239</span>  // log splitting. Used by tools and unit tests. It should be package private.<a name="line.239"></a>
-<span class="sourceLineNo">240</span>  // It is public only because TestWALObserver is in a different package,<a name="line.240"></a>
-<span class="sourceLineNo">241</span>  // which uses this method to do log splitting.<a name="line.241"></a>
-<span class="sourceLineNo">242</span>  @VisibleForTesting<a name="line.242"></a>
-<span class="sourceLineNo">243</span>  public static List&lt;Path&gt; split(Path rootDir, Path logDir, Path oldLogDir,<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      FileSystem fs, Configuration conf, final WALFactory factory) throws IOException {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    final FileStatus[] logfiles = SplitLogManager.getFileList(conf,<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        Collections.singletonList(logDir), null);<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    List&lt;Path&gt; splits = new ArrayList&lt;Path&gt;();<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    if (logfiles != null &amp;&amp; logfiles.length &gt; 0) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      for (FileStatus logfile: logfiles) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, null, null,<a name="line.250"></a>
-<span class="sourceLineNo">251</span>            RecoveryMode.LOG_SPLITTING);<a name="line.251"></a>
-<span class="sourceLineNo">252</span>        if (s.splitLogFile(logfile, null)) {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>          finishSplitLogFile(rootDir, oldLogDir, logfile.getPath(), conf);<a name="line.253"></a>
-<span class="sourceLineNo">254</span>          if (s.outputSink.splits != null) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>            splits.addAll(s.outputSink.splits);<a name="line.255"></a>
-<span class="sourceLineNo">256</span>          }<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        }<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      }<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    }<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    if (!fs.delete(logDir, true)) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      throw new IOException("Unable to delete src dir: " + logDir);<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    return splits;<a name="line.263"></a>
-<span class="sourceLineNo">264</span>  }<a name="line.264"></a>
-<span class="sourceLineNo">265</span><a name="line.265"></a>
-<span class="sourceLineNo">266</span>  /**<a name="line.266"></a>
-<span class="sourceLineNo">267</span>   * log splitting implementation, splits one log file.<a name="line.267"></a>
-<span class="sourceLineNo">268</span>   * @param logfile should be an actual log file.<a name="line.268"></a>
-<span class="sourceLineNo">269</span>   */<a name="line.269"></a>
-<span class="sourceLineNo">270</span>  boolean splitLogFile(FileStatus logfile, CancelableProgressable reporter) throws IOException {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    Preconditions.checkState(status == null);<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    Preconditions.checkArgument(logfile.isFile(),<a name="line.272"></a>
-<span class="sourceLineNo">273</span>        "passed in file status is for something other than a regular file.");<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    boolean isCorrupted = false;<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    boolean skipErrors = conf.getBoolean("hbase.hlog.split.skip.errors",<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      SPLIT_SKIP_ERRORS_DEFAULT);<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    int interval = conf.getInt("hbase.splitlog.report.interval.loglines", 1024);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    Path logPath = logfile.getPath();<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    boolean outputSinkStarted = false;<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    boolean progress_failed = false;<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    int editsCount = 0;<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    int editsSkipped = 0;<a name="line.282"></a>
-<span class="sourceLineNo">283</span><a name="line.283"></a>
-<span class="sourceLineNo">284</span>    status =<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        TaskMonitor.get().createStatus(<a name="line.285"></a>
-<span class="sourceLineNo">286</span>          "Splitting log file " + logfile.getPath() + "into a temporary staging area.");<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    Reader in = null;<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    try {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      long logLength = logfile.getLen();<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      LOG.info("Splitting wal: " + logPath + ", length=" + logLength);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      LOG.info("DistributedLogReplay = " + this.distributedLogReplay);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      status.setStatus("Opening log file");<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>        progress_failed = true;<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        return false;<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      }<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      try {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        in = getReader(logfile, skipErrors, reporter);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      } catch (CorruptedLogFileException e) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>        LOG.warn("Could not get reader, corrupted log file " + logPath, e);<a name="line.300"></a>
-<span class="sourceLineNo">301</span>        ZKSplitLog.markCorrupted(rootDir, logfile.getPath().getName(), fs);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>        isCorrupted = true;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      }<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      if (in == null) {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>        LOG.warn("Nothing to split in log file " + logPath);<a name="line.305"></a>
-<span class="sourceLineNo">306</span>        return true;<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      }<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      int numOpenedFilesBeforeReporting = conf.getInt("hbase.splitlog.report.openedfiles", 3);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      int numOpenedFilesLastCheck = 0;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      outputSink.setReporter(reporter);<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      outputSink.startWriterThreads();<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      outputSinkStarted = true;<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      Entry entry;<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      Long lastFlushedSequenceId = -1L;<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      ServerName serverName = DefaultWALProvider.getServerNameFromWALDirectoryName(logPath);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      failedServerName = (serverName == null) ? "" : serverName.getServerName();<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      while ((entry = getNextLogLine(in, logPath, skipErrors)) != null) {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>        byte[] region = entry.getKey().getEncodedRegionName();<a name="line.318"></a>
-<span class="sourceLineNo">319</span>        String encodedRegionNameAsStr = Bytes.toString(region);<a name="line.319"></a>
-<span class="sourceLineNo">320</span>        lastFlushedSequenceId = lastFlushedSequenceIds.get(encodedRegionNameAsStr);<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        if (lastFlushedSequenceId == null) {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>          if (this.distributedLogReplay) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>            RegionStoreSequenceIds ids =<a name="line.323"></a>
-<span class="sourceLineNo">324</span>                csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.324"></a>
-<span class="sourceLineNo">325</span>                  encodedRegionNameAsStr);<a name="line.325"></a>
-<span class="sourceLineNo">326</span>            if (ids != null) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>              lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.327"></a>
-<span class="sourceLineNo">328</span>              if (LOG.isDebugEnabled()) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>                LOG.debug("DLR Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.329"></a>
-<span class="sourceLineNo">330</span>                  TextFormat.shortDebugString(ids));<a name="line.330"></a>
-<span class="sourceLineNo">331</span>              }<a name="line.331"></a>
-<span class="sourceLineNo">332</span>            }<a name="line.332"></a>
-<span class="sourceLineNo">333</span>          } else if (sequenceIdChecker != null) {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>            RegionStoreSequenceIds ids = sequenceIdChecker.getLastSequenceId(region);<a name="line.334"></a>
-<span class="sourceLineNo">335</span>            Map&lt;byte[], Long&gt; maxSeqIdInStores = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.335"></a>
-<span class="sourceLineNo">336</span>            for (StoreSequenceId storeSeqId : ids.getStoreSequenceIdList()) {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>              maxSeqIdInStores.put(storeSeqId.getFamilyName().toByteArray(),<a name="line.337"></a>
-<span class="sourceLineNo">338</span>                storeSeqId.getSequenceId());<a name="line.338"></a>
-<span class="sourceLineNo">339</span>            }<a name="line.339"></a>
-<span class="sourceLineNo">340</span>            regionMaxSeqIdInStores.put(encodedRegionNameAsStr, maxSeqIdInStores);<a name="line.340"></a>
-<span class="sourceLineNo">341</span>            lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.341"></a>
-<span class="sourceLineNo">342</span>            if (LOG.isDebugEnabled()) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>              LOG.debug("DLS Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.343"></a>
-<span class="sourceLineNo">344</span>                  TextFormat.shortDebugString(ids));<a name="line.344"></a>
+<span class="sourceLineNo">197</span>    entryBuffers = new EntryBuffers(controller,<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        this.conf.getInt("hbase.regionserver.hlog.splitlog.buffersize",<a name="line.198"></a>
+<span class="sourceLineNo">199</span>            128*1024*1024));<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>    // a larger minBatchSize may slow down recovery because replay writer has to wait for<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    // enough edits before replaying them<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    this.minBatchSize = this.conf.getInt("hbase.regionserver.wal.logreplay.batch.size", 64);<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    this.distributedLogReplay = (RecoveryMode.LOG_REPLAY == mode);<a name="line.204"></a>
+<span class="sourceLineNo">205</span><a name="line.205"></a>
+<span class="sourceLineNo">206</span>    this.numWriterThreads = this.conf.getInt("hbase.regionserver.hlog.splitlog.writer.threads", 3);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    if (csm != null &amp;&amp; this.distributedLogReplay) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      outputSink = new LogReplayOutputSink(controller, entryBuffers, numWriterThreads);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    } else {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      if (this.distributedLogReplay) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>        LOG.info("ZooKeeperWatcher is passed in as NULL so disable distrubitedLogRepaly.");<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      }<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      this.distributedLogReplay = false;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      outputSink = new LogRecoveredEditsOutputSink(controller, entryBuffers, numWriterThreads);<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    }<a name="line.215"></a>
+<span class="sourceLineNo">216</span><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>
+<span class="sourceLineNo">220</span>   * Splits a WAL file into region's recovered-edits directory.<a name="line.220"></a>
+<span class="sourceLineNo">221</span>   * This is the main entry point for distributed log splitting from SplitLogWorker.<a name="line.221"></a>
+<span class="sourceLineNo">222</span>   * &lt;p&gt;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>   * If the log file has N regions then N recovered.edits files will be produced.<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   * &lt;p&gt;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   * @param rootDir<a name="line.225"></a>
+<span class="sourceLineNo">226</span>   * @param logfile<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   * @param fs<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   * @param conf<a name="line.228"></a>
+<span class="sourceLineNo">229</span>   * @param reporter<a name="line.229"></a>
+<span class="sourceLineNo">230</span>   * @param idChecker<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   * @param cp coordination state manager<a name="line.231"></a>
+<span class="sourceLineNo">232</span>   * @return false if it is interrupted by the progress-able.<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   * @throws IOException<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   */<a name="line.234"></a>
+<span class="sourceLineNo">235</span>  public static boolean splitLogFile(Path rootDir, FileStatus logfile, FileSystem fs,<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      Configuration conf, CancelableProgressable reporter, LastSequenceId idChecker,<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      CoordinatedStateManager cp, RecoveryMode mode, final WALFactory factory) throws IOException {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, idChecker, cp, mode);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    return s.splitLogFile(logfile, reporter);<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>  // A wrapper to split one log folder using the method used by distributed<a name="line.242"></a>
+<span class="sourceLineNo">243</span>  // log splitting. Used by tools and unit tests. It should be package private.<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  // It is public only because TestWALObserver is in a different package,<a name="line.244"></a>
+<span class="sourceLineNo">245</span>  // which uses this method to do log splitting.<a name="line.245"></a>
+<span class="sourceLineNo">246</span>  @VisibleForTesting<a name="line.246"></a>
+<span class="sourceLineNo">247</span>  public static List&lt;Path&gt; split(Path rootDir, Path logDir, Path oldLogDir,<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      FileSystem fs, Configuration conf, final WALFactory factory) throws IOException {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    final FileStatus[] logfiles = SplitLogManager.getFileList(conf,<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        Collections.singletonList(logDir), null);<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    List&lt;Path&gt; splits = new ArrayList&lt;Path&gt;();<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    if (logfiles != null &amp;&amp; logfiles.length &gt; 0) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      for (FileStatus logfile: logfiles) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>        WALSplitter s = new WALSplitter(factory, conf, rootDir, fs, null, null,<a name="line.254"></a>
+<span class="sourceLineNo">255</span>            RecoveryMode.LOG_SPLITTING);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>        if (s.splitLogFile(logfile, null)) {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>          finishSplitLogFile(rootDir, oldLogDir, logfile.getPath(), conf);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>          if (s.outputSink.splits != null) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>            splits.addAll(s.outputSink.splits);<a name="line.259"></a>
+<span class="sourceLineNo">260</span>          }<a name="line.260"></a>
+<span class="sourceLineNo">261</span>        }<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      }<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    }<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    if (!fs.delete(logDir, true)) {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      throw new IOException("Unable to delete src dir: " + logDir);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    }<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    return splits;<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  }<a name="line.268"></a>
+<span class="sourceLineNo">269</span><a name="line.269"></a>
+<span class="sourceLineNo">270</span>  /**<a name="line.270"></a>
+<span class="sourceLineNo">271</span>   * log splitting implementation, splits one log file.<a name="line.271"></a>
+<span class="sourceLineNo">272</span>   * @param logfile should be an actual log file.<a name="line.272"></a>
+<span class="sourceLineNo">273</span>   */<a name="line.273"></a>
+<span class="sourceLineNo">274</span>  @VisibleForTesting<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  boolean splitLogFile(FileStatus logfile, CancelableProgressable reporter) throws IOException {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    Preconditions.checkState(status == null);<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    Preconditions.checkArgument(logfile.isFile(),<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        "passed in file status is for something other than a regular file.");<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    boolean isCorrupted = false;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    boolean skipErrors = conf.getBoolean("hbase.hlog.split.skip.errors",<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      SPLIT_SKIP_ERRORS_DEFAULT);<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    int interval = conf.getInt("hbase.splitlog.report.interval.loglines", 1024);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    Path logPath = logfile.getPath();<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    boolean outputSinkStarted = false;<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    boolean progress_failed = false;<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    int editsCount = 0;<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    int editsSkipped = 0;<a name="line.287"></a>
+<span class="sourceLineNo">288</span><a name="line.288"></a>
+<span class="sourceLineNo">289</span>    status =<a name="line.289"></a>
+<span class="sourceLineNo">290</span>        TaskMonitor.get().createStatus(<a name="line.290"></a>
+<span class="sourceLineNo">291</span>          "Splitting log file " + logfile.getPath() + "into a temporary staging area.");<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    Reader in = null;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    this.fileBeingSplit = logfile;<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    try {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      long logLength = logfile.getLen();<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      LOG.info("Splitting wal: " + logPath + ", length=" + logLength);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      LOG.info("DistributedLogReplay = " + this.distributedLogReplay);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      status.setStatus("Opening log file");<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>        progress_failed = true;<a name="line.300"></a>
+<span class="sourceLineNo">301</span>        return false;<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      }<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      try {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>        in = getReader(logfile, skipErrors, reporter);<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      } catch (CorruptedLogFileException e) {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>        LOG.warn("Could not get reader, corrupted log file " + logPath, e);<a name="line.306"></a>
+<span class="sourceLineNo">307</span>        ZKSplitLog.markCorrupted(rootDir, logfile.getPath().getName(), fs);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>        isCorrupted = true;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      }<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      if (in == null) {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        LOG.warn("Nothing to split in log file " + logPath);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        return true;<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      }<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      int numOpenedFilesBeforeReporting = conf.getInt("hbase.splitlog.report.openedfiles", 3);<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      int numOpenedFilesLastCheck = 0;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      outputSink.setReporter(reporter);<a name="line.316"></a>
+<span class="sourceLineNo">317</span>      outputSink.startWriterThreads();<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      outputSinkStarted = true;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>      Entry entry;<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      Long lastFlushedSequenceId = -1L;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      ServerName serverName = DefaultWALProvider.getServerNameFromWALDirectoryName(logPath);<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      failedServerName = (serverName == null) ? "" : serverName.getServerName();<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      while ((entry = getNextLogLine(in, logPath, skipErrors)) != null) {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>        byte[] region = entry.getKey().getEncodedRegionName();<a name="line.324"></a>
+<span class="sourceLineNo">325</span>        String encodedRegionNameAsStr = Bytes.toString(region);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>        lastFlushedSequenceId = lastFlushedSequenceIds.get(encodedRegionNameAsStr);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>        if (lastFlushedSequenceId == null) {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>          if (this.distributedLogReplay) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>            RegionStoreSequenceIds ids =<a name="line.329"></a>
+<span class="sourceLineNo">330</span>                csm.getSplitLogWorkerCoordination().getRegionFlushedSequenceId(failedServerName,<a name="line.330"></a>
+<span class="sourceLineNo">331</span>                  encodedRegionNameAsStr);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>            if (ids != null) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span>              lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.333"></a>
+<span class="sourceLineNo">334</span>              if (LOG.isDebugEnabled()) {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>                LOG.debug("DLR Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.335"></a>
+<span class="sourceLineNo">336</span>                  TextFormat.shortDebugString(ids));<a name="line.336"></a>
+<span class="sourceLineNo">337</span>              }<a name="line.337"></a>
+<span class="sourceLineNo">338</span>            }<a name="line.338"></a>
+<span class="sourceLineNo">339</span>          } else if (sequenceIdChecker != null) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>            RegionStoreSequenceIds ids = sequenceIdChecker.getLastSequenceId(region);<a name="line.340"></a>
+<span class="sourceLineNo">341</span>            Map&lt;byte[], Long&gt; maxSeqIdInStores = new TreeMap&lt;byte[], Long&gt;(Bytes.BYTES_COMPARATOR);<a name="line.341"></a>
+<span class="sourceLineNo">342</span>            for (StoreSequenceId storeSeqId : ids.getStoreSequenceIdList()) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>              maxSeqIdInStores.put(storeSeqId.getFamilyName().toByteArray(),<a name="line.343"></a>
+<span class="sourceLineNo">344</span>                storeSeqId.getSequenceId());<a name="line.344"></a>
 <span class="sourceLineNo">345</span>            }<a name="line.345"></a>
-<span class="sourceLineNo">346</span>          }<a name="line.346"></a>
-<span class="sourceLineNo">347</span>          if (lastFlushedSequenceId == null) {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>            lastFlushedSequenceId = -1L;<a name="line.348"></a>
-<span class="sourceLineNo">349</span>          }<a name="line.349"></a>
-<span class="sourceLineNo">350</span>          lastFlushedSequenceIds.put(encodedRegionNameAsStr, lastFlushedSequenceId);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        }<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        if (lastFlushedSequenceId &gt;= entry.getKey().getLogSeqNum()) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>          editsSkipped++;<a name="line.353"></a>
-<span class="sourceLineNo">354</span>          continue;<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        }<a name="line.355"></a>
-<span class="sourceLineNo">356</span>        entryBuffers.appendEntry(entry);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        editsCount++;<a name="line.357"></a>
-<span class="sourceLineNo">358</span>        int moreWritersFromLastCheck = this.getNumOpenWriters() - numOpenedFilesLastCheck;<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        // If sufficient edits have passed, check if we should report progress.<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        if (editsCount % interval == 0<a name="line.360"></a>
-<span class="sourceLineNo">361</span>            || moreWritersFromLastCheck &gt; numOpenedFilesBeforeReporting) {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>          numOpenedFilesLastCheck = this.getNumOpenWriters();<a name="line.362"></a>
-<span class="sourceLineNo">363</span>          String countsStr = (editsCount - (editsSkipped + outputSink.getSkippedEdits()))<a name="line.363"></a>
-<span class="sourceLineNo">364</span>              + " edits, skipped " + editsSkipped + " edits.";<a name="line.364"></a>
-<span class="sourceLineNo">365</span>          status.setStatus("Split " + countsStr);<a name="line.365"></a>
-<span class="sourceLineNo">366</span>          if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>            progress_failed = true;<a name="line.367"></a>
-<span class="sourceLineNo">368</span>            return false;<a name="line.368"></a>
-<span class="sourceLineNo">369</span>          }<a name="line.369"></a>
-<span class="sourceLineNo">370</span>        }<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      }<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    } catch (InterruptedException ie) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      IOException iie = new InterruptedIOException();<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      iie.initCause(ie);<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      throw iie;<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    } catch (CorruptedLogFileException e) {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      LOG.warn("Could not parse, corrupted log file " + logPath, e);<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      csm.getSplitLogWorkerCoordination().markCorrupted(rootDir,<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        logfile.getPath().getName(), fs);<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      isCorrupted = true;<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    } catch (IOException e) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      throw e;<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    } finally {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      LOG.debug("Finishing writing output logs and closing down.");<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      try {<a name="line.386"></a>
-<span class="sourceLineNo">387</span>        if (null != in) {<a name="line.387"></a>
-<span class="sourceLineNo">388</span>          in.close();<a name="line.388"></a>
-<span class="sourceLineNo">389</span>        }<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      } catch (IOException exception) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        LOG.warn("Could not close wal reader: " + exception.getMessage());<a name="line.391"></a>
-<span class="sourceLineNo">392</span>        LOG.debug("exception details", exception);<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      }<a name="line.393"></a>
-<span class="sourceLineNo">394</span>      try {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        if (outputSinkStarted) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>          // Set progress_failed to true as the immediate following statement will reset its value<a name="line.396"></a>
-<span class="sourceLineNo">397</span>          // when finishWritingAndClose() throws exception, progress_failed has the right value<a name="line.397"></a>
-<span class="sourceLineNo">398</span>          progress_failed = true;<a name="line.398"></a>
-<span class="sourceLineNo">399</span>          progress_failed = outputSink.finishWritingAndClose() == null;<a name="line.399"></a>
-<span class="sourceLineNo">400</span>        }<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      } finally {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        String msg =<a name="line.402"></a>
-<span class="sourceLineNo">403</span>            "Processed " + editsCount + " edits across " + outputSink.getNumberOfRecoveredRegions()<a name="line.403"></a>
-<span class="sourceLineNo">404</span>                + " regions; edits skipped=" + editsSkipped + "; log file=" + logPath +<a name="line.404"></a>
-<span class="sourceLineNo">405</span>                ", length=" + logfile.getLen() + // See if length got updated post lease recovery<a name="line.405"></a>
-<span class="sourceLineNo">406</span>                ", corrupted=" + isCorrupted + ", progress failed=" + progress_failed;<a name="line.406"></a>
-<span class="sourceLineNo">407</span>        LOG.info(msg);<a name="line.407"></a>
-<span class="sourceLineNo">408</span>        status.markComplete(msg);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      }<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    }<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    return !progress_failed;<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>   * Completes the work done by splitLogFile by archiving logs<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   * &lt;p&gt;<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * It is invoked by SplitLogManager once it knows that one of the<a name="line.417"></a>
-<span class="sourceLineNo">418</span>   * SplitLogWorkers have completed the splitLogFile() part. If the master<a name="line.418"></a>
-<span class="sourceLineNo">419</span>   * crashes then this function might get called multiple times.<a name="line.419"></a>
-<span class="sourceLineNo">420</span>   * &lt;p&gt;<a name="line.420"></a>
-<span class="sourceLineNo">421</span>   * @param logfile<a name="line.421"></a>
-<span class="sourceLineNo">422</span>   * @param conf<a name="line.422"></a>
-<span class="sourceLineNo">423</span>   * @throws IOException<a name="line.423"></a>
-<span class="sourceLineNo">424</span>   */<a name="line.424"></a>
-<span class="sourceLineNo">425</span>  public static void finishSplitLogFile(String logfile,<a name="line.425"></a>
-<span class="sourceLineNo">426</span>      Configuration conf)  throws IOException {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    Path rootdir = FSUtils.getRootDir(conf);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    Path oldLogDir = new Path(rootdir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    Path logPath;<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    if (FSUtils.isStartingWithPath(rootdir, logfile)) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      logPath = new Path(logfile);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    } else {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      logPath = new Path(rootdir, logfile);<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    }<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    finishSplitLogFile(rootdir, oldLogDir, logPath, conf);<a name="line.435"></a>
-<span class="sourceLineNo">436</span>  }<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>  static void finishSplitLogFile(Path rootdir, Path oldLogDir,<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      Path logPath, Configuration conf) throws IOException {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    List&lt;Path&gt; processedLogs = new ArrayList&lt;Path&gt;();<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    List&lt;Path&gt; corruptedLogs = new ArrayList&lt;Path&gt;();<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    FileSystem fs;<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    fs = rootdir.getFileSystem(conf);<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    if (ZKSplitLog.isCorrupted(rootdir, logPath.getName(), fs)) {<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      corruptedLogs.add(logPath);<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    } else {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      processedLogs.add(logPath);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    }<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    archiveLogs(corruptedLogs, processedLogs, oldLogDir, fs, conf);<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    Path stagingDir = ZKSplitLog.getSplitLogDir(rootdir, logPath.getName());<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    fs.delete(stagingDir, true);<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  }<a name="line.452"></a>
-<span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span>  /**<a name="line.454"></a>
-<span class="sourceLineNo">455</span>   * Moves processed logs to a oldLogDir after successful processing Moves<a name="line.455"></a>
-<span class="sourceLineNo">456</span>   * corrupted logs (any log that couldn't be successfully parsed to corruptDir<a name="line.456"></a>
-<span class="sourceLineNo">457</span>   * (.corrupt) for later investigation<a name="line.457"></a>
-<span class="sourceLineNo">458</span>   *<a name="line.458"></a>
-<span class="sourceLineNo">459</span>   * @param corruptedLogs<a name="line.459"></a>
-<span class="sourceLineNo">460</span>   * @param processedLogs<a name="line.460"></a>
-<span class="sourceLineNo">461</span>   * @param oldLogDir<a name="line.461"></a>
-<span class="sourceLineNo">462</span>   * @param fs<a name="line.462"></a>
-<span class="sourceLineNo">463</span>   * @param conf<a name="line.463"></a>
-<span class="sourceLineNo">464</span>   * @throws IOException<a name="line.464"></a>
-<span class="sourceLineNo">465</span>   */<a name="line.465"></a>
-<span class="sourceLineNo">466</span>  private static void archiveLogs(<a name="line.466"></a>
-<span class="sourceLineNo">467</span>      final List&lt;Path&gt; corruptedLogs,<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      final List&lt;Path&gt; processedLogs, final Path oldLogDir,<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      final FileSystem fs, final Configuration conf) throws IOException {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    final Path corruptDir = new Path(FSUtils.getRootDir(conf), conf.get(<a name="line.470"></a>
-<span class="sourceLineNo">471</span>        "hbase.regionserver.hlog.splitlog.corrupt.dir",  HConstants.CORRUPT_DIR_NAME));<a name="line.471"></a>
-<span class="sourceLineNo">472</span><a name="line.472"></a>
-<span class="sourceLineNo">473</span>    if (!fs.mkdirs(corruptDir)) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      LOG.info("Unable to mkdir " + corruptDir);<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    }<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    fs.mkdirs(oldLogDir);<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>    // this method can get restarted or called multiple times for archiving<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    // the same log files.<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    for (Path corrupted : corruptedLogs) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      Path p = new Path(corruptDir, corrupted.getName());<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      if (fs.exists(corrupted)) {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        if (!fs.rename(corrupted, p)) {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>          LOG.warn("Unable to move corrupted log " + corrupted + " to " + p);<a name="line.484"></a>
-<span class="sourceLineNo">485</span>        } else {<a name="line.485"></a>
-<span class="sourceLineNo">486</span>          LOG.warn("Moved corrupted log " + corrupted + " to " + p);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>        }<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      }<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    }<a name="line.489"></a>
-<span class="sourceLineNo">490</span><a name="line.490"></a>
-<span class="sourceLineNo">491</span>    for (Path p : processedLogs) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      Path newPath = FSHLog.getWALArchivePath(oldLogDir, p);<a name="line.492"></a>
-<span class="sourceLineNo">493</span>      if (fs.exists(p)) {<a name="line.493"></a>
-<span class="sourceLineNo">494</span>        if (!FSUtils.renameAndSetModifyTime(fs, p, newPath)) {<a name="line.494"></a>
-<span class="sourceLineNo">495</span>          LOG.warn("Unable to move  " + p + " to " + newPath);<a name="line.495"></a>
-<span class="sourceLineNo">496</span>        } else {<a name="line.496"></a>
-<span class="sourceLineNo">497</span>          LOG.info("Archived processed log " + p + " to " + newPath);<a name="line.497"></a>
-<span class="sourceLineNo">498</span>        }<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      }<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><a name="line.502"></a>
-<span class="sourceLineNo">503</span>  /**<a name="line.503"></a>
-<span class="sourceLineNo">504</span>   * Path to a file under RECOVERED_EDITS_DIR directory of the region found in<a name="line.504"></a>
-<span class="sourceLineNo">505</span>   * &lt;code&gt;logEntry&lt;/code&gt; named for the sequenceid in the passed<a name="line.505"></a>
-<span class="sourceLineNo">506</span>   * &lt;code&gt;logEntry&lt;/code&gt;: e.g. /hbase/some_table/2323432434/recovered.edits/2332.<a name="line.506"></a>
-<span class="sourceLineNo">507</span>   * This method also ensures existence of RECOVERED_EDITS_DIR under the region<a name="line.507"></a>
-<span class="sourceLineNo">508</span>   * creating it if necessary.<a name="line.508"></a>
-<span class="sourceLineNo">509</span>   * @param fs<a name="line.509"></a>
-<span class="sourceLineNo">510</span>   * @param logEntry<a name="line.510"></a>
-<span class="sourceLineNo">511</span>   * @param rootDir HBase root dir.<a name="line.511"></a>
-<span class="sourceLineNo">512</span>   * @return Path to file into which to dump split log edits.<a name="line.512"></a>
-<span class="sourceLineNo">513</span>   * @throws IOException<a name="line.513"></a>
-<span class="sourceLineNo">514</span>   */<a name="line.514"></a>
-<span class="sourceLineNo">515</span>  @SuppressWarnings("deprecation")<a name="line.515"></a>
-<span class="sourceLineNo">516</span>  static Path getRegionSplitEditsPath(final FileSystem fs,<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      final Entry logEntry, final Path rootDir, boolean isCreate)<a name="line.517"></a>
-<span class="sourceLineNo">518</span>  throws IOException {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    Path tableDir = FSUtils.getTableDir(rootDir, logEntry.getKey().getTablename());<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    String encodedRegionName = Bytes.toString(logEntry.getKey().getEncodedRegionName());<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    Path regiondir = HRegion.getRegionDir(tableDir, encodedRegionName);<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    Path dir = getRegionDirRecoveredEditsDir(regiondir);<a name="line.522"></a>
-<span class="sourceLineNo">523</span><a name="line.523"></a>
-<span class="sourceLineNo">524</span>    if (!fs.exists(regiondir)) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      LOG.info("This region's directory doesn't exist: "<a name="line.525"></a>
-<span class="sourceLineNo">526</span>          + regiondir.toString() + ". It is very likely that it was" +<a name="line.526"></a>
-<span class="sourceLineNo">527</span>          " already split so it's safe to discard those edits.");<a name="line.527"></a>
-<span class="sourceLineNo">528</span>      return null;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    }<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    if (fs.exists(dir) &amp;&amp; fs.isFile(dir)) {<a name="line.530"></a>
-<span class="sourceLineNo">531</span>      Path tmp = new Path("/tmp");<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      if (!fs.exists(tmp)) {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>        fs.mkdirs(tmp);<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      }<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      tmp = new Path(tmp,<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        HConstants.RECOVERED_EDITS_DIR + "_" + encodedRegionName);<a name="line.536"></a>
-<span class="sourceLineNo">537</span>      LOG.warn("Found existing old file: " + dir + ". It could be some "<a name="line.537"></a>
-<span class="sourceLineNo">538</span>        + "leftover of an old installation. It should be a folder instead. "<a name="line.538"></a>
-<span class="sourceLineNo">539</span>        + "So moving it to " + tmp);<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      if (!fs.rename(dir, tmp)) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        LOG.warn("Failed to sideline old file " + dir);<a name="line.541"></a>
-<span class="sourceLineNo">542</span>      }<a name="line.542"></a>
-<span class="sourceLineNo">543</span>    }<a name="line.543"></a>
-<span class="sourceLineNo">544</span><a name="line.544"></a>
-<span class="sourceLineNo">545</span>    if (isCreate &amp;&amp; !fs.exists(dir)) {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>      if (!fs.mkdirs(dir)) LOG.warn("mkdir failed on " + dir);<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    }<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    // Append file name ends with RECOVERED_LOG_TMPFILE_SUFFIX to ensure<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    // region's replayRecoveredEdits will not delete it<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    String fileName = formatRecoveredEditsFileName(logEntry.getKey().getLogSeqNum());<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    fileName = getTmpRecoveredEditsFileName(fileName);<a name="line.551"></a>
-<span class="sourceLineNo">552</span>    return new Path(dir, fileName);<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>  static String getTmpRecoveredEditsFileName(String fileName) {<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    return fileName + RECOVERED_LOG_TMPFILE_SUFFIX;<a name="line.556"></a>
-<span class="sourceLineNo">557</span>  }<a name="line.557"></a>
-<span class="sourceLineNo">558</span><a name="line.558"></a>
-<span class="sourceLineNo">559</span>  /**<a name="line.559"></a>
-<span class="sourceLineNo">560</span>   * Get the completed recovered edits file path, renaming it to be by last edit<a name="line.560"></a>
-<span class="sourceLineNo">561</span>   * in the file from its first edit. Then we could use the name to skip<a name="line.561"></a>
-<span class="sourceLineNo">562</span>   * recovered edits when doing {@link HRegion#replayRecoveredEditsIfAny}.<a name="line.562"></a>
-<span class="sourceLineNo">563</span>   * @param srcPath<a name="line.563"></a>
-<span class="sourceLineNo">564</span>   * @param maximumEditLogSeqNum<a name="line.564"></a>
-<span class="sourceLineNo">565</span>   * @return dstPath take file's last edit log seq num as the name<a name="line.565"></a>
-<span class="sourceLineNo">566</span>   */<a name="line.566"></a>
-<span class="sourceLineNo">567</span>  static Path getCompletedRecoveredEditsFilePath(Path srcPath,<a name="line.567"></a>
-<span class="sourceLineNo">568</span>      Long maximumEditLogSeqNum) {<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    String fileName = formatRecoveredEditsFileName(maximumEditLogSeqNum);<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    return new Path(srcPath.getParent(), fileName);<a name="line.570"></a>
-<span class="sourceLineNo">571</span>  }<a name="line.571"></a>
-<span class="sourceLineNo">572</span><a name="line.572"></a>
-<span class="sourceLineNo">573</span>  static String formatRecoveredEditsFileName(final long seqid) {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    return String.format("%019d", seqid);<a name="line.574"></a>
-<span class="sourceLineNo">575</span>  }<a name="line.575"></a>
-<span class="sourceLineNo">576</span><a name="line.576"></a>
-<span class="sourceLineNo">577</span>  private static final Pattern EDITFILES_NAME_PATTERN = Pattern.compile("-?[0-9]+");<a name="line.577"></a>
-<span class="sourceLineNo">578</span>  private static final String RECOVERED_LOG_TMPFILE_SUFFIX = ".temp";<a name="line.578"></a>
-<span class="sourceLineNo">579</span><a name="line.579"></a>
-<span class="sourceLineNo">580</span>  /**<a name="line.580"></a>
-<span class="sourceLineNo">581</span>   * @param regiondir<a name="line.581"></a>
-<span class="sourceLineNo">582</span>   *          This regions directory in the filesystem.<a name="line.582"></a>
-<span class="sourceLineNo">583</span>   * @return The directory that holds recovered edits files for the region<a name="line.583"></a>
-<span class="sourceLineNo">584</span>   *         &lt;code&gt;regiondir&lt;/code&gt;<a name="line.584"></a>
-<span class="sourceLineNo">585</span>   */<a name="line.585"></a>
-<span class="sourceLineNo">586</span>  public static Path getRegionDirRecoveredEditsDir(final Path regiondir) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    return new Path(regiondir, HConstants.RECOVERED_EDITS_DIR);<a name="line.587"></a>
-<span class="sourceLineNo">588</span>  }<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span>  /**<a name="line.590"></a>
-<span class="sourceLineNo">591</span>   * Returns sorted set of edit files made by splitter, excluding files<a name="line.591"></a>
-<span class="sourceLineNo">592</span>   * with '.temp' suffix.<a name="line.592"></a>
-<span class="sourceLineNo">593</span>   *<a name="line.593"></a>
-<span class="sourceLineNo">594</span>   * @param fs<a name="line.594"></a>
-<span class="sourceLineNo">595</span>   * @param regiondir<a name="line.595"></a>
-<span class="sourceLineNo">596</span>   * @return Files in passed &lt;code&gt;regiondir&lt;/code&gt; as a sorted set.<a name="line.596"></a>
-<span class="sourceLineNo">597</span>   * @throws IOException<a name="line.597"></a>
-<span class="sourceLineNo">598</span>   */<a name="line.598"></a>
-<span class="sourceLineNo">599</span>  public static NavigableSet&lt;Path&gt; getSplitEditFilesSorted(final FileSystem fs,<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      final Path regiondir) throws IOException {<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    NavigableSet&lt;Path&gt; filesSorted = new TreeSet&lt;Path&gt;();<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    Path editsdir = getRegionDirRecoveredEditsDir(regiondir);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    if (!fs.exists(editsdir))<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      return filesSorted;<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    FileStatus[] files = FSUtils.listStatus(fs, editsdir, new PathFilter() {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      @Override<a name="line.606"></a>
-<span class="sourceLineNo">607</span>      public boolean accept(Path p) {<a name="line.607"></a>
-<span class="sourceLineNo">608</span>        boolean result = false;<a name="line.608"></a>
-<span class="sourceLineNo">609</span>        try {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>          // Return files and only files that match the editfile names pattern.<a name="line.610"></a>
-<span class="sourceLineNo">611</span>          // There can be other files in this directory other than edit files.<a name="line.611"></a>
-<span class="sourceLineNo">612</span>          // In particular, on error, we'll move aside the bad edit file giving<a name="line.612"></a>
-<span class="sourceLineNo">613</span>          // it a timestamp suffix. See moveAsideBadEditsFile.<a name="line.613"></a>
-<span class="sourceLineNo">614</span>          Matcher m = EDITFILES_NAME_PATTERN.matcher(p.getName());<a name="line.614"></a>
-<span class="sourceLineNo">615</span>          result = fs.isFile(p) &amp;&amp; m.matches();<a name="line.615"></a>
-<span class="sourceLineNo">616</span>          // Skip the file whose name ends with RECOVERED_LOG_TMPFILE_SUFFIX,<a name="line.616"></a>
-<span class="sourceLineNo">617</span>          // because it means splitwal thread is writting this file.<a name="line.617"></a>
-<span class="sourceLineNo">618</span>          if (p.getName().endsWith(RECOVERED_LOG_TMPFILE_SUFFIX)) {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>            result = false;<a name="line.619"></a>
-<span class="sourceLineNo">620</span>          }<a name="line.620"></a>
-<span class="sourceLineNo">621</span>          // Skip SeqId Files<a name="line.621"></a>
-<span class="sourceLineNo">622</span>          if (isSequenceIdFile(p)) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span>            result = false;<a name="line.623"></a>
-<span class="sourceLineNo">624</span>          }<a name="line.624"></a>
-<span class="sourceLineNo">625</span>        } catch (IOException e) {<a name="line.625"></a>
-<span class="sourceLineNo">626</span>          LOG.warn("Failed isFile check on " + p);<a name="line.626"></a>
-<span class="sourceLineNo">627</span>        }<a name="line.627"></a>
-<span class="sourceLineNo">628</span>        return result;<a name="line.628"></a>
-<span class="sourceLineNo">629</span>      }<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    });<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    if (files == null) {<a name="line.631"></a>
-<span class="sourceLineNo">632</span>      return filesSorted;<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    }<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    for (FileStatus status : files) {<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      filesSorted.add(status.getPath());<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    }<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    return filesSorted;<a name="line.637"></a>
-<span class="sourceLineNo">638</span>  }<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>   * Move aside a bad edits file.<a name="line.641"></a>
-<span class="sourceLineNo">642</span>   *<a name="line.642"></a>
-<span class="sourceLineNo">643</span>   * @param fs<a name="line.643"></a>
-<span class="sourceLineNo">644</span>   * @param edits<a name="line.644"></a>
-<span class="sourceLineNo">645</span>   *          Edits file to move aside.<a name="line.645"></a>
-<span class="sourceLineNo">646</span>   * @return The name of the moved aside file.<a name="line.646"></a>
-<span class="sourceLineNo">647</span>   * @throws IOException<a name="line.647"></a>
-<span class="sourceLineNo">648</span>   */<a name="line.648"></a>
-<span class="sourceLineNo">649</span>  public static Path moveAsideBadEditsFile(final FileSystem fs, final Path edits)<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      throws IOException {<a name="line.650"></a>
-<span class="sourceLineNo">651</span>    Path moveAsideName = new Path(edits.getParent(), edits.getName() + "."<a name="line.651"></a>
-<span class="sourceLineNo">652</span>        + System.currentTimeMillis());<a name="line.652"></a>
-<span class="sourceLineNo">653</span>    if (!fs.rename(edits, moveAsideName)) {<a name="line.653"></a>
-<span class="sourceLineNo">654</span>      LOG.warn("Rename failed from " + edits + " to " + moveAsideName);<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    }<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    return moveAsideName;<a name="line.656"></a>
-<span class="sourceLineNo">657</span>  }<a name="line.657"></a>
-<span class="sourceLineNo">658</span><a name="line.658"></a>
-<span class="sourceLineNo">659</span>  private static final String SEQUENCE_ID_FILE_SUFFIX = ".seqid";<a name="line.659"></a>
-<span class="sourceLineNo">660</span>  private static final String OLD_SEQUENCE_ID_FILE_SUFFIX = "_seqid";<a name="line.660"></a>
-<span class="sourceLineNo">661</span>  private static final int SEQUENCE_ID_FILE_SUFFIX_LENGTH = SEQUENCE_ID_FILE_SUFFIX.length();<a name="line.661"></a>
-<span class="sourceLineNo">662</span><a name="line.662"></a>
-<span class="sourceLineNo">663</span>  /**<a name="line.663"></a>
-<span class="sourceLineNo">664</span>   * Is the given file a region open sequence id file.<a name="line.664"></a>
-<span class="sourceLineNo">665</span>   */<a name="line.665"></a>
-<span class="sourceLineNo">666</span>  @VisibleForTesting<a name="line.666"></a>
-<span class="sourceLineNo">667</span>  public static boolean isSequenceIdFile(final Path file) {<a name="line.667"></a>
-<span class="sourceLineNo">668</span>    return file.getName().endsWith(SEQUENCE_ID_FILE_SUFFIX)<a name="line.668"></a>
-<span class="sourceLineNo">669</span>        || file.getName().endsWith(OLD_SEQUENCE_ID_FILE_SUFFIX);<a name="line.669"></a>
-<span class="sourceLineNo">670</span>  }<a name="line.670"></a>
+<span class="sourceLineNo">346</span>            regionMaxSeqIdInStores.put(encodedRegionNameAsStr, maxSeqIdInStores);<a name="line.346"></a>
+<span class="sourceLineNo">347</span>            lastFlushedSequenceId = ids.getLastFlushedSequenceId();<a name="line.347"></a>
+<span class="sourceLineNo">348</span>            if (LOG.isDebugEnabled()) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>              LOG.debug("DLS Last flushed sequenceid for " + encodedRegionNameAsStr + ": " +<a name="line.349"></a>
+<span class="sourceLineNo">350</span>                  TextFormat.shortDebugString(ids));<a name="line.350"></a>
+<span class="sourceLineNo">351</span>            }<a name="line.351"></a>
+<span class="sourceLineNo">352</span>          }<a name="line.352"></a>
+<span class="sourceLineNo">353</span>          if (lastFlushedSequenceId == null) {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>            lastFlushedSequenceId = -1L;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>          }<a name="line.355"></a>
+<span class="sourceLineNo">356</span>          lastFlushedSequenceIds.put(encodedRegionNameAsStr, lastFlushedSequenceId);<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        }<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        if (lastFlushedSequenceId &gt;= entry.getKey().getSequenceId()) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>          editsSkipped++;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>          continue;<a name="line.360"></a>
+<span class="sourceLineNo">361</span>        }<a name="line.361"></a>
+<span class="sourceLineNo">362</span>        entryBuffers.appendEntry(entry);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        editsCount++;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>        int moreWritersFromLastCheck = this.getNumOpenWriters() - numOpenedFilesLastCheck;<a name="line.364"></a>
+<span class="sourceLineNo">365</span>        // If sufficient edits have passed, check if we should report progress.<a name="line.365"></a>
+<span class="sourceLineNo">366</span>        if (editsCount % interval == 0<a name="line.366"></a>
+<span class="sourceLineNo">367</span>            || moreWritersFromLastCheck &gt; numOpenedFilesBeforeReporting) {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>          numOpenedFilesLastCheck = this.getNumOpenWriters();<a name="line.368"></a>
+<span class="sourceLineNo">369</span>          String countsStr = (editsCount - (editsSkipped + outputSink.getSkippedEdits()))<a name="line.369"></a>
+<span class="sourceLineNo">370</span>              + " edits, skipped " + editsSkipped + " edits.";<a name="line.370"></a>
+<span class="sourceLineNo">371</span>          status.setStatus("Split " + countsStr);<a name="line.371"></a>
+<span class="sourceLineNo">372</span>          if (reporter != null &amp;&amp; !reporter.progress()) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>            progress_failed = true;<a name="line.373"></a>
+<span class="sourceLineNo">374</span>            return false;<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>      }<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    } catch (InterruptedException ie) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      IOException iie = new InterruptedIOException();<a name="line.379"></a>
+<span class="sourceLineNo">380</span>      iie.initCause(ie);<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      throw iie;<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    } catch (CorruptedLogFileException e) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      LOG.warn("Could not parse, corrupted log file " + logPath, e);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      csm.getSplitLogWorkerCoordination().markCorrupted(rootDir,<a name="line.384"></a>
+<span class="sourceLineNo">385</span>        logfile.getPath().getName(), fs);<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      isCorrupted = true;<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    } catch (IOException e) {<a name="line.387"></a>
+<span class="sourceLineNo">388</span>      e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      throw e;<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    } finally {<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      LOG.debug("Finishing writing output logs and closing down.");<a name="line.391"></a>
+<span class="sourceLineNo">392</span>      try {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>        if (null != in) {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>          in.close();<a name="line.394"></a>
+<span class="sourceLineNo">395</span>        }<a name="line.395"></a>
+<span class="sourceLineNo">396</span>      } catch (IOException exception) {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>        LOG.warn("Could not close wal reader: " + exception.getMessage());<a name="line.397"></a>
+<span class="sourceLineNo">398</span>        LOG.debug("exception details", exception);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      }<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      try {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>        if (outputSinkStarted) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>          // Set progress_failed to true as the immediate following statement will reset its value<a name="line.402"></a>
+<span class="sourceLineNo">403</span>          // when finishWritingAndClose() throws exception, progress_failed has the right value<a name="line.403"></a>
+<span class="sourceLineNo">404</span>          progress_failed = true;<a name="line.404"></a>
+<span class="sourceLineNo">405</span>          progress_failed = outputSink.finishWritingAndClose() == null;<a name="line.405"></a>
+<span class="sourceLineNo">406</span>        }<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      } finally {<a name="line.407"></a>
+<span class="sourceLineNo">408</span>        String msg =<a name="line.408"></a>
+<span class="sourceLineNo">409</span>            "Processed " + editsCount + " edits across " + outputSink.getNumberOfRecoveredRegions()<a name="line.409"></a>
+<span class="sourceLineNo">410</span>                + " regions; edits skipped=" + editsSkipped + "; log file=" + logPath +<a name="line.410"></a>
+<span class="sourceLineNo">411</span>                ", length=" + logfile.getLen() + // See if length got updated post lease recovery<a name="line.411"></a>
+<span class="sourceLineNo">412</span>                ", corrupted=" + isCorrupted + ", progress failed=" + progress_failed;<a name="line.412"></a>
+<span class="sourceLineNo">413</span>        LOG.info(msg);<a name="line.413"></a>
+<span class="sourceLineNo">414</span>        status.markComplete(msg);<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>    return !progress_failed;<a name="line.417"></a>
+<span class="sourceLineNo">418</span>  }<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>   * Completes the work done by splitLogFile by archiving logs<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   * &lt;p&gt;<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   * It is invoked by SplitLogManager once it knows that one of the<a name="line.423"></a>
+<span class="sourceLineNo">424</span>   * SplitLogWorkers have completed the splitLogFile() part. If the master<a name="line.424"></a>
+<span class="sourceLineNo">425</span>   * crashes then this function might get called multiple times.<a name="line.425"></a>
+<span class="sourceLineNo">426</span>   * &lt;p&gt;<a name="line.426"></a>
+<span class="sourceLineNo">427</span>   * @param logfile<a name="line.427"></a>
+<span class="sourceLineNo">428</span>   * @param conf<a name="line.428"></a>
+<span class="sourceLineNo">429</span>   * @throws IOException<a name="line.429"></a>
+<span class="sourceLineNo">430</span>   */<a name="line.430"></a>
+<span class="sourceLineNo">431</span>  public static void finishSplitLogFile(String logfile,<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      Configuration conf)  throws IOException {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    Path rootdir = FSUtils.getRootDir(conf);<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    Path oldLogDir = new Path(rootdir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.434"></a>
+<span class="sourceLineNo">435</span>    Path logPath;<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    if (FSUtils.isStartingWithPath(rootdir, logfile)) {<a name="line.436"></a>
+<span class="sourceLineNo">437</span>      logPath = new Path(logfile);<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    } else {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>      logPath = new Path(rootdir, logfile);<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    }<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    finishSplitLogFile(rootdir, oldLogDir, logPath, conf);<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>  private static void finishSplitLogFile(Path rootdir, Path oldLogDir,<a name="line.444"></a>
+<span class="sourceLineNo">445</span>      Path logPath, Configuration conf) throws IOException {<a name="line.445"></a>
+<span class="sourceLineNo">446</span>    List&lt;Path&gt; processedLogs = new ArrayList&lt;Path&gt;();<a name="line.446"></a>
+<span class="sourceLineNo">447</span>    List&lt;Path&gt; corruptedLogs = new ArrayList&lt;Path&gt;();<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    FileSystem fs;<a name="line.448"></a>
+<span class="sourceLineNo">449</span>    fs = rootdir.getFileSystem(conf);<a name="line.449"></a>
+<span class="sourceLineNo">450</span>    if (ZKSplitLog.isCorrupted(rootdir, logPath.getName(), fs)) {<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      corruptedLogs.add(logPath);<a name="line.451"></a>
+<span class="sourceLineNo">452</span>    } else {<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      processedLogs.add(logPath);<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    }<a name="line.454"></a>
+<span class="sourceLineNo">455</span>    archiveLogs(corruptedLogs, processedLogs, oldLogDir, fs, conf);<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    Path stagingDir = ZKSplitLog.getSplitLogDir(rootdir, logPath.getName());<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    fs.delete(stagingDir, true);<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>  /**<a name="line.460"></a>
+<span class="sourceLineNo">461</span>   * Moves processed logs to a oldLogDir after successful processing Moves<a name="line.461"></a>
+<span class="sourceLineNo">462</span>   * corrupted logs (any log that couldn't be successfully parsed to corruptDir<a name="line.462"></a>
+<span class="sourceLineNo">463</span>   * (.corrupt) for later investigation<a name="line.463"></a>
+<span class="sourceLineNo">464</span>   *<a name="line.464"></a>
+<span class="sourceLineNo">465</span>   * @param corruptedLogs<a name="line.465"></a>
+<span class="sourceLineNo">466</span>   * @param processedLogs<a name="line.466"></a>
+<span class="sourceLineNo">467</span>   * @param oldLogDir<a name="line.467"></a>
+<span class="sourceLineNo">468</span>   * @param fs<a name="line.468"></a>
+<span class="sourceLineNo">469</span>   * @param conf<a name="line.469"></a>
+<span class="sourceLineNo">470</span>   * @throws IOException<a name="line.470"></a>
+<span class="sourceLineNo">471</span>   */<a name="line.471"></a>
+<span class="sourceLineNo">472</span>  private static void archiveLogs(<a name="line.472"></a>
+<span class="sourceLineNo">473</span>      final List&lt;Path&gt; corruptedLogs,<a name="line.473"></a>
+<span class="sourceLineNo">474</span>      final List&lt;Path&gt; processedLogs, final Path oldLogDir,<a name="line.474"></a>
+<span class="sourceLineNo">475</span>      final FileSystem fs, final Configuration conf) throws IOException {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    final Path corruptDir = new Path(FSUtils.getRootDir(conf), conf.get(<a name="line.476"></a>
+<span class="sourceLineNo">477</span>        "hbase.regionserver.hlog.splitlog.corrupt.dir",  HConstants.CORRUPT_DIR_NAME));<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>    if (!fs.mkdirs(corruptDir)) {<a name="line.479"></a>
+<span class="sourceLineNo">480</span>      LOG.info("Unable to mkdir " + corruptDir);<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    }<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    fs.mkdirs(oldLogDir);<a name="line.482"></a>
+<span class="sourceLineNo">483</span><a name="line.483"></a>
+<span class="sourceLineNo">484</span>    // this method can get restarted or called multiple times for archiving<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    // the same log files.<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    for (Path corrupted : corruptedLogs) {<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      Path p = new Path(corruptDir, corrupted.getName());<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      if (fs.exists(corrupted)) {<a name="line.488"></a>
+<span class="sourceLineNo">489</span>        if (!fs.rename(corrupted, p)) {<a name="line.489"></a>
+<span class="sourceLineNo">490</span>          LOG.warn("Unable to move corrupted log " + corrupted + " to " + p);<a name="line.490"></a>
+<span class="sourceLineNo">491</span>        } else {<a name="line.491"></a>
+<span class="sourceLineNo">492</span>          LOG.warn("Moved corrupted log " + corrupted + " to " + p);<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>    }<a name="line.495"></a>
+<span class="sourceLineNo">496</span><a name="line.496"></a>
+<span class="sourceLineNo">497</span>    for (Path p : processedLogs) {<a name="line.497"></a>
+<span class="sourceLineNo">498</span>      Path newPath = FSHLog.getWALArchivePath(oldLogDir, p);<a name="line.498"></a>
+<span class="sourceLineNo">499</span>      if (fs.exists(p)) {<a name="line.499"></a>
+<span class="sourceLineNo">500</span>        if (!FSUtils.renameAndSetModifyTime(fs, p, newPath)) {<a name="line.500"></a>
+<span class="sourceLineNo">501</span>          LOG.warn("Unable to move  " + p + " to " + newPath);<a name="line.501"></a>
+<span class="sourceLineNo">502</span>        } else {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>          LOG.info("Archived processed log " + p + " to " + newPath);<a name="line.503"></a>
+<span class="sourceLineNo">504</span>        }<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      }<a name="line.505"></a>
+<span class="sourceLineNo">506</span>    }<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>  /**<a name="line.509"></a>
+<span class="sourceLineNo">510</span>   * Path to a file under RECOVERED_EDITS_DIR directory of the region found in<a name="line.510"></a>
+<span class="sourceLineNo">511</span>   * &lt;code&gt;logEntry&lt;/code&gt; named for the sequenceid in the passed<a name="line.511"></a>
+<span class="sourceLineNo">512</span>   * &lt;code&gt;logEntry&lt;/code&gt;: e.g. /hbase/some_table/2323432434/recovered.edits/2332.<a name="line.512"></a>
+<span class="sourceLineNo">513</span>   * This method also ensures existence of RECOVERED_EDITS_DIR under the region<a name="line.513"></a>
+<span class="sourceLineNo">514</span>   * creating it if necessary.<a name="line.514"></a>
+<span class="sourceLineNo">515</span>   * @param fs<a name="line.515"></a>
+<span class="sourceLineNo">516</span>   * @param logEntry<a name="line.516"></a>
+<span class="sourceLineNo">517</span>   * @param rootDir HBase root dir.<a name="line.517"></a>
+<span class="sourceLineNo">518</span>   * @param fileBeingSplit the file being split currently. Used to generate tmp file name.<a name="line.518"></a>
+<span class="sourceLineNo">519</span>   * @return Path to file into which to dump split log edits.<a name="line.519"></a>
+<span class="sourceLineNo">520</span>   * @throws IOException<a name="line.520"></a>
+<span class="sourceLineNo">521</span>   */<a name="line.521"></a>
+<span class="sourceLineNo">522</span>  @SuppressWarnings("deprecation")<a name="line.522"></a>
+<span class="sourceLineNo">523</span>  private static Path getRegionSplitEditsPath(final FileSystem fs,<a name="line.523"></a>
+<span class="sourceLineNo">524</span>      final Entry logEntry, final Path rootDir, FileStatus fileBeingSplit)<a name="line.524"></a>
+<span class="sourceLineNo">525</span>  throws IOException {<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    Path tableDir = FSUtils.getTableDir(rootDir, logEntry.getKey().getTablename());<a name="line.526"></a>
+<span class="sourceLineNo">527</span>    String encodedRegionName = Bytes.toString(logEntry.getKey().getEncodedRegionName());<a name="line.527"></a>
+<span class="sourceLineNo">528</span>    Path regiondir = HRegion.getRegionDir(tableDir, encodedRegionName);<a name="line.528"></a>
+<span class="sourceLineNo">529</span>    Path dir = getRegionDirRecoveredEditsDir(regiondir);<a name="line.529"></a>
+<span class="sourceLineNo">530</span><a name="line.530"></a>
+<span class="sourceLineNo">531</span>    if (!fs.exists(regiondir)) {<a name="line.531"></a>
+<span class="sourceLineNo">532</span>      LOG.info("This region's directory doesn't exist: "<a name="line.532"></a>
+<span class="sourceLineNo">533</span>          + regiondir.toString() + ". It is very likely that it was" +<a name="line.533"></a>
+<span class="sourceLineNo">534</span>          " already split so it's safe to discard those edits.");<a name="line.534"></a>
+<span class="sourceLineNo">535</span>      return null;<a name="line.535"></a>
+<span class="sourceLineNo">536</span>    }<a name="line.536"></a>
+<span class="sourceLineNo">537</span>    if (fs.exists(dir) &amp;&amp; fs.isFile(dir)) {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      Path tmp = new Path("/tmp");<a name="line.538"></a>
+<span class="sourceLineNo">539</span>      if (!fs.exists(tmp)) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span>        fs.mkdirs(tmp);<a name="line.540"></a>
+<span class="sourceLineNo">541</span>      }<a name="line.541"></a>
+<span class="sourceLineNo">542</span>      tmp = new Path(tmp,<a name="line.542"></a>
+<span class="sourceLineNo">543</span>        HConstants.RECOVERED_EDITS_DIR + "_" + encodedRegionName);<a name="line.543"></a>
+<span class="sourceLineNo">544</span>      LOG.warn("Found existing old file: " + dir + ". It could be some "<a name="line.544"></a>
+<span class="sourceLineNo">545</span>        + "leftover of an old installation. It should be a folder instead. "<a name="line.545"></a>
+<span class="sourceLineNo">546</span>        + "So moving it to " + tmp);<a name="line.546"></a>
+<span class="sourceLineNo">547</span>      if (!fs.rename(dir, tmp)) {<a name="line.547"></a>
+<span class="sourceLineNo">548</span>        LOG.warn("Failed to sideline old file " + dir);<a name="line.548"></a>
+<span class="sourceLineNo">549</span>      }<a name="line.549"></a>
+<span class="sourceLineNo">550</span>    }<a name="line.550"></a>
+<span class="sourceLineNo">551</span><a name="line.551"></a>
+<span class="sourceLineNo">552</span>    if (!fs.exists(dir) &amp;&amp; !fs.mkdirs(dir)) {<a name="line.552"></a>
+<span class="sourceLineNo">553</span>      LOG

<TRUNCATED>

[51/51] [partial] hbase-site git commit: Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.

Posted by mi...@apache.org.
Published site at d2ba87509b8d193f58183beff4ab76c7edf47e11.


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

Branch: refs/heads/asf-site
Commit: f32f549ad3289754862f2f304edcdf1f923f9c5e
Parents: 3268e8d
Author: jenkins <bu...@apache.org>
Authored: Thu Feb 18 15:24:32 2016 +0000
Committer: Misty Stanley-Jones <ms...@cloudera.com>
Committed: Thu Feb 18 09:04:01 2016 -0800

----------------------------------------------------------------------
 acid-semantics.html                             |     4 +-
 apache_hbase_reference_guide.pdf                |     4 +-
 apache_hbase_reference_guide.pdfmarks           |     4 +-
 apidocs/index-all.html                          |    14 +
 .../org/apache/hadoop/hbase/ProcedureInfo.html  |    57 +-
 .../org/apache/hadoop/hbase/client/Append.html  |    30 +-
 .../apache/hadoop/hbase/client/Increment.html   |    54 +-
 .../apache/hadoop/hbase/client/Mutation.html    |    56 +-
 .../hadoop/hbase/client/class-use/Mutation.html |     4 +
 .../apache/hadoop/hbase/util/OrderedBytes.html  |    66 +-
 .../util/class-use/PositionedByteRange.html     |    16 +-
 .../org/apache/hadoop/hbase/ProcedureInfo.html  |   409 +-
 .../org/apache/hadoop/hbase/client/Append.html  |   257 +-
 .../apache/hadoop/hbase/client/Increment.html   |   575 +-
 .../apache/hadoop/hbase/client/Mutation.html    |   859 +-
 .../apache/hadoop/hbase/util/OrderedBytes.html  |   485 +-
 book.html                                       |     2 +-
 bulk-loads.html                                 |     4 +-
 checkstyle-aggregate.html                       | 11020 ++++++++---------
 checkstyle.rss                                  |     6 +-
 coc.html                                        |     4 +-
 cygwin.html                                     |     4 +-
 dependencies.html                               |     4 +-
 dependency-convergence.html                     |     4 +-
 dependency-info.html                            |     4 +-
 dependency-management.html                      |     4 +-
 devapidocs/constant-values.html                 |    45 +-
 devapidocs/index-all.html                       |    30 +-
 .../org/apache/hadoop/hbase/ProcedureInfo.html  |    71 +-
 .../class-use/InterfaceAudience.Private.html    |    20 +
 .../class-use/InterfaceStability.Unstable.html  |    12 +-
 .../hbase/classification/package-tree.html      |     4 +-
 .../org/apache/hadoop/hbase/client/Append.html  |    77 +-
 .../org/apache/hadoop/hbase/client/Delete.html  |     2 +-
 .../apache/hadoop/hbase/client/Increment.html   |    78 +-
 .../apache/hadoop/hbase/client/Mutation.html    |   129 +-
 .../org/apache/hadoop/hbase/client/Put.html     |     2 +-
 .../hadoop/hbase/client/class-use/Mutation.html |     4 +
 .../hadoop/hbase/client/package-tree.html       |     4 +-
 .../hadoop/hbase/filter/package-tree.html       |     6 +-
 .../hadoop/hbase/io/hfile/package-tree.html     |     6 +-
 .../hadoop/hbase/mapreduce/package-tree.html    |     2 +-
 .../hadoop/hbase/master/package-tree.html       |     2 +-
 .../hbase/master/procedure/package-tree.html    |     2 +-
 .../org/apache/hadoop/hbase/package-tree.html   |    10 +-
 .../hadoop/hbase/procedure2/package-tree.html   |     2 +-
 .../hadoop/hbase/quotas/package-tree.html       |     2 +-
 .../hadoop/hbase/regionserver/HRegion.html      |    98 +-
 .../hadoop/hbase/regionserver/package-tree.html |    26 +-
 .../hbase/security/access/package-tree.html     |     2 +-
 .../hadoop/hbase/security/package-tree.html     |     2 +-
 .../hadoop/hbase/thrift/package-tree.html       |     2 +-
 .../tmpl/master/MasterStatusTmpl.ImplData.html  |   240 +-
 .../hbase/tmpl/master/MasterStatusTmpl.html     |    96 +-
 .../hbase/tmpl/master/MasterStatusTmplImpl.html |    48 +-
 .../regionserver/RSStatusTmpl.ImplData.html     |    90 +-
 .../hbase/tmpl/regionserver/RSStatusTmpl.html   |    36 +-
 .../tmpl/regionserver/RSStatusTmplImpl.html     |    18 +-
 .../apache/hadoop/hbase/util/OrderedBytes.html  |    66 +-
 .../util/class-use/PositionedByteRange.html     |    16 +-
 .../apache/hadoop/hbase/util/package-tree.html  |     4 +-
 .../WALSplitter.CorruptedLogFileException.html  |     6 +-
 .../hbase/wal/WALSplitter.EntryBuffers.html     |    24 +-
 ...WALSplitter.LogRecoveredEditsOutputSink.html |    48 +-
 .../wal/WALSplitter.LogReplayOutputSink.html    |    60 +-
 .../hbase/wal/WALSplitter.MutationReplay.html   |    12 +-
 .../hbase/wal/WALSplitter.OutputSink.html       |    52 +-
 .../wal/WALSplitter.PipelineController.html     |    12 +-
 .../wal/WALSplitter.RegionEntryBuffer.html      |    24 +-
 .../wal/WALSplitter.RegionServerWriter.html     |     8 +-
 .../hbase/wal/WALSplitter.SinkWriter.html       |    16 +-
 .../hbase/wal/WALSplitter.WriterAndPath.html    |    35 +-
 .../hbase/wal/WALSplitter.WriterThread.html     |    20 +-
 .../apache/hadoop/hbase/wal/WALSplitter.html    |   129 +-
 .../hadoop/hbase/wal/class-use/WAL.Entry.html   |     6 +-
 .../hbase/wal/class-use/WALProvider.Writer.html |     5 +-
 .../class-use/WALSplitter.WriterAndPath.html    |    14 +
 .../apache/hadoop/hbase/wal/package-tree.html   |     2 +-
 .../org/apache/hadoop/hbase/ProcedureInfo.html  |   409 +-
 .../org/apache/hadoop/hbase/client/Append.html  |   257 +-
 .../apache/hadoop/hbase/client/Increment.html   |   575 +-
 .../apache/hadoop/hbase/client/Mutation.html    |   859 +-
 .../regionserver/HRegion.BatchOperation.html    |  1740 +--
 .../regionserver/HRegion.FlushResultImpl.html   |  1740 +--
 .../regionserver/HRegion.MutationBatch.html     |  1740 +--
 .../HRegion.PrepareFlushResult.html             |  1740 +--
 .../regionserver/HRegion.RegionScannerImpl.html |  1740 +--
 .../hbase/regionserver/HRegion.ReplayBatch.html |  1740 +--
 .../regionserver/HRegion.RowLockContext.html    |  1740 +--
 .../hbase/regionserver/HRegion.RowLockImpl.html |  1740 +--
 .../hbase/regionserver/HRegion.WriteState.html  |  1740 +--
 .../hadoop/hbase/regionserver/HRegion.html      |  1740 +--
 .../tmpl/master/MasterStatusTmpl.ImplData.html  |   240 +-
 .../tmpl/master/MasterStatusTmpl.Intf.html      |   240 +-
 .../hbase/tmpl/master/MasterStatusTmpl.html     |   240 +-
 .../hbase/tmpl/master/MasterStatusTmplImpl.html |    64 +-
 .../regionserver/RSStatusTmpl.ImplData.html     |    90 +-
 .../tmpl/regionserver/RSStatusTmpl.Intf.html    |    90 +-
 .../hbase/tmpl/regionserver/RSStatusTmpl.html   |    90 +-
 .../tmpl/regionserver/RSStatusTmplImpl.html     |    24 +-
 .../apache/hadoop/hbase/util/OrderedBytes.html  |   485 +-
 .../WALSplitter.CorruptedLogFileException.html  |  4248 +++----
 .../hbase/wal/WALSplitter.EntryBuffers.html     |  4248 +++----
 ...WALSplitter.LogRecoveredEditsOutputSink.html |  4248 +++----
 .../wal/WALSplitter.LogReplayOutputSink.html    |  4248 +++----
 .../hbase/wal/WALSplitter.MutationReplay.html   |  4248 +++----
 .../hbase/wal/WALSplitter.OutputSink.html       |  4248 +++----
 .../wal/WALSplitter.PipelineController.html     |  4248 +++----
 .../wal/WALSplitter.RegionEntryBuffer.html      |  4248 +++----
 .../wal/WALSplitter.RegionServerWriter.html     |  4248 +++----
 .../hbase/wal/WALSplitter.SinkWriter.html       |  4248 +++----
 .../hbase/wal/WALSplitter.WriterAndPath.html    |  4248 +++----
 .../hbase/wal/WALSplitter.WriterThread.html     |  4248 +++----
 .../apache/hadoop/hbase/wal/WALSplitter.html    |  4248 +++----
 distribution-management.html                    |     4 +-
 export_control.html                             |     4 +-
 hbase-annotations/checkstyle.html               |     6 +-
 hbase-annotations/dependencies.html             |     6 +-
 hbase-annotations/dependency-convergence.html   |     6 +-
 hbase-annotations/dependency-info.html          |     6 +-
 hbase-annotations/dependency-management.html    |     6 +-
 hbase-annotations/distribution-management.html  |     6 +-
 hbase-annotations/index.html                    |     6 +-
 hbase-annotations/integration.html              |     6 +-
 hbase-annotations/issue-tracking.html           |     6 +-
 hbase-annotations/license.html                  |     6 +-
 hbase-annotations/mail-lists.html               |     6 +-
 hbase-annotations/plugin-management.html        |     6 +-
 hbase-annotations/plugins.html                  |     6 +-
 hbase-annotations/project-info.html             |     6 +-
 hbase-annotations/project-reports.html          |     6 +-
 hbase-annotations/project-summary.html          |     6 +-
 hbase-annotations/source-repository.html        |     6 +-
 hbase-annotations/team-list.html                |     6 +-
 hbase-spark/checkstyle.html                     |     6 +-
 hbase-spark/dependencies.html                   |     6 +-
 hbase-spark/dependency-convergence.html         |     6 +-
 hbase-spark/dependency-info.html                |     6 +-
 hbase-spark/dependency-management.html          |     6 +-
 hbase-spark/distribution-management.html        |     6 +-
 hbase-spark/index.html                          |     6 +-
 hbase-spark/integration.html                    |     6 +-
 hbase-spark/issue-tracking.html                 |     6 +-
 hbase-spark/license.html                        |     6 +-
 hbase-spark/mail-lists.html                     |     6 +-
 hbase-spark/plugin-management.html              |     6 +-
 hbase-spark/plugins.html                        |     6 +-
 hbase-spark/project-info.html                   |     6 +-
 hbase-spark/project-reports.html                |     6 +-
 hbase-spark/project-summary.html                |     6 +-
 hbase-spark/source-repository.html              |     6 +-
 hbase-spark/team-list.html                      |     6 +-
 index.html                                      |     6 +-
 integration.html                                |     4 +-
 issue-tracking.html                             |     4 +-
 license.html                                    |     4 +-
 mail-lists.html                                 |     4 +-
 metrics.html                                    |     4 +-
 modules.html                                    |     4 +-
 old_news.html                                   |     4 +-
 plugin-management.html                          |     4 +-
 plugins.html                                    |     4 +-
 poweredbyhbase.html                             |     4 +-
 project-info.html                               |     4 +-
 project-reports.html                            |     4 +-
 project-summary.html                            |     4 +-
 pseudo-distributed.html                         |     4 +-
 replication.html                                |     4 +-
 resources.html                                  |     4 +-
 source-repository.html                          |     4 +-
 sponsors.html                                   |     4 +-
 supportingprojects.html                         |     4 +-
 team-list.html                                  |     4 +-
 testdevapidocs/index-all.html                   |    20 +
 .../hadoop/hbase/io/hfile/package-tree.html     |     4 +-
 .../org/apache/hadoop/hbase/package-tree.html   |     8 +-
 .../hadoop/hbase/procedure2/package-tree.html   |     2 +-
 .../hadoop/hbase/regionserver/package-tree.html |     2 +-
 .../regionserver/wal/TestSecureWALReplay.html   |     2 +-
 .../wal/TestWALReplay.CustomStoreFlusher.html   |     8 +-
 .../regionserver/wal/TestWALReplay.MockWAL.html |     8 +-
 .../wal/TestWALReplay.TestFlusher.html          |    16 +-
 .../hbase/regionserver/wal/TestWALReplay.html   |   237 +-
 .../wal/TestWALReplayCompressed.html            |     2 +-
 .../apache/hadoop/hbase/test/package-tree.html  |     2 +-
 .../hadoop/hbase/util/TestOrderedBytes.html     |    46 +-
 .../apache/hadoop/hbase/wal/package-tree.html   |     2 +-
 .../wal/TestWALReplay.CustomStoreFlusher.html   |  2363 ++--
 .../regionserver/wal/TestWALReplay.MockWAL.html |  2363 ++--
 .../wal/TestWALReplay.TestFlusher.html          |  2363 ++--
 .../hbase/regionserver/wal/TestWALReplay.html   |  2363 ++--
 .../hadoop/hbase/util/TestOrderedBytes.html     |    60 +-
 .../hbase/regionserver/wal/TestWALReplay.html   |  2363 ++--
 .../hadoop/hbase/util/TestOrderedBytes.html     |    60 +-
 xref/org/apache/hadoop/hbase/ProcedureInfo.html |   409 +-
 xref/org/apache/hadoop/hbase/client/Append.html |   257 +-
 .../apache/hadoop/hbase/client/Increment.html   |   575 +-
 .../apache/hadoop/hbase/client/Mutation.html    |   859 +-
 .../hadoop/hbase/regionserver/HRegion.html      |  1740 +--
 .../hbase/tmpl/common/TaskMonitorTmpl.html      |    60 +-
 .../hbase/tmpl/common/TaskMonitorTmplImpl.html  |    16 +-
 .../hbase/tmpl/master/MasterStatusTmpl.html     |   240 +-
 .../hbase/tmpl/master/MasterStatusTmplImpl.html |    64 +-
 .../hbase/tmpl/regionserver/RSStatusTmpl.html   |    90 +-
 .../tmpl/regionserver/RSStatusTmplImpl.html     |    24 +-
 .../apache/hadoop/hbase/util/OrderedBytes.html  |   485 +-
 .../apache/hadoop/hbase/wal/WALSplitter.html    |  4248 +++----
 207 files changed, 57579 insertions(+), 56056 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/acid-semantics.html
----------------------------------------------------------------------
diff --git a/acid-semantics.html b/acid-semantics.html
index 18fb3bd..a6111f7 100644
--- a/acid-semantics.html
+++ b/acid-semantics.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20160217" />
+    <meta name="Date-Revision-yyyymmdd" content="20160218" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Apache HBase (TM) ACID Properties
@@ -600,7 +600,7 @@ under the License. -->
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-17</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-18</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/apache_hbase_reference_guide.pdf
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index 57c8557..7888ab2 100644
--- a/apache_hbase_reference_guide.pdf
+++ b/apache_hbase_reference_guide.pdf
@@ -5,8 +5,8 @@
 /Author (Apache HBase Team)
 /Creator (Asciidoctor PDF 1.5.0.alpha.6, based on Prawn 1.2.1)
 /Producer (Apache HBase Team)
-/CreationDate (D:20160217150151+00'00')
-/ModDate (D:20160217150151+00'00')
+/CreationDate (D:20160218151905+00'00')
+/ModDate (D:20160218151905+00'00')
 >>
 endobj
 2 0 obj

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/apache_hbase_reference_guide.pdfmarks
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdfmarks b/apache_hbase_reference_guide.pdfmarks
index 432ac0c..a9a449f 100644
--- a/apache_hbase_reference_guide.pdfmarks
+++ b/apache_hbase_reference_guide.pdfmarks
@@ -2,8 +2,8 @@
   /Author (Apache HBase Team)
   /Subject ()
   /Keywords ()
-  /ModDate (D:20160217150340)
-  /CreationDate (D:20160217150340)
+  /ModDate (D:20160218152058)
+  /CreationDate (D:20160218152058)
   /Creator (Asciidoctor PDF 1.5.0.alpha.6, based on Prawn 1.2.1)
   /Producer ()
   /DOCINFO pdfmark

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/apidocs/index-all.html
----------------------------------------------------------------------
diff --git a/apidocs/index-all.html b/apidocs/index-all.html
index d42c9b7..d7fdfde 100644
--- a/apidocs/index-all.html
+++ b/apidocs/index-all.html
@@ -7639,6 +7639,11 @@
 <div class="block">Return true when the next encoded value in <code>src</code> uses fixed-width
  Float64 encoding, false otherwise.</div>
 </dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/OrderedBytes.html#isFixedInt16(org.apache.hadoop.hbase.util.PositionedByteRange)">isFixedInt16(PositionedByteRange)</a></span> - Static method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/OrderedBytes.html" title="class in org.apache.hadoop.hbase.util">OrderedBytes</a></dt>
+<dd>
+<div class="block">Return true when the next encoded value in <code>src</code> uses fixed-width
+ Int16 encoding, false otherwise.</div>
+</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/OrderedBytes.html#isFixedInt32(org.apache.hadoop.hbase.util.PositionedByteRange)">isFixedInt32(PositionedByteRange)</a></span> - Static method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/OrderedBytes.html" title="class in org.apache.hadoop.hbase.util">OrderedBytes</a></dt>
 <dd>
 <div class="block">Return true when the next encoded value in <code>src</code> uses fixed-width
@@ -7649,6 +7654,11 @@
 <div class="block">Return true when the next encoded value in <code>src</code> uses fixed-width
  Int64 encoding, false otherwise.</div>
 </dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/OrderedBytes.html#isFixedInt8(org.apache.hadoop.hbase.util.PositionedByteRange)">isFixedInt8(PositionedByteRange)</a></span> - Static method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/OrderedBytes.html" title="class in org.apache.hadoop.hbase.util">OrderedBytes</a></dt>
+<dd>
+<div class="block">Return true when the next encoded value in <code>src</code> uses fixed-width
+ Int8 encoding, false otherwise.</div>
+</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/ServerName.html#isFullServerName(java.lang.String)">isFullServerName(String)</a></span> - Static method in class org.apache.hadoop.hbase.<a href="./org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/Scan.html#isGetScan()">isGetScan()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></dt>
@@ -7874,6 +7884,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/Increment.html#isReturnResults()">isReturnResults()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/Mutation.html#isReturnResults()">isReturnResults()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/Scan.html#isReversed()">isReversed()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></dt>
 <dd>
 <div class="block">Get whether this scan is a reversed one.</div>
@@ -12161,6 +12173,8 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/Increment.html#setReturnResults(boolean)">setReturnResults(boolean)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/Mutation.html#setReturnResults(boolean)">setReturnResults(boolean)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/Scan.html#setReversed(boolean)">setReversed(boolean)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></dt>
 <dd>
 <div class="block">Set whether this scan is a reversed one</div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/apidocs/org/apache/hadoop/hbase/ProcedureInfo.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/ProcedureInfo.html b/apidocs/org/apache/hadoop/hbase/ProcedureInfo.html
index 3bfb466..a178ef4 100644
--- a/apidocs/org/apache/hadoop/hbase/ProcedureInfo.html
+++ b/apidocs/org/apache/hadoop/hbase/ProcedureInfo.html
@@ -249,16 +249,17 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Cloneable
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ProcedureInfo</h4>
-<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.52">ProcedureInfo</a>(long&nbsp;procId,
-             <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;procName,
-             <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;procOwner,
-             org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureState&nbsp;procState,
-             long&nbsp;parentId,
-             org.apache.hadoop.hbase.util.NonceKey&nbsp;nonceKey,
-             org.apache.hadoop.hbase.protobuf.generated.ErrorHandlingProtos.ForeignExceptionMessage&nbsp;exception,
-             long&nbsp;lastUpdate,
-             long&nbsp;startTime,
-             byte[]&nbsp;result)</pre>
+<pre>@InterfaceAudience.Private
+public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.53">ProcedureInfo</a>(long&nbsp;procId,
+                                       <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;procName,
+                                       <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;procOwner,
+                                       org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureState&nbsp;procState,
+                                       long&nbsp;parentId,
+                                       org.apache.hadoop.hbase.util.NonceKey&nbsp;nonceKey,
+                                       org.apache.hadoop.hbase.protobuf.generated.ErrorHandlingProtos.ForeignExceptionMessage&nbsp;exception,
+                                       long&nbsp;lastUpdate,
+                                       long&nbsp;startTime,
+                                       byte[]&nbsp;result)</pre>
 </li>
 </ul>
 </li>
@@ -275,7 +276,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Cloneable
 <ul class="blockList">
 <li class="blockList">
 <h4>clone</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/ProcedureInfo.html" title="class in org.apache.hadoop.hbase">ProcedureInfo</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.79">clone</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/ProcedureInfo.html" title="class in org.apache.hadoop.hbase">ProcedureInfo</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.80">clone</a>()</pre>
 <dl>
 <dt><strong>Overrides:</strong></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</a></code>&nbsp;in class&nbsp;<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
@@ -288,7 +289,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Cloneable
 <ul class="blockList">
 <li class="blockList">
 <h4>getProcId</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.84">getProcId</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.85">getProcId</a>()</pre>
 </li>
 </ul>
 <a name="getProcName()">
@@ -297,7 +298,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Cloneable
 <ul class="blockList">
 <li class="blockList">
 <h4>getProcName</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/ProcedureInfo.html#line.88">getProcName</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/ProcedureInfo.html#line.89">getProcName</a>()</pre>
 </li>
 </ul>
 <a name="getProcOwner()">
@@ -306,7 +307,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Cloneable
 <ul class="blockList">
 <li class="blockList">
 <h4>getProcOwner</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/ProcedureInfo.html#line.92">getProcOwner</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/ProcedureInfo.html#line.93">getProcOwner</a>()</pre>
 </li>
 </ul>
 <a name="getProcState()">
@@ -315,7 +316,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Cloneable
 <ul class="blockList">
 <li class="blockList">
 <h4>getProcState</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureState&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.96">getProcState</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureState&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.97">getProcState</a>()</pre>
 </li>
 </ul>
 <a name="hasParentId()">
@@ -324,7 +325,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Cloneable
 <ul class="blockList">
 <li class="blockList">
 <h4>hasParentId</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.100">hasParentId</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.101">hasParentId</a>()</pre>
 </li>
 </ul>
 <a name="getParentId()">
@@ -333,7 +334,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Cloneable
 <ul class="blockList">
 <li class="blockList">
 <h4>getParentId</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.104">getParentId</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.105">getParentId</a>()</pre>
 </li>
 </ul>
 <a name="getNonceKey()">
@@ -342,7 +343,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Cloneable
 <ul class="blockList">
 <li class="blockList">
 <h4>getNonceKey</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.util.NonceKey&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.108">getNonceKey</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.util.NonceKey&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.109">getNonceKey</a>()</pre>
 </li>
 </ul>
 <a name="isFailed()">
@@ -351,7 +352,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Cloneable
 <ul class="blockList">
 <li class="blockList">
 <h4>isFailed</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.112">isFailed</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.113">isFailed</a>()</pre>
 </li>
 </ul>
 <a name="getException()">
@@ -360,7 +361,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Cloneable
 <ul class="blockList">
 <li class="blockList">
 <h4>getException</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.116">getException</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.117">getException</a>()</pre>
 </li>
 </ul>
 <a name="getExceptionCause()">
@@ -369,7 +370,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Cloneable
 <ul class="blockList">
 <li class="blockList">
 <h4>getExceptionCause</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/ProcedureInfo.html#line.128">getExceptionCause</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/ProcedureInfo.html#line.129">getExceptionCause</a>()</pre>
 </li>
 </ul>
 <a name="getExceptionMessage()">
@@ -378,7 +379,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Cloneable
 <ul class="blockList">
 <li class="blockList">
 <h4>getExceptionMessage</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/ProcedureInfo.html#line.133">getExceptionMessage</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/ProcedureInfo.html#line.134">getExceptionMessage</a>()</pre>
 </li>
 </ul>
 <a name="getExceptionFullMessage()">
@@ -387,7 +388,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Cloneable
 <ul class="blockList">
 <li class="blockList">
 <h4>getExceptionFullMessage</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/ProcedureInfo.html#line.138">getExceptionFullMessage</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/ProcedureInfo.html#line.139">getExceptionFullMessage</a>()</pre>
 </li>
 </ul>
 <a name="hasResultData()">
@@ -396,7 +397,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Cloneable
 <ul class="blockList">
 <li class="blockList">
 <h4>hasResultData</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.143">hasResultData</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.144">hasResultData</a>()</pre>
 </li>
 </ul>
 <a name="getResult()">
@@ -405,7 +406,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Cloneable
 <ul class="blockList">
 <li class="blockList">
 <h4>getResult</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.147">getResult</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.148">getResult</a>()</pre>
 </li>
 </ul>
 <a name="getStartTime()">
@@ -414,7 +415,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Cloneable
 <ul class="blockList">
 <li class="blockList">
 <h4>getStartTime</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.151">getStartTime</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.152">getStartTime</a>()</pre>
 </li>
 </ul>
 <a name="getLastUpdate()">
@@ -423,7 +424,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Cloneable
 <ul class="blockList">
 <li class="blockList">
 <h4>getLastUpdate</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.155">getLastUpdate</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.156">getLastUpdate</a>()</pre>
 </li>
 </ul>
 <a name="executionTime()">
@@ -432,7 +433,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Cloneable
 <ul class="blockListLast">
 <li class="blockList">
 <h4>executionTime</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.159">executionTime</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureInfo.html#line.160">executionTime</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/apidocs/org/apache/hadoop/hbase/client/Append.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/client/Append.html b/apidocs/org/apache/hadoop/hbase/client/Append.html
index a17ff8d..1f4b8e4 100644
--- a/apidocs/org/apache/hadoop/hbase/client/Append.html
+++ b/apidocs/org/apache/hadoop/hbase/client/Append.html
@@ -322,7 +322,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>Append</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.76">Append</a>(byte[]&nbsp;row)</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.75">Append</a>(byte[]&nbsp;row)</pre>
 <div class="block">Create a Append operation for the specified row.
  <p>
  At least one column must be appended to.</div>
@@ -335,7 +335,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>Append</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.83">Append</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;a)</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.82">Append</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;a)</pre>
 <div class="block">Copy constructor</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>a</code> - </dd></dl>
 </li>
@@ -346,7 +346,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" ti
 <ul class="blockListLast">
 <li class="blockList">
 <h4>Append</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.99">Append</a>(byte[]&nbsp;rowArray,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.98">Append</a>(byte[]&nbsp;rowArray,
       int&nbsp;rowOffset,
       int&nbsp;rowLength)</pre>
 <div class="block">Create a Append operation for the specified row.
@@ -369,7 +369,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>setReturnResults</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.57">setReturnResults</a>(boolean&nbsp;returnResults)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.56">setReturnResults</a>(boolean&nbsp;returnResults)</pre>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>returnResults</code> - True (default) if the append operation should return the results.
           A client that is not interested in the result can save network
           bandwidth setting this to false.</dd></dl>
@@ -391,7 +391,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>add</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.111">add</a>(byte[]&nbsp;family,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.110">add</a>(byte[]&nbsp;family,
          byte[]&nbsp;qualifier,
          byte[]&nbsp;value)</pre>
 <div class="block">Add the specified column and value to this Append operation.</div>
@@ -405,7 +405,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>add</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.122">add</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.121">add</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)</pre>
 <div class="block">Add column and value to this Append operation.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>cell</code> - </dd>
 <dt><span class="strong">Returns:</span></dt><dd>This instance</dd></dl>
@@ -417,7 +417,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>setAttribute</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.136">setAttribute</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.135">setAttribute</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
                   byte[]&nbsp;value)</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Attributes.html#setAttribute(java.lang.String,%20byte[])">Attributes</a></code></strong></div>
 <div class="block">Sets an attribute.
@@ -437,7 +437,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>setId</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.141">setId</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;id)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.140">setId</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;id)</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/OperationWithAttributes.html#setId(java.lang.String)">OperationWithAttributes</a></code></strong></div>
 <div class="block">This method allows you to set an identifier on an operation. The original
  motivation for this was to allow the identifier to be used in slow query
@@ -456,7 +456,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>setDurability</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.146">setDurability</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;d)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.145">setDurability</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;d)</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#setDurability(org.apache.hadoop.hbase.client.Durability)">Mutation</a></code></strong></div>
 <div class="block">Set the durability for this mutation</div>
 <dl>
@@ -471,7 +471,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>setFamilyCellMap</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.151">setFamilyCellMap</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a>&lt;byte[],<a href="http://docs.oracle.com/javase/7/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;map)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.150">setFamilyCellMap</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a>&lt;byte[],<a href="http://docs.oracle.com/javase/7/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;map)</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#setFamilyCellMap(java.util.NavigableMap)">Mutation</a></code></strong></div>
 <div class="block">Method for setting the put's familyMap</div>
 <dl>
@@ -486,7 +486,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>setClusterIds</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.156">setClusterIds</a>(<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a>&gt;&nbsp;clusterIds)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.155">setClusterIds</a>(<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a>&gt;&nbsp;clusterIds)</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#setClusterIds(java.util.List)">Mutation</a></code></strong></div>
 <div class="block">Marks that the clusters with the given clusterIds have consumed the mutation</div>
 <dl>
@@ -501,7 +501,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>setCellVisibility</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.161">setCellVisibility</a>(org.apache.hadoop.hbase.security.visibility.CellVisibility&nbsp;expression)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.160">setCellVisibility</a>(org.apache.hadoop.hbase.security.visibility.CellVisibility&nbsp;expression)</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#setCellVisibility(org.apache.hadoop.hbase.security.visibility.CellVisibility)">Mutation</a></code></strong></div>
 <div class="block">Sets the visibility expression associated with cells in this Mutation.
  It is illegal to set <code>CellVisibility</code> on <code>Delete</code> mutation.</div>
@@ -517,7 +517,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>setACL</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.166">setACL</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.165">setACL</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
             org.apache.hadoop.hbase.security.access.Permission&nbsp;perms)</pre>
 <dl>
 <dt><strong>Overrides:</strong></dt>
@@ -531,7 +531,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>setACL</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.171">setACL</a>(<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hadoop.hbase.security.access.Permission&gt;&nbsp;perms)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.170">setACL</a>(<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hadoop.hbase.security.access.Permission&gt;&nbsp;perms)</pre>
 <dl>
 <dt><strong>Overrides:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#setACL(java.util.Map)">setACL</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a></code></dd>
@@ -544,7 +544,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" ti
 <ul class="blockListLast">
 <li class="blockList">
 <h4>setTTL</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.176">setTTL</a>(long&nbsp;ttl)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Append.html#line.175">setTTL</a>(long&nbsp;ttl)</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#setTTL(long)">Mutation</a></code></strong></div>
 <div class="block">Set the TTL desired for the result of the mutation, in milliseconds.</div>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f32f549a/apidocs/org/apache/hadoop/hbase/client/Increment.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/client/Increment.html b/apidocs/org/apache/hadoop/hbase/client/Increment.html
index af1d01a..433394b 100644
--- a/apidocs/org/apache/hadoop/hbase/client/Increment.html
+++ b/apidocs/org/apache/hadoop/hbase/client/Increment.html
@@ -380,7 +380,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>Increment</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.66">Increment</a>(byte[]&nbsp;row)</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.63">Increment</a>(byte[]&nbsp;row)</pre>
 <div class="block">Create a Increment operation for the specified row.
  <p>
  At least one column must be incremented.</div>
@@ -393,7 +393,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>Increment</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.76">Increment</a>(byte[]&nbsp;row,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.73">Increment</a>(byte[]&nbsp;row,
          int&nbsp;offset,
          int&nbsp;length)</pre>
 <div class="block">Create a Increment operation for the specified row.
@@ -408,7 +408,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockListLast">
 <li class="blockList">
 <h4>Increment</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.84">Increment</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;i)</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.81">Increment</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;i)</pre>
 <div class="block">Copy constructor</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>i</code> - </dd></dl>
 </li>
@@ -427,7 +427,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>add</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.100">add</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.97">add</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)
               throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Add the specified KeyValue to this operation.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>cell</code> - individual Cell</dd>
@@ -442,7 +442,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>addColumn</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.125">addColumn</a>(byte[]&nbsp;family,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.122">addColumn</a>(byte[]&nbsp;family,
                   byte[]&nbsp;qualifier,
                   long&nbsp;amount)</pre>
 <div class="block">Increment the column from the specific family with the specified qualifier
@@ -459,7 +459,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>getTimeRange</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/TimeRange.html" title="class in org.apache.hadoop.hbase.io">TimeRange</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.143">getTimeRange</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/TimeRange.html" title="class in org.apache.hadoop.hbase.io">TimeRange</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.140">getTimeRange</a>()</pre>
 <div class="block">Gets the TimeRange used for this increment.</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>TimeRange</dd></dl>
 </li>
@@ -470,7 +470,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>setTimeRange</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.161">setTimeRange</a>(long&nbsp;minStamp,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.158">setTimeRange</a>(long&nbsp;minStamp,
                      long&nbsp;maxStamp)
                        throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Sets the TimeRange to be used on the Get for this increment.
@@ -493,7 +493,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>setReturnResults</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.172">setReturnResults</a>(boolean&nbsp;returnResults)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.169">setReturnResults</a>(boolean&nbsp;returnResults)</pre>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>returnResults</code> - True (default) if the increment operation should return the results. A
           client that is not interested in the result can save network bandwidth setting this
           to false.</dd></dl>
@@ -505,8 +505,8 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>isReturnResults</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.180">isReturnResults</a>()</pre>
-<dl><dt><span class="strong">Returns:</span></dt><dd>current value for returnResults</dd></dl>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.178">isReturnResults</a>()</pre>
+<dl><dt><span class="strong">Returns:</span></dt><dd>current setting for returnResults</dd></dl>
 </li>
 </ul>
 <a name="numFamilies()">
@@ -515,7 +515,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>numFamilies</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.190">numFamilies</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.187">numFamilies</a>()</pre>
 <div class="block">Method for retrieving the number of families to increment from</div>
 <dl>
 <dt><strong>Overrides:</strong></dt>
@@ -529,7 +529,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>hasFamilies</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.198">hasFamilies</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.195">hasFamilies</a>()</pre>
 <div class="block">Method for checking if any families have been inserted into this Increment</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>true if familyMap is non empty false otherwise</dd></dl>
 </li>
@@ -540,7 +540,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>getFamilyMapOfLongs</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a>&lt;byte[],<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.210">getFamilyMapOfLongs</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a>&lt;byte[],<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.207">getFamilyMapOfLongs</a>()</pre>
 <div class="block">Before 0.95, when you called Increment#getFamilyMap(), you got back
  a map of families to a list of Longs.  Now, <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#getFamilyCellMap()"><code>Mutation.getFamilyCellMap()</code></a> returns
  families by list of Cells.  This method has been added so you can have the
@@ -555,7 +555,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>toString</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/client/Increment.html#line.229">toString</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/client/Increment.html#line.226">toString</a>()</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Operation.html#toString()">Operation</a></code></strong></div>
 <div class="block">Produces a string representation of this Operation. It defaults to a JSON
  representation, but falls back to a string representation of the
@@ -572,7 +572,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>compareTo</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.271">compareTo</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Row.html" title="interface in org.apache.hadoop.hbase.client">Row</a>&nbsp;i)</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.268">compareTo</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Row.html" title="interface in org.apache.hadoop.hbase.client">Row</a>&nbsp;i)</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html?is-external=true#compareTo(T)" title="class or interface in java.lang">compareTo</a></code>&nbsp;in interface&nbsp;<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Row.html" title="interface in org.apache.hadoop.hbase.client">Row</a>&gt;</code></dd>
@@ -587,7 +587,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>hashCode</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.277">hashCode</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.274">hashCode</a>()</pre>
 <dl>
 <dt><strong>Overrides:</strong></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a></code>&nbsp;in class&nbsp;<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
@@ -600,7 +600,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>equals</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.284">equals</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;obj)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.281">equals</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;obj)</pre>
 <dl>
 <dt><strong>Overrides:</strong></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a></code>&nbsp;in class&nbsp;<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
@@ -613,7 +613,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>extraHeapSize</h4>
-<pre>protected&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.297">extraHeapSize</a>()</pre>
+<pre>protected&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.294">extraHeapSize</a>()</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#extraHeapSize()">Mutation</a></code></strong></div>
 <div class="block">Subclasses should override this method to add the heap size of their own fields.</div>
 <dl>
@@ -628,7 +628,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>setAttribute</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.302">setAttribute</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.299">setAttribute</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
                      byte[]&nbsp;value)</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Attributes.html#setAttribute(java.lang.String,%20byte[])">Attributes</a></code></strong></div>
 <div class="block">Sets an attribute.
@@ -648,7 +648,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>setId</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.307">setId</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;id)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.304">setId</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;id)</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/OperationWithAttributes.html#setId(java.lang.String)">OperationWithAttributes</a></code></strong></div>
 <div class="block">This method allows you to set an identifier on an operation. The original
  motivation for this was to allow the identifier to be used in slow query
@@ -667,7 +667,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>setDurability</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.312">setDurability</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;d)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.309">setDurability</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;d)</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#setDurability(org.apache.hadoop.hbase.client.Durability)">Mutation</a></code></strong></div>
 <div class="block">Set the durability for this mutation</div>
 <dl>
@@ -682,7 +682,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>setFamilyCellMap</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.317">setFamilyCellMap</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a>&lt;byte[],<a href="http://docs.oracle.com/javase/7/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;map)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.314">setFamilyCellMap</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a>&lt;byte[],<a href="http://docs.oracle.com/javase/7/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;map)</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#setFamilyCellMap(java.util.NavigableMap)">Mutation</a></code></strong></div>
 <div class="block">Method for setting the put's familyMap</div>
 <dl>
@@ -697,7 +697,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>setClusterIds</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.322">setClusterIds</a>(<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a>&gt;&nbsp;clusterIds)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.319">setClusterIds</a>(<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a>&gt;&nbsp;clusterIds)</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#setClusterIds(java.util.List)">Mutation</a></code></strong></div>
 <div class="block">Marks that the clusters with the given clusterIds have consumed the mutation</div>
 <dl>
@@ -712,7 +712,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>setCellVisibility</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.327">setCellVisibility</a>(org.apache.hadoop.hbase.security.visibility.CellVisibility&nbsp;expression)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.324">setCellVisibility</a>(org.apache.hadoop.hbase.security.visibility.CellVisibility&nbsp;expression)</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#setCellVisibility(org.apache.hadoop.hbase.security.visibility.CellVisibility)">Mutation</a></code></strong></div>
 <div class="block">Sets the visibility expression associated with cells in this Mutation.
  It is illegal to set <code>CellVisibility</code> on <code>Delete</code> mutation.</div>
@@ -728,7 +728,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>setACL</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.332">setACL</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.329">setACL</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
                org.apache.hadoop.hbase.security.access.Permission&nbsp;perms)</pre>
 <dl>
 <dt><strong>Overrides:</strong></dt>
@@ -742,7 +742,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>setACL</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.337">setACL</a>(<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hadoop.hbase.security.access.Permission&gt;&nbsp;perms)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.334">setACL</a>(<a href="http://docs.oracle.com/javase/7/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/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hadoop.hbase.security.access.Permission&gt;&nbsp;perms)</pre>
 <dl>
 <dt><strong>Overrides:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#setACL(java.util.Map)">setACL</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a></code></dd>
@@ -755,7 +755,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockListLast">
 <li class="blockList">
 <h4>setTTL</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.342">setTTL</a>(long&nbsp;ttl)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Increment.html#line.339">setTTL</a>(long&nbsp;ttl)</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html#setTTL(long)">Mutation</a></code></strong></div>
 <div class="block">Set the TTL desired for the result of the mutation, in milliseconds.</div>
 <dl>